Merge lp:~maddevelopers/mg5amcnlo/1.5.10 into lp:~madteam/mg5amcnlo/trunk

Proposed by Olivier Mattelaer
Status: Merged
Merged at revision: 242
Proposed branch: lp:~maddevelopers/mg5amcnlo/1.5.10
Merge into: lp:~madteam/mg5amcnlo/trunk
Diff against target: 778 lines (+382/-109)
16 files modified
Template/README.gridpack (+1/-1)
Template/Source/PDF/pdg2pdf.f (+5/-3)
UpdateNotes.txt (+23/-0)
aloha/create_aloha.py (+8/-4)
aloha/template_files/txxxxx.cc (+171/-0)
aloha/template_files/txxxxx.h (+5/-0)
bin/create_release.py (+2/-2)
madgraph/VERSION (+2/-2)
madgraph/core/helas_objects.py (+30/-7)
madgraph/interface/madgraph_interface.py (+10/-0)
madgraph/iolibs/export_v4.py (+16/-4)
madgraph/iolibs/template_files/cpp_hel_amps_cc.inc (+5/-0)
madgraph/various/cluster.py (+3/-0)
madgraph/various/sum_html.py (+3/-2)
models/import_ufo.py (+42/-28)
tests/unit_tests/iolibs/test_export_v4.py (+56/-56)
To merge this branch: bzr merge lp:~maddevelopers/mg5amcnlo/1.5.10
Reviewer Review Type Date Requested Status
Valentin Hirschi Approve
Olivier Mattelaer Approve
Review via email: mp+163092@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

I've made an auto-review and this looks ok (nothing really deep in fact but the order of the helas call).
Valentin could you at least run the tests?

Thanks,

Olivier

review: Approve
lp:~maddevelopers/mg5amcnlo/1.5.10 updated
256. By Olivier Mattelaer

patch from Luran: Avoid crash when channel contributes less than 1e-100.

Revision history for this message
Valentin Hirschi (valentin-hirschi) wrote :

Hi Olivier,

I'll do my best for this review. Since there is nothing major, I went pretty fast on it but still noted the following:

a)

Depending on the c++ compiler, the include
"#include <iostream>"
is mandatory at the beginning of a C++ code in order to use the std:: namespace.
All cpp template have it, could you add it to the new txxxxx template routine too.

b)

This fermion flow flipping business is getting even worse with your necessary modifications. At some point, one will have to rethink that. One possibility would be for example to give up on the dynamical on-the-flight recycling optimisation and perform it only at the very end, after all helas_diagrams have been generated.

Anyway, for the present version the fix seems fine but I don't see any test related to this. Given that we know this part to be a very sensitive point of MG5, it would be worth to have the order of the wfs tested. Something like going through the list of wfs for various processes featuring majoranas and making sure that each wf finds its mothers in the wavefunction list placed before and having smaller nb_wf.

For example, when doing line 1060 to 1070 of helas_objects.py, you are not certain that the mothers of new_wf are before the index i in diagram_wavefunctions list or in previous diagrams in the wavefunctions list. I agree this should be true by construction, but one can never be too careful.

I looked superficially at the rest and it looks fine.

Cheers,

review: Needs Fixing
Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Hi Valentin,

Thanks so much

> a)
>
> Depending on the c++ compiler, the include
> "#include <iostream>"
> is mandatory at the beginning of a C++ code in order to use the std:: namespace.
> All cpp template have it, could you add it to the new txxxxx template routine too.

Sure will do.

> Anyway, for the present version the fix seems fine but I don't see any test related to this.

In fact I just kept the previous test, written by Johan who were checking those points and edit the
the tests according to the new ordering. So I think that this is fine.

Cheers,

Olivier

On May 14, 2013, at 6:23 AM, Valentin Hirschi <email address hidden> wrote:

> Review: Needs Fixing
>
> Hi Olivier,
>
> I'll do my best for this review. Since there is nothing major, I went pretty fast on it but still noted the following:
>
> a)
>
> Depending on the c++ compiler, the include
> "#include <iostream>"
> is mandatory at the beginning of a C++ code in order to use the std:: namespace.
> All cpp template have it, could you add it to the new txxxxx template routine too.
>
> b)
>
> This fermion flow flipping business is getting even worse with your necessary modifications. At some point, one will have to rethink that. One possibility would be for example to give up on the dynamical on-the-flight recycling optimisation and perform it only at the very end, after all helas_diagrams have been generated.
>
> Anyway, for the present version the fix seems fine but I don't see any test related to this. Given that we know this part to be a very sensitive point of MG5, it would be worth to have the order of the wfs tested. Something like going through the list of wfs for various processes featuring majoranas and making sure that each wf finds its mothers in the wavefunction list placed before and having smaller nb_wf.
>
> For example, when doing line 1060 to 1070 of helas_objects.py, you are not certain that the mothers of new_wf are before the index i in diagram_wavefunctions list or in previous diagrams in the wavefunctions list. I agree this should be true by construction, but one can never be too careful.
>
> I looked superficially at the rest and it looks fine.
>
> Cheers,
>
>
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.10/+merge/163092
> You proposed lp:~maddevelopers/madgraph5/1.5.10 for merging.

Revision history for this message
Valentin Hirschi (valentin-hirschi) wrote :

Hi Olivier,

> Hi Valentin,
>
> Thanks so much
>
> > a)
> >
> > Depending on the c++ compiler, the include
> > "#include <iostream>"
> > is mandatory at the beginning of a C++ code in order to use the std::
> namespace.
> > All cpp template have it, could you add it to the new txxxxx template
> routine too.
>
> Sure will do.
>
> > Anyway, for the present version the fix seems fine but I don't see any test
> related to this.
>
>
> In fact I just kept the previous test, written by Johan who were checking
> those points and edit the
> the tests according to the new ordering. So I think that this is fine.
>

Sorry, I had overlooked the modification of the export_v4_test.
Yes, I'm looking forward to seeing such kind of tests ported to the IOTest framework as it will make their updates so much more handy.
The kind of tests I was referring to where more generic, e.g. not comparing the output vs an hardcoded one but really scanning through the helas wavefunction lists and checking that the order is consistent (all mothers precede their daughters).
But, indeed, I guess the existing 'hardcoded' test is good enough for now.

