Merge lp:~sebastien-wertz/mg5amcnlo/cpp_syntax_fixes into lp:~maddevelopers/mg5amcnlo/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
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
Olivier Mattelaer (olivier-mattelaer) wrote :

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

review: Approve
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"""

Subscribers

People subscribed via source and target branches