Merge lp:~sebastien-wertz/mg5amcnlo/cpp_syntax_fixes into lp:~maddevelopers/mg5amcnlo/2.3.4
- cpp_syntax_fixes
- Merge into 2.3.4
Proposed by
Sébastien Wertz
Status: | Merged |
---|---|
Merge reported by: | Olivier Mattelaer |
Merged at revision: | not available |
Proposed branch: | lp:~sebastien-wertz/mg5amcnlo/cpp_syntax_fixes |
Merge into: | lp:~maddevelopers/mg5amcnlo/2.3.4 |
Diff against target: |
622 lines (+118/-108) 11 files modified
aloha/aloha_writers.py (+15/-16) aloha/template_files/ixxxxx.cc (+7/-7) aloha/template_files/oxxxxx.cc (+12/-12) aloha/template_files/txxxxx.cc (+5/-5) aloha/template_files/vxxxxx.cc (+7/-7) madgraph/iolibs/export_cpp.py (+2/-2) madgraph/iolibs/template_files/read_slha.cc (+24/-26) madgraph/iolibs/template_files/read_slha.h (+20/-18) madgraph/iolibs/ufo_expression_parsers.py (+12/-1) tests/unit_tests/iolibs/test_export_cpp.py (+13/-13) tests/unit_tests/iolibs/test_link_to_ufo.py (+1/-1) |
To merge this branch: | bzr merge lp:~sebastien-wertz/mg5amcnlo/cpp_syntax_fixes |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Olivier Mattelaer | Approve | ||
Review via email: mp+292791@code.launchpad.net |
Commit message
C++ syntax fixes in Aloha templates & writer and in the UFO converter
Description of the change
- C++ Aloha templates and UFO exporter were *slightly* modified to replace calls such as pow(x,2) or pow(x,0.5) by simple products (x*x) or dedicated function calls (sqrt(x)), since this was shown to bring noticeable speed improvements.
- "using namespace std;" statements were removed from header files since this would pollute any code including these headers.
- Declarations of "std::complex cI(0,1)" were made static to avoid re-allocation at each function call.
- Calls of "abs()" functions were modified to "std::abs" to ensure usage of STL overloads
To post a comment you must log in.
Revision history for this message
Sébastien Wertz (sebastien-wertz) wrote : | # |
Many thanks for your quick review!
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'aloha/aloha_writers.py' |
2 | --- aloha/aloha_writers.py 2015-10-22 18:57:33 +0000 |
3 | +++ aloha/aloha_writers.py 2016-04-25 11:36:39 +0000 |
4 | @@ -462,10 +462,10 @@ |
5 | 'log': 'log(dble(%s))', |
6 | 'asin': 'asin(dble(%s))', |
7 | 'acos': 'acos(dble(%s))', |
8 | - 'abs': 'abs(%s)', |
9 | - 'fabs': 'abs(%s)', |
10 | - 'math.abs': 'abs(%s)', |
11 | - 'cmath.abs': 'abs(%s)', |
12 | + 'abs': 'std::abs(%s)', |
13 | + 'fabs': 'std::abs(%s)', |
14 | + 'math.abs': 'std::abs(%s)', |
15 | + 'cmath.abs': 'std::abs(%s)', |
16 | '':'(%s)' |
17 | } |
18 | |
19 | @@ -1242,14 +1242,14 @@ |
20 | writer = writers.CPPWriter |
21 | |
22 | type2def = {} |
23 | - type2def['int'] = 'int' |
24 | + type2def['int'] = 'int ' |
25 | type2def['double'] = 'double ' |
26 | - type2def['complex'] = 'complex<double> ' |
27 | + type2def['complex'] = 'std::complex<double> ' |
28 | |
29 | #variable overwritten by gpu |
30 | realoperator = '.real()' |
31 | imagoperator = '.imag()' |
32 | - ci_definition = ' complex<double> cI = complex<double>(0.,1.);\n' |
33 | + ci_definition = 'static std::complex<double> cI = std::complex<double>(0.,1.);\n' |
34 | |
35 | |
36 | def change_number_format(self, number): |
37 | @@ -1322,7 +1322,7 @@ |
38 | 'sqrt': 'sqrt(%s)', |
39 | 'complexconjugate': 'conj(dcmplx(%s))', |
40 | '/' : '{0}/%s'.format(one), |
41 | - 'abs': 'abs(%s)' |
42 | + 'abs': 'std::abs(%s)' |
43 | } |
44 | |
45 | if fct in self.fct_format: |
46 | @@ -1362,10 +1362,10 @@ |
47 | args.append('%s%s%s'% (type, argname, list_arg)) |
48 | |
49 | if not self.offshell: |
50 | - output = 'complex<double> & vertex' |
51 | + output = 'std::complex<double> & vertex' |
52 | #self.declaration.add(('complex','vertex')) |
53 | else: |
54 | - output = 'complex<double> %(spin)s%(id)d[]' % { |
55 | + output = 'std::complex<double> %(spin)s%(id)d[]' % { |
56 | 'spin': self.particles[self.outgoing -1], |
57 | 'id': self.outgoing} |
58 | self.declaration.add(('list_complex', output)) |
59 | @@ -1437,7 +1437,7 @@ |
60 | |
61 | for i,type in enumerate(self.particles): |
62 | if self.declaration.is_used('OM%s' % (i+1)): |
63 | - out.write(" OM{0} = {1};\n if (M{0} != {1})\n OM{0}={2}/pow(M{0},2);\n".format( |
64 | + out.write(" OM{0} = {1};\n if (M{0} != {1})\n OM{0}={2}/(M{0}*M{0});\n".format( |
65 | i+1, self.change_number_format(0), self.change_number_format(1))) |
66 | |
67 | if i+1 == self.outgoing: |
68 | @@ -1538,13 +1538,13 @@ |
69 | out.write(' denom = %(COUP)s/(%(denom)s)\n' % {'COUP': coup_name,\ |
70 | 'denom':self.write_obj(self.routine.denominator)}) |
71 | else: |
72 | - out.write(' denom = %(coup)s/(pow(P%(i)s[0],2)-pow(P%(i)s[1],2)-pow(P%(i)s[2],2)-pow(P%(i)s[3],2) - M%(i)s * (M%(i)s -cI* W%(i)s));\n' % \ |
73 | + out.write(' denom = %(coup)s/((P%(i)s[0]*P%(i)s[0])-(P%(i)s[1]*P%(i)s[1])-(P%(i)s[2]*P%(i)s[2])-(P%(i)s[3]*P%(i)s[3]) - M%(i)s * (M%(i)s -cI* W%(i)s));\n' % \ |
74 | {'i': self.outgoing, 'coup': coup_name}) |
75 | else: |
76 | if self.routine.denominator: |
77 | raise Exception, 'modify denominator are not compatible with complex mass scheme' |
78 | |
79 | - out.write(' denom = %(coup)s/(pow(P%(i)s[0],2)-pow(P%(i)s[1],2)-pow(P%(i)s[2],2)-pow(P%(i)s[3],2) - pow(M%(i)s,2));\n' % \ |
80 | + out.write(' denom = %(coup)s/((P%(i)s[0]*P%(i)s[0])-(P%(i)s[1]*P%(i)s[1])-(P%(i)s[2]*P%(i)s[2])-(P%(i)s[3]*P%(i)s[3]) - (M%(i)s*M%(i)s));\n' % \ |
81 | {'i': self.outgoing, 'coup': coup_name}) |
82 | self.declaration.add(('complex','denom')) |
83 | if aloha.loop_mode: |
84 | @@ -1561,7 +1561,7 @@ |
85 | self.write_obj(numerator.get_rep(ind)))) |
86 | return out.getvalue() |
87 | |
88 | - remove_double = re.compile('complex<double> (?P<name>[\w]+)\[\]') |
89 | + remove_double = re.compile('std::complex<double> (?P<name>[\w]+)\[\]') |
90 | def define_symmetry(self, new_nb, couplings=None): |
91 | """Write the call for symmetric routines""" |
92 | number = self.offshell |
93 | @@ -1581,8 +1581,7 @@ |
94 | if not self.mode == 'no_include': |
95 | h_string.write('#ifndef '+ self.name + '_guard\n') |
96 | h_string.write('#define ' + self.name + '_guard\n') |
97 | - h_string.write('#include <complex>\n') |
98 | - h_string.write('using namespace std;\n\n') |
99 | + h_string.write('#include <complex>\n\n') |
100 | |
101 | h_header = self.get_header_txt(mode='no_include__is_h', couplings=couplings) |
102 | h_string.write(h_header) |
103 | |
104 | === modified file 'aloha/template_files/ixxxxx.cc' |
105 | --- aloha/template_files/ixxxxx.cc 2012-06-13 16:40:13 +0000 |
106 | +++ aloha/template_files/ixxxxx.cc 2016-04-25 11:36:39 +0000 |
107 | @@ -10,9 +10,9 @@ |
108 | fi[1] = complex<double> (-p[1]*nsf,-p[2]*nsf); |
109 | nh = nhel*nsf; |
110 | if (fmass != 0.0) { |
111 | - pp = min(p[0],pow((pow(p[1],2)+pow(p[2],2)+pow(p[3],2)),0.5)); |
112 | + pp = min(p[0],sqrt(p[1]*p[1]+p[2]*p[2]+p[3]*p[3])); |
113 | if (pp == 0.0){ |
114 | - sqm[0] = pow(abs(fmass),0.5); |
115 | + sqm[0] = sqrt(std::abs(fmass)); |
116 | sqm[1] = Sgn(sqm[0],fmass); |
117 | ip = (1+nh)/2; |
118 | im = (1-nh)/2; |
119 | @@ -24,19 +24,19 @@ |
120 | else{ |
121 | sf[0] = (1+nsf+(1-nsf)*nh)*0.5; |
122 | sf[1] = (1+nsf-(1-nsf)*nh)*0.5; |
123 | - omega[0] = pow(p[0]+pp,0.5); |
124 | + omega[0] = sqrt(p[0]+pp); |
125 | omega[1] = fmass/omega[0]; |
126 | ip = (1+nh)/2; |
127 | im = (1-nh)/2; |
128 | sfomega[0] = sf[0]*omega[ip]; |
129 | sfomega[1] = sf[1]*omega[im]; |
130 | pp3 = max(pp+p[3], 0.0); |
131 | - chi[0] = complex<double>(pow(pp3*0.5/pp,0.5),0); |
132 | + chi[0] = complex<double>(sqrt(pp3*0.5/pp),0); |
133 | if (pp3 == 0.0){ |
134 | chi[1] = complex<double> (-nh,0); |
135 | } |
136 | else{ |
137 | - chi[1] = complex<double> (nh*p[1],p[2])/pow(2.0*pp*pp3,0.5); |
138 | + chi[1] = complex<double> (nh*p[1],p[2])/sqrt(2.0*pp*pp3); |
139 | } |
140 | fi[2] = sfomega[0]*chi[im]; |
141 | fi[3] = sfomega[0]*chi[ip]; |
142 | @@ -49,10 +49,10 @@ |
143 | sqp0p3 = 0.0; |
144 | } |
145 | else{ |
146 | - sqp0p3 = pow(max(p[0]+p[3],0.0),0.5)*nsf;} |
147 | + sqp0p3 = sqrt(max(p[0]+p[3],0.0))*nsf;} |
148 | chi[0] = complex<double>(sqp0p3,0.0); |
149 | if (sqp0p3 ==0.0){ |
150 | - chi[1] = complex<double>(-nhel*pow(2.0*p[0],0.5),0.0);} |
151 | + chi[1] = complex<double>(-nhel*sqrt(2.0*p[0]),0.0);} |
152 | else{ |
153 | chi[1] = complex<double>(nh*p[1],p[2])/sqp0p3;} |
154 | if (nh == 1) { |
155 | |
156 | === modified file 'aloha/template_files/oxxxxx.cc' |
157 | --- aloha/template_files/oxxxxx.cc 2013-06-06 13:29:17 +0000 |
158 | +++ aloha/template_files/oxxxxx.cc 2016-04-25 11:36:39 +0000 |
159 | @@ -10,34 +10,34 @@ |
160 | fo[1] = complex<double>(p[1]*nsf,p[2]*nsf); |
161 | nh = nhel*nsf; |
162 | if (fmass != 0.000){ |
163 | - pp = min(p[0],pow(pow(p[1],2)+pow(p[2],2)+pow(p[3],2),0.5)); |
164 | + pp = min(p[0],sqrt((p[1]*p[1])+(p[2]*p[2])+(p[3]*p[3]))); |
165 | if (pp == 0.000){ |
166 | - sqm[0] = pow(abs(fmass),0.5); |
167 | + sqm[0] = sqrt(std::abs(fmass)); |
168 | sqm[1] = Sgn(sqm[0],fmass); |
169 | ip = -((1-nh)/2) * nhel ; |
170 | im = (1+nh)/2 * nhel; |
171 | - fo[2] = im *sqm[abs(ip)]; |
172 | - fo[3] = ip*nsf*sqm[abs(ip)]; |
173 | - fo[4] = im*nsf*sqm[abs(im)]; |
174 | - fo[5] = ip*sqm[abs(im)]; |
175 | + fo[2] = im *sqm[std::abs(ip)]; |
176 | + fo[3] = ip*nsf*sqm[std::abs(ip)]; |
177 | + fo[4] = im*nsf*sqm[std::abs(im)]; |
178 | + fo[5] = ip*sqm[std::abs(im)]; |
179 | } |
180 | else{ |
181 | - pp = min(p[0],pow(pow(p[1],2)+pow(p[2],2)+pow(p[3],2),0.5)); |
182 | + pp = min(p[0],sqrt((p[1]*p[1])+(p[2]*p[2])+(p[3]*p[3]))); |
183 | sf[0] = double(1+nsf+(1-nsf)*nh)*0.5; |
184 | sf[1] = double(1+nsf-(1-nsf)*nh)*0.5; |
185 | - omega[0] = pow(p[0]+pp,0.5); |
186 | + omega[0] = sqrt(p[0]+pp); |
187 | omega[1] = fmass/omega[0]; |
188 | ip = (1+nh)/2 ; |
189 | im = (1-nh)/2 ; |
190 | sfomeg[0] = sf[0]*omega[ip]; |
191 | sfomeg[1] = sf[1]*omega[im]; |
192 | pp3 = max(pp+p[3],0.00); |
193 | - chi[0] = complex<double>(pow(pp3*0.5/pp,0.5),0.00); |
194 | + chi[0] = complex<double>(sqrt(pp3*0.5/pp),0.00); |
195 | if (pp3 == 0.00){ |
196 | chi[1] = complex<double>(-nh,0.00); |
197 | } |
198 | else{ |
199 | - chi[1] = complex<double>(nh*p[1],-p[2])/pow(2.0*pp*pp3,0.5); |
200 | + chi[1] = complex<double>(nh*p[1],-p[2])/sqrt(2.0*pp*pp3); |
201 | } |
202 | fo[2] = sfomeg[1]*chi[im]; |
203 | fo[3] = sfomeg[1]*chi[ip]; |
204 | @@ -50,11 +50,11 @@ |
205 | sqp0p3 = 0.00; |
206 | } |
207 | else{ |
208 | - sqp0p3 = pow(max(p[0]+p[3],0.00),0.5)*nsf; |
209 | + sqp0p3 = sqrt(max(p[0]+p[3],0.00))*nsf; |
210 | } |
211 | chi[0] = complex<double>(sqp0p3,0.00); |
212 | if(sqp0p3 == 0.000){ |
213 | - chi[1] = complex<double>(-nhel,0.00)*pow(2.0*p[0],0.5); |
214 | + chi[1] = complex<double>(-nhel,0.00)*sqrt(2.0*p[0]); |
215 | } |
216 | else{ |
217 | chi[1] = complex<double>(nh*p[1],-p[2])/sqp0p3; |
218 | |
219 | === modified file 'aloha/template_files/txxxxx.cc' |
220 | --- aloha/template_files/txxxxx.cc 2013-05-07 06:35:39 +0000 |
221 | +++ aloha/template_files/txxxxx.cc 2016-04-25 11:36:39 +0000 |
222 | @@ -11,12 +11,12 @@ |
223 | double pt, pt2, pp, pzpt, emp, sqh, sqs; |
224 | int i, j; |
225 | |
226 | - sqh = pow( 0.5, 0.5 ); |
227 | - sqs = pow( 0.5/3, 0.5 ); |
228 | + sqh = sqrt( 0.5); |
229 | + sqs = sqrt( 0.5/3); |
230 | |
231 | pt2 = p[1]*p[1] + p[2]*p[2]; |
232 | - pp = min( p[0], pow( pt2+p[3]*p[3], 0.5 ) ); |
233 | - pt = min( pp, pow( pt2, 0.5 ) ); |
234 | + pp = min( p[0], sqrt( pt2+p[3]*p[3]) ); |
235 | + pt = min( pp, sqrt( pt2) ); |
236 | |
237 | ft[4][0] = complex<double>( p[0]*nst, p[3]*nst ); |
238 | ft[5][0] = complex<double>( p[1]*nst, p[2]*nst ); |
239 | @@ -81,7 +81,7 @@ |
240 | } |
241 | |
242 | // construct eps0 |
243 | - if( fabs(nhel) <= 1 ) |
244 | + if( std::labs(nhel) <= 1 ) |
245 | { |
246 | if( pp == 0 ) |
247 | { |
248 | |
249 | === modified file 'aloha/template_files/vxxxxx.cc' |
250 | --- aloha/template_files/vxxxxx.cc 2012-06-13 16:40:13 +0000 |
251 | +++ aloha/template_files/vxxxxx.cc 2016-04-25 11:36:39 +0000 |
252 | @@ -5,16 +5,16 @@ |
253 | void vxxxxx(double p[4],double vmass,int nhel,int nsv, complex<double> vc[6]){ |
254 | double hel,hel0,pt,pt2,pp,pzpt,emp,sqh; |
255 | int nsvahl; |
256 | - sqh = pow(0.5,0.5); |
257 | + sqh = sqrt(0.5); |
258 | hel = double(nhel); |
259 | - nsvahl = nsv*abs(hel); |
260 | - pt2 = pow(p[1],2)+pow(p[2],2); |
261 | - pp = min(p[0],pow(pt2+pow(p[3],2),0.5)); |
262 | - pt =min(pp,pow(pt2,0.5)); |
263 | + nsvahl = nsv*std::abs(hel); |
264 | + pt2 = (p[1]*p[1])+(p[2]*p[2]); |
265 | + pp = min(p[0],sqrt(pt2+(p[3]*p[3]))); |
266 | + pt =min(pp,sqrt(pt2)); |
267 | vc[0] = complex<double>(p[0]*nsv,p[3]*nsv); |
268 | vc[1] = complex<double>(p[1]*nsv,p[2]*nsv); |
269 | if (vmass != 0.0){ |
270 | - hel0 = 1.0-abs(hel); |
271 | + hel0 = 1.0-std::abs(hel); |
272 | if( pp == 0.0 ){ |
273 | vc[2] = complex<double>(0.0,0.0); |
274 | vc[3] = complex<double>(-hel*sqh,0.0); |
275 | @@ -38,7 +38,7 @@ |
276 | } |
277 | else{ |
278 | pp = p[0]; |
279 | - pt = pow(pow(p[1],2)+pow(p[2],2),0.5); |
280 | + pt = sqrt((p[1]*p[1])+(p[2]*p[2])); |
281 | vc[2] = complex<double>(0.0,0.0); |
282 | vc[5] = complex<double>(hel*pt/pp*sqh,0.0); |
283 | if (pt != 0.0) { |
284 | |
285 | === modified file 'madgraph/iolibs/export_cpp.py' |
286 | --- madgraph/iolibs/export_cpp.py 2015-10-11 19:18:37 +0000 |
287 | +++ madgraph/iolibs/export_cpp.py 2016-04-25 11:36:39 +0000 |
288 | @@ -2287,8 +2287,8 @@ |
289 | namespace = 'Pythia8' |
290 | |
291 | # Dictionaries for expression of MG5 SM parameters into Pythia 8 |
292 | - slha_to_expr = {('SMINPUTS', (1,)): '1./csm->alphaEM(pow(pd->m0(23),2))', |
293 | - ('SMINPUTS', (2,)): 'M_PI*csm->alphaEM(pow(pd->m0(23),2))*pow(pd->m0(23),2)/(sqrt(2.)*pow(pd->m0(24),2)*(pow(pd->m0(23),2)-pow(pd->m0(24),2)))', |
294 | + slha_to_expr = {('SMINPUTS', (1,)): '1./csm->alphaEM(((pd->m0(23))*(pd->m0(23))))', |
295 | + ('SMINPUTS', (2,)): 'M_PI*csm->alphaEM(((pd->m0(23))*(pd->m0(23))))*((pd->m0(23))*(pd->m0(23)))/(sqrt(2.)*((pd->m0(24))*(pd->m0(24)))*(((pd->m0(23))*(pd->m0(23)))-((pd->m0(24))*(pd->m0(24)))))', |
296 | ('SMINPUTS', (3,)): 'alpS', |
297 | ('CKMBLOCK', (1,)): 'csm->VCKMgen(1,2)', |
298 | } |
299 | |
300 | === modified file 'madgraph/iolibs/template_files/read_slha.cc' |
301 | --- madgraph/iolibs/template_files/read_slha.cc 2011-03-25 00:10:27 +0000 |
302 | +++ madgraph/iolibs/template_files/read_slha.cc 2016-04-25 11:36:39 +0000 |
303 | @@ -3,9 +3,7 @@ |
304 | #include <fstream> |
305 | #include "read_slha.h" |
306 | |
307 | -using namespace std; |
308 | - |
309 | -void SLHABlock::set_entry(vector<int> indices, double value) |
310 | +void SLHABlock::set_entry(std::vector<int> indices, double value) |
311 | { |
312 | if (_entries.size() == 0) |
313 | _indices = indices.size(); |
314 | @@ -15,26 +13,26 @@ |
315 | _entries[indices] = value; |
316 | } |
317 | |
318 | -double SLHABlock::get_entry(vector<int> indices, double def_val) |
319 | +double SLHABlock::get_entry(std::vector<int> indices, double def_val) |
320 | { |
321 | if (_entries.find(indices) == _entries.end()){ |
322 | - cout << "Warning: No such entry in " << _name << ", using default value " |
323 | - << def_val << endl; |
324 | + std::cout << "Warning: No such entry in " << _name << ", using default value " |
325 | + << def_val << std::endl; |
326 | return def_val; |
327 | } |
328 | return _entries[indices]; |
329 | } |
330 | |
331 | -void SLHAReader::read_slha_file(string file_name) |
332 | +void SLHAReader::read_slha_file(std::string file_name) |
333 | { |
334 | - ifstream param_card; |
335 | - param_card.open(file_name.c_str(), ifstream::in); |
336 | + std::ifstream param_card; |
337 | + param_card.open(file_name.c_str(), std::ifstream::in); |
338 | if(!param_card.good()) |
339 | throw "Error while opening param card"; |
340 | - cout << "Opened slha file " << file_name << " for reading" << endl; |
341 | + std::cout << "Opened slha file " << file_name << " for reading" << std::endl; |
342 | char buf[200]; |
343 | - string line; |
344 | - string block(""); |
345 | + std::string line; |
346 | + std::string block(""); |
347 | |
348 | while(param_card.good()){ |
349 | param_card.getline(buf, 200); |
350 | @@ -46,22 +44,22 @@ |
351 | // Look for double index blocks |
352 | double dindex1, dindex2; |
353 | double value; |
354 | - stringstream linestr2(line); |
355 | + std::stringstream linestr2(line); |
356 | if (linestr2 >> dindex1 >> dindex2 >> value && |
357 | dindex1 == int(dindex1) and dindex2 == int(dindex2)) |
358 | { |
359 | - vector<int> indices; |
360 | + std::vector<int> indices; |
361 | indices.push_back(int(dindex1)); |
362 | indices.push_back(int(dindex2)); |
363 | set_block_entry(block, indices, value); |
364 | // Done with this line, read next |
365 | continue; |
366 | } |
367 | - stringstream linestr1(line); |
368 | + std::stringstream linestr1(line); |
369 | // Look for single index blocks |
370 | if(linestr1 >> dindex1 >> value && dindex1 == int(dindex1)) |
371 | { |
372 | - vector<int> indices; |
373 | + std::vector<int> indices; |
374 | indices.push_back(int(dindex1)); |
375 | set_block_entry(block, indices, value); |
376 | // Done with this line, read next |
377 | @@ -85,13 +83,13 @@ |
378 | if(line.find("decay ") == 0){ |
379 | line = line.substr(6); |
380 | block = ""; |
381 | - stringstream linestr(line); |
382 | + std::stringstream linestr(line); |
383 | int pdg_code; |
384 | double value; |
385 | if(linestr >> pdg_code >> value) |
386 | set_block_entry("decay", pdg_code, value); |
387 | else |
388 | - cout << "Warning: Wrong format for decay block " << line << endl; |
389 | + std::cout << "Warning: Wrong format for decay block " << line << std::endl; |
390 | continue; |
391 | } |
392 | } |
393 | @@ -103,27 +101,27 @@ |
394 | param_card.close(); |
395 | } |
396 | |
397 | -double SLHAReader::get_block_entry(string block_name, vector<int> indices, |
398 | +double SLHAReader::get_block_entry(std::string block_name, std::vector<int> indices, |
399 | double def_val) |
400 | { |
401 | if (_blocks.find(block_name) == _blocks.end()){ |
402 | - cout << "No such block " << block_name << ", using default value " |
403 | - << def_val << endl; |
404 | + std::cout << "No such block " << block_name << ", using default value " |
405 | + << def_val << std::endl; |
406 | return def_val; |
407 | } |
408 | return _blocks[block_name].get_entry(indices); |
409 | } |
410 | |
411 | -double SLHAReader::get_block_entry(string block_name, int index, |
412 | +double SLHAReader::get_block_entry(std::string block_name, int index, |
413 | double def_val) |
414 | { |
415 | - vector<int> indices; |
416 | + std::vector<int> indices; |
417 | indices.push_back(index); |
418 | return get_block_entry(block_name, indices, def_val); |
419 | } |
420 | |
421 | |
422 | -void SLHAReader::set_block_entry(string block_name, vector<int> indices, |
423 | +void SLHAReader::set_block_entry(std::string block_name, std::vector<int> indices, |
424 | double value) |
425 | { |
426 | if (_blocks.find(block_name) == _blocks.end()){ |
427 | @@ -137,10 +135,10 @@ |
428 | cout << "to " << _blocks[block_name].get_entry(indices) << endl;*/ |
429 | } |
430 | |
431 | -void SLHAReader::set_block_entry(string block_name, int index, |
432 | +void SLHAReader::set_block_entry(std::string block_name, int index, |
433 | double value) |
434 | { |
435 | - vector<int> indices; |
436 | + std::vector<int> indices; |
437 | indices.push_back(index); |
438 | set_block_entry(block_name, indices, value); |
439 | } |
440 | |
441 | === modified file 'madgraph/iolibs/template_files/read_slha.h' |
442 | --- madgraph/iolibs/template_files/read_slha.h 2011-03-25 00:10:27 +0000 |
443 | +++ madgraph/iolibs/template_files/read_slha.h 2016-04-25 11:36:39 +0000 |
444 | @@ -1,44 +1,46 @@ |
445 | +#ifndef READ_SLHA_H |
446 | +#define REAH_SLHA_H |
447 | + |
448 | #include <map> |
449 | #include <string> |
450 | #include <sstream> |
451 | #include <vector> |
452 | |
453 | -using namespace std; |
454 | - |
455 | class SLHABlock |
456 | { |
457 | public: |
458 | - SLHABlock(string name = ""){_name = name;} |
459 | + SLHABlock(std::string name = ""){_name = name;} |
460 | ~SLHABlock(){} |
461 | |
462 | - void set_entry(vector<int> indices, double value); |
463 | - double get_entry(vector<int> indices, double def_val = 0); |
464 | - void set_name(string name) {_name = name;} |
465 | - string get_name(){return _name;} |
466 | + void set_entry(std::vector<int> indices, double value); |
467 | + double get_entry(std::vector<int> indices, double def_val = 0); |
468 | + void set_name(std::string name) {_name = name;} |
469 | + std::string get_name(){return _name;} |
470 | int get_indices() { return _indices;} |
471 | |
472 | private: |
473 | - string _name; |
474 | - map<vector<int>,double> _entries; |
475 | + std::string _name; |
476 | + std::map<std::vector<int>, double> _entries; |
477 | unsigned int _indices; |
478 | }; |
479 | |
480 | class SLHAReader |
481 | { |
482 | public: |
483 | - SLHAReader(string file_name = "") |
484 | + SLHAReader(std::string file_name = "") |
485 | {if(file_name != "") read_slha_file(file_name);} |
486 | |
487 | - void read_slha_file(string file_name); |
488 | - double get_block_entry(string block_name, vector<int> indices, |
489 | - double def_val = 0); |
490 | - double get_block_entry(string block_name, int index, |
491 | - double def_val = 0); |
492 | - void set_block_entry(string block_name, vector<int> indices, |
493 | + void read_slha_file(std::string file_name); |
494 | + double get_block_entry(std::string block_name, std::vector<int> indices, |
495 | + double def_val = 0); |
496 | + double get_block_entry(std::string block_name, int index, |
497 | + double def_val = 0); |
498 | + void set_block_entry(std::string block_name, std::vector<int> indices, |
499 | double value); |
500 | - void set_block_entry(string block_name, int index, |
501 | + void set_block_entry(std::string block_name, int index, |
502 | double value); |
503 | private: |
504 | - map<string, SLHABlock> _blocks; |
505 | + std::map<std::string, SLHABlock> _blocks; |
506 | }; |
507 | |
508 | +#endif |
509 | |
510 | === modified file 'madgraph/iolibs/ufo_expression_parsers.py' |
511 | --- madgraph/iolibs/ufo_expression_parsers.py 2016-04-04 10:53:49 +0000 |
512 | +++ madgraph/iolibs/ufo_expression_parsers.py 2016-04-25 11:36:39 +0000 |
513 | @@ -540,7 +540,18 @@ |
514 | p1 = p[1][1:-1] |
515 | if p[3][0] == '(' and p[3][-1] == ')': |
516 | p3 = p[3][1:-1] |
517 | - p[0] = 'pow(' + p1 + ',' + p3 + ')' |
518 | + if float(p3) == 2: |
519 | + p[0] = '((' + p1 + ')*(' + p1 + '))' |
520 | + elif float(p3) == 3: |
521 | + p[0] = '((' + p1 + ')*(' + p1 + ')*(' + p1 + '))' |
522 | + elif float(p3) == 4: |
523 | + p[0] = '((' + p1 + ')*(' + p1 + ')*(' + p1 + ')*(' + p1 + '))' |
524 | + elif float(p3) == 0.5 or p3 == '0.5' or p3 == '1./2' or p3 == '1/2.' or p3 == '1./2.': |
525 | + p[0] = 'sqrt(' + p1 + ')' |
526 | + elif float(p3) == 1./3 or p3 == '1./3' or p3 == '1/3.' or p3 == '1./3.': |
527 | + p[0] = 'cbrt(' + p1 + ')' |
528 | + else: |
529 | + p[0] = 'pow(' + p1 + ',' + p3 + ')' |
530 | |
531 | def p_expression_complex(self, p): |
532 | "expression : COMPLEX '(' expression ',' expression ')'" |
533 | |
534 | === modified file 'tests/unit_tests/iolibs/test_export_cpp.py' |
535 | --- tests/unit_tests/iolibs/test_export_cpp.py 2015-10-11 19:18:37 +0000 |
536 | +++ tests/unit_tests/iolibs/test_export_cpp.py 2016-04-25 11:36:39 +0000 |
537 | @@ -1488,14 +1488,14 @@ |
538 | if(!slhaPtr->getEntry<double>("wolfenstein", 1, mdl_lamWS)){ |
539 | cout << "Warning, setting mdl_lamWS to 2.253000e-01" << endl; |
540 | mdl_lamWS = 2.253000e-01;} |
541 | -mdl_Gf = M_PI*csm->alphaEM(pow(pd->m0(23),2))*pow(pd->m0(23),2)/(sqrt(2.)*pow(pd->m0(24),2)*(pow(pd->m0(23),2)-pow(pd->m0(24),2))); |
542 | -aEWM1 = 1./csm->alphaEM(pow(pd->m0(23),2)); |
543 | +mdl_Gf = M_PI*csm->alphaEM(((pd->m0(23))*(pd->m0(23))))*((pd->m0(23))*(pd->m0(23)))/(sqrt(2.)*((pd->m0(24))*(pd->m0(24)))*(((pd->m0(23))*(pd->m0(23)))-((pd->m0(24))*(pd->m0(24))))); |
544 | +aEWM1 = 1./csm->alphaEM(((pd->m0(23))*(pd->m0(23)))); |
545 | ZERO = 0.; |
546 | -mdl_lamWS__exp__2 = pow(mdl_lamWS,2.); |
547 | +mdl_lamWS__exp__2 = ((mdl_lamWS)*(mdl_lamWS)); |
548 | mdl_CKM1x1 = 1.-mdl_lamWS__exp__2/2.; |
549 | mdl_CKM1x2 = mdl_lamWS; |
550 | mdl_complexi = std::complex<double>(0.,1.); |
551 | -mdl_lamWS__exp__3 = pow(mdl_lamWS,3.); |
552 | +mdl_lamWS__exp__3 = ((mdl_lamWS)*(mdl_lamWS)*(mdl_lamWS)); |
553 | mdl_CKM1x3 = mdl_AWS*mdl_lamWS__exp__3*(-(mdl_etaWS*mdl_complexi)+mdl_rhoWS); |
554 | mdl_CKM2x1 = -mdl_lamWS; |
555 | mdl_CKM2x2 = 1.-mdl_lamWS__exp__2/2.; |
556 | @@ -1503,10 +1503,10 @@ |
557 | mdl_CKM3x1 = mdl_AWS*mdl_lamWS__exp__3*(1.-mdl_etaWS*mdl_complexi-mdl_rhoWS); |
558 | mdl_CKM3x2 = -(mdl_AWS*mdl_lamWS__exp__2); |
559 | mdl_CKM3x3 = 1.; |
560 | -mdl_MZ__exp__2 = pow(mdl_MZ,2.); |
561 | -mdl_MZ__exp__4 = pow(mdl_MZ,4.); |
562 | +mdl_MZ__exp__2 = ((mdl_MZ)*(mdl_MZ)); |
563 | +mdl_MZ__exp__4 = ((mdl_MZ)*(mdl_MZ)*(mdl_MZ)*(mdl_MZ)); |
564 | mdl_sqrt__2 = sqrt(2.); |
565 | -mdl_MH__exp__2 = pow(mdl_MH,2.); |
566 | +mdl_MH__exp__2 = ((mdl_MH)*(mdl_MH)); |
567 | mdl_conjg__CKM1x3 = conj(mdl_CKM1x3); |
568 | mdl_conjg__CKM2x3 = conj(mdl_CKM2x3); |
569 | mdl_conjg__CKM3x3 = conj(mdl_CKM3x3); |
570 | @@ -1520,7 +1520,7 @@ |
571 | mdl_MW = sqrt(mdl_MZ__exp__2/2.+sqrt(mdl_MZ__exp__4/4.-(mdl_aEW*M_PI*mdl_MZ__exp__2)/(mdl_Gf*mdl_sqrt__2))); |
572 | mdl_sqrt__aEW = sqrt(mdl_aEW); |
573 | mdl_ee = 2.*mdl_sqrt__aEW*sqrt(M_PI); |
574 | -mdl_MW__exp__2 = pow(mdl_MW,2.); |
575 | +mdl_MW__exp__2 = ((mdl_MW)*(mdl_MW)); |
576 | mdl_sw2 = 1.-mdl_MW__exp__2/mdl_MZ__exp__2; |
577 | mdl_cw = sqrt(1.-mdl_sw2); |
578 | mdl_sqrt__sw2 = sqrt(mdl_sw2); |
579 | @@ -1528,7 +1528,7 @@ |
580 | mdl_g1 = mdl_ee/mdl_cw; |
581 | mdl_gw = mdl_ee/mdl_sw; |
582 | mdl_vev = (2.*mdl_MW*mdl_sw)/mdl_ee; |
583 | -mdl_vev__exp__2 = pow(mdl_vev,2.); |
584 | +mdl_vev__exp__2 = ((mdl_vev)*(mdl_vev)); |
585 | mdl_lam = mdl_MH__exp__2/(2.*mdl_vev__exp__2); |
586 | mdl_yb = (mdl_ymb*mdl_sqrt__2)/mdl_vev; |
587 | mdl_yc = (mdl_ymc*mdl_sqrt__2)/mdl_vev; |
588 | @@ -1555,9 +1555,9 @@ |
589 | mdl_I4x13 = mdl_CKM1x3*mdl_yb; |
590 | mdl_I4x23 = mdl_CKM2x3*mdl_yb; |
591 | mdl_I4x33 = mdl_CKM3x3*mdl_yb; |
592 | -mdl_ee__exp__2 = pow(mdl_ee,2.); |
593 | -mdl_sw__exp__2 = pow(mdl_sw,2.); |
594 | -mdl_cw__exp__2 = pow(mdl_cw,2.); |
595 | +mdl_ee__exp__2 = ((mdl_ee)*(mdl_ee)); |
596 | +mdl_sw__exp__2 = ((mdl_sw)*(mdl_sw)); |
597 | +mdl_cw__exp__2 = ((mdl_cw)*(mdl_cw)); |
598 | } |
599 | void Parameters_sm::setIndependentCouplings(){ |
600 | GC_1 = -(mdl_ee*mdl_complexi)/3.; |
601 | @@ -1670,7 +1670,7 @@ |
602 | aS = alpS; |
603 | mdl_sqrt__aS = sqrt(aS); |
604 | G = 2.*mdl_sqrt__aS*sqrt(M_PI); |
605 | -mdl_G__exp__2 = pow(G,2.); |
606 | +mdl_G__exp__2 = ((G)*(G)); |
607 | } |
608 | void Parameters_sm::setDependentCouplings(){ |
609 | GC_12 = mdl_complexi*mdl_G__exp__2; |
610 | |
611 | === modified file 'tests/unit_tests/iolibs/test_link_to_ufo.py' |
612 | --- tests/unit_tests/iolibs/test_link_to_ufo.py 2015-10-01 16:00:08 +0000 |
613 | +++ tests/unit_tests/iolibs/test_link_to_ufo.py 2016-04-25 11:36:39 +0000 |
614 | @@ -132,7 +132,7 @@ |
615 | expr = '(ee**2*IMAG/(2.*sw**2) * (cmath.sin(cmath.sqrt(2)*ee)**2/3.))' |
616 | converted = ufo_to_pythia8.parse(expr) |
617 | self.assertEqual(converted, |
618 | - '(pow(ee,2.)*IMAG/(2.*pow(sw,2.))*(pow(sin(sqrt(2.)*ee),2.)/3.))') |
619 | + '(((ee)*(ee))*IMAG/(2.*((sw)*(sw)))*(((sin(sqrt(2.)*ee))*(sin(sqrt(2.)*ee)))/3.))') |
620 | |
621 | def test_convert_number_to_cpp(self): |
622 | """ test it can convert number in C++ string""" |
Hi Sebastien,
Thanks a lot for this.
I'm happy to approve this merge.
however 2.3.4 is currently freezed and only allow for critical bug fix.
So I have merged your changed in the plugin branch.
Thanks,
Olivier