Cheers,

> Cheers,
>
> Olivier
>
> On May 14, 2013, at 6:23 AM, Valentin Hirschi <email address hidden>
> wrote:
>
> > Review: Needs Fixing
> >
> > Hi Olivier,
> >
> > I'll do my best for this review. Since there is nothing major, I went pretty
> fast on it but still noted the following:
> >
> > a)
> >
> > Depending on the c++ compiler, the include
> > "#include <iostream>"
> > is mandatory at the beginning of a C++ code in order to use the std::
> namespace.
> > All cpp template have it, could you add it to the new txxxxx template
> routine too.
> >
> > b)
> >
> > This fermion flow flipping business is getting even worse with your
> necessary modifications. At some point, one will have to rethink that. One
> possibility would be for example to give up on the dynamical on-the-flight
> recycling optimisation and perform it only at the very end, after all
> helas_diagrams have been generated.
> >
> > Anyway, for the present version the fix seems fine but I don't see any test
> related to this. Given that we know this part to be a very sensitive point of
> MG5, it would be worth to have the order of the wfs tested. Something like
> going through the list of wfs for various processes featuring majoranas and
> making sure that each wf finds its mothers in the wavefunction list placed
> before and having smaller nb_wf.
> >
> > For example, when doing line 1060 to 1070 of helas_objects.py, you are not
> certain that the mothers of new_wf are before the index i in
> diagram_wavefunctions list or in previous diagrams in the wavefunctions list.
> I agree this should be true by construction, but one can never be too careful.
> >
> > I looked superficially at the rest and it looks fine.
> >
> > Cheers,
> >
> >
> > --
> > https://code.launchpad.net/~maddevelopers/madgraph5/1.5.10/+merge/163092
> > You proposed lp:~maddevelopers/madgraph5/1.5.10 for merging.

review: Approve
lp:~maddevelopers/mg5amcnlo/1.5.10 updated
257. By Olivier Mattelaer

Fix comment on c++ compilation issue reported by Valentin (thanks for that)

258. By Olivier Mattelaer

