Merge lp:~maddevelopers/mg5amcnlo/1.5.10 into lp:~madteam/mg5amcnlo/trunk
- 1.5.10
- Merge into trunk
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 | ||||||||||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Valentin Hirschi | Approve | ||
Olivier Mattelaer | Approve | ||
Review via email: mp+163092@code.launchpad.net |
Commit message
Description of the change
- 256. By Olivier Mattelaer
-
patch from Luran: Avoid crash when channel contributes less than 1e-100.
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_
I looked superficially at the rest and it looks fine.
Cheers,
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_
>
> I looked superficially at the rest and it looks fine.
>
> Cheers,
>
>
> --
> https:/
> You proposed lp:~maddevelopers/madgraph5/1.5.10 for merging.
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_
> 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:/
> > You proposed lp:~maddevelopers/madgraph5/1.5.10 for merging.
- 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
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 | 77 | ./bin/compile | 77 | ./bin/compile |
6 | 78 | is executed from the ./madevent directory. As input to specify the | 78 | is executed from the ./madevent directory. As input to specify the |
7 | 79 | decays, files with the names | 79 | decays, files with the names |
9 | 80 | input_x.in | 80 | decay_x.in |
10 | 81 | should be put in the ./DECAY directory. (Where x is a number between 1 | 81 | should be put in the ./DECAY directory. (Where x is a number between 1 |
11 | 82 | and 20.) These files are read automatically, and one file should be | 82 | and 20.) These files are read automatically, and one file should be |
12 | 83 | put for each decaying particle. (E.g. for ttbar events 2 files are | 83 | put for each decaying particle. (E.g. for ttbar events 2 files are |
13 | 84 | 84 | ||
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 | 62 | enddo | 62 | enddo |
19 | 63 | 63 | ||
20 | 64 | c Reuse previous result, if possible | 64 | c Reuse previous result, if possible |
24 | 65 | if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.-99d9) then | 65 | if (ireuse.gt.0) then |
25 | 66 | pdg2pdf=pdflast(iporg,ireuse) | 66 | if (pdflast(iporg,ireuse).ne.-99d9) then |
26 | 67 | return | 67 | pdg2pdf=pdflast(iporg,ireuse) |
27 | 68 | return | ||
28 | 69 | endif | ||
29 | 68 | endif | 70 | endif |
30 | 69 | 71 | ||
31 | 70 | c Bjorken x and/or facrorization scale and/or PDF set are not | 72 | c Bjorken x and/or facrorization scale and/or PDF set are not |
32 | 71 | 73 | ||
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 | 1 | Update notes for MadGraph 5 (in reverse time order) | 1 | Update notes for MadGraph 5 (in reverse time order) |
38 | 2 | 2 | ||
39 | 3 | 1.5.10 (xx/05/13) OM: Fix Bug #1170417: fix crash for conjugate routine in presence of | ||
40 | 4 | massless propagator. (introduce in 1.5.9) | ||
41 | 5 | OM: Fix question #226810: checking that patch program exists before | ||
42 | 6 | trying to update MG5 code. | ||
43 | 7 | OM: Fix Bug #1171049: an error in the order of wavefunctions | ||
44 | 8 | making the code to crash (introduce in 1.5.7) | ||
45 | 9 | OM: Allow to use an additional syntax for the set command. | ||
46 | 10 | set gauge = Feynman is now valid. (Was not valid before due to the '=') | ||
47 | 11 | OM: Fix By Arian Abrahantes. Fix SGE cluster which was not working when | ||
48 | 12 | running full simulation (PGS/Delphes). | ||
49 | 13 | OM: adding txxxxx.cc (Thanks to Aurelijus Rinkevicius for having | ||
50 | 14 | written the routine) | ||
51 | 15 | OM: Fix Bug #1177442. This crash occurs only for very large model. | ||
52 | 16 | None of the model shipped with MG5 are impacted. | ||
53 | 17 | OM: Fix Question #228315. On some filesystem, some of the executable | ||
54 | 18 | loose the permission to be executable. Recover those errors | ||
55 | 19 | automatically. | ||
56 | 20 | OM: Modify the diagram enhancement technique. When more diagram have | ||
57 | 21 | the same propagator structure we still combine them but we now include | ||
58 | 22 | the interference term in the enhancement technique for those diagrams. | ||
59 | 23 | This fix a crash for some multi-jet process in presence of non diagonal | ||
60 | 24 | ckm matrices. | ||
61 | 25 | |||
62 | 3 | 1.5.9 (01/04/13) JA: Fix bug in identification of symmetric diagrams, which could | 26 | 1.5.9 (01/04/13) JA: Fix bug in identification of symmetric diagrams, which could |
63 | 4 | give the wrong propagators included in event files for certain | 27 | give the wrong propagators included in event files for certain |
64 | 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 |
65 | 6 | 29 | ||
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 | 724 | # reorganize the data (in order to use optimization for a given lorentz | 724 | # reorganize the data (in order to use optimization for a given lorentz |
71 | 725 | #structure | 725 | #structure |
72 | 726 | request = {} | 726 | request = {} |
73 | 727 | |||
74 | 727 | for list_l_name, tag, outgoing in data: | 728 | for list_l_name, tag, outgoing in data: |
75 | 728 | #allow tag to have integer for retro-compatibility | 729 | #allow tag to have integer for retro-compatibility |
76 | 730 | all_tag = tag[:] | ||
77 | 729 | conjugate = [i for i in tag if isinstance(i, int)] | 731 | conjugate = [i for i in tag if isinstance(i, int)] |
81 | 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')] |
82 | 731 | tag = tag + ['C%s'%i for i in conjugate] | 733 | tag = tag + ['C%s'%i for i in conjugate] |
83 | 732 | # | 734 | tag = tag + [i for i in all_tag if isinstance(i, str) and i.startswith('P')] |
84 | 733 | 735 | ||
85 | 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')]) |
86 | 735 | loop = any((t.startswith('L') for t in tag)) | 737 | loop = any((t.startswith('L') for t in tag)) |
87 | @@ -784,8 +786,10 @@ | |||
88 | 784 | continue | 786 | continue |
89 | 785 | #allow tag to have integer for retrocompatibility | 787 | #allow tag to have integer for retrocompatibility |
90 | 786 | conjugate = [i for i in tag if isinstance(i, int)] | 788 | conjugate = [i for i in tag if isinstance(i, int)] |
92 | 787 | tag = [i for i in tag if isinstance(i, str)] | 789 | all_tag = tag[:] |
93 | 790 | tag = [i for i in tag if isinstance(i, str) and not i.startswith('P')] | ||
94 | 788 | tag = tag + ['C%s'%i for i in conjugate] | 791 | tag = tag + ['C%s'%i for i in conjugate] |
95 | 792 | tag = tag + [i for i in all_tag if isinstance(i, str) and i.startswith('P')] | ||
96 | 789 | 793 | ||
97 | 790 | if not self.explicit_combine: | 794 | if not self.explicit_combine: |
98 | 791 | lorentzname = list_l_name[0] | 795 | lorentzname = list_l_name[0] |
99 | 792 | 796 | ||
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 | 1 | #include <complex> | ||
105 | 2 | #include <cmath> | ||
106 | 3 | #include "aloha_aux_functions.h" | ||
107 | 4 | using namespace std; | ||
108 | 5 | #include <iostream> | ||
109 | 6 | #include <cstdlib> | ||
110 | 7 | |||
111 | 8 | void txxxxx(double p[4], double tmass, int nhel, int nst, complex<double> tc[18]) | ||
112 | 9 | { | ||
113 | 10 | complex<double> ft[6][4], ep[4], em[4], e0[4]; | ||
114 | 11 | double pt, pt2, pp, pzpt, emp, sqh, sqs; | ||
115 | 12 | int i, j; | ||
116 | 13 | |||
117 | 14 | sqh = pow( 0.5, 0.5 ); | ||
118 | 15 | sqs = pow( 0.5/3, 0.5 ); | ||
119 | 16 | |||
120 | 17 | pt2 = p[1]*p[1] + p[2]*p[2]; | ||
121 | 18 | pp = min( p[0], pow( pt2+p[3]*p[3], 0.5 ) ); | ||
122 | 19 | pt = min( pp, pow( pt2, 0.5 ) ); | ||
123 | 20 | |||
124 | 21 | ft[4][0] = complex<double>( p[0]*nst, p[3]*nst ); | ||
125 | 22 | ft[5][0] = complex<double>( p[1]*nst, p[2]*nst ); | ||
126 | 23 | |||
127 | 24 | // construct eps+ | ||
128 | 25 | if( nhel >= 0 ) | ||
129 | 26 | { | ||
130 | 27 | if( pp == 0 ) | ||
131 | 28 | { | ||
132 | 29 | ep[0] = complex<double>( 0, 0 ); | ||
133 | 30 | ep[1] = complex<double>( -sqh, 0 ); | ||
134 | 31 | ep[2] = complex<double>( 0, nst*sqh ); | ||
135 | 32 | ep[3] = complex<double>( 0, 0 ); | ||
136 | 33 | } | ||
137 | 34 | else | ||
138 | 35 | { | ||
139 | 36 | ep[0] = complex<double>( 0, 0 ); | ||
140 | 37 | ep[3] = complex<double>( pt/pp*sqh, 0 ); | ||
141 | 38 | |||
142 | 39 | if( pt != 0 ) | ||
143 | 40 | { | ||
144 | 41 | pzpt = p[3]/(pp*pt)*sqh; | ||
145 | 42 | ep[1] = complex<double>( -p[1]*pzpt, -nst*p[2]/pt*sqh ); | ||
146 | 43 | ep[2] = complex<double>( -p[2]*pzpt, nst*p[1]/pt*sqh ); | ||
147 | 44 | } | ||
148 | 45 | else | ||
149 | 46 | { | ||
150 | 47 | ep[1] = complex<double>( -sqh, 0 ); | ||
151 | 48 | ep[2] = complex<double>( 0, nst*Sgn(sqh,p[3]) ); | ||
152 | 49 | } | ||
153 | 50 | } | ||
154 | 51 | |||
155 | 52 | } | ||
156 | 53 | |||
157 | 54 | // construct eps- | ||
158 | 55 | if( nhel <= 0 ) | ||
159 | 56 | { | ||
160 | 57 | if( pp == 0 ) | ||
161 | 58 | { | ||
162 | 59 | em[0] = complex<double>( 0, 0 ); | ||
163 | 60 | em[1] = complex<double>( sqh, 0 ); | ||
164 | 61 | em[2] = complex<double>( 0, nst*sqh ); | ||
165 | 62 | em[3] = complex<double>( 0, 0 ); | ||
166 | 63 | } | ||
167 | 64 | else | ||
168 | 65 | { | ||
169 | 66 | em[0] = complex<double>( 0, 0 ); | ||
170 | 67 | em[3] = complex<double>( -pt/pp*sqh, 0 ); | ||
171 | 68 | |||
172 | 69 | if( pt != 0 ) | ||
173 | 70 | { | ||
174 | 71 | pzpt = -p[3]/(pp*pt)*sqh; | ||
175 | 72 | em[1] = complex<double>( -p[1]*pzpt, -nst*p[2]/pt*sqh ); | ||
176 | 73 | em[2] = complex<double>( -p[2]*pzpt, nst*p[1]/pt*sqh ); | ||
177 | 74 | } | ||
178 | 75 | else | ||
179 | 76 | { | ||
180 | 77 | em[1] = complex<double>( sqh, 0 ); | ||
181 | 78 | em[2] = complex<double>( 0, nst*Sgn(sqh,p[3]) ); | ||
182 | 79 | } | ||
183 | 80 | } | ||
184 | 81 | } | ||
185 | 82 | |||
186 | 83 | // construct eps0 | ||
187 | 84 | if( fabs(nhel) <= 1 ) | ||
188 | 85 | { | ||
189 | 86 | if( pp == 0 ) | ||
190 | 87 | { | ||
191 | 88 | e0[0] = complex<double>( 0, 0 ); | ||
192 | 89 | e0[1] = complex<double>( 0, 0 ); | ||
193 | 90 | e0[2] = complex<double>( 0, 0 ); | ||
194 | 91 | e0[3] = complex<double>( 1, 0 ); | ||
195 | 92 | } | ||
196 | 93 | else | ||
197 | 94 | { | ||
198 | 95 | emp = p[0]/(tmass*pp); | ||
199 | 96 | e0[0] = complex<double>( pp/tmass, 0 ); | ||
200 | 97 | e0[3] = complex<double>( p[3]*emp, 0 ); | ||
201 | 98 | |||
202 | 99 | if( pt != 0 ) | ||
203 | 100 | { | ||
204 | 101 | e0[1] = complex<double>( p[1]*emp, 0 ); | ||
205 | 102 | e0[2] = complex<double>( p[2]*emp, 0 ); | ||
206 | 103 | } | ||
207 | 104 | else | ||
208 | 105 | { | ||
209 | 106 | e0[1] = complex<double>( 0, 0 ); | ||
210 | 107 | e0[2] = complex<double>( 0, 0 ); | ||
211 | 108 | } | ||
212 | 109 | } | ||
213 | 110 | } | ||
214 | 111 | |||
215 | 112 | if( nhel == 2 ) | ||
216 | 113 | { | ||
217 | 114 | for( j=0; j<4; j++ ) | ||
218 | 115 | { | ||
219 | 116 | for( i=0; i<4; i++ ) ft[i][j] = ep[i]*ep[j]; | ||
220 | 117 | } | ||
221 | 118 | } | ||
222 | 119 | else if( nhel == -2 ) | ||
223 | 120 | { | ||
224 | 121 | for( j=0; j<4; j++ ) | ||
225 | 122 | { | ||
226 | 123 | for( i=0; i<4; i++ ) ft[i][j] = em[i]*em[j]; | ||
227 | 124 | } | ||
228 | 125 | } | ||
229 | 126 | else if( tmass == 0 ) | ||
230 | 127 | { | ||
231 | 128 | for( j=0; j<4; j++ ) | ||
232 | 129 | { | ||
233 | 130 | for( i=0; i<4; i++ ) ft[i][j] = 0; | ||
234 | 131 | } | ||
235 | 132 | } | ||
236 | 133 | else if( tmass != 0 ) | ||
237 | 134 | { | ||
238 | 135 | if( nhel == 1 ) | ||
239 | 136 | { | ||
240 | 137 | for( j=0; j<4; j++ ) | ||
241 | 138 | { | ||
242 | 139 | for( i=0; i<4; i++ ) ft[i][j] = sqh*( ep[i]*e0[j] + e0[i]*ep[j] ); | ||
243 | 140 | } | ||
244 | 141 | } | ||
245 | 142 | else if( nhel == 0 ) | ||
246 | 143 | { | ||
247 | 144 | for( j=0; j<4; j++ ) | ||
248 | 145 | { | ||
249 | 146 | for( i=0; i<4; i++ ) ft[i][j] = sqs*( ep[i]*em[j] + em[i]*ep[j] | ||
250 | 147 | + 2.0*e0[i]*e0[j] ); | ||
251 | 148 | } | ||
252 | 149 | } | ||
253 | 150 | else if( nhel == -1 ) | ||
254 | 151 | { | ||
255 | 152 | for( j=0; j<4; j++ ) | ||
256 | 153 | { | ||
257 | 154 | for( i=0; i<4; i++ ) ft[i][j] = sqh*( em[i]*e0[j] + e0[i]*em[j] ); | ||
258 | 155 | } | ||
259 | 156 | } | ||
260 | 157 | else | ||
261 | 158 | { | ||
262 | 159 | std::cerr << "Invalid helicity in txxxxx.\n"; | ||
263 | 160 | std::exit(1); | ||
264 | 161 | } | ||
265 | 162 | } | ||
266 | 163 | |||
267 | 164 | tc[0] = ft[4][0]; | ||
268 | 165 | tc[1] = ft[5][0]; | ||
269 | 166 | |||
270 | 167 | for( j=0; j<4; j++ ) | ||
271 | 168 | { | ||
272 | 169 | for( i=0; i<4; i++ ) tc[j*4+i+2] = ft[j][i]; | ||
273 | 170 | } | ||
274 | 171 | } | ||
275 | 0 | 172 | ||
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 | 1 | #ifndef i_guard | ||
281 | 2 | #define i_guard | ||
282 | 3 | #include <complex> | ||
283 | 4 | void txxxxx(double p[4],double tmass,int nhel,int nst,std::complex<double> fi[18]); | ||
284 | 5 | #endif | ||
285 | 0 | 6 | ||
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 | 193 | path.join(filepath, 'input','mg5_configuration.txt')) | 193 | path.join(filepath, 'input','mg5_configuration.txt')) |
291 | 194 | 194 | ||
292 | 195 | # 2. Create the automatic documentation in the apidoc directory | 195 | # 2. Create the automatic documentation in the apidoc directory |
293 | 196 | |||
294 | 197 | try: | 196 | try: |
295 | 198 | status1 = subprocess.call(['epydoc', '--html', '-o', 'apidoc', | 197 | status1 = subprocess.call(['epydoc', '--html', '-o', 'apidoc', |
296 | 199 | 'madgraph', 'aloha', | 198 | 'madgraph', 'aloha', |
297 | @@ -211,7 +210,8 @@ | |||
298 | 211 | # 3. tar the MadGraph5_vVERSION directory. | 210 | # 3. tar the MadGraph5_vVERSION directory. |
299 | 212 | 211 | ||
300 | 213 | logging.info("Create the tar file " + filename) | 212 | logging.info("Create the tar file " + filename) |
302 | 214 | 213 | # clean all the pyc | |
303 | 214 | os.system("cd %s;find . -name '*.pyc' -delete" % filepath) | ||
304 | 215 | status2 = subprocess.call(['tar', 'czf', filename, filepath]) | 215 | status2 = subprocess.call(['tar', 'czf', filename, filepath]) |
305 | 216 | 216 | ||
306 | 217 | if status2: | 217 | if status2: |
307 | 218 | 218 | ||
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 @@ | |||
314 | 1 | version = 1.5.9 | 1 | version = 1.5.10 |
315 | 2 | date = 2013-04-01 | 2 | date = 2013-XX-XX |
316 | 3 | 3 | ||
317 | 4 | 4 | ||
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 | 1044 | new_wf.set('number', old_wf.get('number')) | 1044 | new_wf.set('number', old_wf.get('number')) |
323 | 1045 | diagram_wavefunctions[old_wf_index] = new_wf | 1045 | diagram_wavefunctions[old_wf_index] = new_wf |
324 | 1046 | except ValueError: | 1046 | except ValueError: |
326 | 1047 | diagram_wavefunctions.append(new_wf) | 1047 | # Make sure that new_wf comes before any wavefunction |
327 | 1048 | # which has it as mother | ||
328 | 1049 | if len(self['mothers']) == 0: | ||
329 | 1050 | #insert at the beginning | ||
330 | 1051 | if diagram_wavefunctions: | ||
331 | 1052 | wf_nb = diagram_wavefunctions[0].get('number') | ||
332 | 1053 | for w in diagram_wavefunctions: | ||
333 | 1054 | w.set('number', w.get('number') + 1) | ||
334 | 1055 | new_wf.set('number', wf_nb) | ||
335 | 1056 | diagram_wavefunctions.insert(0, new_wf) | ||
336 | 1057 | else: | ||
337 | 1058 | diagram_wavefunctions.insert(0, new_wf) | ||
338 | 1059 | else: | ||
339 | 1060 | for i, wf in enumerate(diagram_wavefunctions): | ||
340 | 1061 | if self in wf.get('mothers'): | ||
341 | 1062 | # Update wf numbers | ||
342 | 1063 | new_wf.set('number', wf.get('number')) | ||
343 | 1064 | for w in diagram_wavefunctions[i:]: | ||
344 | 1065 | w.set('number', w.get('number') + 1) | ||
345 | 1066 | # Insert wavefunction | ||
346 | 1067 | diagram_wavefunctions.insert(i, new_wf) | ||
347 | 1068 | break | ||
348 | 1069 | else: | ||
349 | 1070 | diagram_wavefunctions.append(new_wf) | ||
350 | 1048 | 1071 | ||
351 | 1049 | # Set new mothers | 1072 | # Set new mothers |
352 | 1050 | new_wf.set('mothers', mothers) | 1073 | new_wf.set('mothers', mothers) |
353 | @@ -3697,12 +3720,12 @@ | |||
354 | 3697 | all lorentz structures used by this HelasMatrixElement.""" | 3720 | all lorentz structures used by this HelasMatrixElement.""" |
355 | 3698 | 3721 | ||
356 | 3699 | out = [(tuple(wa.get('lorentz')), | 3722 | out = [(tuple(wa.get('lorentz')), |
363 | 3700 | tuple(list(wa.get('conjugate_indices')) + \ | 3723 | tuple(([] if wa.get('particle').get('propagator') =='' else \ |
364 | 3701 | [] if wa.get('particle').get('propagator') =='' else \ | 3724 | ['P%s' % wa.get('particle').get('propagator')]) + \ |
365 | 3702 | ['P%s' % wa.get('particle').get('propagator')]), | 3725 | list(wa.get('conjugate_indices'))), \ |
366 | 3703 | wa.find_outgoing_number()) for wa in \ | 3726 | wa.find_outgoing_number()) |
367 | 3704 | self.get_all_wavefunctions()\ | 3727 | for wa in self.get_all_wavefunctions() \ |
368 | 3705 | if wa.get('interaction_id') != 0] | 3728 | if wa.get('interaction_id') != 0] |
369 | 3706 | out += [(tuple(wa.get('lorentz')), wa.get('conjugate_indices'), | 3729 | out += [(tuple(wa.get('lorentz')), wa.get('conjugate_indices'), |
370 | 3707 | wa.find_outgoing_number()) for wa in self.get_all_amplitudes() \ | 3730 | wa.find_outgoing_number()) for wa in self.get_all_amplitudes() \ |
371 | 3708 | if wa.get('interaction_id') != 0] | 3731 | if wa.get('interaction_id') != 0] |
372 | 3709 | 3732 | ||
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 | 873 | 873 | ||
378 | 874 | if len(args) == 1 and args[0] == 'complex_mass_scheme': | 874 | if len(args) == 1 and args[0] == 'complex_mass_scheme': |
379 | 875 | args.append('True') | 875 | args.append('True') |
380 | 876 | |||
381 | 877 | if len(args) > 2 and '=' == args[1]: | ||
382 | 878 | args.pop(1) | ||
383 | 876 | 879 | ||
384 | 877 | if len(args) < 2: | 880 | if len(args) < 2: |
385 | 878 | self.help_set() | 881 | self.help_set() |
386 | @@ -3237,6 +3240,13 @@ | |||
387 | 3237 | raise self.ConfigurationError(error_text) | 3240 | raise self.ConfigurationError(error_text) |
388 | 3238 | return | 3241 | return |
389 | 3239 | 3242 | ||
390 | 3243 | if not misc.which('patch'): | ||
391 | 3244 | error_text = """Not able to find program \'patch\'. Please reload a clean version | ||
392 | 3245 | or install that program and retry.""" | ||
393 | 3246 | if mode == 'userrequest': | ||
394 | 3247 | raise self.ConfigurationError(error_text) | ||
395 | 3248 | return | ||
396 | 3249 | |||
397 | 3240 | 3250 | ||
398 | 3241 | # read the data present in .autoupdate | 3251 | # read the data present in .autoupdate |
399 | 3242 | data = {} | 3252 | data = {} |
400 | 3243 | 3253 | ||
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 | 121 | '--web'], cwd=self.dir_path) | 121 | '--web'], cwd=self.dir_path) |
406 | 122 | else: | 122 | else: |
407 | 123 | try: | 123 | try: |
409 | 124 | subprocess.call([pjoin('bin', 'internal', 'clean_template')], \ | 124 | misc.call([pjoin('bin', 'internal', 'clean_template')], \ |
410 | 125 | cwd=self.dir_path) | 125 | cwd=self.dir_path) |
411 | 126 | except Exception, why: | 126 | except Exception, why: |
412 | 127 | raise MadGraph5Error('Failed to clean correctly %s: \n %s' \ | 127 | raise MadGraph5Error('Failed to clean correctly %s: \n %s' \ |
413 | @@ -554,10 +554,16 @@ | |||
414 | 554 | line = "AMP2(%(num)d)=AMP2(%(num)d)+" % \ | 554 | line = "AMP2(%(num)d)=AMP2(%(num)d)+" % \ |
415 | 555 | {"num": (config_to_diag_dict[config][0] + 1)} | 555 | {"num": (config_to_diag_dict[config][0] + 1)} |
416 | 556 | 556 | ||
419 | 557 | line += "+".join(["AMP(%(num)d)*dconjg(AMP(%(num)d))" % \ | 557 | amp = "+".join(["AMP(%(num)d)" % {"num": a.get('number')} for a in \ |
418 | 558 | {"num": a.get('number')} for a in \ | ||
420 | 559 | sum([diagrams[idiag].get('amplitudes') for \ | 558 | sum([diagrams[idiag].get('amplitudes') for \ |
421 | 560 | idiag in config_to_diag_dict[config]], [])]) | 559 | idiag in config_to_diag_dict[config]], [])]) |
422 | 560 | |||
423 | 561 | # Not using \sum |M|^2 anymore since this creates troubles | ||
424 | 562 | # when ckm is not diagonal due to the JIM mechanism. | ||
425 | 563 | if '+' in amp: | ||
426 | 564 | line += "(%s)*dconjg(%s)" % (amp, amp) | ||
427 | 565 | else: | ||
428 | 566 | line += "%s*dconjg(%s)" % (amp, amp) | ||
429 | 561 | ret_lines.append(line) | 567 | ret_lines.append(line) |
430 | 562 | else: | 568 | else: |
431 | 563 | for idiag, diag in enumerate(matrix_element.get('diagrams')): | 569 | for idiag, diag in enumerate(matrix_element.get('diagrams')): |
432 | @@ -3160,7 +3166,13 @@ | |||
433 | 3160 | self.p_to_f.parse(param.expr))) | 3166 | self.p_to_f.parse(param.expr))) |
434 | 3161 | 3167 | ||
435 | 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") |
437 | 3163 | fsock.writelines(""" gal(1) = 1d0 | 3169 | if ('aEWM1',) in self.model['parameters']: |
438 | 3170 | fsock.writelines(""" gal(1) = 3.5449077018110318 / DSQRT(aEWM1) | ||
439 | 3171 | gal(2) = 1d0 | ||
440 | 3172 | """) | ||
441 | 3173 | else: | ||
442 | 3174 | logger.warning('$RED aEWM1 not define in MODEL. AQED will not be written correcty in LHE FILE') | ||
443 | 3175 | fsock.writelines(""" gal(1) = 1d0 | ||
444 | 3164 | gal(2) = 1d0 | 3176 | gal(2) = 1d0 |
445 | 3165 | """) | 3177 | """) |
446 | 3166 | 3178 | ||
447 | 3167 | 3179 | ||
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 | 4 | //========================================================================== | 4 | //========================================================================== |
453 | 5 | 5 | ||
454 | 6 | #include "HelAmps_%(model_name)s.h" | 6 | #include "HelAmps_%(model_name)s.h" |
455 | 7 | #include <complex> | ||
456 | 8 | #include <cmath> | ||
457 | 9 | #include <iostream> | ||
458 | 10 | #include <cstdlib> | ||
459 | 11 | using namespace std; | ||
460 | 7 | 12 | ||
461 | 8 | namespace %(namespace)s_%(model_name)s { | 13 | namespace %(namespace)s_%(model_name)s { |
462 | 9 | 14 | ||
463 | 10 | 15 | ||
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 | 559 | stderr = '/dev/null' | 559 | stderr = '/dev/null' |
469 | 560 | elif stderr == -2: # -2 is subprocess.STDOUT | 560 | elif stderr == -2: # -2 is subprocess.STDOUT |
470 | 561 | stderr = stdout | 561 | stderr = stdout |
471 | 562 | else: | ||
472 | 563 | stderr = self.def_get_path(stderr) | ||
473 | 564 | |||
474 | 562 | if log is None: | 565 | if log is None: |
475 | 563 | log = '/dev/null' | 566 | log = '/dev/null' |
476 | 564 | else: | 567 | else: |
477 | 565 | 568 | ||
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 | 60 | try: | 60 | try: |
483 | 61 | return float(d) | 61 | return float(d) |
484 | 62 | except ValueError: | 62 | except ValueError: |
487 | 63 | if re.search(r'''[+-]?[\d.]*-\d*''', d): | 63 | m=re.search(r'''([+-]?[\d.]*)([+-]\d*)''', d) |
488 | 64 | return 0.0 | 64 | if m: |
489 | 65 | return float(m.group(1))*10**(float(m.group(2))) | ||
490 | 65 | return | 66 | return |
491 | 66 | 67 | ||
492 | 67 | data = [secure_float(d) for d in line.split()] | 68 | data = [secure_float(d) for d in line.split()] |
493 | 68 | 69 | ||
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 | 1221 | if simplify: | 1221 | if simplify: |
499 | 1222 | # check if the parameters is still usefull: | 1222 | # check if the parameters is still usefull: |
500 | 1223 | re_str = '|'.join(special_parameters) | 1223 | re_str = '|'.join(special_parameters) |
508 | 1224 | re_pat = re.compile(r'''\b(%s)\b''' % re_str) | 1224 | if len(re_str) > 25000: # size limit on mac |
509 | 1225 | used = set() | 1225 | split = len(special_parameters) // 2 |
510 | 1226 | # check in coupling | 1226 | re_str = ['|'.join(special_parameters[:split]), |
511 | 1227 | for name, coupling_list in self['couplings'].items(): | 1227 | '|'.join(special_parameters[split:])] |
512 | 1228 | for coupling in coupling_list: | 1228 | else: |
513 | 1229 | for use in re_pat.findall(coupling.expr): | 1229 | re_str = [ re_str ] |
514 | 1230 | used.add(use) | 1230 | for expr in re_str: |
515 | 1231 | re_pat = re.compile(r'''\b(%s)\b''' % expr) | ||
516 | 1232 | used = set() | ||
517 | 1233 | # check in coupling | ||
518 | 1234 | for name, coupling_list in self['couplings'].items(): | ||
519 | 1235 | for coupling in coupling_list: | ||
520 | 1236 | for use in re_pat.findall(coupling.expr): | ||
521 | 1237 | used.add(use) | ||
522 | 1231 | else: | 1238 | else: |
523 | 1232 | used = set([i for i in special_parameters if i]) | 1239 | used = set([i for i in special_parameters if i]) |
524 | 1233 | 1240 | ||
525 | 1234 | 1241 | ||
526 | 1235 | # simplify the regular expression | 1242 | # simplify the regular expression |
548 | 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]) |
549 | 1237 | if param not in used]) | 1244 | if len(re_str) > 25000: # size limit on mac |
550 | 1238 | re_pat = re.compile(r'''\b(%s)\b''' % re_str) | 1245 | split = len(special_parameters) // 2 |
551 | 1239 | param_info = {} | 1246 | re_str = ['|'.join(special_parameters[:split]), |
552 | 1240 | # check in parameters | 1247 | '|'.join(special_parameters[split:])] |
553 | 1241 | for dep, param_list in self['parameters'].items(): | 1248 | else: |
554 | 1242 | for tag, parameter in enumerate(param_list): | 1249 | re_str = [ re_str ] |
555 | 1243 | # update information concerning zero/one parameters | 1250 | for expr in re_str: |
556 | 1244 | if parameter.name in special_parameters: | 1251 | re_pat = re.compile(r'''\b(%s)\b''' % expr) |
557 | 1245 | param_info[parameter.name]= {'dep': dep, 'tag': tag, | 1252 | |
558 | 1246 | 'obj': parameter} | 1253 | param_info = {} |
559 | 1247 | continue | 1254 | # check in parameters |
560 | 1248 | 1255 | for dep, param_list in self['parameters'].items(): | |
561 | 1249 | # Bypass all external parameter | 1256 | for tag, parameter in enumerate(param_list): |
562 | 1250 | if isinstance(parameter, base_objects.ParamCardVariable): | 1257 | # update information concerning zero/one parameters |
563 | 1251 | continue | 1258 | if parameter.name in special_parameters: |
564 | 1252 | 1259 | param_info[parameter.name]= {'dep': dep, 'tag': tag, | |
565 | 1253 | # check the presence of zero/one parameter | 1260 | 'obj': parameter} |
566 | 1254 | if simplify: | 1261 | continue |
567 | 1255 | for use in re_pat.findall(parameter.expr): | 1262 | |
568 | 1256 | used.add(use) | 1263 | # Bypass all external parameter |
569 | 1264 | if isinstance(parameter, base_objects.ParamCardVariable): | ||
570 | 1265 | continue | ||
571 | 1266 | |||
572 | 1267 | # check the presence of zero/one parameter | ||
573 | 1268 | if simplify: | ||
574 | 1269 | for use in re_pat.findall(parameter.expr): | ||
575 | 1270 | used.add(use) | ||
576 | 1257 | 1271 | ||
577 | 1258 | # modify the object for those which are still used | 1272 | # modify the object for those which are still used |
578 | 1259 | for param in used: | 1273 | for param in used: |
579 | 1260 | 1274 | ||
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 | 5277 | 5277 | ||
585 | 5278 | self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\ | 5278 | self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\ |
586 | 5279 | get_matrix_element_calls(matrix_element), | 5279 | get_matrix_element_calls(matrix_element), |
588 | 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)) |
589 | 5281 | CALL IXXXXX(P(0,2),BMASS,NHEL(2),+1*IC(2),W(1,2)) | 5281 | CALL IXXXXX(P(0,2),BMASS,NHEL(2),+1*IC(2),W(1,2)) |
590 | 5282 | CALL OXXXXX(P(0,3),TMASS,NHEL(3),+1*IC(3),W(1,3)) | 5282 | CALL OXXXXX(P(0,3),TMASS,NHEL(3),+1*IC(3),W(1,3)) |
591 | 5283 | CALL OXXXXX(P(0,4),TMASS,NHEL(4),+1*IC(4),W(1,4)) | 5283 | CALL OXXXXX(P(0,4),TMASS,NHEL(4),+1*IC(4),W(1,4)) |
592 | @@ -5290,26 +5290,26 @@ | |||
593 | 5290 | CALL FSIXXX(W(1,5),W(1,2),GT1GOM,MGO,WGO,W(1,7)) | 5290 | CALL FSIXXX(W(1,5),W(1,2),GT1GOM,MGO,WGO,W(1,7)) |
594 | 5291 | # Amplitude(s) for diagram number 1 | 5291 | # Amplitude(s) for diagram number 1 |
595 | 5292 | CALL IOSXXX(W(1,7),W(1,4),W(1,9),GT1GOP,AMP(1)) | 5292 | CALL IOSXXX(W(1,7),W(1,4),W(1,9),GT1GOP,AMP(1)) |
600 | 5293 | CALL IXXXXX(P(0,7),MX1,NHEL(7),-1*IC(7),W(1,7)) | 5293 | CALL OXXXXX(P(0,5),TMASS,NHEL(5),+1*IC(5),W(1,7)) |
601 | 5294 | CALL HIOCXX(W(1,7),W(1,4),GB1X1P,MB1,WB1,W(1,10)) | 5294 | CALL IXXXXX(P(0,7),MX1,NHEL(7),-1*IC(7),W(1,10)) |
602 | 5295 | CALL FSIXXX(W(1,8),W(1,2),GT1X1M,MX1,WX1,W(1,11)) | 5295 | CALL HIOCXX(W(1,10),W(1,4),GB1X1P,MB1,WB1,W(1,11)) |
603 | 5296 | CALL OXXXXX(P(0,5),TMASS,NHEL(5),+1*IC(5),W(1,12)) | 5296 | CALL FSIXXX(W(1,8),W(1,2),GT1X1M,MX1,WX1,W(1,12)) |
604 | 5297 | # Amplitude(s) for diagram number 2 | 5297 | # Amplitude(s) for diagram number 2 |
609 | 5298 | CALL IOSCXX(W(1,11),W(1,12),W(1,10),GB1X1M,AMP(2)) | 5298 | CALL IOSCXX(W(1,12),W(1,7),W(1,11),GB1X1M,AMP(2)) |
610 | 5299 | CALL OXXXXX(P(0,2),BMASS,NHEL(2),-1*IC(2),W(1,11)) | 5299 | CALL OXXXXX(P(0,2),BMASS,NHEL(2),-1*IC(2),W(1,12)) |
611 | 5300 | CALL FVOCXX(W(1,11),W(1,1),GG,BMASS,ZERO,W(1,13)) | 5300 | CALL FVOCXX(W(1,12),W(1,1),GG,BMASS,ZERO,W(1,13)) |
612 | 5301 | CALL FSOCXX(W(1,13),W(1,10),GB1GOM,MGO,WGO,W(1,11)) | 5301 | CALL FSOCXX(W(1,13),W(1,11),GB1GOM,MGO,WGO,W(1,12)) |
613 | 5302 | # Amplitude(s) for diagram number 3 | 5302 | # Amplitude(s) for diagram number 3 |
618 | 5303 | CALL IOSXXX(W(1,5),W(1,11),W(1,2),GT1GOM,AMP(3)) | 5303 | CALL IOSXXX(W(1,5),W(1,12),W(1,2),GT1GOM,AMP(3)) |
619 | 5304 | CALL HIOCXX(W(1,7),W(1,3),GB1X1P,MB1,WB1,W(1,11)) | 5304 | CALL HIOCXX(W(1,10),W(1,3),GB1X1P,MB1,WB1,W(1,12)) |
620 | 5305 | CALL HIOXXX(W(1,6),W(1,4),GT1N1P,MT1,WT1,W(1,7)) | 5305 | CALL HIOXXX(W(1,6),W(1,4),GT1N1P,MT1,WT1,W(1,10)) |
621 | 5306 | CALL FSOCXX(W(1,13),W(1,11),GB1GOM,MGO,WGO,W(1,6)) | 5306 | CALL FSOCXX(W(1,13),W(1,12),GB1GOM,MGO,WGO,W(1,6)) |
622 | 5307 | # Amplitude(s) for diagram number 4 | 5307 | # Amplitude(s) for diagram number 4 |
625 | 5308 | CALL IOSXXX(W(1,5),W(1,6),W(1,7),GT1GOM,AMP(4)) | 5308 | CALL IOSXXX(W(1,5),W(1,6),W(1,10),GT1GOM,AMP(4)) |
626 | 5309 | CALL FSIXXX(W(1,8),W(1,7),GT1X1M,MX1,WX1,W(1,6)) | 5309 | CALL FSIXXX(W(1,8),W(1,10),GT1X1M,MX1,WX1,W(1,6)) |
627 | 5310 | # Amplitude(s) for diagram number 5 | 5310 | # Amplitude(s) for diagram number 5 |
630 | 5311 | CALL IOSCXX(W(1,6),W(1,12),W(1,11),GB1X1M,AMP(5)) | 5311 | CALL IOSCXX(W(1,6),W(1,7),W(1,12),GB1X1M,AMP(5)) |
631 | 5312 | CALL FSIXXX(W(1,5),W(1,7),GT1GOM,MGO,WGO,W(1,6)) | 5312 | CALL FSIXXX(W(1,5),W(1,10),GT1GOM,MGO,WGO,W(1,6)) |
632 | 5313 | # Amplitude(s) for diagram number 6 | 5313 | # Amplitude(s) for diagram number 6 |
633 | 5314 | CALL IOSXXX(W(1,6),W(1,3),W(1,9),GT1GOP,AMP(6))""".split('\n')) | 5314 | CALL IOSXXX(W(1,6),W(1,3),W(1,9),GT1GOP,AMP(6))""".split('\n')) |
634 | 5315 | 5315 | ||
635 | @@ -5439,7 +5439,7 @@ | |||
636 | 5439 | # account) | 5439 | # account) |
637 | 5440 | self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\ | 5440 | self.assertEqual(helas_call_writers.FortranHelasCallWriter(mybasemodel).\ |
638 | 5441 | get_matrix_element_calls(matrix_element), | 5441 | get_matrix_element_calls(matrix_element), |
640 | 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)) |
641 | 5443 | CALL IXXXXX(P(0,2),me,NHEL(2),+1*IC(2),W(1,2)) | 5443 | CALL IXXXXX(P(0,2),me,NHEL(2),+1*IC(2),W(1,2)) |
642 | 5444 | CALL SXXXXX(P(0,3),+1*IC(3),W(1,3)) | 5444 | CALL SXXXXX(P(0,3),+1*IC(3),W(1,3)) |
643 | 5445 | CALL SXXXXX(P(0,4),+1*IC(4),W(1,4)) | 5445 | CALL SXXXXX(P(0,4),+1*IC(4),W(1,4)) |
644 | @@ -5450,25 +5450,25 @@ | |||
645 | 5450 | CALL HIOXXX(W(1,5),W(1,7),MGVX494,Msl2,Wsl2,W(1,9)) | 5450 | CALL HIOXXX(W(1,5),W(1,7),MGVX494,Msl2,Wsl2,W(1,9)) |
646 | 5451 | # Amplitude(s) for diagram number 1 | 5451 | # Amplitude(s) for diagram number 1 |
647 | 5452 | CALL IOSXXX(W(1,8),W(1,6),W(1,9),MGVX350,AMP(1)) | 5452 | CALL IOSXXX(W(1,8),W(1,6),W(1,9),MGVX350,AMP(1)) |
653 | 5453 | CALL IXXXXX(P(0,1),me,NHEL(1),+1*IC(1),W(1,9)) | 5453 | CALL OXXXXX(P(0,2),me,NHEL(2),-1*IC(2),W(1,9)) |
654 | 5454 | CALL FSICXX(W(1,9),W(1,3),MGVX350,Mneu1,Wneu1,W(1,10)) | 5454 | CALL IXXXXX(P(0,1),me,NHEL(1),+1*IC(1),W(1,10)) |
655 | 5455 | CALL HIOXXX(W(1,10),W(1,6),MGVX350,Msl2,Wsl2,W(1,9)) | 5455 | CALL FSICXX(W(1,10),W(1,3),MGVX350,Mneu1,Wneu1,W(1,11)) |
656 | 5456 | CALL OXXXXX(P(0,2),me,NHEL(2),-1*IC(2),W(1,10)) | 5456 | CALL HIOXXX(W(1,11),W(1,6),MGVX350,Msl2,Wsl2,W(1,10)) |
657 | 5457 | CALL FSOCXX(W(1,10),W(1,4),MGVX494,Mneu1,Wneu1,W(1,11)) | 5457 | CALL FSOCXX(W(1,9),W(1,4),MGVX494,Mneu1,Wneu1,W(1,11)) |
658 | 5458 | # Amplitude(s) for diagram number 2 | 5458 | # Amplitude(s) for diagram number 2 |
661 | 5459 | CALL IOSXXX(W(1,5),W(1,11),W(1,9),MGVX494,AMP(2)) | 5459 | CALL IOSXXX(W(1,5),W(1,11),W(1,10),MGVX494,AMP(2)) |
662 | 5460 | CALL FSIXXX(W(1,5),W(1,4),MGVX494,Mneu1,Wneu1,W(1,10)) | 5460 | CALL FSIXXX(W(1,5),W(1,4),MGVX494,Mneu1,Wneu1,W(1,9)) |
663 | 5461 | CALL HIOXXX(W(1,2),W(1,7),MGVX494,Msl2,Wsl2,W(1,12)) | 5461 | CALL HIOXXX(W(1,2),W(1,7),MGVX494,Msl2,Wsl2,W(1,12)) |
664 | 5462 | # Amplitude(s) for diagram number 3 | 5462 | # Amplitude(s) for diagram number 3 |
666 | 5463 | CALL IOSXXX(W(1,10),W(1,6),W(1,12),MGVX350,AMP(3)) | 5463 | CALL IOSXXX(W(1,9),W(1,6),W(1,12),MGVX350,AMP(3)) |
667 | 5464 | CALL OXXXXX(P(0,5),me,NHEL(5),+1*IC(5),W(1,12)) | 5464 | CALL OXXXXX(P(0,5),me,NHEL(5),+1*IC(5),W(1,12)) |
668 | 5465 | CALL FSOCXX(W(1,12),W(1,4),MGVX494,Mneu1,Wneu1,W(1,7)) | 5465 | CALL FSOCXX(W(1,12),W(1,4),MGVX494,Mneu1,Wneu1,W(1,7)) |
669 | 5466 | # Amplitude(s) for diagram number 4 | 5466 | # Amplitude(s) for diagram number 4 |
672 | 5467 | CALL IOSXXX(W(1,2),W(1,7),W(1,9),MGVX494,AMP(4)) | 5467 | CALL IOSXXX(W(1,2),W(1,7),W(1,10),MGVX494,AMP(4)) |
673 | 5468 | CALL FSOXXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,9)) | 5468 | CALL FSOXXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,10)) |
674 | 5469 | CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6)) | 5469 | CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6)) |
675 | 5470 | # Amplitude(s) for diagram number 5 | 5470 | # Amplitude(s) for diagram number 5 |
677 | 5471 | CALL IOSXXX(W(1,5),W(1,9),W(1,6),MGVX494,AMP(5)) | 5471 | CALL IOSXXX(W(1,5),W(1,10),W(1,6),MGVX494,AMP(5)) |
678 | 5472 | CALL IXXXXX(P(0,6),me,NHEL(6),-1*IC(6),W(1,6)) | 5472 | CALL IXXXXX(P(0,6),me,NHEL(6),-1*IC(6),W(1,6)) |
679 | 5473 | CALL FSICXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,8)) | 5473 | CALL FSICXX(W(1,6),W(1,3),MGVX350,Mneu1,Wneu1,W(1,8)) |
680 | 5474 | CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6)) | 5474 | CALL HIOXXX(W(1,8),W(1,1),MGVX350,Msl2,Wsl2,W(1,6)) |
681 | @@ -5476,9 +5476,9 @@ | |||
682 | 5476 | CALL IOSXXX(W(1,5),W(1,11),W(1,6),MGVX494,AMP(6)) | 5476 | CALL IOSXXX(W(1,5),W(1,11),W(1,6),MGVX494,AMP(6)) |
683 | 5477 | # Amplitude(s) for diagram number 7 | 5477 | # Amplitude(s) for diagram number 7 |
684 | 5478 | CALL IOSXXX(W(1,2),W(1,7),W(1,6),MGVX494,AMP(7)) | 5478 | CALL IOSXXX(W(1,2),W(1,7),W(1,6),MGVX494,AMP(7)) |
686 | 5479 | CALL HIOXXX(W(1,10),W(1,1),MGVX350,Msl2,Wsl2,W(1,6)) | 5479 | CALL HIOXXX(W(1,9),W(1,1),MGVX350,Msl2,Wsl2,W(1,6)) |
687 | 5480 | # Amplitude(s) for diagram number 8 | 5480 | # Amplitude(s) for diagram number 8 |
689 | 5481 | CALL IOSXXX(W(1,2),W(1,9),W(1,6),MGVX494,AMP(8))""".split('\n')) | 5481 | CALL IOSXXX(W(1,2),W(1,10),W(1,6),MGVX494,AMP(8))""".split('\n')) |
690 | 5482 | 5482 | ||
691 | 5483 | # Test find_outgoing_number | 5483 | # Test find_outgoing_number |
692 | 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] |
693 | @@ -8562,13 +8562,13 @@ | |||
694 | 8562 | CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3)) | 8562 | CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3)) |
695 | 8563 | # Amplitude(s) for diagram number 1 | 8563 | # Amplitude(s) for diagram number 1 |
696 | 8564 | CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1)) | 8564 | CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1)) |
697 | 8565 | CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3)) | ||
698 | 8566 | CALL FSICXX(W(1,3),W(1,4),MGVX350,Mneu1,Wneu1,W(1,7)) | ||
699 | 8565 | CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3)) | 8567 | CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3)) |
704 | 8566 | CALL FSOXXX(W(1,3),W(1,6),MGVX350,Mneu1,Wneu1,W(1,7)) | 8568 | CALL FSOXXX(W(1,3),W(1,6),MGVX350,Mneu1,Wneu1,W(1,4)) |
705 | 8567 | CALL HIOXXX(W(1,1),W(1,7),MGVX494,Msl2,Wsl2,W(1,3)) | 8569 | CALL HIOXXX(W(1,1),W(1,4),MGVX494,Msl2,Wsl2,W(1,3)) |
702 | 8568 | CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,7)) | ||
703 | 8569 | CALL FSICXX(W(1,7),W(1,4),MGVX350,Mneu1,Wneu1,W(1,1)) | ||
706 | 8570 | # Amplitude(s) for diagram number 2 | 8570 | # Amplitude(s) for diagram number 2 |
708 | 8571 | CALL IOSXXX(W(1,1),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n')) | 8571 | CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n')) |
709 | 8572 | 8572 | ||
710 | 8573 | exporter = export_v4.ProcessExporterFortranME() | 8573 | exporter = export_v4.ProcessExporterFortranME() |
711 | 8574 | 8574 | ||
712 | @@ -8615,13 +8615,13 @@ | |||
713 | 8615 | CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3)) | 8615 | CALL HIOXXX(W(1,1),W(1,5),MGVX494,Msl2,Wsl2,W(1,3)) |
714 | 8616 | # Amplitude(s) for diagram number 1 | 8616 | # Amplitude(s) for diagram number 1 |
715 | 8617 | CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1)) | 8617 | CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(1)) |
716 | 8618 | CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3)) | ||
717 | 8619 | CALL FSICXX(W(1,3),W(1,4),MGVX350,Mneu1,Wneu1,W(1,7)) | ||
718 | 8618 | CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3)) | 8620 | CALL OXXXXX(P(0,5),zero,NHEL(5),+1*IC(5),W(1,3)) |
723 | 8619 | CALL FSOCXX(W(1,3),W(1,6),MGVX494,Mneu1,Wneu1,W(1,7)) | 8621 | CALL FSOCXX(W(1,3),W(1,6),MGVX494,Mneu1,Wneu1,W(1,4)) |
724 | 8620 | CALL HIOXXX(W(1,1),W(1,7),MGVX494,Msl2,Wsl2,W(1,3)) | 8622 | CALL HIOXXX(W(1,1),W(1,4),MGVX494,Msl2,Wsl2,W(1,3)) |
721 | 8621 | CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,7)) | ||
722 | 8622 | CALL FSICXX(W(1,7),W(1,4),MGVX350,Mneu1,Wneu1,W(1,1)) | ||
725 | 8623 | # Amplitude(s) for diagram number 2 | 8623 | # Amplitude(s) for diagram number 2 |
727 | 8624 | CALL IOSXXX(W(1,1),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n')) | 8624 | CALL IOSXXX(W(1,7),W(1,2),W(1,3),MGVX350,AMP(2))""".split('\n')) |
728 | 8625 | 8625 | ||
729 | 8626 | self.assertEqual(exporter.get_JAMP_lines(me)[0], | 8626 | self.assertEqual(exporter.get_JAMP_lines(me)[0], |
730 | 8627 | "JAMP(1)=+AMP(1)-AMP(2)") | 8627 | "JAMP(1)=+AMP(1)-AMP(2)") |
731 | @@ -8662,7 +8662,7 @@ | |||
732 | 8662 | 8662 | ||
733 | 8663 | # This has been checked against v4 | 8663 | # This has been checked against v4 |
734 | 8664 | self.assertEqual(myfortranmodel.get_matrix_element_calls(me), | 8664 | self.assertEqual(myfortranmodel.get_matrix_element_calls(me), |
736 | 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)) |
737 | 8666 | CALL OXXXXX(P(0,2),zero,NHEL(2),-1*IC(2),W(1,2)) | 8666 | CALL OXXXXX(P(0,2),zero,NHEL(2),-1*IC(2),W(1,2)) |
738 | 8667 | CALL OXXXXX(P(0,3),zero,NHEL(3),+1*IC(3),W(1,3)) | 8667 | CALL OXXXXX(P(0,3),zero,NHEL(3),+1*IC(3),W(1,3)) |
739 | 8668 | CALL SXXXXX(P(0,4),+1*IC(4),W(1,4)) | 8668 | CALL SXXXXX(P(0,4),+1*IC(4),W(1,4)) |
740 | @@ -8688,24 +8688,24 @@ | |||
741 | 8688 | CALL IOSXXX(W(1,11),W(1,2),W(1,3),MGVX350,AMP(3)) | 8688 | CALL IOSXXX(W(1,11),W(1,2),W(1,3),MGVX350,AMP(3)) |
742 | 8689 | # Amplitude(s) for diagram number 4 | 8689 | # Amplitude(s) for diagram number 4 |
743 | 8690 | CALL IOSXXX(W(1,12),W(1,2),W(1,3),MGVX350,AMP(4)) | 8690 | CALL IOSXXX(W(1,12),W(1,2),W(1,3),MGVX350,AMP(4)) |
747 | 8691 | CALL OXXXXX(P(0,6),zero,NHEL(6),+1*IC(6),W(1,3)) | 8691 | CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3)) |
748 | 8692 | CALL FVOXXX(W(1,3),W(1,9),MGVX12,zero,zero,W(1,12)) | 8692 | CALL FVICXX(W(1,3),W(1,5),MGVX12,zero,zero,W(1,12)) |
749 | 8693 | CALL FSOXXX(W(1,12),W(1,8),MGVX350,Mneu1,Wneu1,W(1,9)) | 8693 | CALL FSICXX(W(1,12),W(1,4),MGVX350,Mneu1,Wneu1,W(1,5)) |
750 | 8694 | CALL OXXXXX(P(0,6),zero,NHEL(6),+1*IC(6),W(1,12)) | ||
751 | 8695 | CALL FVOXXX(W(1,12),W(1,9),MGVX12,zero,zero,W(1,4)) | ||
752 | 8696 | CALL FSOXXX(W(1,4),W(1,8),MGVX350,Mneu1,Wneu1,W(1,9)) | ||
753 | 8697 | CALL HIOXXX(W(1,1),W(1,9),MGVX494,Msl2,Wsl2,W(1,4)) | ||
754 | 8698 | # Amplitude(s) for diagram number 5 | ||
755 | 8699 | CALL IOSXXX(W(1,5),W(1,2),W(1,4),MGVX350,AMP(5)) | ||
756 | 8700 | CALL FSOXXX(W(1,12),W(1,7),MGVX350,Mneu1,Wneu1,W(1,9)) | ||
757 | 8694 | CALL HIOXXX(W(1,1),W(1,9),MGVX494,Msl2,Wsl2,W(1,12)) | 8701 | CALL HIOXXX(W(1,1),W(1,9),MGVX494,Msl2,Wsl2,W(1,12)) |
758 | 8695 | CALL IXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,9)) | ||
759 | 8696 | CALL FVICXX(W(1,9),W(1,5),MGVX12,zero,zero,W(1,8)) | ||
760 | 8697 | CALL FSICXX(W(1,8),W(1,4),MGVX350,Mneu1,Wneu1,W(1,5)) | ||
761 | 8698 | # Amplitude(s) for diagram number 5 | ||
762 | 8699 | CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(5)) | ||
763 | 8700 | CALL FSOXXX(W(1,3),W(1,7),MGVX350,Mneu1,Wneu1,W(1,8)) | ||
764 | 8701 | CALL HIOXXX(W(1,1),W(1,8),MGVX494,Msl2,Wsl2,W(1,3)) | ||
765 | 8702 | # Amplitude(s) for diagram number 6 | 8702 | # Amplitude(s) for diagram number 6 |
768 | 8703 | CALL IOSXXX(W(1,5),W(1,2),W(1,3),MGVX350,AMP(6)) | 8703 | CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(6)) |
769 | 8704 | CALL FSICXX(W(1,9),W(1,10),MGVX350,Mneu1,Wneu1,W(1,5)) | 8704 | CALL FSICXX(W(1,3),W(1,10),MGVX350,Mneu1,Wneu1,W(1,5)) |
770 | 8705 | # Amplitude(s) for diagram number 7 | 8705 | # Amplitude(s) for diagram number 7 |
772 | 8706 | CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(7)) | 8706 | CALL IOSXXX(W(1,5),W(1,2),W(1,4),MGVX350,AMP(7)) |
773 | 8707 | # Amplitude(s) for diagram number 8 | 8707 | # Amplitude(s) for diagram number 8 |
775 | 8708 | CALL IOSXXX(W(1,5),W(1,2),W(1,3),MGVX350,AMP(8))""".split('\n')) | 8708 | CALL IOSXXX(W(1,5),W(1,2),W(1,12),MGVX350,AMP(8))""".split('\n')) |
776 | 8709 | 8709 | ||
777 | 8710 | # Test amp2 lines | 8710 | # Test amp2 lines |
778 | 8711 | amp2_lines = \ | 8711 | amp2_lines = \ |
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