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
=== modified file 'Template/README.gridpack'
--- Template/README.gridpack 2011-07-11 18:32:26 +0000
+++ Template/README.gridpack 2013-05-16 12:23:29 +0000
@@ -77,7 +77,7 @@
77./bin/compile77./bin/compile
78is executed from the ./madevent directory. As input to specify the78is executed from the ./madevent directory. As input to specify the
79decays, files with the names79decays, files with the names
80input_x.in80decay_x.in
81should be put in the ./DECAY directory. (Where x is a number between 181should be put in the ./DECAY directory. (Where x is a number between 1
82and 20.) These files are read automatically, and one file should be82and 20.) These files are read automatically, and one file should be
83put for each decaying particle. (E.g. for ttbar events 2 files are83put for each decaying particle. (E.g. for ttbar events 2 files are
8484
=== modified file 'Template/Source/PDF/pdg2pdf.f'
--- Template/Source/PDF/pdg2pdf.f 2013-02-26 03:56:16 +0000
+++ Template/Source/PDF/pdg2pdf.f 2013-05-16 12:23:29 +0000
@@ -62,9 +62,11 @@
62 enddo62 enddo
6363
64c Reuse previous result, if possible64c Reuse previous result, if possible
65 if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.-99d9) then65 if (ireuse.gt.0) then
66 pdg2pdf=pdflast(iporg,ireuse)66 if (pdflast(iporg,ireuse).ne.-99d9) then
67 return 67 pdg2pdf=pdflast(iporg,ireuse)
68 return
69 endif
68 endif70 endif
6971
70c Bjorken x and/or facrorization scale and/or PDF set are not72c Bjorken x and/or facrorization scale and/or PDF set are not
7173
=== modified file 'UpdateNotes.txt'
--- UpdateNotes.txt 2013-04-01 15:47:25 +0000
+++ UpdateNotes.txt 2013-05-16 12:23:29 +0000
@@ -1,5 +1,28 @@
1Update notes for MadGraph 5 (in reverse time order)1Update notes for MadGraph 5 (in reverse time order)
22
31.5.10 (xx/05/13) OM: Fix Bug #1170417: fix crash for conjugate routine in presence of
4 massless propagator. (introduce in 1.5.9)
5 OM: Fix question #226810: checking that patch program exists before
6 trying to update MG5 code.
7 OM: Fix Bug #1171049: an error in the order of wavefunctions
8 making the code to crash (introduce in 1.5.7)
9 OM: Allow to use an additional syntax for the set command.
10 set gauge = Feynman is now valid. (Was not valid before due to the '=')
11 OM: Fix By Arian Abrahantes. Fix SGE cluster which was not working when
12 running full simulation (PGS/Delphes).
13 OM: adding txxxxx.cc (Thanks to Aurelijus Rinkevicius for having
14 written the routine)
15 OM: Fix Bug #1177442. This crash occurs only for very large model.
16 None of the model shipped with MG5 are impacted.
17 OM: Fix Question #228315. On some filesystem, some of the executable
18 loose the permission to be executable. Recover those errors
19 automatically.
20 OM: Modify the diagram enhancement technique. When more diagram have
21 the same propagator structure we still combine them but we now include
22 the interference term in the enhancement technique for those diagrams.
23 This fix a crash for some multi-jet process in presence of non diagonal
24 ckm matrices.
25
31.5.9 (01/04/13) JA: Fix bug in identification of symmetric diagrams, which could261.5.9 (01/04/13) JA: Fix bug in identification of symmetric diagrams, which could
4 give the wrong propagators included in event files for certain27 give the wrong propagators included in event files for certain
5 processes (such as p p > z z j, z > l+ l-). Apart from the 28 processes (such as p p > z z j, z > l+ l-). Apart from the
629
=== modified file 'aloha/create_aloha.py'
--- aloha/create_aloha.py 2013-03-18 23:03:14 +0000
+++ aloha/create_aloha.py 2013-05-16 12:23:29 +0000
@@ -724,12 +724,14 @@
724 # reorganize the data (in order to use optimization for a given lorentz724 # reorganize the data (in order to use optimization for a given lorentz
725 #structure725 #structure
726 request = {}726 request = {}
727
727 for list_l_name, tag, outgoing in data:728 for list_l_name, tag, outgoing in data:
728 #allow tag to have integer for retro-compatibility729 #allow tag to have integer for retro-compatibility
730 all_tag = tag[:]
729 conjugate = [i for i in tag if isinstance(i, int)]731 conjugate = [i for i in tag if isinstance(i, int)]
730 tag = [i for i in tag if isinstance(i, str)]732 tag = [i for i in tag if isinstance(i, str) and not i.startswith('P')]
731 tag = tag + ['C%s'%i for i in conjugate] 733 tag = tag + ['C%s'%i for i in conjugate]
732 #734 tag = tag + [i for i in all_tag if isinstance(i, str) and i.startswith('P')]
733 735
734 conjugate = tuple([int(c[1:]) for c in tag if c.startswith('C')])736 conjugate = tuple([int(c[1:]) for c in tag if c.startswith('C')])
735 loop = any((t.startswith('L') for t in tag))737 loop = any((t.startswith('L') for t in tag))
@@ -784,8 +786,10 @@
784 continue786 continue
785 #allow tag to have integer for retrocompatibility787 #allow tag to have integer for retrocompatibility
786 conjugate = [i for i in tag if isinstance(i, int)]788 conjugate = [i for i in tag if isinstance(i, int)]
787 tag = [i for i in tag if isinstance(i, str)]789 all_tag = tag[:]
790 tag = [i for i in tag if isinstance(i, str) and not i.startswith('P')]
788 tag = tag + ['C%s'%i for i in conjugate] 791 tag = tag + ['C%s'%i for i in conjugate]
792 tag = tag + [i for i in all_tag if isinstance(i, str) and i.startswith('P')]
789 793
790 if not self.explicit_combine:794 if not self.explicit_combine:
791 lorentzname = list_l_name[0]795 lorentzname = list_l_name[0]
792796
=== added file 'aloha/template_files/txxxxx.cc'
--- aloha/template_files/txxxxx.cc 1970-01-01 00:00:00 +0000
+++ aloha/template_files/txxxxx.cc 2013-05-16 12:23:29 +0000
@@ -0,0 +1,171 @@
1#include <complex>
2#include <cmath>
3#include "aloha_aux_functions.h"
4using namespace std;
5#include <iostream>
6#include <cstdlib>
7
8void txxxxx(double p[4], double tmass, int nhel, int nst, complex<double> tc[18])
9{
10 complex<double> ft[6][4], ep[4], em[4], e0[4];
11 double pt, pt2, pp, pzpt, emp, sqh, sqs;
12 int i, j;
13
14 sqh = pow( 0.5, 0.5 );
15 sqs = pow( 0.5/3, 0.5 );
16
17 pt2 = p[1]*p[1] + p[2]*p[2];
18 pp = min( p[0], pow( pt2+p[3]*p[3], 0.5 ) );
19 pt = min( pp, pow( pt2, 0.5 ) );
20
21 ft[4][0] = complex<double>( p[0]*nst, p[3]*nst );
22 ft[5][0] = complex<double>( p[1]*nst, p[2]*nst );
23
24 // construct eps+
25 if( nhel >= 0 )
26 {
27 if( pp == 0 )
28 {
29 ep[0] = complex<double>( 0, 0 );
30 ep[1] = complex<double>( -sqh, 0 );
31 ep[2] = complex<double>( 0, nst*sqh );
32 ep[3] = complex<double>( 0, 0 );
33 }
34 else
35 {
36 ep[0] = complex<double>( 0, 0 );
37 ep[3] = complex<double>( pt/pp*sqh, 0 );
38
39 if( pt != 0 )
40 {
41 pzpt = p[3]/(pp*pt)*sqh;
42 ep[1] = complex<double>( -p[1]*pzpt, -nst*p[2]/pt*sqh );
43 ep[2] = complex<double>( -p[2]*pzpt, nst*p[1]/pt*sqh );
44 }
45 else
46 {
47 ep[1] = complex<double>( -sqh, 0 );
48 ep[2] = complex<double>( 0, nst*Sgn(sqh,p[3]) );
49 }
50 }
51
52 }
53
54 // construct eps-
55 if( nhel <= 0 )
56 {
57 if( pp == 0 )
58 {
59 em[0] = complex<double>( 0, 0 );
60 em[1] = complex<double>( sqh, 0 );
61 em[2] = complex<double>( 0, nst*sqh );
62 em[3] = complex<double>( 0, 0 );
63 }
64 else
65 {
66 em[0] = complex<double>( 0, 0 );
67 em[3] = complex<double>( -pt/pp*sqh, 0 );
68
69 if( pt != 0 )
70 {
71 pzpt = -p[3]/(pp*pt)*sqh;
72 em[1] = complex<double>( -p[1]*pzpt, -nst*p[2]/pt*sqh );
73 em[2] = complex<double>( -p[2]*pzpt, nst*p[1]/pt*sqh );
74 }
75 else
76 {
77 em[1] = complex<double>( sqh, 0 );
78 em[2] = complex<double>( 0, nst*Sgn(sqh,p[3]) );
79 }
80 }
81 }
82
83 // construct eps0
84 if( fabs(nhel) <= 1 )
85 {
86 if( pp == 0 )
87 {
88 e0[0] = complex<double>( 0, 0 );
89 e0[1] = complex<double>( 0, 0 );
90 e0[2] = complex<double>( 0, 0 );
91 e0[3] = complex<double>( 1, 0 );
92 }
93 else
94 {
95 emp = p[0]/(tmass*pp);
96 e0[0] = complex<double>( pp/tmass, 0 );
97 e0[3] = complex<double>( p[3]*emp, 0 );
98
99 if( pt != 0 )
100 {
101 e0[1] = complex<double>( p[1]*emp, 0 );
102 e0[2] = complex<double>( p[2]*emp, 0 );
103 }
104 else
105 {
106 e0[1] = complex<double>( 0, 0 );
107 e0[2] = complex<double>( 0, 0 );
108 }
109 }
110 }
111
112 if( nhel == 2 )
113 {
114 for( j=0; j<4; j++ )
115 {
116 for( i=0; i<4; i++ ) ft[i][j] = ep[i]*ep[j];
117 }
118 }
119 else if( nhel == -2 )
120 {
121 for( j=0; j<4; j++ )
122 {
123 for( i=0; i<4; i++ ) ft[i][j] = em[i]*em[j];
124 }
125 }
126 else if( tmass == 0 )
127 {
128 for( j=0; j<4; j++ )
129 {
130 for( i=0; i<4; i++ ) ft[i][j] = 0;
131 }
132 }
133 else if( tmass != 0 )
134 {
135 if( nhel == 1 )
136 {
137 for( j=0; j<4; j++ )
138 {
139 for( i=0; i<4; i++ ) ft[i][j] = sqh*( ep[i]*e0[j] + e0[i]*ep[j] );
140 }
141 }
142 else if( nhel == 0 )
143 {
144 for( j=0; j<4; j++ )
145 {
146 for( i=0; i<4; i++ ) ft[i][j] = sqs*( ep[i]*em[j] + em[i]*ep[j]
147 + 2.0*e0[i]*e0[j] );
148 }
149 }
150 else if( nhel == -1 )
151 {
152 for( j=0; j<4; j++ )
153 {
154 for( i=0; i<4; i++ ) ft[i][j] = sqh*( em[i]*e0[j] + e0[i]*em[j] );
155 }
156 }
157 else
158 {
159 std::cerr << "Invalid helicity in txxxxx.\n";
160 std::exit(1);
161 }
162 }
163
164 tc[0] = ft[4][0];
165 tc[1] = ft[5][0];
166
167 for( j=0; j<4; j++ )
168 {
169 for( i=0; i<4; i++ ) tc[j*4+i+2] = ft[j][i];
170 }
171}
0172
=== added file 'aloha/template_files/txxxxx.h'
--- aloha/template_files/txxxxx.h 1970-01-01 00:00:00 +0000
+++ aloha/template_files/txxxxx.h 2013-05-16 12:23:29 +0000
@@ -0,0 +1,5 @@
1#ifndef i_guard
2#define i_guard
3#include <complex>
4void txxxxx(double p[4],double tmass,int nhel,int nst,std::complex<double> fi[18]);
5#endif
06
=== modified file 'bin/create_release.py'
--- bin/create_release.py 2013-01-15 18:59:13 +0000
+++ bin/create_release.py 2013-05-16 12:23:29 +0000
@@ -193,7 +193,6 @@
193 path.join(filepath, 'input','mg5_configuration.txt'))193 path.join(filepath, 'input','mg5_configuration.txt'))
194194
195# 2. Create the automatic documentation in the apidoc directory195# 2. Create the automatic documentation in the apidoc directory
196
197try:196try:
198 status1 = subprocess.call(['epydoc', '--html', '-o', 'apidoc',197 status1 = subprocess.call(['epydoc', '--html', '-o', 'apidoc',
199 'madgraph', 'aloha',198 'madgraph', 'aloha',
@@ -211,7 +210,8 @@
211# 3. tar the MadGraph5_vVERSION directory.210# 3. tar the MadGraph5_vVERSION directory.
212211
213logging.info("Create the tar file " + filename)212logging.info("Create the tar file " + filename)
214213# clean all the pyc
214os.system("cd %s;find . -name '*.pyc' -delete" % filepath)
215status2 = subprocess.call(['tar', 'czf', filename, filepath])215status2 = subprocess.call(['tar', 'czf', filename, filepath])
216216
217if status2:217if status2:
218218
=== modified file 'madgraph/VERSION'
--- madgraph/VERSION 2013-04-01 15:47:25 +0000
+++ madgraph/VERSION 2013-05-16 12:23:29 +0000
@@ -1,3 +1,3 @@
1version = 1.5.91version = 1.5.10
2date = 2013-04-012date = 2013-XX-XX
33
44
=== modified file 'madgraph/core/helas_objects.py'
--- madgraph/core/helas_objects.py 2013-03-27 22:59:57 +0000
+++ madgraph/core/helas_objects.py 2013-05-16 12:23:29 +0000
@@ -1044,7 +1044,30 @@
1044 new_wf.set('number', old_wf.get('number'))1044 new_wf.set('number', old_wf.get('number'))
1045 diagram_wavefunctions[old_wf_index] = new_wf1045 diagram_wavefunctions[old_wf_index] = new_wf
1046 except ValueError:1046 except ValueError:
1047 diagram_wavefunctions.append(new_wf)1047 # Make sure that new_wf comes before any wavefunction
1048 # which has it as mother
1049 if len(self['mothers']) == 0:
1050 #insert at the beginning
1051 if diagram_wavefunctions:
1052 wf_nb = diagram_wavefunctions[0].get('number')
1053 for w in diagram_wavefunctions:
1054 w.set('number', w.get('number') + 1)
1055 new_wf.set('number', wf_nb)
1056 diagram_wavefunctions.insert(0, new_wf)
1057 else:
1058 diagram_wavefunctions.insert(0, new_wf)
1059 else:
1060 for i, wf in enumerate(diagram_wavefunctions):
1061 if self in wf.get('mothers'):
1062 # Update wf numbers
1063 new_wf.set('number', wf.get('number'))
1064 for w in diagram_wavefunctions[i:]:
1065 w.set('number', w.get('number') + 1)
1066 # Insert wavefunction
1067 diagram_wavefunctions.insert(i, new_wf)
1068 break
1069 else:
1070 diagram_wavefunctions.append(new_wf)
10481071
1049 # Set new mothers1072 # Set new mothers
1050 new_wf.set('mothers', mothers)1073 new_wf.set('mothers', mothers)
@@ -3697,12 +3720,12 @@
3697 all lorentz structures used by this HelasMatrixElement."""3720 all lorentz structures used by this HelasMatrixElement."""
36983721
3699 out = [(tuple(wa.get('lorentz')), 3722 out = [(tuple(wa.get('lorentz')),
3700 tuple(list(wa.get('conjugate_indices')) + \3723 tuple(([] if wa.get('particle').get('propagator') =='' else \
3701 [] if wa.get('particle').get('propagator') =='' else \3724 ['P%s' % wa.get('particle').get('propagator')]) + \
3702 ['P%s' % wa.get('particle').get('propagator')]),3725 list(wa.get('conjugate_indices'))), \
3703 wa.find_outgoing_number()) for wa in \3726 wa.find_outgoing_number())
3704 self.get_all_wavefunctions()\3727 for wa in self.get_all_wavefunctions() \
3705 if wa.get('interaction_id') != 0] 3728 if wa.get('interaction_id') != 0]
3706 out += [(tuple(wa.get('lorentz')), wa.get('conjugate_indices'),3729 out += [(tuple(wa.get('lorentz')), wa.get('conjugate_indices'),
3707 wa.find_outgoing_number()) for wa in self.get_all_amplitudes() \3730 wa.find_outgoing_number()) for wa in self.get_all_amplitudes() \
3708 if wa.get('interaction_id') != 0]3731 if wa.get('interaction_id') != 0]
37093732
=== modified file 'madgraph/interface/madgraph_interface.py'
--- madgraph/interface/madgraph_interface.py 2013-03-30 04:53:23 +0000
+++ madgraph/interface/madgraph_interface.py 2013-05-16 12:23:29 +0000
@@ -873,6 +873,9 @@
873873
874 if len(args) == 1 and args[0] == 'complex_mass_scheme':874 if len(args) == 1 and args[0] == 'complex_mass_scheme':
875 args.append('True')875 args.append('True')
876
877 if len(args) > 2 and '=' == args[1]:
878 args.pop(1)
876 879
877 if len(args) < 2:880 if len(args) < 2:
878 self.help_set()881 self.help_set()
@@ -3237,6 +3240,13 @@
3237 raise self.ConfigurationError(error_text)3240 raise self.ConfigurationError(error_text)
3238 return 3241 return
3239 3242
3243 if not misc.which('patch'):
3244 error_text = """Not able to find program \'patch\'. Please reload a clean version
3245 or install that program and retry."""
3246 if mode == 'userrequest':
3247 raise self.ConfigurationError(error_text)
3248 return
3249
3240 3250
3241 # read the data present in .autoupdate3251 # read the data present in .autoupdate
3242 data = {}3252 data = {}
32433253
=== modified file 'madgraph/iolibs/export_v4.py'
--- madgraph/iolibs/export_v4.py 2013-03-27 15:33:27 +0000
+++ madgraph/iolibs/export_v4.py 2013-05-16 12:23:29 +0000
@@ -121,7 +121,7 @@
121 '--web'], cwd=self.dir_path)121 '--web'], cwd=self.dir_path)
122 else:122 else:
123 try:123 try:
124 subprocess.call([pjoin('bin', 'internal', 'clean_template')], \124 misc.call([pjoin('bin', 'internal', 'clean_template')], \
125 cwd=self.dir_path)125 cwd=self.dir_path)
126 except Exception, why:126 except Exception, why:
127 raise MadGraph5Error('Failed to clean correctly %s: \n %s' \127 raise MadGraph5Error('Failed to clean correctly %s: \n %s' \
@@ -554,10 +554,16 @@
554 line = "AMP2(%(num)d)=AMP2(%(num)d)+" % \554 line = "AMP2(%(num)d)=AMP2(%(num)d)+" % \
555 {"num": (config_to_diag_dict[config][0] + 1)}555 {"num": (config_to_diag_dict[config][0] + 1)}
556556
557 line += "+".join(["AMP(%(num)d)*dconjg(AMP(%(num)d))" % \557 amp = "+".join(["AMP(%(num)d)" % {"num": a.get('number')} for a in \
558 {"num": a.get('number')} for a in \
559 sum([diagrams[idiag].get('amplitudes') for \558 sum([diagrams[idiag].get('amplitudes') for \
560 idiag in config_to_diag_dict[config]], [])])559 idiag in config_to_diag_dict[config]], [])])
560
561 # Not using \sum |M|^2 anymore since this creates troubles
562 # when ckm is not diagonal due to the JIM mechanism.
563 if '+' in amp:
564 line += "(%s)*dconjg(%s)" % (amp, amp)
565 else:
566 line += "%s*dconjg(%s)" % (amp, amp)
561 ret_lines.append(line)567 ret_lines.append(line)
562 else:568 else:
563 for idiag, diag in enumerate(matrix_element.get('diagrams')):569 for idiag, diag in enumerate(matrix_element.get('diagrams')):
@@ -3160,7 +3166,13 @@
3160 self.p_to_f.parse(param.expr)))3166 self.p_to_f.parse(param.expr)))
31613167
3162 fsock.write_comments("\nDefinition of the EW coupling used in the write out of aqed\n")3168 fsock.write_comments("\nDefinition of the EW coupling used in the write out of aqed\n")
3163 fsock.writelines(""" gal(1) = 1d03169 if ('aEWM1',) in self.model['parameters']:
3170 fsock.writelines(""" gal(1) = 3.5449077018110318 / DSQRT(aEWM1)
3171 gal(2) = 1d0
3172 """)
3173 else:
3174 logger.warning('$RED aEWM1 not define in MODEL. AQED will not be written correcty in LHE FILE')
3175 fsock.writelines(""" gal(1) = 1d0
3164 gal(2) = 1d03176 gal(2) = 1d0
3165 """)3177 """)
31663178
31673179
=== modified file 'madgraph/iolibs/template_files/cpp_hel_amps_cc.inc'
--- madgraph/iolibs/template_files/cpp_hel_amps_cc.inc 2011-03-27 17:13:28 +0000
+++ madgraph/iolibs/template_files/cpp_hel_amps_cc.inc 2013-05-16 12:23:29 +0000
@@ -4,6 +4,11 @@
4//==========================================================================4//==========================================================================
55
6#include "HelAmps_%(model_name)s.h"6#include "HelAmps_%(model_name)s.h"
7#include <complex>
8#include <cmath>
9#include <iostream>
10#include <cstdlib>
11using namespace std;
712
8namespace %(namespace)s_%(model_name)s {13namespace %(namespace)s_%(model_name)s {
914
1015
=== modified file 'madgraph/various/cluster.py'
--- madgraph/various/cluster.py 2013-03-30 19:28:32 +0000
+++ madgraph/various/cluster.py 2013-05-16 12:23:29 +0000
@@ -559,6 +559,9 @@
559 stderr = '/dev/null'559 stderr = '/dev/null'
560 elif stderr == -2: # -2 is subprocess.STDOUT560 elif stderr == -2: # -2 is subprocess.STDOUT
561 stderr = stdout561 stderr = stdout
562 else:
563 stderr = self.def_get_path(stderr)
564
562 if log is None:565 if log is None:
563 log = '/dev/null'566 log = '/dev/null'
564 else:567 else:
565568
=== modified file 'madgraph/various/sum_html.py'
--- madgraph/various/sum_html.py 2012-10-03 15:25:35 +0000
+++ madgraph/various/sum_html.py 2013-05-16 12:23:29 +0000
@@ -60,8 +60,9 @@
60 try:60 try:
61 return float(d)61 return float(d)
62 except ValueError:62 except ValueError:
63 if re.search(r'''[+-]?[\d.]*-\d*''', d):63 m=re.search(r'''([+-]?[\d.]*)([+-]\d*)''', d)
64 return 0.064 if m:
65 return float(m.group(1))*10**(float(m.group(2)))
65 return 66 return
66 67
67 data = [secure_float(d) for d in line.split()]68 data = [secure_float(d) for d in line.split()]
6869
=== modified file 'models/import_ufo.py'
--- models/import_ufo.py 2013-03-18 23:03:14 +0000
+++ models/import_ufo.py 2013-05-16 12:23:29 +0000
@@ -1221,39 +1221,53 @@
1221 if simplify:1221 if simplify:
1222 # check if the parameters is still usefull:1222 # check if the parameters is still usefull:
1223 re_str = '|'.join(special_parameters)1223 re_str = '|'.join(special_parameters)
1224 re_pat = re.compile(r'''\b(%s)\b''' % re_str)1224 if len(re_str) > 25000: # size limit on mac
1225 used = set()1225 split = len(special_parameters) // 2
1226 # check in coupling1226 re_str = ['|'.join(special_parameters[:split]),
1227 for name, coupling_list in self['couplings'].items():1227 '|'.join(special_parameters[split:])]
1228 for coupling in coupling_list:1228 else:
1229 for use in re_pat.findall(coupling.expr):1229 re_str = [ re_str ]
1230 used.add(use)1230 for expr in re_str:
1231 re_pat = re.compile(r'''\b(%s)\b''' % expr)
1232 used = set()
1233 # check in coupling
1234 for name, coupling_list in self['couplings'].items():
1235 for coupling in coupling_list:
1236 for use in re_pat.findall(coupling.expr):
1237 used.add(use)
1231 else:1238 else:
1232 used = set([i for i in special_parameters if i])1239 used = set([i for i in special_parameters if i])
1233 1240
1234 1241
1235 # simplify the regular expression1242 # simplify the regular expression
1236 re_str = '|'.join([param for param in special_parameters 1243 re_str = '|'.join([param for param in special_parameters if param not in used])
1237 if param not in used])1244 if len(re_str) > 25000: # size limit on mac
1238 re_pat = re.compile(r'''\b(%s)\b''' % re_str) 1245 split = len(special_parameters) // 2
1239 param_info = {}1246 re_str = ['|'.join(special_parameters[:split]),
1240 # check in parameters1247 '|'.join(special_parameters[split:])]
1241 for dep, param_list in self['parameters'].items():1248 else:
1242 for tag, parameter in enumerate(param_list):1249 re_str = [ re_str ]
1243 # update information concerning zero/one parameters1250 for expr in re_str:
1244 if parameter.name in special_parameters:1251 re_pat = re.compile(r'''\b(%s)\b''' % expr)
1245 param_info[parameter.name]= {'dep': dep, 'tag': tag, 1252
1246 'obj': parameter}1253 param_info = {}
1247 continue1254 # check in parameters
1248 1255 for dep, param_list in self['parameters'].items():
1249 # Bypass all external parameter1256 for tag, parameter in enumerate(param_list):
1250 if isinstance(parameter, base_objects.ParamCardVariable):1257 # update information concerning zero/one parameters
1251 continue1258 if parameter.name in special_parameters:
12521259 param_info[parameter.name]= {'dep': dep, 'tag': tag,
1253 # check the presence of zero/one parameter1260 'obj': parameter}
1254 if simplify:1261 continue
1255 for use in re_pat.findall(parameter.expr):1262
1256 used.add(use)1263 # Bypass all external parameter
1264 if isinstance(parameter, base_objects.ParamCardVariable):
1265 continue
1266
1267 # check the presence of zero/one parameter
1268 if simplify:
1269 for use in re_pat.findall(parameter.expr):
1270 used.add(use)
1257 1271
1258 # modify the object for those which are still used1272 # modify the object for those which are still used
1259 for param in used:1273 for param in used:
12601274
=== modified file 'tests/unit_tests/iolibs/test_export_v4.py'
--- tests/unit_tests/iolibs/test_export_v4.py 2013-03-19 08:18:53 +0000
+++ tests/unit_tests/iolibs/test_export_v4.py 2013-05-16 12:23:29 +0000
@@ -5277,7 +5277,7 @@
52775277
5278 self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\5278 self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\
5279 get_matrix_element_calls(matrix_element),5279 get_matrix_element_calls(matrix_element),
5280 """CALL VXXXXX(P(0,1),ZERO,NHEL(1),-1*IC(1),W(1,1))5280 """CALL VXXXXX(P(0,1),ZERO,NHEL(1),-1*IC(1),W(1,1))
5281CALL IXXXXX(P(0,2),BMASS,NHEL(2),+1*IC(2),W(1,2))5281CALL IXXXXX(P(0,2),BMASS,NHEL(2),+1*IC(2),W(1,2))
5282CALL OXXXXX(P(0,3),TMASS,NHEL(3),+1*IC(3),W(1,3))5282CALL OXXXXX(P(0,3),TMASS,NHEL(3),+1*IC(3),W(1,3))
5283CALL OXXXXX(P(0,4),TMASS,NHEL(4),+1*IC(4),W(1,4))5283CALL OXXXXX(P(0,4),TMASS,NHEL(4),+1*IC(4),W(1,4))
@@ -5290,26 +5290,26 @@
5290CALL FSIXXX(W(1,5),W(1,2),GT1GOM,MGO,WGO,W(1,7))5290CALL FSIXXX(W(1,5),W(1,2),GT1GOM,MGO,WGO,W(1,7))
5291# Amplitude(s) for diagram number 15291# Amplitude(s) for diagram number 1
5292CALL IOSXXX(W(1,7),W(1,4),W(1,9),GT1GOP,AMP(1))5292CALL IOSXXX(W(1,7),W(1,4),W(1,9),GT1GOP,AMP(1))
5293CALL IXXXXX(P(0,7),MX1,NHEL(7),-1*IC(7),W(1,7))5293CALL OXXXXX(P(0,5),TMASS,NHEL(5),+1*IC(5),W(1,7))
5294CALL HIOCXX(W(1,7),W(1,4),GB1X1P,MB1,WB1,W(1,10))5294CALL IXXXXX(P(0,7),MX1,NHEL(7),-1*IC(7),W(1,10))
5295CALL FSIXXX(W(1,8),W(1,2),GT1X1M,MX1,WX1,W(1,11))5295CALL HIOCXX(W(1,10),W(1,4),GB1X1P,MB1,WB1,W(1,11))
5296CALL OXXXXX(P(0,5),TMASS,NHEL(5),+1*IC(5),W(1,12))5296CALL FSIXXX(W(1,8),W(1,2),GT1X1M,MX1,WX1,W(1,12))
5297# Amplitude(s) for diagram number 25297# Amplitude(s) for diagram number 2
5298CALL IOSCXX(W(1,11),W(1,12),W(1,10),GB1X1M,AMP(2))5298CALL IOSCXX(W(1,12),W(1,7),W(1,11),GB1X1M,AMP(2))
5299CALL OXXXXX(P(0,2),BMASS,NHEL(2),-1*IC(2),W(1,11))5299CALL OXXXXX(P(0,2),BMASS,NHEL(2),-1*IC(2),W(1,12))
5300CALL FVOCXX(W(1,11),W(1,1),GG,BMASS,ZERO,W(1,13))5300CALL FVOCXX(W(1,12),W(1,1),GG,BMASS,ZERO,W(1,13))
5301CALL FSOCXX(W(1,13),W(1,10),GB1GOM,MGO,WGO,W(1,11))5301CALL FSOCXX(W(1,13),W(1,11),GB1GOM,MGO,WGO,W(1,12))
5302# Amplitude(s) for diagram number 35302# Amplitude(s) for diagram number 3
5303CALL IOSXXX(W(1,5),W(1,11),W(1,2),GT1GOM,AMP(3))5303CALL IOSXXX(W(1,5),W(1,12),W(1,2),GT1GOM,AMP(3))
5304CALL HIOCXX(W(1,7),W(1,3),GB1X1P,MB1,WB1,W(1,11))5304CALL HIOCXX(W(1,10),W(1,3),GB1X1P,MB1,WB1,W(1,12))
5305CALL HIOXXX(W(1,6),W(1,4),GT1N1P,MT1,WT1,W(1,7))5305CALL HIOXXX(W(1,6),W(1,4),GT1N1P,MT1,WT1,W(1,10))
5306CALL FSOCXX(W(1,13),W(1,11),GB1GOM,MGO,WGO,W(1,6))5306CALL FSOCXX(W(1,13),W(1,12),GB1GOM,MGO,WGO,W(1,6))
5307# Amplitude(s) for diagram number 45307# Amplitude(s) for diagram number 4
5308CALL IOSXXX(W(1,5),W(1,6),W(1,7),GT1GOM,AMP(4))5308CALL IOSXXX(W(1,5),W(1,6),W(1,10),GT1GOM,AMP(4))
5309CALL FSIXXX(W(1,8),W(1,7),GT1X1M,MX1,WX1,W(1,6))5309CALL FSIXXX(W(1,8),W(1,10),GT1X1M,MX1,WX1,W(1,6))
5310# Amplitude(s) for diagram number 55310# Amplitude(s) for diagram number 5
5311CALL IOSCXX(W(1,6),W(1,12),W(1,11),GB1X1M,AMP(5))5311CALL IOSCXX(W(1,6),W(1,7),W(1,12),GB1X1M,AMP(5))
5312CALL FSIXXX(W(1,5),W(1,7),GT1GOM,MGO,WGO,W(1,6))5312CALL FSIXXX(W(1,5),W(1,10),GT1GOM,MGO,WGO,W(1,6))
5313# Amplitude(s) for diagram number 65313# Amplitude(s) for diagram number 6
5314CALL IOSXXX(W(1,6),W(1,3),W(1,9),GT1GOP,AMP(6))""".split('\n'))5314CALL IOSXXX(W(1,6),W(1,3),W(1,9),GT1GOP,AMP(6))""".split('\n'))
5315 5315
@@ -5439,7 +5439,7 @@
5439 # account)5439 # account)
5440 self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\5440 self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\
5441 get_matrix_element_calls(matrix_element),5441 get_matrix_element_calls(matrix_element),
5442 """CALL OXXXXX(P(0,1),me,NHEL(1),-1*IC(1),W(1,1))5442 """CALL OXXXXX(P(0,1),me,NHEL(1),-1*IC(1),W(1,1))
5443CALL IXXXXX(P(0,2),me,NHEL(2),+1*IC(2),W(1,2))5443CALL IXXXXX(P(0,2),me,NHEL(2),+1*IC(2),W(1,2))
5444CALL SXXXXX(P(0,3),+1*IC(3),W(1,3))5444CALL SXXXXX(P(0,3),+1*IC(3),W(1,3))
5445CALL SXXXXX(P(0,4),+1*IC(4),W(1,4))5445CALL SXXXXX(P(0,4),+1*IC(4),W(1,4))
@@ -5450,25 +5450,25 @@
5450CALL HIOXXX(W(1,5),W(1,7),MGVX494,Msl2,Wsl2,W(1,9))5450CALL HIOXXX(W(1,5),W(1,7),MGVX494,Msl2,Wsl2,W(1,9))
5451# Amplitude(s) for diagram number 15451# Amplitude(s) for diagram number 1
5452CALL IOSXXX(W(1,8),W(1,6),W(1,9),MGVX350,AMP(1))5452CALL IOSXXX(W(1,8),W(1,6),W(1,9),MGVX350,AMP(1))
5453CALL IXXXXX(P(0,1),me,NHEL(1),+1*IC(1),W(1,9))5453CALL OXXXXX(P(0,2),me,NHEL(2),-1*IC(2),W(1,9))
5454CALL FSICXX(W(1,9),W(1,3),MGVX350,Mneu1,Wneu1,W(1,10))5454CALL IXXXXX(P(0,1),me,NHEL(1),+1*IC(1),W(1,10))
5455CALL HIOXXX(W(1,10),W(1,6),MGVX350,Msl2,Wsl2,W(1,9))5455CALL FSICXX(W(1,10),W(1,3),MGVX350,Mneu1,Wneu1,W(1,11))
5456CALL OXXXXX(P(0,2),me,NHEL(2),-1*IC(2),W(1,10))5456CALL HIOXXX(W(1,11),W(1,6),MGVX350,Msl2,Wsl2,W(1,10))
5457CALL FSOCXX(W(1,10),W(1,4),MGVX494,Mneu1,Wneu1,W(1,11))5457CALL FSOCXX(W(1,9),W(1,4),MGVX494,Mneu1,Wneu1,W(1,11))
5458# Amplitude(s) for diagram number 25458# Amplitude(s) for diagram number 2
5459CALL IOSXXX(W(1,5),W(1,11),W(1,9),MGVX494,AMP(2))5459CALL IOSXXX(W(1,5),W(1,11),W(1,10),MGVX494,AMP(2))
5460CALL FSIXXX(W(1,5),W(1,4),MGVX494,Mneu1,Wneu1,W(1,10))5460CALL FSIXXX(W(1,5),W(1,4),MGVX494,Mneu1,Wneu1,W(1,9))
5461CALL HIOXXX(W(1,2),W(1,7),MGVX494,Msl2,Wsl2,W(1,12))5461CALL HIOXXX(W(1,2),W(1,7),MGVX494,Msl2,Wsl2,W(1,12))
5462# Amplitude(s) for diagram number 35462# Amplitude(s) for diagram number 3
5463CALL IOSXXX(W(1,10),W(1,6),W(1,12),MGVX350,AMP(3))5463CALL IOSXXX(W(1,9),W(1,6),W(1,12),MGVX350,AMP(3))
5464CALL OXXXXX(P(0,5),me,NHEL(5),+1*IC(5),W(1,12))5464CALL OXXXXX(P(0,5),me,NHEL(5),+1*IC(5),W(1,12))
5465CALL FSOCXX(W(1,12),W(1,4),MGVX494,Mneu1,Wneu1,W(1,7))5465CALL FSOCXX(W(1,12),W(1,4),MGVX494,Mneu1,Wneu1,W(1,7))
5466# Amplitude(s) for diagram number 45466# Amplitude(s) for diagram number 4
5467CALL IOSXXX(W(1,2),W(1,7),W(1,9),MGVX494,AMP(4))5467CALL IOSXXX(W(1,2),W(1,7),W(1,10),MGVX494,AMP(4))
5468CALL FSOXXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,9))5468CALL FSOXXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,10))
5469CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))5469CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))
5470# Amplitude(s) for diagram number 55470# Amplitude(s) for diagram number 5
5471CALL IOSXXX(W(1,5),W(1,9),W(1,6),MGVX494,AMP(5))5471CALL IOSXXX(W(1,5),W(1,10),W(1,6),MGVX494,AMP(5))
5472CALL IXXXXX(P(0,6),me,NHEL(6),-1*IC(6),W(1,6))5472CALL IXXXXX(P(0,6),me,NHEL(6),-1*IC(6),W(1,6))
5473CALL FSICXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,8))5473CALL FSICXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,8))
5474CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))5474CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))
@@ -5476,9 +5476,9 @@
5476CALL IOSXXX(W(1,5),W(1,11),W(1,6),MGVX494,AMP(6))5476CALL IOSXXX(W(1,5),W(1,11),W(1,6),MGVX494,AMP(6))
5477# Amplitude(s) for diagram number 75477# Amplitude(s) for diagram number 7
5478CALL IOSXXX(W(1,2),W(1,7),W(1,6),MGVX494,AMP(7))5478CALL IOSXXX(W(1,2),W(1,7),W(1,6),MGVX494,AMP(7))
5479CALL HIOXXX(W(1,10),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))5479CALL HIOXXX(W(1,9),W(1,1),MGVX350,Msl2,Wsl2,W(1,6))
5480# Amplitude(s) for diagram number 85480# Amplitude(s) for diagram number 8
5481CALL IOSXXX(W(1,2),W(1,9),W(1,6),MGVX494,AMP(8))""".split('\n'))5481CALL IOSXXX(W(1,2),W(1,10),W(1,6),MGVX494,AMP(8))""".split('\n'))
54825482
5483 # Test find_outgoing_number5483 # Test find_outgoing_number
5484 goal_numbers = [1, 2, 3, 2, 3, 1, 2, 3, 1, 1, 3, 2, 3, 3]5484 goal_numbers = [1, 2, 3, 2, 3, 1, 2, 3, 1, 1, 3, 2, 3, 3]
@@ -8562,13 +8562,13 @@
8562CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3))8562CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3))
8563# Amplitude(s) for diagram number 18563# Amplitude(s) for diagram number 1
8564CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1))8564CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1))
8565CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3))
8566CALL FSICXX(W(1,3),W(1,4),MGVX350,Mneu1,Wneu1,W(1,7))
8565CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3))8567CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3))
8566CALL FSOXXX(W(1,3),W(1,6),MGVX350,Mneu1,Wneu1,W(1,7))8568CALL FSOXXX(W(1,3),W(1,6),MGVX350,Mneu1,Wneu1,W(1,4))
8567CALL HIOXXX(W(1,1),W(1,7),MGVX494,Msl2,Wsl2,W(1,3))8569CALL HIOXXX(W(1,1),W(1,4),MGVX494,Msl2,Wsl2,W(1,3))
8568CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,7))
8569CALL FSICXX(W(1,7),W(1,4),MGVX350,Mneu1,Wneu1,W(1,1))
8570# Amplitude(s) for diagram number 28570# Amplitude(s) for diagram number 2
8571CALL IOSXXX(W(1,1),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n'))8571CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n'))
85728572
8573 exporter = export_v4.ProcessExporterFortranME()8573 exporter = export_v4.ProcessExporterFortranME()
85748574
@@ -8615,13 +8615,13 @@
8615CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3))8615CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3))
8616# Amplitude(s) for diagram number 18616# Amplitude(s) for diagram number 1
8617CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1))8617CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1))
8618CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3))
8619CALL FSICXX(W(1,3),W(1,4),MGVX350,Mneu1,Wneu1,W(1,7))
8618CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3))8620CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3))
8619CALL FSOCXX(W(1,3),W(1,6),MGVX494,Mneu1,Wneu1,W(1,7))8621CALL FSOCXX(W(1,3),W(1,6),MGVX494,Mneu1,Wneu1,W(1,4))
8620CALL HIOXXX(W(1,1),W(1,7),MGVX494,Msl2,Wsl2,W(1,3))8622CALL HIOXXX(W(1,1),W(1,4),MGVX494,Msl2,Wsl2,W(1,3))
8621CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,7))
8622CALL FSICXX(W(1,7),W(1,4),MGVX350,Mneu1,Wneu1,W(1,1))
8623# Amplitude(s) for diagram number 28623# Amplitude(s) for diagram number 2
8624CALL IOSXXX(W(1,1),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n'))8624CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n'))
86258625
8626 self.assertEqual(exporter.get_JAMP_lines(me)[0],8626 self.assertEqual(exporter.get_JAMP_lines(me)[0],
8627 "JAMP(1)=+AMP(1)-AMP(2)")8627 "JAMP(1)=+AMP(1)-AMP(2)")
@@ -8662,7 +8662,7 @@
86628662
8663 # This has been checked against v48663 # This has been checked against v4
8664 self.assertEqual(myfortranmodel.get_matrix_element_calls(me),8664 self.assertEqual(myfortranmodel.get_matrix_element_calls(me),
8665 """CALL IXXXXX(P(0,1),zero,NHEL(1),+1*IC(1),W(1,1))8665 """CALL IXXXXX(P(0,1),zero,NHEL(1),+1*IC(1),W(1,1))
8666CALL OXXXXX(P(0,2),zero,NHEL(2),-1*IC(2),W(1,2))8666CALL OXXXXX(P(0,2),zero,NHEL(2),-1*IC(2),W(1,2))
8667CALL OXXXXX(P(0,3),zero,NHEL(3),+1*IC(3),W(1,3))8667CALL OXXXXX(P(0,3),zero,NHEL(3),+1*IC(3),W(1,3))
8668CALL SXXXXX(P(0,4),+1*IC(4),W(1,4))8668CALL SXXXXX(P(0,4),+1*IC(4),W(1,4))
@@ -8688,24 +8688,24 @@
8688CALL IOSXXX(W(1,11),W(1,2),W(1,3),MGVX350,AMP(3))8688CALL IOSXXX(W(1,11),W(1,2),W(1,3),MGVX350,AMP(3))
8689# Amplitude(s) for diagram number 48689# Amplitude(s) for diagram number 4
8690CALL IOSXXX(W(1,12),W(1,2),W(1,3),MGVX350,AMP(4))8690CALL IOSXXX(W(1,12),W(1,2),W(1,3),MGVX350,AMP(4))
8691CALL OXXXXX(P(0,6),zero,NHEL(6),+1*IC(6),W(1,3))8691CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3))
8692CALL FVOXXX(W(1,3),W(1,9),MGVX12,zero,zero,W(1,12))8692CALL FVICXX(W(1,3),W(1,5),MGVX12,zero,zero,W(1,12))
8693CALL FSOXXX(W(1,12),W(1,8),MGVX350,Mneu1,Wneu1,W(1,9))8693CALL FSICXX(W(1,12),W(1,4),MGVX350,Mneu1,Wneu1,W(1,5))
8694CALL OXXXXX(P(0,6),zero,NHEL(6),+1*IC(6),W(1,12))
8695CALL FVOXXX(W(1,12),W(1,9),MGVX12,zero,zero,W(1,4))
8696CALL FSOXXX(W(1,4),W(1,8),MGVX350,Mneu1,Wneu1,W(1,9))
8697CALL HIOXXX(W(1,1),W(1,9),MGVX494,Msl2,Wsl2,W(1,4))
8698# Amplitude(s) for diagram number 5
8699CALL IOSXXX(W(1,5),W(1,2),W(1,4),MGVX350,AMP(5))
8700CALL FSOXXX(W(1,12),W(1,7),MGVX350,Mneu1,Wneu1,W(1,9))
8694CALL HIOXXX(W(1,1),W(1,9),MGVX494,Msl2,Wsl2,W(1,12))8701CALL HIOXXX(W(1,1),W(1,9),MGVX494,Msl2,Wsl2,W(1,12))
8695CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,9))
8696CALL FVICXX(W(1,9),W(1,5),MGVX12,zero,zero,W(1,8))
8697CALL FSICXX(W(1,8),W(1,4),MGVX350,Mneu1,Wneu1,W(1,5))
8698# Amplitude(s) for diagram number 5
8699CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(5))
8700CALL FSOXXX(W(1,3),W(1,7),MGVX350,Mneu1,Wneu1,W(1,8))
8701CALL HIOXXX(W(1,1),W(1,8),MGVX494,Msl2,Wsl2,W(1,3))
8702# Amplitude(s) for diagram number 68702# Amplitude(s) for diagram number 6
8703CALL IOSXXX(W(1,5),W(1,2),W(1,3),MGVX350,AMP(6))8703CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(6))
8704CALL FSICXX(W(1,9),W(1,10),MGVX350,Mneu1,Wneu1,W(1,5))8704CALL FSICXX(W(1,3),W(1,10),MGVX350,Mneu1,Wneu1,W(1,5))
8705# Amplitude(s) for diagram number 78705# Amplitude(s) for diagram number 7
8706CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(7))8706CALL IOSXXX(W(1,5),W(1,2),W(1,4),MGVX350,AMP(7))
8707# Amplitude(s) for diagram number 88707# Amplitude(s) for diagram number 8
8708CALL IOSXXX(W(1,5),W(1,2),W(1,3),MGVX350,AMP(8))""".split('\n'))8708CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(8))""".split('\n'))
87098709
8710 # Test amp2 lines 8710 # Test amp2 lines
8711 amp2_lines = \8711 amp2_lines = \

Subscribers

People subscribed via source and target branches