merge with lp:~maddevelopers/madgraph5/1.5.10_mod_enhancement_technique
which correct problem linked to GIM mechanism cancelation (creating problem
for assigning colorflow)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Template/README.gridpack'
2--- Template/README.gridpack 2011-07-11 18:32:26 +0000
3+++ Template/README.gridpack 2013-05-16 12:23:29 +0000
4@@ -77,7 +77,7 @@
5 ./bin/compile
6 is executed from the ./madevent directory. As input to specify the
7 decays, files with the names
8-input_x.in
9+decay_x.in
10 should be put in the ./DECAY directory. (Where x is a number between 1
11 and 20.) These files are read automatically, and one file should be
12 put for each decaying particle. (E.g. for ttbar events 2 files are
13
14=== modified file 'Template/Source/PDF/pdg2pdf.f'
15--- Template/Source/PDF/pdg2pdf.f 2013-02-26 03:56:16 +0000
16+++ Template/Source/PDF/pdg2pdf.f 2013-05-16 12:23:29 +0000
17@@ -62,9 +62,11 @@
18 enddo
19
20 c Reuse previous result, if possible
21- if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.-99d9) then
22- pdg2pdf=pdflast(iporg,ireuse)
23- return
24+ if (ireuse.gt.0) then
25+ if (pdflast(iporg,ireuse).ne.-99d9) then
26+ pdg2pdf=pdflast(iporg,ireuse)
27+ return
28+ endif
29 endif
30
31 c Bjorken x and/or facrorization scale and/or PDF set are not
32
33=== modified file 'UpdateNotes.txt'
34--- UpdateNotes.txt 2013-04-01 15:47:25 +0000
35+++ UpdateNotes.txt 2013-05-16 12:23:29 +0000
36@@ -1,5 +1,28 @@
37 Update notes for MadGraph 5 (in reverse time order)
38
39+1.5.10 (xx/05/13) OM: Fix Bug #1170417: fix crash for conjugate routine in presence of
40+ massless propagator. (introduce in 1.5.9)
41+ OM: Fix question #226810: checking that patch program exists before
42+ trying to update MG5 code.
43+ OM: Fix Bug #1171049: an error in the order of wavefunctions
44+ making the code to crash (introduce in 1.5.7)
45+ OM: Allow to use an additional syntax for the set command.
46+ set gauge = Feynman is now valid. (Was not valid before due to the '=')
47+ OM: Fix By Arian Abrahantes. Fix SGE cluster which was not working when
48+ running full simulation (PGS/Delphes).
49+ OM: adding txxxxx.cc (Thanks to Aurelijus Rinkevicius for having
50+ written the routine)
51+ OM: Fix Bug #1177442. This crash occurs only for very large model.
52+ None of the model shipped with MG5 are impacted.
53+ OM: Fix Question #228315. On some filesystem, some of the executable
54+ loose the permission to be executable. Recover those errors
55+ automatically.
56+ OM: Modify the diagram enhancement technique. When more diagram have
57+ the same propagator structure we still combine them but we now include
58+ the interference term in the enhancement technique for those diagrams.
59+ This fix a crash for some multi-jet process in presence of non diagonal
60+ ckm matrices.
61+
62 1.5.9 (01/04/13) JA: Fix bug in identification of symmetric diagrams, which could
63 give the wrong propagators included in event files for certain
64 processes (such as p p > z z j, z > l+ l-). Apart from the
65
66=== modified file 'aloha/create_aloha.py'
67--- aloha/create_aloha.py 2013-03-18 23:03:14 +0000
68+++ aloha/create_aloha.py 2013-05-16 12:23:29 +0000
69@@ -724,12 +724,14 @@
70 # reorganize the data (in order to use optimization for a given lorentz
71 #structure
72 request = {}
73+
74 for list_l_name, tag, outgoing in data:
75 #allow tag to have integer for retro-compatibility
76+ all_tag = tag[:]
77 conjugate = [i for i in tag if isinstance(i, int)]
78- tag = [i for i in tag if isinstance(i, str)]
79- tag = tag + ['C%s'%i for i in conjugate]
80- #
81+ tag = [i for i in tag if isinstance(i, str) and not i.startswith('P')]
82+ tag = tag + ['C%s'%i for i in conjugate]
83+ tag = tag + [i for i in all_tag if isinstance(i, str) and i.startswith('P')]
84
85 conjugate = tuple([int(c[1:]) for c in tag if c.startswith('C')])
86 loop = any((t.startswith('L') for t in tag))
87@@ -784,8 +786,10 @@
88 continue
89 #allow tag to have integer for retrocompatibility
90 conjugate = [i for i in tag if isinstance(i, int)]
91- tag = [i for i in tag if isinstance(i, str)]
92+ all_tag = tag[:]
93+ tag = [i for i in tag if isinstance(i, str) and not i.startswith('P')]
94 tag = tag + ['C%s'%i for i in conjugate]
95+ tag = tag + [i for i in all_tag if isinstance(i, str) and i.startswith('P')]
96
97 if not self.explicit_combine:
98 lorentzname = list_l_name[0]
99
100=== added file 'aloha/template_files/txxxxx.cc'
101--- aloha/template_files/txxxxx.cc 1970-01-01 00:00:00 +0000
102+++ aloha/template_files/txxxxx.cc 2013-05-16 12:23:29 +0000
103@@ -0,0 +1,171 @@
104+#include <complex>
105+#include <cmath>
106+#include "aloha_aux_functions.h"
107+using namespace std;
108+#include <iostream>
109+#include <cstdlib>
110+
111+void txxxxx(double p[4], double tmass, int nhel, int nst, complex<double> tc[18])
112+{
113+ complex<double> ft[6][4], ep[4], em[4], e0[4];
114+ double pt, pt2, pp, pzpt, emp, sqh, sqs;
115+ int i, j;
116+
117+ sqh = pow( 0.5, 0.5 );
118+ sqs = pow( 0.5/3, 0.5 );
119+
120+ pt2 = p[1]*p[1] + p[2]*p[2];
121+ pp = min( p[0], pow( pt2+p[3]*p[3], 0.5 ) );
122+ pt = min( pp, pow( pt2, 0.5 ) );
123+
124+ ft[4][0] = complex<double>( p[0]*nst, p[3]*nst );
125+ ft[5][0] = complex<double>( p[1]*nst, p[2]*nst );
126+
127+ // construct eps+
128+ if( nhel >= 0 )
129+ {
130+ if( pp == 0 )
131+ {
132+ ep[0] = complex<double>( 0, 0 );
133+ ep[1] = complex<double>( -sqh, 0 );
134+ ep[2] = complex<double>( 0, nst*sqh );
135+ ep[3] = complex<double>( 0, 0 );
136+ }
137+ else
138+ {
139+ ep[0] = complex<double>( 0, 0 );
140+ ep[3] = complex<double>( pt/pp*sqh, 0 );
141+
142+ if( pt != 0 )
143+ {
144+ pzpt = p[3]/(pp*pt)*sqh;
145+ ep[1] = complex<double>( -p[1]*pzpt, -nst*p[2]/pt*sqh );
146+ ep[2] = complex<double>( -p[2]*pzpt, nst*p[1]/pt*sqh );
147+ }
148+ else
149+ {
150+ ep[1] = complex<double>( -sqh, 0 );
151+ ep[2] = complex<double>( 0, nst*Sgn(sqh,p[3]) );
152+ }
153+ }
154+
155+ }
156+
157+ // construct eps-
158+ if( nhel <= 0 )
159+ {
160+ if( pp == 0 )
161+ {
162+ em[0] = complex<double>( 0, 0 );
163+ em[1] = complex<double>( sqh, 0 );
164+ em[2] = complex<double>( 0, nst*sqh );
165+ em[3] = complex<double>( 0, 0 );
166+ }
167+ else
168+ {
169+ em[0] = complex<double>( 0, 0 );
170+ em[3] = complex<double>( -pt/pp*sqh, 0 );
171+
172+ if( pt != 0 )
173+ {
174+ pzpt = -p[3]/(pp*pt)*sqh;
175+ em[1] = complex<double>( -p[1]*pzpt, -nst*p[2]/pt*sqh );
176+ em[2] = complex<double>( -p[2]*pzpt, nst*p[1]/pt*sqh );
177+ }
178+ else
179+ {
180+ em[1] = complex<double>( sqh, 0 );
181+ em[2] = complex<double>( 0, nst*Sgn(sqh,p[3]) );
182+ }
183+ }
184+ }
185+
186+ // construct eps0
187+ if( fabs(nhel) <= 1 )
188+ {
189+ if( pp == 0 )
190+ {
191+ e0[0] = complex<double>( 0, 0 );
192+ e0[1] = complex<double>( 0, 0 );
193+ e0[2] = complex<double>( 0, 0 );
194+ e0[3] = complex<double>( 1, 0 );
195+ }
196+ else
197+ {
198+ emp = p[0]/(tmass*pp);
199+ e0[0] = complex<double>( pp/tmass, 0 );
200+ e0[3] = complex<double>( p[3]*emp, 0 );
201+
202+ if( pt != 0 )
203+ {
204+ e0[1] = complex<double>( p[1]*emp, 0 );
205+ e0[2] = complex<double>( p[2]*emp, 0 );
206+ }
207+ else
208+ {
209+ e0[1] = complex<double>( 0, 0 );
210+ e0[2] = complex<double>( 0, 0 );
211+ }
212+ }
213+ }
214+
215+ if( nhel == 2 )
216+ {
217+ for( j=0; j<4; j++ )
218+ {
219+ for( i=0; i<4; i++ ) ft[i][j] = ep[i]*ep[j];
220+ }
221+ }
222+ else if( nhel == -2 )
223+ {
224+ for( j=0; j<4; j++ )
225+ {
226+ for( i=0; i<4; i++ ) ft[i][j] = em[i]*em[j];
227+ }
228+ }
229+ else if( tmass == 0 )
230+ {
231+ for( j=0; j<4; j++ )
232+ {
233+ for( i=0; i<4; i++ ) ft[i][j] = 0;
234+ }
235+ }
236+ else if( tmass != 0 )
237+ {
238+ if( nhel == 1 )
239+ {
240+ for( j=0; j<4; j++ )
241+ {
242+ for( i=0; i<4; i++ ) ft[i][j] = sqh*( ep[i]*e0[j] + e0[i]*ep[j] );
243+ }
244+ }
245+ else if( nhel == 0 )
246+ {
247+ for( j=0; j<4; j++ )
248+ {
249+ for( i=0; i<4; i++ ) ft[i][j] = sqs*( ep[i]*em[j] + em[i]*ep[j]
250+ + 2.0*e0[i]*e0[j] );
251+ }
252+ }
253+ else if( nhel == -1 )
254+ {
255+ for( j=0; j<4; j++ )
256+ {
257+ for( i=0; i<4; i++ ) ft[i][j] = sqh*( em[i]*e0[j] + e0[i]*em[j] );
258+ }
259+ }
260+ else
261+ {
262+ std::cerr << "Invalid helicity in txxxxx.\n";
263+ std::exit(1);
264+ }
265+ }
266+
267+ tc[0] = ft[4][0];
268+ tc[1] = ft[5][0];
269+
270+ for( j=0; j<4; j++ )
271+ {
272+ for( i=0; i<4; i++ ) tc[j*4+i+2] = ft[j][i];
273+ }
274+}
275
276=== added file 'aloha/template_files/txxxxx.h'
277--- aloha/template_files/txxxxx.h 1970-01-01 00:00:00 +0000
278+++ aloha/template_files/txxxxx.h 2013-05-16 12:23:29 +0000
279@@ -0,0 +1,5 @@
280+#ifndef i_guard
281+#define i_guard
282+#include <complex>
283+void txxxxx(double p[4],double tmass,int nhel,int nst,std::complex<double> fi[18]);
284+#endif
285
286=== modified file 'bin/create_release.py'
287--- bin/create_release.py 2013-01-15 18:59:13 +0000
288+++ bin/create_release.py 2013-05-16 12:23:29 +0000
289@@ -193,7 +193,6 @@
290 path.join(filepath, 'input','mg5_configuration.txt'))
291
292 # 2. Create the automatic documentation in the apidoc directory
293-
294 try:
295 status1 = subprocess.call(['epydoc', '--html', '-o', 'apidoc',
296 'madgraph', 'aloha',
297@@ -211,7 +210,8 @@
298 # 3. tar the MadGraph5_vVERSION directory.
299
300 logging.info("Create the tar file " + filename)
301-
302+# clean all the pyc
303+os.system("cd %s;find . -name '*.pyc' -delete" % filepath)
304 status2 = subprocess.call(['tar', 'czf', filename, filepath])
305
306 if status2:
307
308=== modified file 'madgraph/VERSION'
309--- madgraph/VERSION 2013-04-01 15:47:25 +0000
310+++ madgraph/VERSION 2013-05-16 12:23:29 +0000
311@@ -1,3 +1,3 @@
312-version = 1.5.9
313-date = 2013-04-01
314+version = 1.5.10
315+date = 2013-XX-XX
316
317
318=== modified file 'madgraph/core/helas_objects.py'
319--- madgraph/core/helas_objects.py 2013-03-27 22:59:57 +0000
320+++ madgraph/core/helas_objects.py 2013-05-16 12:23:29 +0000
321@@ -1044,7 +1044,30 @@
322 new_wf.set('number', old_wf.get('number'))
323 diagram_wavefunctions[old_wf_index] = new_wf
324 except ValueError:
325- diagram_wavefunctions.append(new_wf)
326+ # Make sure that new_wf comes before any wavefunction
327+ # which has it as mother
328+ if len(self['mothers']) == 0:
329+ #insert at the beginning
330+ if diagram_wavefunctions:
331+ wf_nb = diagram_wavefunctions[0].get('number')
332+ for w in diagram_wavefunctions:
333+ w.set('number', w.get('number') + 1)
334+ new_wf.set('number', wf_nb)
335+ diagram_wavefunctions.insert(0, new_wf)
336+ else:
337+ diagram_wavefunctions.insert(0, new_wf)
338+ else:
339+ for i, wf in enumerate(diagram_wavefunctions):
340+ if self in wf.get('mothers'):
341+ # Update wf numbers
342+ new_wf.set('number', wf.get('number'))
343+ for w in diagram_wavefunctions[i:]:
344+ w.set('number', w.get('number') + 1)
345+ # Insert wavefunction
346+ diagram_wavefunctions.insert(i, new_wf)
347+ break
348+ else:
349+ diagram_wavefunctions.append(new_wf)
350
351 # Set new mothers
352 new_wf.set('mothers', mothers)
353@@ -3697,12 +3720,12 @@
354 all lorentz structures used by this HelasMatrixElement."""
355
356 out = [(tuple(wa.get('lorentz')),
357- tuple(list(wa.get('conjugate_indices')) + \
358- [] if wa.get('particle').get('propagator') =='' else \
359- ['P%s' % wa.get('particle').get('propagator')]),
360- wa.find_outgoing_number()) for wa in \
361- self.get_all_wavefunctions()\
362- if wa.get('interaction_id') != 0]
363+ tuple(([] if wa.get('particle').get('propagator') =='' else \
364+ ['P%s' % wa.get('particle').get('propagator')]) + \
365+ list(wa.get('conjugate_indices'))), \
366+ wa.find_outgoing_number())
367+ for wa in self.get_all_wavefunctions() \
368+ if wa.get('interaction_id') != 0]
369 out += [(tuple(wa.get('lorentz')), wa.get('conjugate_indices'),
370 wa.find_outgoing_number()) for wa in self.get_all_amplitudes() \
371 if wa.get('interaction_id') != 0]
372
373=== modified file 'madgraph/interface/madgraph_interface.py'
374--- madgraph/interface/madgraph_interface.py 2013-03-30 04:53:23 +0000
375+++ madgraph/interface/madgraph_interface.py 2013-05-16 12:23:29 +0000
376@@ -873,6 +873,9 @@
377
378 if len(args) == 1 and args[0] == 'complex_mass_scheme':
379 args.append('True')
380+
381+ if len(args) > 2 and '=' == args[1]:
382+ args.pop(1)
383
384 if len(args) < 2:
385 self.help_set()
386@@ -3237,6 +3240,13 @@
387 raise self.ConfigurationError(error_text)
388 return
389
390+ if not misc.which('patch'):
391+ error_text = """Not able to find program \'patch\'. Please reload a clean version
392+ or install that program and retry."""
393+ if mode == 'userrequest':
394+ raise self.ConfigurationError(error_text)
395+ return
396+
397
398 # read the data present in .autoupdate
399 data = {}
400
401=== modified file 'madgraph/iolibs/export_v4.py'
402--- madgraph/iolibs/export_v4.py 2013-03-27 15:33:27 +0000
403+++ madgraph/iolibs/export_v4.py 2013-05-16 12:23:29 +0000
404@@ -121,7 +121,7 @@
405 '--web'], cwd=self.dir_path)
406 else:
407 try:
408- subprocess.call([pjoin('bin', 'internal', 'clean_template')], \
409+ misc.call([pjoin('bin', 'internal', 'clean_template')], \
410 cwd=self.dir_path)
411 except Exception, why:
412 raise MadGraph5Error('Failed to clean correctly %s: \n %s' \
413@@ -554,10 +554,16 @@
414 line = "AMP2(%(num)d)=AMP2(%(num)d)+" % \
415 {"num": (config_to_diag_dict[config][0] + 1)}
416
417- line += "+".join(["AMP(%(num)d)*dconjg(AMP(%(num)d))" % \
418- {"num": a.get('number')} for a in \
419+ amp = "+".join(["AMP(%(num)d)" % {"num": a.get('number')} for a in \
420 sum([diagrams[idiag].get('amplitudes') for \
421 idiag in config_to_diag_dict[config]], [])])
422+
423+ # Not using \sum |M|^2 anymore since this creates troubles
424+ # when ckm is not diagonal due to the JIM mechanism.
425+ if '+' in amp:
426+ line += "(%s)*dconjg(%s)" % (amp, amp)
427+ else:
428+ line += "%s*dconjg(%s)" % (amp, amp)
429 ret_lines.append(line)
430 else:
431 for idiag, diag in enumerate(matrix_element.get('diagrams')):
432@@ -3160,7 +3166,13 @@
433 self.p_to_f.parse(param.expr)))
434
435 fsock.write_comments("\nDefinition of the EW coupling used in the write out of aqed\n")
436- fsock.writelines(""" gal(1) = 1d0
437+ if ('aEWM1',) in self.model['parameters']:
438+ fsock.writelines(""" gal(1) = 3.5449077018110318 / DSQRT(aEWM1)
439+ gal(2) = 1d0
440+ """)
441+ else:
442+ logger.warning('$RED aEWM1 not define in MODEL. AQED will not be written correcty in LHE FILE')
443+ fsock.writelines(""" gal(1) = 1d0
444 gal(2) = 1d0
445 """)
446
447
448=== modified file 'madgraph/iolibs/template_files/cpp_hel_amps_cc.inc'
449--- madgraph/iolibs/template_files/cpp_hel_amps_cc.inc 2011-03-27 17:13:28 +0000
450+++ madgraph/iolibs/template_files/cpp_hel_amps_cc.inc 2013-05-16 12:23:29 +0000
451@@ -4,6 +4,11 @@
452 //==========================================================================
453
454 #include "HelAmps_%(model_name)s.h"
455+#include <complex>
456+#include <cmath>
457+#include <iostream>
458+#include <cstdlib>
459+using namespace std;
460
461 namespace %(namespace)s_%(model_name)s {
462
463
464=== modified file 'madgraph/various/cluster.py'
465--- madgraph/various/cluster.py 2013-03-30 19:28:32 +0000
466+++ madgraph/various/cluster.py 2013-05-16 12:23:29 +0000
467@@ -559,6 +559,9 @@
468 stderr = '/dev/null'
469 elif stderr == -2: # -2 is subprocess.STDOUT
470 stderr = stdout
471+ else:
472+ stderr = self.def_get_path(stderr)
473+
474 if log is None:
475 log = '/dev/null'
476 else:
477
478=== modified file 'madgraph/various/sum_html.py'
479--- madgraph/various/sum_html.py 2012-10-03 15:25:35 +0000
480+++ madgraph/various/sum_html.py 2013-05-16 12:23:29 +0000
481@@ -60,8 +60,9 @@
482 try:
483 return float(d)
484 except ValueError:
485- if re.search(r'''[+-]?[\d.]*-\d*''', d):
486- return 0.0
487+ m=re.search(r'''([+-]?[\d.]*)([+-]\d*)''', d)
488+ if m:
489+ return float(m.group(1))*10**(float(m.group(2)))
490 return
491
492 data = [secure_float(d) for d in line.split()]
493
494=== modified file 'models/import_ufo.py'
495--- models/import_ufo.py 2013-03-18 23:03:14 +0000
496+++ models/import_ufo.py 2013-05-16 12:23:29 +0000
497@@ -1221,39 +1221,53 @@
498 if simplify:
499 # check if the parameters is still usefull:
500 re_str = '|'.join(special_parameters)
501- re_pat = re.compile(r'''\b(%s)\b''' % re_str)
502- used = set()
503- # check in coupling
504- for name, coupling_list in self['couplings'].items():
505- for coupling in coupling_list:
506- for use in re_pat.findall(coupling.expr):
507- used.add(use)
508+ if len(re_str) > 25000: # size limit on mac
509+ split = len(special_parameters) // 2
510+ re_str = ['|'.join(special_parameters[:split]),
511+ '|'.join(special_parameters[split:])]
512+ else:
513+ re_str = [ re_str ]
514+ for expr in re_str:
515+ re_pat = re.compile(r'''\b(%s)\b''' % expr)
516+ used = set()
517+ # check in coupling
518+ for name, coupling_list in self['couplings'].items():
519+ for coupling in coupling_list:
520+ for use in re_pat.findall(coupling.expr):
521+ used.add(use)
522 else:
523 used = set([i for i in special_parameters if i])
524
525
526 # simplify the regular expression
527- re_str = '|'.join([param for param in special_parameters
528- if param not in used])
529- re_pat = re.compile(r'''\b(%s)\b''' % re_str)
530- param_info = {}
531- # check in parameters
532- for dep, param_list in self['parameters'].items():
533- for tag, parameter in enumerate(param_list):
534- # update information concerning zero/one parameters
535- if parameter.name in special_parameters:
536- param_info[parameter.name]= {'dep': dep, 'tag': tag,
537- 'obj': parameter}
538- continue
539-
540- # Bypass all external parameter
541- if isinstance(parameter, base_objects.ParamCardVariable):
542- continue
543-
544- # check the presence of zero/one parameter
545- if simplify:
546- for use in re_pat.findall(parameter.expr):
547- used.add(use)
548+ re_str = '|'.join([param for param in special_parameters if param not in used])
549+ if len(re_str) > 25000: # size limit on mac
550+ split = len(special_parameters) // 2
551+ re_str = ['|'.join(special_parameters[:split]),
552+ '|'.join(special_parameters[split:])]
553+ else:
554+ re_str = [ re_str ]
555+ for expr in re_str:
556+ re_pat = re.compile(r'''\b(%s)\b''' % expr)
557+
558+ param_info = {}
559+ # check in parameters
560+ for dep, param_list in self['parameters'].items():
561+ for tag, parameter in enumerate(param_list):
562+ # update information concerning zero/one parameters
563+ if parameter.name in special_parameters:
564+ param_info[parameter.name]= {'dep': dep, 'tag': tag,
565+ 'obj': parameter}
566+ continue
567+
568+ # Bypass all external parameter
569+ if isinstance(parameter, base_objects.ParamCardVariable):
570+ continue
571+
572+ # check the presence of zero/one parameter
573+ if simplify:
574+ for use in re_pat.findall(parameter.expr):
575+ used.add(use)
576
577 # modify the object for those which are still used
578 for param in used:
579
580=== modified file 'tests/unit_tests/iolibs/test_export_v4.py'
581--- tests/unit_tests/iolibs/test_export_v4.py 2013-03-19 08:18:53 +0000
582+++ tests/unit_tests/iolibs/test_export_v4.py 2013-05-16 12:23:29 +0000
583@@ -5277,7 +5277,7 @@
584
585 self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\
586 get_matrix_element_calls(matrix_element),
587- """CALL VXXXXX(P(0,1),ZERO,NHEL(1),-1*IC(1),W(1,1))
588+ """CALL VXXXXX(P(0,1),ZERO,NHEL(1),-1*IC(1),W(1,1))
589 CALL IXXXXX(P(0,2),BMASS,NHEL(2),+1*IC(2),W(1,2))
590 CALL OXXXXX(P(0,3),TMASS,NHEL(3),+1*IC(3),W(1,3))
591 CALL OXXXXX(P(0,4),TMASS,NHEL(4),+1*IC(4),W(1,4))
592@@ -5290,26 +5290,26 @@
593 CALL FSIXXX(W(1,5),W(1,2),GT1GOM,MGO,WGO,W(1,7))
594 # Amplitude(s) for diagram number 1
595 CALL IOSXXX(W(1,7),W(1,4),W(1,9),GT1GOP,AMP(1))
596-CALL IXXXXX(P(0,7),MX1,NHEL(7),-1*IC(7),W(1,7))
597-CALL HIOCXX(W(1,7),W(1,4),GB1X1P,MB1,WB1,W(1,10))
598-CALL FSIXXX(W(1,8),W(1,2),GT1X1M,MX1,WX1,W(1,11))
599-CALL OXXXXX(P(0,5),TMASS,NHEL(5),+1*IC(5),W(1,12))
600+CALL OXXXXX(P(0,5),TMASS,NHEL(5),+1*IC(5),W(1,7))
601+CALL IXXXXX(P(0,7),MX1,NHEL(7),-1*IC(7),W(1,10))
602+CALL HIOCXX(W(1,10),W(1,4),GB1X1P,MB1,WB1,W(1,11))
603+CALL FSIXXX(W(1,8),W(1,2),GT1X1M,MX1,WX1,W(1,12))
604 # Amplitude(s) for diagram number 2
605-CALL IOSCXX(W(1,11),W(1,12),W(1,10),GB1X1M,AMP(2))
606-CALL OXXXXX(P(0,2),BMASS,NHEL(2),-1*IC(2),W(1,11))
607-CALL FVOCXX(W(1,11),W(1,1),GG,BMASS,ZERO,W(1,13))
608-CALL FSOCXX(W(1,13),W(1,10),GB1GOM,MGO,WGO,W(1,11))
609+CALL IOSCXX(W(1,12),W(1,7),W(1,11),GB1X1M,AMP(2))
610+CALL OXXXXX(P(0,2),BMASS,NHEL(2),-1*IC(2),W(1,12))
611+CALL FVOCXX(W(1,12),W(1,1),GG,BMASS,ZERO,W(1,13))
612+CALL FSOCXX(W(1,13),W(1,11),GB1GOM,MGO,WGO,W(1,12))
613 # Amplitude(s) for diagram number 3
614-CALL IOSXXX(W(1,5),W(1,11),W(1,2),GT1GOM,AMP(3))
615-CALL HIOCXX(W(1,7),W(1,3),GB1X1P,MB1,WB1,W(1,11))
616-CALL HIOXXX(W(1,6),W(1,4),GT1N1P,MT1,WT1,W(1,7))
617-CALL FSOCXX(W(1,13),W(1,11),GB1GOM,MGO,WGO,W(1,6))
618+CALL IOSXXX(W(1,5),W(1,12),W(1,2),GT1GOM,AMP(3))
619+CALL HIOCXX(W(1,10),W(1,3),GB1X1P,MB1,WB1,W(1,12))
620+CALL HIOXXX(W(1,6),W(1,4),GT1N1P,MT1,WT1,W(1,10))
621+CALL FSOCXX(W(1,13),W(1,12),GB1GOM,MGO,WGO,W(1,6))
622 # Amplitude(s) for diagram number 4
623-CALL IOSXXX(W(1,5),W(1,6),W(1,7),GT1GOM,AMP(4))
624-CALL FSIXXX(W(1,8),W(1,7),GT1X1M,MX1,WX1,W(1,6))
625+CALL IOSXXX(W(1,5),W(1,6),W(1,10),GT1GOM,AMP(4))
626+CALL FSIXXX(W(1,8),W(1,10),GT1X1M,MX1,WX1,W(1,6))
627 # Amplitude(s) for diagram number 5
628-CALL IOSCXX(W(1,6),W(1,12),W(1,11),GB1X1M,AMP(5))
629-CALL FSIXXX(W(1,5),W(1,7),GT1GOM,MGO,WGO,W(1,6))
630+CALL IOSCXX(W(1,6),W(1,7),W(1,12),GB1X1M,AMP(5))
631+CALL FSIXXX(W(1,5),W(1,10),GT1GOM,MGO,WGO,W(1,6))
632 # Amplitude(s) for diagram number 6
633 CALL IOSXXX(W(1,6),W(1,3),W(1,9),GT1GOP,AMP(6))""".split('\n'))
634
635@@ -5439,7 +5439,7 @@
636 # account)
637 self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\
638 get_matrix_element_calls(matrix_element),
639- """CALL OXXXXX(P(0,1),me,NHEL(1),-1*IC(1),W(1,1))
640+ """CALL OXXXXX(P(0,1),me,NHEL(1),-1*IC(1),W(1,1))
641 CALL IXXXXX(P(0,2),me,NHEL(2),+1*IC(2),W(1,2))
642 CALL SXXXXX(P(0,3),+1*IC(3),W(1,3))
643 CALL SXXXXX(P(0,4),+1*IC(4),W(1,4))
644@@ -5450,25 +5450,25 @@
645 CALL HIOXXX(W(1,5),W(1,7),MGVX494,Msl2,Wsl2,W(1,9))
646 # Amplitude(s) for diagram number 1
647 CALL IOSXXX(W(1,8),W(1,6),W(1,9),MGVX350,AMP(1))
648-CALL IXXXXX(P(0,1),me,NHEL(1),+1*IC(1),W(1,9))
649-CALL FSICXX(W(1,9),W(1,3),MGVX350,Mneu1,Wneu1,W(1,10))
650-CALL HIOXXX(W(1,10),W(1,6),MGVX350,Msl2,Wsl2,W(1,9))
651-CALL OXXXXX(P(0,2),me,NHEL(2),-1*IC(2),W(1,10))
652-CALL FSOCXX(W(1,10),W(1,4),MGVX494,Mneu1,Wneu1,W(1,11))
653+CALL OXXXXX(P(0,2),me,NHEL(2),-1*IC(2),W(1,9))
654+CALL IXXXXX(P(0,1),me,NHEL(1),+1*IC(1),W(1,10))
655+CALL FSICXX(W(1,10),W(1,3),MGVX350,Mneu1,Wneu1,W(1,11))
656+CALL HIOXXX(W(1,11),W(1,6),MGVX350,Msl2,Wsl2,W(1,10))
657+CALL FSOCXX(W(1,9),W(1,4),MGVX494,Mneu1,Wneu1,W(1,11))
658 # Amplitude(s) for diagram number 2
659-CALL IOSXXX(W(1,5),W(1,11),W(1,9),MGVX494,AMP(2))
660-CALL FSIXXX(W(1,5),W(1,4),MGVX494,Mneu1,Wneu1,W(1,10))
661+CALL IOSXXX(W(1,5),W(1,11),W(1,10),MGVX494,AMP(2))
662+CALL FSIXXX(W(1,5),W(1,4),MGVX494,Mneu1,Wneu1,W(1,9))
663 CALL HIOXXX(W(1,2),W(1,7),MGVX494,Msl2,Wsl2,W(1,12))
664 # Amplitude(s) for diagram number 3
665-CALL IOSXXX(W(1,10),W(1,6),W(1,12),MGVX350,AMP(3))
666+CALL IOSXXX(W(1,9),W(1,6),W(1,12),MGVX350,AMP(3))
667 CALL OXXXXX(P(0,5),me,NHEL(5),+1*IC(5),W(1,12))
668 CALL FSOCXX(W(1,12),W(1,4),MGVX494,Mneu1,Wneu1,W(1,7))
669 # Amplitude(s) for diagram number 4
670-CALL IOSXXX(W(1,2),W(1,7),W(1,9),MGVX494,AMP(4))
671-CALL FSOXXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,9))
672+CALL IOSXXX(W(1,2),W(1,7),W(1,10),MGVX494,AMP(4))
673+CALL FSOXXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,10))
674 CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))
675 # Amplitude(s) for diagram number 5
676-CALL IOSXXX(W(1,5),W(1,9),W(1,6),MGVX494,AMP(5))
677+CALL IOSXXX(W(1,5),W(1,10),W(1,6),MGVX494,AMP(5))
678 CALL IXXXXX(P(0,6),me,NHEL(6),-1*IC(6),W(1,6))
679 CALL FSICXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,8))
680 CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))
681@@ -5476,9 +5476,9 @@
682 CALL IOSXXX(W(1,5),W(1,11),W(1,6),MGVX494,AMP(6))
683 # Amplitude(s) for diagram number 7
684 CALL IOSXXX(W(1,2),W(1,7),W(1,6),MGVX494,AMP(7))
685-CALL HIOXXX(W(1,10),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))
686+CALL HIOXXX(W(1,9),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))
687 # Amplitude(s) for diagram number 8
688-CALL IOSXXX(W(1,2),W(1,9),W(1,6),MGVX494,AMP(8))""".split('\n'))
689+CALL IOSXXX(W(1,2),W(1,10),W(1,6),MGVX494,AMP(8))""".split('\n'))
690
691 # Test find_outgoing_number
692 goal_numbers = [1, 2, 3, 2, 3, 1, 2, 3, 1, 1, 3, 2, 3, 3]
693@@ -8562,13 +8562,13 @@
694 CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3))
695 # Amplitude(s) for diagram number 1
696 CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1))
697+CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3))
698+CALL FSICXX(W(1,3),W(1,4),MGVX350,Mneu1,Wneu1,W(1,7))
699 CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3))
700-CALL FSOXXX(W(1,3),W(1,6),MGVX350,Mneu1,Wneu1,W(1,7))
701-CALL HIOXXX(W(1,1),W(1,7),MGVX494,Msl2,Wsl2,W(1,3))
702-CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,7))
703-CALL FSICXX(W(1,7),W(1,4),MGVX350,Mneu1,Wneu1,W(1,1))
704+CALL FSOXXX(W(1,3),W(1,6),MGVX350,Mneu1,Wneu1,W(1,4))
705+CALL HIOXXX(W(1,1),W(1,4),MGVX494,Msl2,Wsl2,W(1,3))
706 # Amplitude(s) for diagram number 2
707-CALL IOSXXX(W(1,1),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n'))
708+CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n'))
709
710 exporter = export_v4.ProcessExporterFortranME()
711
712@@ -8615,13 +8615,13 @@
713 CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3))
714 # Amplitude(s) for diagram number 1
715 CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1))
716+CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3))
717+CALL FSICXX(W(1,3),W(1,4),MGVX350,Mneu1,Wneu1,W(1,7))
718 CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3))
719-CALL FSOCXX(W(1,3),W(1,6),MGVX494,Mneu1,Wneu1,W(1,7))
720-CALL HIOXXX(W(1,1),W(1,7),MGVX494,Msl2,Wsl2,W(1,3))
721-CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,7))
722-CALL FSICXX(W(1,7),W(1,4),MGVX350,Mneu1,Wneu1,W(1,1))
723+CALL FSOCXX(W(1,3),W(1,6),MGVX494,Mneu1,Wneu1,W(1,4))
724+CALL HIOXXX(W(1,1),W(1,4),MGVX494,Msl2,Wsl2,W(1,3))
725 # Amplitude(s) for diagram number 2
726-CALL IOSXXX(W(1,1),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n'))
727+CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n'))
728
729 self.assertEqual(exporter.get_JAMP_lines(me)[0],
730 "JAMP(1)=+AMP(1)-AMP(2)")
731@@ -8662,7 +8662,7 @@
732
733 # This has been checked against v4
734 self.assertEqual(myfortranmodel.get_matrix_element_calls(me),
735- """CALL IXXXXX(P(0,1),zero,NHEL(1),+1*IC(1),W(1,1))
736+ """CALL IXXXXX(P(0,1),zero,NHEL(1),+1*IC(1),W(1,1))
737 CALL OXXXXX(P(0,2),zero,NHEL(2),-1*IC(2),W(1,2))
738 CALL OXXXXX(P(0,3),zero,NHEL(3),+1*IC(3),W(1,3))
739 CALL SXXXXX(P(0,4),+1*IC(4),W(1,4))
740@@ -8688,24 +8688,24 @@
741 CALL IOSXXX(W(1,11),W(1,2),W(1,3),MGVX350,AMP(3))
742 # Amplitude(s) for diagram number 4
743 CALL IOSXXX(W(1,12),W(1,2),W(1,3),MGVX350,AMP(4))
744-CALL OXXXXX(P(0,6),zero,NHEL(6),+1*IC(6),W(1,3))
745-CALL FVOXXX(W(1,3),W(1,9),MGVX12,zero,zero,W(1,12))
746-CALL FSOXXX(W(1,12),W(1,8),MGVX350,Mneu1,Wneu1,W(1,9))
747+CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3))
748+CALL FVICXX(W(1,3),W(1,5),MGVX12,zero,zero,W(1,12))
749+CALL FSICXX(W(1,12),W(1,4),MGVX350,Mneu1,Wneu1,W(1,5))
750+CALL OXXXXX(P(0,6),zero,NHEL(6),+1*IC(6),W(1,12))
751+CALL FVOXXX(W(1,12),W(1,9),MGVX12,zero,zero,W(1,4))
752+CALL FSOXXX(W(1,4),W(1,8),MGVX350,Mneu1,Wneu1,W(1,9))
753+CALL HIOXXX(W(1,1),W(1,9),MGVX494,Msl2,Wsl2,W(1,4))
754+# Amplitude(s) for diagram number 5
755+CALL IOSXXX(W(1,5),W(1,2),W(1,4),MGVX350,AMP(5))
756+CALL FSOXXX(W(1,12),W(1,7),MGVX350,Mneu1,Wneu1,W(1,9))
757 CALL HIOXXX(W(1,1),W(1,9),MGVX494,Msl2,Wsl2,W(1,12))
758-CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,9))
759-CALL FVICXX(W(1,9),W(1,5),MGVX12,zero,zero,W(1,8))
760-CALL FSICXX(W(1,8),W(1,4),MGVX350,Mneu1,Wneu1,W(1,5))
761-# Amplitude(s) for diagram number 5
762-CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(5))
763-CALL FSOXXX(W(1,3),W(1,7),MGVX350,Mneu1,Wneu1,W(1,8))
764-CALL HIOXXX(W(1,1),W(1,8),MGVX494,Msl2,Wsl2,W(1,3))
765 # Amplitude(s) for diagram number 6
766-CALL IOSXXX(W(1,5),W(1,2),W(1,3),MGVX350,AMP(6))
767-CALL FSICXX(W(1,9),W(1,10),MGVX350,Mneu1,Wneu1,W(1,5))
768+CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(6))
769+CALL FSICXX(W(1,3),W(1,10),MGVX350,Mneu1,Wneu1,W(1,5))
770 # Amplitude(s) for diagram number 7
771-CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(7))
772+CALL IOSXXX(W(1,5),W(1,2),W(1,4),MGVX350,AMP(7))
773 # Amplitude(s) for diagram number 8
774-CALL IOSXXX(W(1,5),W(1,2),W(1,3),MGVX350,AMP(8))""".split('\n'))
775+CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(8))""".split('\n'))
776
777 # Test amp2 lines
778 amp2_lines = \

Subscribers

People subscribed via source and target branches