Merge lp:~maddevelopers/mg5amcnlo/1.4.6 into lp:~madteam/mg5amcnlo/trunk
- 1.4.6
- Merge into trunk
Status: | Merged |
---|---|
Merged at revision: | 212 |
Proposed branch: | lp:~maddevelopers/mg5amcnlo/1.4.6 |
Merge into: | lp:~madteam/mg5amcnlo/trunk |
Diff against target: |
4882 lines (+2373/-832) 40 files modified
Template/Cards/run_card.dat (+11/-0) Template/README (+82/-16) Template/Source/cuts.inc (+6/-0) Template/Source/setrun.f (+13/-0) Template/SubProcesses/addmothers.f (+162/-100) Template/SubProcesses/cuts.f (+65/-2) Template/SubProcesses/myamp.f (+4/-0) Template/SubProcesses/setcuts.f (+17/-0) Template/bin/madevent (+46/-12) UpdateNotes.txt (+18/-0) aloha/aloha_writers.py (+3/-3) aloha/create_aloha.py (+6/-2) madgraph/VERSION (+2/-2) madgraph/core/helas_objects.py (+3/-3) madgraph/interface/extended_cmd.py (+2/-2) madgraph/interface/madevent_interface.py (+42/-47) madgraph/interface/madgraph_interface.py (+6/-3) madgraph/iolibs/export_cpp.py (+2/-3) madgraph/iolibs/group_subprocs.py (+16/-12) madgraph/iolibs/helas_call_writers.py (+3/-11) madgraph/various/banner.py (+8/-0) madgraph/various/gen_crossxhtml.py (+8/-2) madgraph/various/misc.py (+2/-8) models/sm/coupling_orders.py (+5/-4) models/sm/couplings.py (+48/-44) models/sm/lorentz.py (+6/-2) models/sm/parameters.py (+55/-55) models/sm/particles.py (+72/-72) models/sm/restrict_lepton_masses.dat (+53/-0) models/sm/vertices.py (+218/-212) models/sm/write_param_card.py (+2/-2) tests/acceptance_tests/test_cmd.py (+5/-4) tests/acceptance_tests/test_model_equivalence.py (+6/-5) tests/parallel_tests/compare_with_old_mg5_version.py (+1/-1) tests/unit_tests/iolibs/test_export_cpp.py (+700/-152) tests/unit_tests/iolibs/test_export_v4.py (+254/-2) tests/unit_tests/iolibs/test_group_subprocs.py (+368/-0) tests/unit_tests/various/test_aloha.py (+2/-1) tests/unit_tests/various/test_import_ufo.py (+49/-47) tests/unit_tests/various/test_process_checks.py (+2/-1) |
To merge this branch: | bzr merge lp:~maddevelopers/mg5amcnlo/1.4.6 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Olivier Mattelaer | Approve | ||
Johan Alwall | Pending | ||
Review via email: mp+105385@code.launchpad.net |
Commit message
Description of the change
Olivier Mattelaer (olivier-mattelaer) wrote : | # |
Johan Alwall (johan-alwall) wrote : | # |
Hello Olivier,
Let's include also the fix for the C++ output problem. I will remove my modifications to myamp.f, since they don't work very well and Tim still haven't had a chance to look at it. We'll include that in the next release instead.
Cheers,
Johan
- 225. By Olivier Mattelaer
-
fixed the problem in aloha pointed in question #196755
- 226. By Olivier Mattelaer
-
merge with Johan modifications
Olivier Mattelaer (olivier-mattelaer) wrote : | # |
Hi Johan,
For me this is ok for the merge as soon as you have run the parralel test (at least for the mssm)
since you have change the call for the conjugate routines, it's better to cross-check that.
Cheers,
Olivier
- 227. By Olivier Mattelaer
-
change the SM to include the 4h (need to update the tests)
- 228. By mattelaer-olivier
-
fix the tests linked to the change of the SM model
- 229. By Olivier Mattelaer
-
fix aloha: fix the C++ output for conjugate routine (problem with the mass)
Olivier Mattelaer (olivier-mattelaer) wrote : | # |
Ok I've runned the parralel test, and one test fails:
AssertionError: 'Failed for processes:\nh h > h h 1.2614627423e-01 2.2114578554e-02 7.0168013823e-01 ' != 'Failed for processes:'
So this sounds expected since the SM changed in order to include the 4h interactions.
So Everything is perfect on that side.
Just for your information the way to run the parralel test are only
./tests/
some test_short fails when runned in that way (due to modification on the disk)
so you need to rerun those one to be sure:
./tests/
Cheers,
Olivier
- 230. By Olivier Mattelaer
-
add the cross-section/
number of event in the banner
correct the parralel test for future used
Olivier Mattelaer (olivier-mattelaer) wrote : | # |
Could I make the merge?
Cheers,
Olivier
- 231. By Johan Alwall
-
Fixed some language in UpdateNotes and Template/README file
Johan Alwall (johan-alwall) wrote : | # |
Hello Olivier,
A comment: The possibility to give commands as command line arguments is very close to perfect, but not quite:
bin/madevent "set automatic_
gives:
ERROR: set automatic_
The same line works perfectly when I give it using echo.
Shouldn't this work? It should be easy to make it work too right?
Cheers,
Johan
- 232. By Johan Alwall
-
Fixed spelling error in README file
Olivier Mattelaer (olivier-mattelaer) wrote : | # |
Hi Johan,
I'm surprised about the error message, I was more expecting an error
of the type:
-bash: generate_events: command not found
since the ';' should be interpreted by bash as a end of line separator
by bash in itself.
I just test it on my computer and in fact I have the above error.
So if you want to implement test for your computer, please do it, but
very careful since this is not working
on all machine,
Cheers,
Olivier
PS: One solution (working on my computer)
is to echap the ;
[PROC_sm_0]$ ./bin/madevent set automatic_
generate_events -f
Running MG5 in debug mode
...
On 15-mai-12, at 22:58, Johan Alwall wrote:
> Hello Olivier,
>
> A comment: The possibility to give commands as command line
> arguments is very close to perfect, but not quite:
> bin/madevent "set automatic_
> gives:
> ERROR: set automatic_
> valid command. Please retry
>
> The same line works perfectly when I give it using echo.
>
> Shouldn't this work? It should be easy to make it work too right?
>
> Cheers,
> Johan
> --
> https:/
> 105385
> You proposed lp:~maddevelopers/madgraph5/1.4.6 for merging.
Olivier Mattelaer (olivier-mattelaer) wrote : | # |
Hi Johan,
I just understand why I didn't produce the same error as you.
You add " " to the command which is indeed not a valid command,
those are automatically removed by the echo (explaining why this work
with echo)
The correct solution is to echap the semi-column.
Cheers,
Olivier
On 15-mai-12, at 23:34, Olivier Mattelaer wrote:
> Hi Johan,
>
> I'm surprised about the error message, I was more expecting an error
> of the type:
> -bash: generate_events: command not found
> since the ';' should be interpreted by bash as a end of line separator
> by bash in itself.
>
> I just test it on my computer and in fact I have the above error.
>
> So if you want to implement test for your computer, please do it, but
> very careful since this is not working
> on all machine,
>
> Cheers,
>
> Olivier
>
> PS: One solution (working on my computer)
> is to echap the ;
>
> [PROC_sm_0]$ ./bin/madevent set automatic_
> generate_events -f
> Running MG5 in debug mode
> ...
>
>
> On 15-mai-12, at 22:58, Johan Alwall wrote:
>
>> Hello Olivier,
>>
>> A comment: The possibility to give commands as command line
>> arguments is very close to perfect, but not quite:
>> bin/madevent "set automatic_
>> gives:
>> ERROR: set automatic_
>> valid command. Please retry
>>
>> The same line works perfectly when I give it using echo.
>>
>> Shouldn't this work? It should be easy to make it work too right?
>>
>> Cheers,
>> Johan
>> --
>> https:/
>> 105385
>> You proposed lp:~maddevelopers/madgraph5/1.4.6 for merging.
>
>
> --
> https:/
> 105385
> You proposed lp:~maddevelopers/madgraph5/1.4.6 for merging.
Preview Diff
1 | === modified file 'Template/Cards/run_card.dat' |
2 | --- Template/Cards/run_card.dat 2012-03-20 03:12:06 +0000 |
3 | +++ Template/Cards/run_card.dat 2012-05-16 04:17:21 +0000 |
4 | @@ -195,6 +195,17 @@ |
5 | 1d5 = ptj4max ! maximum pt for the fourth jet in pt |
6 | 0 = cutuse ! reject event if fails any (0) / all (1) jet pt cuts |
7 | #********************************************************************* |
8 | +# Control the pt's of leptons sorted by pt * |
9 | +#********************************************************************* |
10 | + 0 = ptl1min ! minimum pt for the leading lepton in pt |
11 | + 0 = ptl2min ! minimum pt for the second lepton in pt |
12 | + 0 = ptl3min ! minimum pt for the third lepton in pt |
13 | + 0 = ptl4min ! minimum pt for the fourth lepton in pt |
14 | + 1d5 = ptl1max ! maximum pt for the leading lepton in pt |
15 | + 1d5 = ptl2max ! maximum pt for the second lepton in pt |
16 | + 1d5 = ptl3max ! maximum pt for the third lepton in pt |
17 | + 1d5 = ptl4max ! maximum pt for the fourth lepton in pt |
18 | +#********************************************************************* |
19 | # Control the Ht(k)=Sum of k leading jets * |
20 | #********************************************************************* |
21 | 0 = htjmin ! minimum jet HT=Sum(jet pt) |
22 | |
23 | === modified file 'Template/README' |
24 | --- Template/README 2012-03-24 03:06:44 +0000 |
25 | +++ Template/README 2012-05-16 04:17:21 +0000 |
26 | @@ -1,9 +1,8 @@ |
27 | MadGraph/MadEvent 5 |
28 | -By Fabio Maltoni, Tim Stelzer and the CP3 development team |
29 | +By Johan Alwall, Michel Herquet, Fabio Maltoni, Olivier Mattelaer and Tim Stelzer |
30 | |
31 | http://madgraph.phys.ucl.ac.be/ |
32 | http://madgraph.hep.uiuc.edu/ |
33 | -http://madgraph.roma2.infn.it/ |
34 | |
35 | Information on the process to be generated is found in the file |
36 | index.html in this directory, which should be viewed using your web |
37 | @@ -11,8 +10,14 @@ |
38 | process. Please refer to the README file one directory above this |
39 | (MadGraph5_vx_x_x/) for instructions on how to generate a process. |
40 | |
41 | +This README includes information on how |
42 | +A) generate events |
43 | +B) how to run in cluster/multi-core mode |
44 | +C) how to launch sequential run (called multi-run) |
45 | +D) How to launch Pythia/PGS/Delphes |
46 | +E) How to prevent automatic opening of html pages |
47 | |
48 | -To generate events: |
49 | +A) To generate events: |
50 | ------------------- |
51 | |
52 | 1) Specify the model parameters. The model parameters include masses |
53 | @@ -32,7 +37,7 @@ |
54 | example file. |
55 | **Warning!** For several reasons, avoid running more than 100,000 |
56 | events per run. Instead perform several runs to reach the luminosity |
57 | -you need, e.g. using the bin/multi_run script. Subsequent runs |
58 | +you need, e.g. using the multi_run describe below. Subsequent runs |
59 | automatically update the random seed, so the results from different |
60 | runs are statistically independent. |
61 | |
62 | @@ -42,17 +47,27 @@ |
63 | 4) Follow the generation and look at the results in the file |
64 | HTML/crossx.html, using your web browser. |
65 | |
66 | -5) If you want to run Pythia and/or PGS/Delphes on the events, |
67 | -download the Pythia/PGS package (and Delphes) and untar one directory |
68 | -above this (the MadGraph5 directory) and run make. Make sure the cards |
69 | -pythia_card.dat and pgs_card.dat are present in the Cards/ directory. |
70 | -If this is the case, Pythia and PGS will automatically be run by |
71 | -generate_events, or, for an existing run, use bin/run_pythia and |
72 | -bin/run_pgs. |
73 | - |
74 | - |
75 | -Running in cluster or multicore mode: |
76 | -------------------------------------- |
77 | +5) If you want to run Pythia and/or PGS/Delphes on the events. |
78 | +You first need to install it. For this launch MG5 ($MG5PATH/bin/mg5) |
79 | +and type `install pythia-pgs`/ `install Delphes`. |
80 | +If they are detected, the first question asked when launching ./bin/generate_events |
81 | +should be something like: |
82 | +Which programs do you want to run? |
83 | + 0 / auto : running existing card |
84 | + 1 / parton : Madevent |
85 | + 2 / pythia : MadEvent + Pythia. |
86 | + 3 / pgs : MadEvent + Pythia + PGS. |
87 | + [0, 1, 2, 3, auto, parton, pythia, pgs][20s to answer] |
88 | +if this is not that means that you need to specify the path of the new program |
89 | +in the file Cards/me5_configuration.txt . By default they are |
90 | +installed in the MG5 directory. |
91 | + |
92 | +If you need to run one of those programs on some events which are already generated |
93 | +please see instructions below. |
94 | + |
95 | + |
96 | +B) Running in cluster or multicore mode: |
97 | +---------------------------------------- |
98 | |
99 | In order to automatically run in cluster or multicore mode, please set |
100 | the flag run_mode in the Cards/me5_configuration.txt file (or in the |
101 | @@ -65,4 +80,55 @@ |
102 | You can also specify the cluster type (for cluster mode) or your |
103 | preferred number of CPUs (for multicore mode - note that by default, |
104 | the maximum number of cores is used) by setting cluster_type and |
105 | -nb_core. |
106 | \ No newline at end of file |
107 | +nb_core. |
108 | + |
109 | + |
110 | +C) Launch sequential runs for generation of large number of events: |
111 | +------------------------------------------------------------------- |
112 | + |
113 | +For various reason, we recommend not to generate more than 100k events |
114 | +per run. In order to simplify generating large numbers of events, |
115 | +we have created a special command 'multi_run', which is equivalent to |
116 | +running generate_events multiple times (ensuring that the random seed is |
117 | +different for each run), and also automatically combines the resulting |
118 | +lhe files into a single file. |
119 | +This command can be launched via the madevent user interface |
120 | +./bin/madevent using the following command: |
121 | +multi_run NBRUN [RUN_NAME] [options] |
122 | +For more information about this command (valid options), you can type |
123 | +`help multi_run` inside the interface. |
124 | + |
125 | +Note that you can also launch a command whithout entering the interactive mode: |
126 | +./bin/madevent multi_run NBRUN |
127 | + |
128 | + |
129 | +D) Launching pythia/pgs/delphes on a (previously) generated sample: |
130 | +------------------------------------------------------------------- |
131 | + |
132 | +In this section, I will presupose that the corresponding package is |
133 | +already installed and configured properly. (See section how to generate |
134 | +events if this is not the case) |
135 | + |
136 | +In order to launch pythia/pgs/delphes on a sample, you need first to |
137 | +launch the interactive session of madevent `./bin/madevent` |
138 | +and then you can enter of the following command |
139 | +pythia RUN [--run_options] |
140 | +pgs RUN [--run_options] |
141 | +delphes RUN [--run_options] |
142 | +where RUN is the run_name of the run. One of the convenient options is |
143 | +--tag=XXXX |
144 | +which allow to specify the tag name in case of multiple runs with |
145 | +the same program. Note that by default, a unique run tag is generated |
146 | +for each time you run. |
147 | + |
148 | +E) How to prevent automatic opening of the crossx.html page: |
149 | +------------------------------------------------------------ |
150 | + |
151 | +Edit the file ./Cards/me5_configuration.txt and set |
152 | +the option automatic_html_opening to `False`. |
153 | +You can also edit the MG5 configuration card |
154 | +input/mg5_configuration.txt |
155 | +in order to have this value on False by default for all subsequently |
156 | +generated processes. |
157 | + |
158 | + |
159 | |
160 | === modified file 'Template/Source/cuts.inc' |
161 | --- Template/Source/cuts.inc 2011-06-02 20:40:32 +0000 |
162 | +++ Template/Source/cuts.inc 2012-05-16 04:17:21 +0000 |
163 | @@ -29,6 +29,8 @@ |
164 | REAL*8 cutuse |
165 | REAL*8 ptj1min,ptj2min,ptj3min,ptj4min |
166 | REAL*8 ptj1max,ptj2max,ptj3max,ptj4max |
167 | + REAL*8 ptl1min,ptl2min,ptl3min,ptl4min |
168 | + REAL*8 ptl1max,ptl2max,ptl3max,ptl4max |
169 | REAL*8 ht2min,ht3min,ht4min |
170 | REAL*8 ht2max,ht3max,ht4max |
171 | REAL*8 htjmin,htjmax,ihtmin,ihtmax |
172 | @@ -48,6 +50,10 @@ |
173 | & ptj2min,ptj2max, |
174 | & ptj3min,ptj3max, |
175 | & ptj4min,ptj4max, |
176 | + & ptl1min,ptl1max, |
177 | + & ptl2min,ptl2max, |
178 | + & ptl3min,ptl3max, |
179 | + & ptl4min,ptl4max, |
180 | & cutuse, |
181 | & ht2min,ht3min,ht4min, |
182 | & ht2max,ht3max,ht4max, |
183 | |
184 | === modified file 'Template/Source/setrun.f' |
185 | --- Template/Source/setrun.f 2011-10-05 16:27:00 +0000 |
186 | +++ Template/Source/setrun.f 2012-05-16 04:17:21 +0000 |
187 | @@ -264,6 +264,19 @@ |
188 | call get_real (npara,param,value,"cutuse",cutuse,0d0) |
189 | |
190 | c********************************************************************* |
191 | +c Check the pt's of leptons sorted by pt * |
192 | +c********************************************************************* |
193 | + |
194 | + call get_real (npara,param,value,"ptl1min",ptl1min,0d0) |
195 | + call get_real (npara,param,value,"ptl1max",ptl1max,1d5) |
196 | + call get_real (npara,param,value,"ptl2min",ptl2min,0d0) |
197 | + call get_real (npara,param,value,"ptl2max",ptl2max,1d5) |
198 | + call get_real (npara,param,value,"ptl3min",ptl3min,0d0) |
199 | + call get_real (npara,param,value,"ptl3max",ptl3max,1d5) |
200 | + call get_real (npara,param,value,"ptl4min",ptl4min,0d0) |
201 | + call get_real (npara,param,value,"ptl4max",ptl4max,1d5) |
202 | + |
203 | +c********************************************************************* |
204 | c Check Ht * |
205 | c********************************************************************* |
206 | |
207 | |
208 | === modified file 'Template/SubProcesses/addmothers.f' |
209 | --- Template/SubProcesses/addmothers.f 2012-02-08 08:52:30 +0000 |
210 | +++ Template/SubProcesses/addmothers.f 2012-05-16 04:17:21 +0000 |
211 | @@ -29,7 +29,7 @@ |
212 | c Variables for combination of color indices (including multipart. vert) |
213 | integer maxcolmp |
214 | parameter(maxcolmp=20) |
215 | - integer ncolmp,icolmp(2,maxcolmp) |
216 | + integer ncolmp,icolmp(2,maxcolmp),is_colors(2,nincoming) |
217 | |
218 | double precision ZERO |
219 | parameter (ZERO=0d0) |
220 | @@ -145,7 +145,19 @@ |
221 | |
222 | c Store original maxcolor to know if we have epsilon vertices |
223 | maxorg=maxcolor |
224 | - |
225 | +c Keep track of IS colors that go through to final state |
226 | +c (since we shouldn't replace pop-up indices with those) |
227 | + do i=1,nincoming |
228 | + do j=1,2 |
229 | + is_colors(j,i)=0 |
230 | + do k=3,nexternal |
231 | + if (iabs(icolalt(j,i)).eq.iabs(icolalt(j,k))) then |
232 | +c This color is going through to FS |
233 | + is_colors(j,i)=iabs(icolalt(j,i)) |
234 | + endif |
235 | + enddo |
236 | + enddo |
237 | + enddo |
238 | c |
239 | c Get mother information from chosen graph |
240 | c |
241 | @@ -212,7 +224,7 @@ |
242 | c print *,'t-channel: ',i,ida(1),ida(2),mo_color |
243 | c print *,'colors: ',((icolmp(j,k),j=1,2),k=1,ncolmp) |
244 | maxcolor=fix_tchannel_color(mo_color,maxcolor, |
245 | - $ ncolmp,icolmp,i,icolalt) |
246 | + $ ncolmp,icolmp,i,icolalt,is_colors) |
247 | tchannel=.true. |
248 | cycle |
249 | else |
250 | @@ -264,17 +276,23 @@ |
251 | c print *,'s-channel: ',i,mo_color,ida(1),ida(2) |
252 | c print *,'colors: ',((icolmp(j,k),j=1,2),k=1,ncolmp) |
253 | if(mo_color.eq.1) then ! color singlet |
254 | - maxcolor=elim_indices(0,0,ncolmp,icolmp,i,icolalt,maxcolor) |
255 | + maxcolor=elim_indices(0,0,ncolmp,icolmp,i,icolalt, |
256 | + $ is_colors,maxcolor) |
257 | elseif(mo_color.eq.-3) then ! color anti-triplet |
258 | - maxcolor=elim_indices(0,1,ncolmp,icolmp,i,icolalt,maxcolor) |
259 | + maxcolor=elim_indices(0,1,ncolmp,icolmp,i,icolalt, |
260 | + $ is_colors,maxcolor) |
261 | elseif(mo_color.eq.3) then ! color triplet |
262 | - maxcolor=elim_indices(1,0,ncolmp,icolmp,i,icolalt,maxcolor) |
263 | + maxcolor=elim_indices(1,0,ncolmp,icolmp,i,icolalt, |
264 | + $ is_colors,maxcolor) |
265 | elseif(mo_color.eq.-6) then ! color anti-sextet |
266 | - maxcolor=elim_indices(0,2,ncolmp,icolmp,i,icolalt,maxcolor) |
267 | + maxcolor=elim_indices(0,2,ncolmp,icolmp,i,icolalt, |
268 | + $ is_colors,maxcolor) |
269 | elseif(mo_color.eq.6) then ! color sextet |
270 | - maxcolor=elim_indices(2,0,ncolmp,icolmp,i,icolalt,maxcolor) |
271 | + maxcolor=elim_indices(2,0,ncolmp,icolmp,i,icolalt, |
272 | + $ is_colors,maxcolor) |
273 | elseif(mo_color.eq.8) then ! color octet |
274 | - maxcolor=elim_indices(1,1,ncolmp,icolmp,i,icolalt,maxcolor) |
275 | + maxcolor=elim_indices(1,1,ncolmp,icolmp,i,icolalt, |
276 | + $ is_colors,maxcolor) |
277 | else ! 2 indicates multipart. vertex |
278 | da_color(1) = get_color(jpart(1,ida(1))) |
279 | da_color(2) = get_color(jpart(1,ida(2))) |
280 | @@ -450,7 +468,7 @@ |
281 | |
282 | c******************************************************************** |
283 | function fix_tchannel_color(mo_color,maxcolor,ncolmp,icolmp,ires, |
284 | - $ icol) |
285 | + $ icol,is_colors) |
286 | c******************************************************************** |
287 | c Successively eliminate identical pairwise color indices from the |
288 | c icolmp list, until only (max) one triplet and one antitriplet remains |
289 | @@ -461,6 +479,7 @@ |
290 | integer fix_tchannel_color |
291 | integer mo_color,maxcolor,ncolmp,icolmp(2,*) |
292 | integer ires,icol(2,-nexternal+2:2*nexternal-3) |
293 | + integer is_colors(2,nincoming) |
294 | integer i,j,i3,i3bar,max3,max3bar,min3,min3bar,maxcol,mincol |
295 | |
296 | c Successively eliminate color indices in pairs until only the wanted |
297 | @@ -478,26 +497,18 @@ |
298 | i3bar=0 |
299 | icol(1,ires)=0 |
300 | icol(2,ires)=0 |
301 | - min3=1000 |
302 | - max3=0 |
303 | - min3bar=1000 |
304 | - max3bar=0 |
305 | do i=1,ncolmp |
306 | if(icolmp(1,i).gt.0)then |
307 | i3=i3+1 |
308 | c color for t-channels needs to be reversed |
309 | if(i3.eq.1) icol(2,ires)=icolmp(1,i) |
310 | if(i3.eq.2) icol(1,ires)=-icolmp(1,i) |
311 | - if(icolmp(1,i).gt.max3) max3=icolmp(1,i) |
312 | - if(icolmp(1,i).lt.min3) min3=icolmp(1,i) |
313 | endif |
314 | if(icolmp(2,i).gt.0)then |
315 | i3bar=i3bar+1 |
316 | c color for t-channels needs to be reversed |
317 | if(i3bar.eq.1) icol(1,ires)=icolmp(2,i) |
318 | if(i3bar.eq.2) icol(2,ires)=-icolmp(2,i) |
319 | - if(icolmp(2,i).gt.max3bar) max3bar=icolmp(2,i) |
320 | - if(icolmp(2,i).lt.min3bar) min3bar=icolmp(2,i) |
321 | endif |
322 | enddo |
323 | |
324 | @@ -513,7 +524,10 @@ |
325 | if(mo_color.eq.8.and.i3.eq.1.and.i3bar.eq.1) return |
326 | |
327 | c Make sure that max and min don't come from the same octet |
328 | - call clean_max_min(icolmp,ncolmp,max3,min3,max3bar,min3bar,i3,i3bar) |
329 | + call find_max_min(icolmp,ncolmp,max3,min3,max3bar,min3bar, |
330 | + $ i3,i3bar,is_colors) |
331 | +c print *,'After finding: ',ncolmp,((icolmp(j,i),j=1,2),i=1,ncolmp) |
332 | +c print *,'mo_color = ',mo_color |
333 | |
334 | if(mo_color.le.1.and.i3-i3bar.eq.2.or. |
335 | $ mo_color.le.1.and.i3bar-i3.eq.2.or. |
336 | @@ -533,6 +547,17 @@ |
337 | enddo |
338 | c print *,'Replaced ',maxcol,' by ',mincol |
339 | elseif(mo_color.le.1.and.i3.eq.2.and.i3bar.eq.2) then |
340 | +c Ensure that max > min |
341 | + if(max3bar.lt.min3)then |
342 | + i=min3 |
343 | + min3=max3bar |
344 | + max3bar=i |
345 | + endif |
346 | + if(max3.lt.min3bar)then |
347 | + i=min3bar |
348 | + min3bar=max3 |
349 | + max3=i |
350 | + endif |
351 | c Replace the maximum indices with the minimum ones everywhere |
352 | do i=ires+1,-1 |
353 | do j=1,2 |
354 | @@ -597,7 +622,8 @@ |
355 | end |
356 | |
357 | c******************************************************************* |
358 | - function elim_indices(n3,n3bar,ncolmp,icolmp,ires,icol,maxcolor) |
359 | + function elim_indices(n3,n3bar,ncolmp,icolmp,ires,icol, |
360 | + $ is_colors,maxcolor) |
361 | c******************************************************************* |
362 | c Successively eliminate identical pairwise color indices from the |
363 | c icolmp list, until only the wanted indices remain |
364 | @@ -614,6 +640,7 @@ |
365 | integer elim_indices |
366 | integer n3,n3bar,ncolmp,icolmp(2,*),maxcolor |
367 | integer ires,icol(2,-nexternal+2:2*nexternal-3) |
368 | + integer is_colors(2,nincoming) |
369 | integer i,j,i3,i3bar |
370 | |
371 | c Successively eliminate color indices in pairs until only the wanted |
372 | @@ -669,7 +696,8 @@ |
373 | $ n3.eq.1.and.n3bar.eq.1.and.i3-i3bar.eq.0.or. |
374 | $ n3.eq.0.and.n3bar.eq.0.and.i3-i3bar.eq.0)then |
375 | c We have a previous epsilon which gives the wrong pop-up index |
376 | - call fix_s_color_indices(n3,n3bar,i3,i3bar,ncolmp,icolmp,ires,icol) |
377 | + call fix_s_color_indices(n3,n3bar,i3,i3bar,ncolmp,icolmp, |
378 | + $ ires,icol,is_colors) |
379 | else |
380 | c Don't know how to deal with this |
381 | call write_error(1001,n3,n3bar) |
382 | @@ -683,7 +711,7 @@ |
383 | |
384 | c******************************************************************* |
385 | subroutine fix_s_color_indices(n3,n3bar,i3,i3bar,ncolmp,icolmp, |
386 | - $ ires,icol) |
387 | + $ ires,icol,is_colors) |
388 | c******************************************************************* |
389 | c |
390 | c Fix color flow if some particle has got the wrong pop-up color |
391 | @@ -694,37 +722,27 @@ |
392 | include 'nexternal.inc' |
393 | integer n3,n3bar,ncolmp,icolmp(2,*),maxcolor |
394 | integer ires,icol(2,-nexternal+2:2*nexternal-3) |
395 | + integer is_colors(2,nincoming) |
396 | integer i,j,i3,i3bar |
397 | integer max_n3,max_n3bar,min_n3,min_n3bar,maxcol,mincol |
398 | |
399 | - max_n3=0 |
400 | - max_n3bar=0 |
401 | - min_n3=1000 |
402 | - min_n3bar=1000 |
403 | - do i=1,ncolmp |
404 | - if(icolmp(1,i).gt.max_n3) |
405 | - $ max_n3=icolmp(1,i) |
406 | - if(icolmp(2,i).gt.max_n3bar) |
407 | - $ max_n3bar=icolmp(2,i) |
408 | - if(icolmp(1,i).gt.0.and.icolmp(1,i).lt.min_n3) |
409 | - $ min_n3=icolmp(1,i) |
410 | - if(icolmp(2,i).gt.0.and.icolmp(2,i).lt.min_n3bar) |
411 | - $ min_n3bar=icolmp(2,i) |
412 | - enddo |
413 | - |
414 | icol(1,ires)=0 |
415 | icol(2,ires)=0 |
416 | |
417 | +c print *,'Colors: ',ncolmp,((icolmp(j,i),j=1,2),i=1,ncolmp) |
418 | +c print *,'n3,n3bar,i3,i3bar: ',n3,n3bar,i3,i3bar |
419 | + |
420 | c Make sure that max and min don't come from the same octet |
421 | - call clean_max_min(icolmp,ncolmp,max_n3,min_n3, |
422 | - $ max_n3bar,min_n3bar,i3,i3bar) |
423 | + call find_max_min(icolmp,ncolmp,max_n3,min_n3, |
424 | + $ max_n3bar,min_n3bar,i3,i3bar,is_colors) |
425 | +c print *,'max3,min3bar,min3,max3bar: ',max_n3,min_n3bar,min_n3,max_n3bar |
426 | |
427 | if(n3.eq.1.and.n3bar.eq.0.and.i3-i3bar.eq.n3.or. |
428 | $ n3bar.eq.1.and.n3.eq.0.and.i3bar-i3.eq.n3bar.or. |
429 | $ n3bar.eq.1.and.n3.eq.1.and.i3bar-i3.eq.0.or. |
430 | $ n3bar.eq.0.and.n3.eq.0.and.i3bar-i3.eq.0)then |
431 | c Replace the highest 3bar-index with the lowest 3-index, |
432 | -c and vice versa |
433 | +c or vice versa |
434 | maxcol=max(max_n3,max_n3bar) |
435 | if(maxcol.eq.max_n3) then |
436 | mincol=min_n3bar |
437 | @@ -754,73 +772,117 @@ |
438 | end |
439 | |
440 | c******************************************************************************* |
441 | - subroutine clean_max_min(icolmp,ncolmp,max3,min3,max3bar,min3bar,i3,i3bar) |
442 | + subroutine find_max_min(icolmp,ncolmp,max3,min3,max3bar,min3bar, |
443 | + $ i3,i3bar,is_colors) |
444 | c******************************************************************************* |
445 | implicit none |
446 | + include 'nexternal.inc' |
447 | integer ncolmp,icolmp(2,*) |
448 | - integer i,j,max3,max3bar,min3,min3bar,i3,i3bar |
449 | - |
450 | -c Make sure that max and min don't come from the same octet |
451 | + integer is_colors(2,nincoming) |
452 | + integer i,j,k,max3,max3bar,min3,min3bar,i3,i3bar,i3now,i3barnow |
453 | + integer allpairs(2,nexternal),npairs,maxcol,mincol |
454 | + |
455 | + i3now=i3 |
456 | + i3barnow=i3bar |
457 | + |
458 | +c Create all possible pairs (3,3bar) that |
459 | +c 1. come from different octets, 2. are different, |
460 | +c 3. don't contain any color lines passing through the event |
461 | + npairs = 0 |
462 | + do 20 i=1,ncolmp |
463 | + if(icolmp(1,i).eq.0) goto 20 |
464 | + do k=1,nincoming |
465 | + if(icolmp(1,i).eq.is_colors(1,k)) goto 20 |
466 | + enddo |
467 | + do 10 j=1,ncolmp |
468 | + if(i.eq.j.or.icolmp(2,j).eq.0.or. |
469 | + $ icolmp(1,i).eq.icolmp(2,j)) goto 10 |
470 | + do k=1,nincoming |
471 | + if(icolmp(2,j).eq.is_colors(2,k)) goto 10 |
472 | + enddo |
473 | + npairs=npairs+1 |
474 | + allpairs(1,npairs)=icolmp(1,i) |
475 | + allpairs(2,npairs)=icolmp(2,j) |
476 | + 10 enddo |
477 | + 20 enddo |
478 | + |
479 | +c print *,'is_colors: ',((is_colors(i,j),i=1,2),j=1,nincoming) |
480 | +c print *,'pairs: ',((allpairs(i,j),i=1,2),j=1,npairs) |
481 | + |
482 | +c Find the pairs with maximum 3 and 3bar |
483 | + min3=1000 |
484 | + min3bar=1000 |
485 | + max3=0 |
486 | + max3bar=0 |
487 | + do i=1,npairs |
488 | + if(allpairs(1,i).gt.max3.and. |
489 | + $ (allpairs(2,i).lt.max3bar.or. |
490 | + $ allpairs(1,i).gt.allpairs(2,i)))then |
491 | + max3=allpairs(1,i) |
492 | + min3bar=allpairs(2,i) |
493 | + else if(allpairs(2,i).gt.max3bar.and. |
494 | + $ (allpairs(1,i).lt.max3.or. |
495 | + $ allpairs(2,i).gt.allpairs(1,i)))then |
496 | + max3bar=allpairs(2,i) |
497 | + min3=allpairs(1,i) |
498 | + endif |
499 | + enddo |
500 | + |
501 | +c Find "maximum" pairs with minimum 3 and 3bar |
502 | + do i=1,npairs |
503 | + if(allpairs(1,i).eq.max3.and. |
504 | + $ allpairs(2,i).lt.min3bar.and. |
505 | + $ allpairs(2,i).ne.max3bar) |
506 | + $ min3bar=allpairs(2,i) |
507 | + if(allpairs(2,i).eq.max3bar.and. |
508 | + $ allpairs(1,i).lt.min3.and. |
509 | + $ allpairs(1,i).ne.max3) |
510 | + $ min3=allpairs(1,i) |
511 | + enddo |
512 | + |
513 | + if (max3.gt.0.and.max3bar.gt.0) then |
514 | +c We have found our two pairs, so we're done |
515 | + return |
516 | + endif |
517 | + |
518 | + if(max3.gt.0.or.max3bar.gt.0)then |
519 | + i3now=i3now-1 |
520 | + i3barnow=i3barnow-1 |
521 | + endif |
522 | + |
523 | +c Find pair for non-maximum (where we allow all colors) |
524 | + maxcol=max(max3,max3bar) |
525 | + if(maxcol.eq.max3) then |
526 | + mincol=min3bar |
527 | + else |
528 | + mincol=min3 |
529 | + endif |
530 | + |
531 | + npairs=0 |
532 | do i=1,ncolmp |
533 | - if(icolmp(1,i).eq.max3.and.icolmp(2,i).eq.min3bar)then |
534 | - min3bar=1000 |
535 | - do j=1,ncolmp |
536 | - if(j.eq.i) cycle |
537 | - if(icolmp(2,j).lt.min3bar) min3bar=icolmp(2,j) |
538 | - enddo |
539 | - endif |
540 | - if(icolmp(2,i).eq.max3bar.and.icolmp(1,i).eq.min3)then |
541 | - min3=1000 |
542 | - do j=1,ncolmp |
543 | - if(j.eq.i) cycle |
544 | - if(icolmp(1,j).lt.min3) min3=icolmp(1,j) |
545 | - enddo |
546 | - endif |
547 | + if(icolmp(1,i).eq.0.and.i3now.gt.0) cycle |
548 | + if(icolmp(1,i).eq.maxcol.or.icolmp(1,i).eq.mincol) |
549 | + $ cycle |
550 | + do j=1,ncolmp |
551 | + if(icolmp(2,j).eq.0.and.i3barnow.gt.0) cycle |
552 | + if(i.eq.j.or.icolmp(1,i).eq.icolmp(2,j)) cycle |
553 | + if(icolmp(2,j).eq.maxcol.or.icolmp(2,j).eq.mincol) |
554 | + $ cycle |
555 | + npairs=npairs+1 |
556 | + allpairs(1,npairs)=icolmp(1,i) |
557 | + allpairs(2,npairs)=icolmp(2,j) |
558 | + enddo |
559 | enddo |
560 | - |
561 | -c ...and that max and min are different |
562 | - if(i3.gt.1.and.max3.eq.min3.or.i3bar.gt.1.and.max3bar.eq.min3bar)then |
563 | - if(max3.gt.max3bar)then |
564 | -c Need to change min3, while still ensuring that max3bar is ok |
565 | - max3bar=0 |
566 | - min3=1000 |
567 | - do i=1,ncolmp |
568 | - if(icolmp(2,i).gt.max3bar.and.icolmp(2,i).ne.min3bar) |
569 | - $ max3bar=icolmp(2,i) |
570 | - if(icolmp(1,i).lt.min3.and.icolmp(1,i).ne.max3) |
571 | - $ min3=icolmp(1,i) |
572 | - enddo |
573 | -c Make sure that max3bar and min3 don't come from the same octet |
574 | - do i=1,ncolmp |
575 | - if(icolmp(2,i).eq.max3bar.and.icolmp(1,i).eq.min3)then |
576 | - min3=1000 |
577 | - do j=1,ncolmp |
578 | - if(j.eq.i.or.icolmp(1,j).eq.max3) cycle |
579 | - if(icolmp(1,j).lt.min3) min3=icolmp(1,j) |
580 | - enddo |
581 | - endif |
582 | - enddo |
583 | + if(npairs.ge.1)then |
584 | + if(maxcol.eq.max3)then |
585 | + min3=allpairs(1,1) |
586 | + max3bar=allpairs(2,1) |
587 | else |
588 | -c Need to change min3bar, while still ensuring that max3 is ok |
589 | - max3=0 |
590 | - min3bar=1000 |
591 | - do i=1,ncolmp |
592 | - if(icolmp(1,i).gt.max3.and.icolmp(1,i).ne.min3) |
593 | - $ max3=icolmp(1,i) |
594 | - if(icolmp(2,i).lt.min3bar.and.icolmp(2,i).ne.max3bar) |
595 | - $ min3bar=icolmp(2,i) |
596 | - enddo |
597 | -c Make sure that max3 and min3bar don't come from the same octet |
598 | - do i=1,ncolmp |
599 | - if(icolmp(1,i).eq.max3.and.icolmp(2,i).eq.min3bar)then |
600 | - min3bar=1000 |
601 | - do j=1,ncolmp |
602 | - if(j.eq.i.or.icolmp(2,j).eq.max3bar) cycle |
603 | - if(icolmp(2,j).lt.min3bar) min3bar=icolmp(2,j) |
604 | - enddo |
605 | - endif |
606 | - enddo |
607 | + max3=allpairs(1,1) |
608 | + min3bar=allpairs(2,1) |
609 | endif |
610 | endif |
611 | + |
612 | +c print *,'allpairs: ',((allpairs(i,j),i=1,2),j=1,npairs) |
613 | |
614 | end |
615 | |
616 | === modified file 'Template/SubProcesses/cuts.f' |
617 | --- Template/SubProcesses/cuts.f 2011-12-13 16:49:59 +0000 |
618 | +++ Template/SubProcesses/cuts.f 2012-05-16 04:17:21 +0000 |
619 | @@ -51,7 +51,7 @@ |
620 | C |
621 | LOGICAL FIRSTTIME,FIRSTTIME2,pass_bw,notgood,good,foundheavy |
622 | LOGICAL DEBUG |
623 | - integer i,j,njets,nheavyjets,hardj1,hardj2 |
624 | + integer i,j,njets,nheavyjets,nleptons,hardj1,hardj2 |
625 | REAL*8 XVAR,ptmax1,ptmax2,htj,tmp,inclht |
626 | real*8 ptemp(0:3), ptemp2(0:3) |
627 | character*20 formstr |
628 | @@ -74,6 +74,7 @@ |
629 | |
630 | double precision ptjet(nexternal) |
631 | double precision ptheavyjet(nexternal) |
632 | + double precision ptlepton(nexternal) |
633 | double precision temp |
634 | |
635 | double precision etmin(nincoming+1:nexternal),etamax(nincoming+1:nexternal) |
636 | @@ -93,6 +94,9 @@ |
637 | logical jetor |
638 | common/to_jet_cuts/ ptjmin4,ptjmax4,htjmin4,htjmax4,jetor |
639 | |
640 | + double precision ptlmin4(4),ptlmax4(4) |
641 | + common/to_lepton_cuts/ ptlmin4,ptlmax4 |
642 | + |
643 | c |
644 | c Special cuts |
645 | c |
646 | @@ -545,7 +549,66 @@ |
647 | passcuts=.false. |
648 | return |
649 | endif |
650 | - |
651 | + |
652 | +C |
653 | +C maximal and minimal pt of the leptons sorted by pt |
654 | +c |
655 | + nleptons=0 |
656 | + |
657 | + if(ptl1min.gt.0.or.ptl2min.gt.0.or.ptl3min.gt.0.or.ptl4min.gt.0.or. |
658 | + $ ptl1max.lt.1d5.or.ptl2max.lt.1d5.or. |
659 | + $ ptl3max.lt.1d5.or.ptl4max.lt.1d5) then |
660 | + |
661 | +c - fill ptlepton with the pt's of the leptons. |
662 | + do i=nincoming+1,nexternal |
663 | + if(is_a_l(i)) then |
664 | + nleptons=nleptons+1 |
665 | + ptlepton(nleptons)=pt(p(0,i)) |
666 | + endif |
667 | + enddo |
668 | + if(debug) write (*,*) 'not yet ordered ',njets,' ',ptjet |
669 | + |
670 | +c - check existance of leptons if lepton cuts are on |
671 | + if(nleptons.lt.1.and.ptl1min.gt.0.or. |
672 | + $ nleptons.lt.2.and.ptl2min.gt.0.or. |
673 | + $ nleptons.lt.3.and.ptl3min.gt.0.or. |
674 | + $ nleptons.lt.4.and.ptl4min.gt.0)then |
675 | + if(debug) write (*,*) i, ' too few leptons -> fails' |
676 | + passcuts=.false. |
677 | + return |
678 | + endif |
679 | + |
680 | +c - sort lepton pts |
681 | + do i=1,nleptons-1 |
682 | + do j=i+1,nleptons |
683 | + if(ptlepton(j).gt.ptlepton(i)) then |
684 | + temp=ptlepton(i) |
685 | + ptlepton(i)=ptlepton(j) |
686 | + ptlepton(j)=temp |
687 | + endif |
688 | + enddo |
689 | + enddo |
690 | + if(debug) write (*,*) 'ordered ',nleptons,' ',ptlepton |
691 | + |
692 | + if(nleptons.gt.0) then |
693 | + |
694 | + notgood = .false. |
695 | + do i=1,nleptons |
696 | + if(debug) write (*,*) i,ptlepton(i), ' ',ptlmin4(min(i,4)),':',ptlmax4(min(i,4)) |
697 | +c--- if one of the leptons does not pass, the event is rejected |
698 | + notgood=notgood.or.(ptlepton(i).gt.ptlmax4(min(i,4))).or. |
699 | + $ (ptlepton(i).lt.ptlmin4(min(i,4))) |
700 | + if(debug) write (*,*) i,' notgood total:', notgood |
701 | + enddo |
702 | + |
703 | + |
704 | + if (notgood) then |
705 | + if(debug) write (*,*) i, ' multiple pt -> fails' |
706 | + passcuts=.false. |
707 | + return |
708 | + endif |
709 | + endif |
710 | + endif |
711 | C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
712 | C SPECIAL CUTS |
713 | C<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
714 | |
715 | === modified file 'Template/SubProcesses/myamp.f' |
716 | --- Template/SubProcesses/myamp.f 2011-10-10 07:34:37 +0000 |
717 | +++ Template/SubProcesses/myamp.f 2012-05-16 04:17:21 +0000 |
718 | @@ -566,6 +566,10 @@ |
719 | xo = max(xo, ht4min**2/stot) |
720 | xo = max(xo, misset**2/stot) |
721 | xo = max(xo, ptllmin**2/stot) |
722 | + xo = max(xo, ptl1min**2/stot) |
723 | + xo = max(xo, ptl2min**2/stot) |
724 | + xo = max(xo, ptl3min**2/stot) |
725 | + xo = max(xo, ptl4min**2/stot) |
726 | if (swidth(i).eq.0.and.xo.eq.1d0/stot) then |
727 | write(*,*) 'Warning: No minimum found for integration' |
728 | write(*,*) ' Setting minimum to ',1d0/stot |
729 | |
730 | === modified file 'Template/SubProcesses/setcuts.f' |
731 | --- Template/SubProcesses/setcuts.f 2012-02-24 08:51:01 +0000 |
732 | +++ Template/SubProcesses/setcuts.f 2012-05-16 04:17:21 +0000 |
733 | @@ -59,6 +59,9 @@ |
734 | logical jetor |
735 | common/to_jet_cuts/ ptjmin4,ptjmax4,htjmin4,htjmax4,jetor |
736 | |
737 | + double precision ptlmin4(4),ptlmax4(4) |
738 | + common/to_lepton_cuts/ ptlmin4,ptlmax4 |
739 | + |
740 | double precision xqcutij(nexternal,nexternal),xqcuti(nexternal) |
741 | common/to_xqcuts/xqcutij,xqcuti |
742 | c |
743 | @@ -413,6 +416,20 @@ |
744 | inclHtmax=ihtmax |
745 | |
746 | jetor = cutuse.eq.0d0 |
747 | + |
748 | +c |
749 | +c EXTRA LEPTON CUTS |
750 | +c |
751 | + ptlmin4(1)=ptl1min |
752 | + ptlmin4(2)=ptl2min |
753 | + ptlmin4(3)=ptl3min |
754 | + ptlmin4(4)=ptl4min |
755 | + |
756 | + ptlmax4(1)=ptl1max |
757 | + ptlmax4(2)=ptl2max |
758 | + ptlmax4(3)=ptl3max |
759 | + ptlmax4(4)=ptl4max |
760 | + |
761 | c |
762 | c ERROR TRAPS |
763 | c |
764 | |
765 | === modified file 'Template/bin/madevent' |
766 | --- Template/bin/madevent 2012-04-19 20:28:42 +0000 |
767 | +++ Template/bin/madevent 2012-05-16 04:17:21 +0000 |
768 | @@ -33,18 +33,44 @@ |
769 | sys.path.insert(0, root_path) |
770 | |
771 | |
772 | + |
773 | +class MyOptParser(optparse.OptionParser): |
774 | + |
775 | + class InvalidOption(Exception): pass |
776 | + |
777 | + def error(self, msg=''): |
778 | + raise MyOptParser.InvalidOption(msg) |
779 | + |
780 | + |
781 | + |
782 | + |
783 | # Write out nice usage message if called with -h or --help |
784 | usage = "usage: %prog [options] [FILE] " |
785 | -parser = optparse.OptionParser(usage=usage) |
786 | +parser = MyOptParser(usage=usage) |
787 | parser.add_option("-l", "--logging", default='INFO', |
788 | help="logging level (DEBUG|INFO|WARNING|ERROR|CRITICAL) [%default]") |
789 | -parser.add_option("-f", "--file", default='', |
790 | - help="Use script file FILE") |
791 | parser.add_option("","--web", action="store_true", default=False, dest='web', \ |
792 | help='force to be in secure mode') |
793 | parser.add_option("","--debug", action="store_true", default=False, dest='debug', \ |
794 | help='force to launch debug mode') |
795 | -(options, args) = parser.parse_args() |
796 | +parser_error = '' |
797 | +done = False |
798 | +for i in range(len(sys.argv)-1): |
799 | + try: |
800 | + (options, args) = parser.parse_args(sys.argv[1:len(sys.argv)-i]) |
801 | + done = True |
802 | + except MyOptParser.InvalidOption, error: |
803 | + pass |
804 | + else: |
805 | + args += sys.argv[len(sys.argv)-i:] |
806 | +if not done: |
807 | + # raise correct error: |
808 | + try: |
809 | + (options, args) = parser.parse_args() |
810 | + except MyOptParser.InvalidOption, error: |
811 | + print error |
812 | + sys.exit(2) |
813 | + |
814 | if len(args) == 0: |
815 | args = '' |
816 | |
817 | @@ -115,25 +141,33 @@ |
818 | |
819 | # Call the cmd interface main loop |
820 | try: |
821 | - if options.file or args: |
822 | + if (args and os.path.exists(args[0])): |
823 | # They are an input file |
824 | - if args: |
825 | - input_file = args[0] |
826 | - else: |
827 | - input_file = options.file |
828 | + input_file = args[0] |
829 | if options.web: |
830 | cmd_line = cmd_interface.MadEventCmd() |
831 | cmd_line.debug_output = os.path.join(os.path.dirname(input_file),'generation.log') |
832 | cmd_line.use_rawinput = False |
833 | cmd_line.run_cmd('import command ' + input_file) |
834 | - cmd_line.run_cmd('quit') |
835 | - sys.exit() |
836 | + cmd_line.run_cmd('quit') |
837 | else: |
838 | cmd_line = cmd_interface.MadEventCmdShell() |
839 | cmd_line.use_rawinput = False |
840 | cmd_line.run_cmd('import command ' + input_file) |
841 | cmd_line.run_cmd('quit') |
842 | - sys.exit() |
843 | + elif args: |
844 | + # a single command is provided |
845 | + cmd_line = cmd_interface.MadEventCmd() |
846 | + if not hasattr(cmd_line, 'do_%s' % args[0]): |
847 | + if parser_error: |
848 | + print parser_error |
849 | + print 'and %s can not be interpreted as a valid command.' % args[0] |
850 | + else: |
851 | + print 'ERROR: %s not a valid command. Please retry' % args[0] |
852 | + else: |
853 | + cmd_line.use_rawinput = False |
854 | + cmd_line.run_cmd(' '.join(args)) |
855 | + cmd_line.run_cmd('quit') |
856 | else: |
857 | # Interactive mode |
858 | if options.web: |
859 | |
860 | === modified file 'UpdateNotes.txt' |
861 | --- UpdateNotes.txt 2012-04-20 05:12:21 +0000 |
862 | +++ UpdateNotes.txt 2012-05-16 04:17:21 +0000 |
863 | @@ -1,5 +1,23 @@ |
864 | Update notes for MadGraph 5 (in reverse time order) |
865 | |
866 | +1.4.6 (XX/04/12) JA: Added cuts on lepton pt for each of the 4 hardest leptons |
867 | + OM: allow bin/madevent script to be feeded by a single line command: |
868 | + example ./bin/madevent multi_run 10 |
869 | + JA: Added new restriction card for the sm model with massive |
870 | + muon and electron, and non-zero tau decay width |
871 | + JA: Ensure assignment of colors to intermediate propagators |
872 | + works also in fermion flow- and color flow-violating |
873 | + RPV processes (thanks Brock Tweedie for finding this). |
874 | + JA: Fix crash for certain fermion flow violating decay chains |
875 | + (introduced in v. 1.3.27) (again thanks to Brock Tweedie). |
876 | + JA: Fix crash for decay chains with multiple decays involving |
877 | + the same particles (thanks Steve Blanchet for reporting) |
878 | + JA+OM: Fix crash for Pythia8 output with multiparticle vertices |
879 | + (thanks to Moritz Huck for reporting this.) |
880 | + OM: Fixing ALOHA output for C++/python. |
881 | + OM: Fix a crash occuring when trying to create an output on |
882 | + an existing directory (thanks Celine) |
883 | + |
884 | 1.4.5 (11/04/12) OM: Change the seed automatically in multi_run. (Even if the seed |
885 | was set to a non automatic value in the card.) |
886 | OM: correct a minor bug #975647 (SLAH convention problem) |
887 | |
888 | === modified file 'aloha/aloha_writers.py' |
889 | --- aloha/aloha_writers.py 2012-03-07 17:49:58 +0000 |
890 | +++ aloha/aloha_writers.py 2012-05-16 04:17:21 +0000 |
891 | @@ -1013,11 +1013,11 @@ |
892 | else: |
893 | main = '%(spin)s%(id)d' % \ |
894 | {'spin': self.particles[self.offshell -1], |
895 | - 'id': self.offshell} |
896 | + 'id': self.outgoing} |
897 | call_arg = '%(args)s, %(COUP)s, M%(id)d, W%(id)d, %(LAST)s' % \ |
898 | {'args': ', '.join(self.calllist['CallList']), |
899 | 'COUP':'COUP%d', |
900 | - 'id': self.offshell, |
901 | + 'id': self.outgoing, |
902 | 'LAST': '%s'} |
903 | |
904 | # make the first call |
905 | @@ -1087,7 +1087,7 @@ |
906 | |
907 | def write_combined(self, lor_names, mode='self', offshell=None, **opt): |
908 | """Write the .h and .cc files associated to the combined file""" |
909 | - |
910 | + |
911 | # Set some usefull command |
912 | if offshell is None: |
913 | offshell = self.offshell |
914 | |
915 | === modified file 'aloha/create_aloha.py' |
916 | --- aloha/create_aloha.py 2012-03-15 15:22:31 +0000 |
917 | +++ aloha/create_aloha.py 2012-05-16 04:17:21 +0000 |
918 | @@ -499,8 +499,11 @@ |
919 | if lorentz.name in self.multiple_lor: |
920 | for m in self.multiple_lor[lorentz.name]: |
921 | for outgoing in range(len(lorentz.spins)+1): |
922 | - self[(conjg_builder.name, outgoing)].add_combine(m) |
923 | - |
924 | + realname = conjg_builder.name + ''.join(['C%s' % pair for pair in conjg_builder.conjg]) |
925 | + try: |
926 | + self[(realname, outgoing)].add_combine(m) |
927 | + except Exception,error: |
928 | + self[(realname, self.symmetries[lorentz.name][outgoing])].add_combine(m) |
929 | |
930 | |
931 | if save: |
932 | @@ -585,6 +588,7 @@ |
933 | #Store the information |
934 | realname = name + ''.join(wavefunction.tag) |
935 | self.set(realname, outgoing, wavefunction) |
936 | + |
937 | |
938 | def compute_aloha_without_kernel(self, builder, symmetry=None, routines=None): |
939 | """define all the AbstractRoutine linked to a given lorentz structure |
940 | |
941 | === modified file 'madgraph/VERSION' |
942 | --- madgraph/VERSION 2012-04-20 09:03:43 +0000 |
943 | +++ madgraph/VERSION 2012-05-16 04:17:21 +0000 |
944 | @@ -1,3 +1,3 @@ |
945 | -version = 1.4.5 |
946 | -date = 2012-04-20 |
947 | +version = 1.4.6 |
948 | +date = 2012-04-XX |
949 | |
950 | |
951 | === modified file 'madgraph/core/helas_objects.py' |
952 | --- madgraph/core/helas_objects.py 2012-03-28 03:42:34 +0000 |
953 | +++ madgraph/core/helas_objects.py 2012-05-16 04:17:21 +0000 |
954 | @@ -2955,6 +2955,7 @@ |
955 | for i, wf in enumerate(final_decay_wfs): |
956 | final_decay_wfs[i] = \ |
957 | decay_diag_wfs[decay_diag_wfs.index(wf)] |
958 | + |
959 | # Remove final wavefunctions from decay_diag_wfs, |
960 | # since these will be replaced separately by |
961 | # replace_wavefunctions |
962 | @@ -3075,7 +3076,6 @@ |
963 | final_decay_wfs, |
964 | diagrams, |
965 | numbers) |
966 | - |
967 | # Now that we are done with this set of diagrams, we need |
968 | # to clean out duplicate wavefunctions (i.e., remove |
969 | # identical wavefunctions which are already present in |
970 | @@ -3261,7 +3261,7 @@ |
971 | is possible only if there is only one diagram in the decay.""" |
972 | |
973 | for key in old_wf.keys(): |
974 | - old_wf.set(key, new_wf.get(key)) |
975 | + old_wf.set(key, new_wf[key]) |
976 | |
977 | def identical_decay_chain_factor(self, decay_chains): |
978 | """Calculate the denominator factor from identical decay chains""" |
979 | @@ -3552,7 +3552,7 @@ |
980 | """Return a list of (lorentz_name, conjugate, outgoing) with |
981 | all lorentz structures used by this HelasMatrixElement.""" |
982 | |
983 | - return [(tuple(wa.get('lorentz')), tuple(wa.get_conjugate_index()), |
984 | + return [(tuple(wa.get('lorentz')), tuple(wa.get('conjugate_indices')), |
985 | wa.find_outgoing_number()) for wa in \ |
986 | self.get_all_wavefunctions() + self.get_all_amplitudes() \ |
987 | if wa.get('interaction_id') != 0] |
988 | |
989 | === modified file 'madgraph/interface/extended_cmd.py' |
990 | --- madgraph/interface/extended_cmd.py 2012-03-22 04:20:14 +0000 |
991 | +++ madgraph/interface/extended_cmd.py 2012-05-16 04:17:21 +0000 |
992 | @@ -39,7 +39,8 @@ |
993 | from madgraph import MG5DIR |
994 | MADEVENT = False |
995 | except Exception, error: |
996 | - print error |
997 | + if __debug__: |
998 | + print error |
999 | import internal.misc as misc |
1000 | MADEVENT = True |
1001 | |
1002 | @@ -843,7 +844,6 @@ |
1003 | value = Cmd.timed_input(question, default, timeout=timeout, |
1004 | fct=f, fct_timeout=fct_timeout) |
1005 | |
1006 | - self.preloop() |
1007 | return value |
1008 | |
1009 | def check_answer_in_input_file(self, options, path=False): |
1010 | |
1011 | === modified file 'madgraph/interface/madevent_interface.py' |
1012 | --- madgraph/interface/madevent_interface.py 2012-04-20 05:12:21 +0000 |
1013 | +++ madgraph/interface/madevent_interface.py 2012-05-16 04:17:21 +0000 |
1014 | @@ -24,6 +24,7 @@ |
1015 | import optparse |
1016 | import os |
1017 | import pydoc |
1018 | +import random |
1019 | import re |
1020 | import shutil |
1021 | import subprocess |
1022 | @@ -532,7 +533,7 @@ |
1023 | if not self.me_dir: |
1024 | if not os.path.isfile(args[0]): |
1025 | self.help_open() |
1026 | - raise self.InvalidCmd('No MadEvent path defined. Impossible to associate this name to a file') |
1027 | + raise self.InvalidCmd('No MadEvent path defined. Unable to associate this name to a file') |
1028 | else: |
1029 | return True |
1030 | |
1031 | @@ -683,7 +684,7 @@ |
1032 | if self.results.lastrun: |
1033 | self.set_run_name(self.results.lastrun) |
1034 | else: |
1035 | - raise self.InvalidCmd('No run_name currently define. Impossible to run refine') |
1036 | + raise self.InvalidCmd('No run_name currently define. Unable to run refine') |
1037 | |
1038 | if len(args) > 2: |
1039 | self.help_refine() |
1040 | @@ -719,7 +720,7 @@ |
1041 | |
1042 | if not self.run_name: |
1043 | if not self.results.lastrun: |
1044 | - raise self.InvalidCmd('No run_name currently define. Impossible to run combine') |
1045 | + raise self.InvalidCmd('No run_name currently define. Unable to run combine') |
1046 | else: |
1047 | self.set_run_name(self.results.lastrun) |
1048 | |
1049 | @@ -1324,9 +1325,9 @@ |
1050 | # Check that the directory is not currently running |
1051 | if os.path.exists(pjoin(me_dir,'RunWeb')): |
1052 | message = '''Another instance of madevent is currently running. |
1053 | - Please wait that all instance of madevent are closed. If this message |
1054 | - is an error in itself, you can suppress the files: |
1055 | - %s.''' % pjoin(me_dir,'RunWeb') |
1056 | + Please wait that all instance of madevent are closed. If no |
1057 | + instance is running, you can delete the file |
1058 | + %s and try again.''' % pjoin(me_dir,'RunWeb') |
1059 | raise MadEventAlreadyRunning, message |
1060 | else: |
1061 | os.system('touch %s' % pjoin(me_dir,'RunWeb')) |
1062 | @@ -1357,8 +1358,7 @@ |
1063 | # load the current status of the directory |
1064 | if os.path.exists(pjoin(self.me_dir,'HTML','results.pkl')): |
1065 | self.results = save_load_object.load_from_file(pjoin(self.me_dir,'HTML','results.pkl')) |
1066 | - self.results.path = self.me_dir # allowed to move the directory after some launch |
1067 | - self.results.resetall() |
1068 | + self.results.resetall(self.me_dir) |
1069 | else: |
1070 | model = self.find_model_name() |
1071 | process = self.process # define in find_model_name |
1072 | @@ -1729,7 +1729,8 @@ |
1073 | self.exec_cmd('pythia --no_default', postcmd=False, printcmd=False) |
1074 | # pythia launches pgs/delphes if needed |
1075 | self.store_result() |
1076 | - |
1077 | + |
1078 | + |
1079 | |
1080 | def print_results_in_shell(self, data): |
1081 | """Have a nice results prints in the shell, |
1082 | @@ -1748,8 +1749,6 @@ |
1083 | logger.info(" Matched Cross-section : %.4g +- %.4g pb" % (data['cross_pythia'], data['error_pythia'])) |
1084 | logger.info(" Nb of events after Matching : %s" % data['nb_event_pythia']) |
1085 | logger.info(" " ) |
1086 | - |
1087 | - |
1088 | |
1089 | ############################################################################ |
1090 | def do_calculate_decay_widths(self, line): |
1091 | @@ -2119,6 +2118,8 @@ |
1092 | if not self.banner: |
1093 | self.banner = banner_mod.recover_banner(self.results, 'parton') |
1094 | self.banner.load_basic(self.me_dir) |
1095 | + # Add cross-section/event information |
1096 | + self.banner.add_generation_info(self.results.current['cross'], nb_event) |
1097 | if not hasattr(self, 'random'): self.random = 0 |
1098 | self.banner.change_seed(self.random) |
1099 | if not os.path.exists(pjoin(self.me_dir, 'Events', self.run_name)): |
1100 | @@ -2134,11 +2135,6 @@ |
1101 | misc.call(['%s/put_banner'% self.dirbin, 'unweighted_events.lhe'], |
1102 | cwd=pjoin(self.me_dir, 'Events')) |
1103 | |
1104 | - #if os.path.exists(pjoin(self.me_dir, 'Events', 'unweighted_events.lhe')): |
1105 | - # misc.call(['%s/extract_banner-pl' % self.dirbin, |
1106 | - # 'unweighted_events.lhe', 'banner.txt'], |
1107 | - # cwd=pjoin(self.me_dir, 'Events')) |
1108 | - |
1109 | eradir = self.options['exrootanalysis_path'] |
1110 | madir = self.options['madanalysis_path'] |
1111 | td = self.options['td_path'] |
1112 | @@ -2220,8 +2216,7 @@ |
1113 | output = pjoin(O_path, name) |
1114 | files.mv(input, output) |
1115 | misc.call(['gzip', output], stdout=devnull, stderr=devnull, |
1116 | - cwd=O_path) |
1117 | - |
1118 | + cwd=O_path) |
1119 | self.update_status('End Parton', level='parton', makehtml=False) |
1120 | |
1121 | ############################################################################ |
1122 | @@ -2458,14 +2453,14 @@ |
1123 | pass # Just ensure that html never makes crash this function |
1124 | |
1125 | |
1126 | - # Found the file to suppress |
1127 | + # Found the file to delete |
1128 | |
1129 | - to_suppress = glob.glob(pjoin(self.me_dir, 'Events', run, '*')) |
1130 | - to_suppress += glob.glob(pjoin(self.me_dir, 'HTML', run, '*')) |
1131 | + to_delete = glob.glob(pjoin(self.me_dir, 'Events', run, '*')) |
1132 | + to_delete += glob.glob(pjoin(self.me_dir, 'HTML', run, '*')) |
1133 | # forbid the banner to be removed |
1134 | - to_suppress = [os.path.basename(f) for f in to_suppress if 'banner' not in f] |
1135 | + to_delete = [os.path.basename(f) for f in to_delete if 'banner' not in f] |
1136 | if tag: |
1137 | - to_suppress = [f for f in to_suppress if tag in f] |
1138 | + to_delete = [f for f in to_delete if tag in f] |
1139 | if 'parton' in mode or 'all' in mode: |
1140 | try: |
1141 | if self.results[run][0]['tag'] != tag: |
1142 | @@ -2473,35 +2468,35 @@ |
1143 | except: |
1144 | pass |
1145 | else: |
1146 | - nb_rm = len(to_suppress) |
1147 | + nb_rm = len(to_delete) |
1148 | if os.path.exists(pjoin(self.me_dir, 'Events', run, 'events.lhe.gz')): |
1149 | - to_suppress.append('events.lhe.gz') |
1150 | + to_delete.append('events.lhe.gz') |
1151 | if os.path.exists(pjoin(self.me_dir, 'Events', run, 'unweighted_events.lhe.gz')): |
1152 | - to_suppress.append('unweighted_events.lhe.gz') |
1153 | - if nb_rm != len(to_suppress): |
1154 | + to_delete.append('unweighted_events.lhe.gz') |
1155 | + if nb_rm != len(to_delete): |
1156 | logger.warning('Be carefull that partonic information are on the point to be removed.') |
1157 | if 'all' in mode: |
1158 | - pass # suppress everything |
1159 | + pass # delete everything |
1160 | else: |
1161 | if 'pythia' not in mode: |
1162 | - to_suppress = [f for f in to_suppress if 'pythia' not in f] |
1163 | + to_delete = [f for f in to_delete if 'pythia' not in f] |
1164 | if 'pgs' not in mode: |
1165 | - to_suppress = [f for f in to_suppress if 'pgs' not in f] |
1166 | + to_delete = [f for f in to_delete if 'pgs' not in f] |
1167 | if 'delphes' not in mode: |
1168 | - to_suppress = [f for f in to_suppress if 'delphes' not in f] |
1169 | + to_delete = [f for f in to_delete if 'delphes' not in f] |
1170 | if 'parton' not in mode: |
1171 | - to_suppress = [f for f in to_suppress if 'delphes' in f |
1172 | + to_delete = [f for f in to_delete if 'delphes' in f |
1173 | or 'pgs' in f |
1174 | or 'pythia' in f] |
1175 | - if not self.force and len(to_suppress): |
1176 | - question = 'Do you want to suppress the following files?\n %s' % \ |
1177 | - '\n '.join(to_suppress) |
1178 | + if not self.force and len(to_delete): |
1179 | + question = 'Do you want to delete the following files?\n %s' % \ |
1180 | + '\n '.join(to_delete) |
1181 | ans = self.ask(question, 'y', choices=['y','n']) |
1182 | else: |
1183 | ans = 'y' |
1184 | |
1185 | if ans == 'y': |
1186 | - for file2rm in to_suppress: |
1187 | + for file2rm in to_delete: |
1188 | if os.path.exists(pjoin(self.me_dir, 'Events', run, file2rm)): |
1189 | try: |
1190 | os.remove(pjoin(self.me_dir, 'Events', run, file2rm)) |
1191 | @@ -2523,23 +2518,23 @@ |
1192 | except: |
1193 | pass |
1194 | else: |
1195 | - to_suppress = glob.glob(pjoin(self.me_dir, 'SubProcesses', '%s*' % run)) |
1196 | - to_suppress += glob.glob(pjoin(self.me_dir, 'SubProcesses', '*','%s*' % run)) |
1197 | - to_suppress += glob.glob(pjoin(self.me_dir, 'SubProcesses', '*','*','%s*' % run)) |
1198 | + to_delete = glob.glob(pjoin(self.me_dir, 'SubProcesses', '%s*' % run)) |
1199 | + to_delete += glob.glob(pjoin(self.me_dir, 'SubProcesses', '*','%s*' % run)) |
1200 | + to_delete += glob.glob(pjoin(self.me_dir, 'SubProcesses', '*','*','%s*' % run)) |
1201 | |
1202 | - if self.force or len(to_suppress) == 0: |
1203 | + if self.force or len(to_delete) == 0: |
1204 | ans = 'y' |
1205 | else: |
1206 | - question = 'Do you want to suppress the following files?\n %s' % \ |
1207 | - '\n '.join(to_suppress) |
1208 | + question = 'Do you want to delete the following files?\n %s' % \ |
1209 | + '\n '.join(to_delete) |
1210 | ans = self.ask(question, 'y', choices=['y','n']) |
1211 | |
1212 | if ans == 'y': |
1213 | - for file2rm in to_suppress: |
1214 | + for file2rm in to_delete: |
1215 | os.remove(file2rm) |
1216 | |
1217 | if 'banner' in mode: |
1218 | - to_suppress = glob.glob(pjoin(self.me_dir, 'Events', run, '*')) |
1219 | + to_delete = glob.glob(pjoin(self.me_dir, 'Events', run, '*')) |
1220 | if tag: |
1221 | # remove banner |
1222 | try: |
1223 | @@ -2550,8 +2545,8 @@ |
1224 | if run in self.results: |
1225 | self.results.delete_run(run, tag) |
1226 | return |
1227 | - elif any(['banner' not in os.path.basename(p) for p in to_suppress]): |
1228 | - if to_suppress: |
1229 | + elif any(['banner' not in os.path.basename(p) for p in to_delete]): |
1230 | + if to_delete: |
1231 | raise MadGraph5Error, '''Some output still exists for this run. |
1232 | Please remove those output first. Do for example: |
1233 | remove %s all banner |
1234 | @@ -3064,7 +3059,7 @@ |
1235 | out = misc.call([pjoin(self.dirbin, 'compile_Source')], |
1236 | cwd = self.me_dir) |
1237 | if out: |
1238 | - raise MadEventError, 'Impossible to compile' |
1239 | + raise MadEventError, 'Unable to compile' |
1240 | |
1241 | # set random number |
1242 | if self.run_card['iseed'] != '0': |
1243 | |
1244 | === modified file 'madgraph/interface/madgraph_interface.py' |
1245 | --- madgraph/interface/madgraph_interface.py 2012-04-20 05:12:21 +0000 |
1246 | +++ madgraph/interface/madgraph_interface.py 2012-05-16 04:17:21 +0000 |
1247 | @@ -24,6 +24,7 @@ |
1248 | import re |
1249 | import subprocess |
1250 | import sys |
1251 | +import shutil |
1252 | import traceback |
1253 | import time |
1254 | |
1255 | @@ -1373,7 +1374,7 @@ |
1256 | |
1257 | |
1258 | # options |
1259 | - options = ['--format=Fortran', '--format=Python','--format=Cpp','--output='] |
1260 | + options = ['--format=Fortran', '--format=Python','--format=CPP','--output='] |
1261 | options = self.list_completion(text, options) |
1262 | if options: |
1263 | completion_categories['options'] = options |
1264 | @@ -3209,7 +3210,7 @@ |
1265 | ################ |
1266 | if self._export_format == 'aloha': |
1267 | # catch format |
1268 | - format = [d[11:] for d in args if d.startswith('--language=')] |
1269 | + format = [d[9:] for d in args if d.startswith('--format=')] |
1270 | if not format: |
1271 | format = 'Fortran' |
1272 | else: |
1273 | @@ -3245,10 +3246,12 @@ |
1274 | and self._export_format in ['madevent', 'standalone']: |
1275 | # Don't ask if user already specified force or noclean |
1276 | logger.info('INFO: directory %s already exists.' % self._export_dir) |
1277 | - logger.info('If you continue this directory will be cleaned') |
1278 | + logger.info('If you continue this directory will be deleted and replaced.') |
1279 | answer = self.ask('Do you want to continue?', 'y', ['y','n']) |
1280 | if answer != 'y': |
1281 | raise self.InvalidCmd('Stopped by user request') |
1282 | + else: |
1283 | + shutil.rmtree(self._export_dir) |
1284 | |
1285 | #check if we need to group processes |
1286 | group_subprocesses = False |
1287 | |
1288 | === modified file 'madgraph/iolibs/export_cpp.py' |
1289 | --- madgraph/iolibs/export_cpp.py 2012-02-17 06:01:41 +0000 |
1290 | +++ madgraph/iolibs/export_cpp.py 2012-05-16 04:17:21 +0000 |
1291 | @@ -1195,12 +1195,11 @@ |
1292 | |
1293 | for schannel in schannels: |
1294 | sid = schannel.get('legs')[-1].get('id') |
1295 | - try: |
1296 | + part = self.model.get_particle(sid) |
1297 | + if part: |
1298 | width = self.model.get_particle(sid).get('width') |
1299 | if width.lower() != 'zero': |
1300 | resonances.append(sid) |
1301 | - except KeyError: |
1302 | - pass |
1303 | resonance_set = set(resonances) |
1304 | |
1305 | singleres = 0 |
1306 | |
1307 | === modified file 'madgraph/iolibs/group_subprocs.py' |
1308 | --- madgraph/iolibs/group_subprocs.py 2012-03-28 03:42:34 +0000 |
1309 | +++ madgraph/iolibs/group_subprocs.py 2012-05-16 04:17:21 +0000 |
1310 | @@ -520,6 +520,7 @@ |
1311 | for me in matrix_elements: |
1312 | group_assignment = self.assign_group_to_decay_process(\ |
1313 | me.get('processes')[0]) |
1314 | + assert group_assignment |
1315 | try: |
1316 | me_assignments[group_assignment].append(me) |
1317 | except KeyError: |
1318 | @@ -556,24 +557,23 @@ |
1319 | for decay in process.get('decay_chains'): |
1320 | # Find decay group that has this decay in it |
1321 | ids = [l.get('id') for l in decay.get('legs')] |
1322 | - decay_group = [(i, group) for (i, group) in \ |
1323 | + decay_groups = [(i, group) for (i, group) in \ |
1324 | enumerate(self.get('decay_groups')) \ |
1325 | if any([ids in [[l.get('id') for l in \ |
1326 | a.get('process').get('legs')] \ |
1327 | for a in g.get('amplitudes')] \ |
1328 | for g in group.get('core_groups')])] |
1329 | |
1330 | - assert len(decay_group) > 0 |
1331 | - |
1332 | - for i in range(1,len(decay_group)): |
1333 | - assert decay_group[i-1][1] == decay_group[i][1] |
1334 | - |
1335 | - decay_group = decay_group[0] |
1336 | - |
1337 | - group_assignment = \ |
1338 | - decay_group[1].assign_group_to_decay_process(decay) |
1339 | - |
1340 | - group_assignments.append((decay_group[0], group_assignment)) |
1341 | + for decay_group in decay_groups: |
1342 | + |
1343 | + group_assignment = \ |
1344 | + decay_group[1].assign_group_to_decay_process(decay) |
1345 | + |
1346 | + if group_assignment: |
1347 | + group_assignments.append((decay_group[0], group_assignment)) |
1348 | + |
1349 | + if process.get('decay_chains') and not group_assignments: |
1350 | + return None |
1351 | |
1352 | # Now calculate the corresponding properties for process |
1353 | |
1354 | @@ -584,6 +584,10 @@ |
1355 | if ids in [[l.get('id') for l in \ |
1356 | a.get('process').get('legs')] \ |
1357 | for a in group.get('amplitudes')]] |
1358 | + |
1359 | + if not core_group: |
1360 | + return None |
1361 | + |
1362 | assert len(core_group) == 1 |
1363 | |
1364 | core_group = core_group[0] |
1365 | |
1366 | === modified file 'madgraph/iolibs/helas_call_writers.py' |
1367 | --- madgraph/iolibs/helas_call_writers.py 2012-01-31 16:28:22 +0000 |
1368 | +++ madgraph/iolibs/helas_call_writers.py 2012-05-16 04:17:21 +0000 |
1369 | @@ -925,10 +925,7 @@ |
1370 | |
1371 | # Check if we need to append a charge conjugation flag |
1372 | l = [str(l) for l in argument.get('lorentz')] |
1373 | - flag = [] |
1374 | - if argument.needs_hermitian_conjugate(): |
1375 | - flag = ['C%d' % i for i in \ |
1376 | - argument.get_conjugate_index()] |
1377 | + flag = ['C%d' % i for i in argument.get('conjugate_indices')] |
1378 | routine_name = aloha_writers.combine_name( |
1379 | '%s' % l[0], l[1:], outgoing, flag) |
1380 | call = 'CALL %s' % (routine_name) |
1381 | @@ -1062,10 +1059,7 @@ |
1382 | |
1383 | # Check if we need to append a charge conjugation flag |
1384 | l = [str(l) for l in argument.get('lorentz')] |
1385 | - flag = [] |
1386 | - if argument.needs_hermitian_conjugate(): |
1387 | - flag = ['C%d' % i for i in \ |
1388 | - argument.get_conjugate_index()] |
1389 | + flag = ['C%d' % i for i in argument.get('conjugate_indices')] |
1390 | routine_name = aloha_writers.combine_name( |
1391 | '%s' % l[0], l[1:], outgoing, flag) |
1392 | call = '%s' % (routine_name) |
1393 | @@ -1237,9 +1231,7 @@ |
1394 | |
1395 | # Check if we need to append a charge conjugation flag |
1396 | l = [str(l) for l in argument.get('lorentz')] |
1397 | - flag = [] |
1398 | - if argument.needs_hermitian_conjugate(): |
1399 | - flag = ['C%d' % i for i in argument.get_conjugate_index()] |
1400 | + flag = ['C%d' % i for i in argument.get('conjugate_indices')] |
1401 | routine_name = aloha_writers.combine_name( |
1402 | '%s' % l[0], l[1:], outgoing, flag) |
1403 | |
1404 | |
1405 | === modified file 'madgraph/various/banner.py' |
1406 | --- madgraph/various/banner.py 2012-02-24 16:52:39 +0000 |
1407 | +++ madgraph/various/banner.py 2012-05-16 04:17:21 +0000 |
1408 | @@ -104,6 +104,14 @@ |
1409 | new_seed_str = " %s = iseed" % seed |
1410 | self['mgruncard'] = p.sub(new_seed_str, self['mgruncard']) |
1411 | |
1412 | + def add_generation_info(self, cross, nb_event): |
1413 | + """add info on MGGeneration""" |
1414 | + |
1415 | + text = """ |
1416 | +# Number of Events : %s |
1417 | +# Integrated weight (pb) : %s |
1418 | +""" % (nb_event, cross) |
1419 | + self['MGGenerationInfo'] = text |
1420 | |
1421 | ############################################################################ |
1422 | # SPLIT BANNER |
1423 | |
1424 | === modified file 'madgraph/various/gen_crossxhtml.py' |
1425 | --- madgraph/various/gen_crossxhtml.py 2012-04-19 20:49:31 +0000 |
1426 | +++ madgraph/various/gen_crossxhtml.py 2012-05-16 04:17:21 +0000 |
1427 | @@ -227,8 +227,13 @@ |
1428 | if makehtml: |
1429 | self.output() |
1430 | |
1431 | - def resetall(self): |
1432 | - """check the output status of all run""" |
1433 | + def resetall(self, main_path=None): |
1434 | + """check the output status of all run |
1435 | + main_path redefines the path associated to the run (allowing to move |
1436 | + the directory) |
1437 | + """ |
1438 | + |
1439 | + self.path = main_path |
1440 | |
1441 | for key,run in self.items(): |
1442 | if key == 'web': |
1443 | @@ -236,6 +241,7 @@ |
1444 | for i,subrun in enumerate(run): |
1445 | self.def_current(subrun) |
1446 | self.clean() |
1447 | + self.current.event_path = pjoin(main_path,'Events') |
1448 | if i==0: |
1449 | self.current.update_status() |
1450 | else: |
1451 | |
1452 | === modified file 'madgraph/various/misc.py' |
1453 | --- madgraph/various/misc.py 2012-04-15 06:01:59 +0000 |
1454 | +++ madgraph/various/misc.py 2012-05-16 04:17:21 +0000 |
1455 | @@ -288,7 +288,8 @@ |
1456 | self.data = (self.read(self.blksize) + line).split('\n') |
1457 | except IOError: # can't seek before the beginning of the file |
1458 | self.seek(0) |
1459 | - self.data = string.split(self.read(self.size - (self.blksize * (self.blkcount-1))) + line, '\n') |
1460 | + data = self.read(self.size - (self.blksize * (self.blkcount-1))) + line |
1461 | + self.data = data.split('\n') |
1462 | |
1463 | if len(self.data) == 0: |
1464 | return "" |
1465 | @@ -322,13 +323,6 @@ |
1466 | return line |
1467 | else: |
1468 | raise StopIteration |
1469 | - |
1470 | - def close(self): |
1471 | - """ close correctly file """ |
1472 | - try: |
1473 | - self.close() |
1474 | - except: |
1475 | - pass |
1476 | |
1477 | |
1478 | |
1479 | |
1480 | === modified file 'models/sm/coupling_orders.py' |
1481 | --- models/sm/coupling_orders.py 2011-07-19 18:58:02 +0000 |
1482 | +++ models/sm/coupling_orders.py 2012-05-16 04:17:21 +0000 |
1483 | @@ -1,15 +1,16 @@ |
1484 | -# This file was automatically created by FeynRules $Revision: 634 $ |
1485 | +# This file was automatically created by FeynRules $Revision: 1105 $ |
1486 | # Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010) |
1487 | -# Date: Tue 19 Jul 2011 18:23:49 |
1488 | +# Date: Tue 3 Apr 2012 09:10:20 |
1489 | |
1490 | |
1491 | from object_library import all_orders, CouplingOrder |
1492 | |
1493 | |
1494 | QCD = CouplingOrder(name = 'QCD', |
1495 | - expansion_order = -1, |
1496 | + expansion_order = 99, |
1497 | hierarchy = 1) |
1498 | |
1499 | QED = CouplingOrder(name = 'QED', |
1500 | - expansion_order = -1, |
1501 | + expansion_order = 99, |
1502 | hierarchy = 2) |
1503 | + |
1504 | |
1505 | === modified file 'models/sm/couplings.py' |
1506 | --- models/sm/couplings.py 2011-07-19 18:58:02 +0000 |
1507 | +++ models/sm/couplings.py 2012-05-16 04:17:21 +0000 |
1508 | @@ -1,6 +1,6 @@ |
1509 | -# This file was automatically created by FeynRules $Revision: 634 $ |
1510 | +# This file was automatically created by FeynRules $Revision: 1105 $ |
1511 | # Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010) |
1512 | -# Date: Wed 6 Jul 2011 14:07:37 |
1513 | +# Date: Tue 3 Apr 2012 09:10:20 |
1514 | |
1515 | |
1516 | from object_library import all_couplings, Coupling |
1517 | @@ -46,154 +46,158 @@ |
1518 | order = {'QED':2}) |
1519 | |
1520 | GC_10 = Coupling(name = 'GC_10', |
1521 | + value = '-6*complex(0,1)*lam', |
1522 | + order = {'QED':2}) |
1523 | + |
1524 | +GC_11 = Coupling(name = 'GC_11', |
1525 | value = '(ee**2*complex(0,1))/(2.*sw**2)', |
1526 | order = {'QED':2}) |
1527 | |
1528 | -GC_11 = Coupling(name = 'GC_11', |
1529 | +GC_12 = Coupling(name = 'GC_12', |
1530 | value = '(ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1531 | order = {'QED':1}) |
1532 | |
1533 | -GC_12 = Coupling(name = 'GC_12', |
1534 | - value = '(CKM11*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1535 | - order = {'QED':1}) |
1536 | - |
1537 | GC_13 = Coupling(name = 'GC_13', |
1538 | - value = '(CKM12*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1539 | + value = '(CKM1x1*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1540 | order = {'QED':1}) |
1541 | |
1542 | GC_14 = Coupling(name = 'GC_14', |
1543 | - value = '(CKM13*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1544 | + value = '(CKM1x2*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1545 | order = {'QED':1}) |
1546 | |
1547 | GC_15 = Coupling(name = 'GC_15', |
1548 | - value = '(CKM21*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1549 | + value = '(CKM1x3*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1550 | order = {'QED':1}) |
1551 | |
1552 | GC_16 = Coupling(name = 'GC_16', |
1553 | - value = '(CKM22*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1554 | + value = '(CKM2x1*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1555 | order = {'QED':1}) |
1556 | |
1557 | GC_17 = Coupling(name = 'GC_17', |
1558 | - value = '(CKM23*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1559 | + value = '(CKM2x2*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1560 | order = {'QED':1}) |
1561 | |
1562 | GC_18 = Coupling(name = 'GC_18', |
1563 | - value = '(CKM31*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1564 | + value = '(CKM2x3*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1565 | order = {'QED':1}) |
1566 | |
1567 | GC_19 = Coupling(name = 'GC_19', |
1568 | - value = '(CKM32*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1569 | + value = '(CKM3x1*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1570 | order = {'QED':1}) |
1571 | |
1572 | GC_20 = Coupling(name = 'GC_20', |
1573 | - value = '(CKM33*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1574 | + value = '(CKM3x2*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1575 | order = {'QED':1}) |
1576 | |
1577 | GC_21 = Coupling(name = 'GC_21', |
1578 | + value = '(CKM3x3*ee*complex(0,1))/(sw*cmath.sqrt(2))', |
1579 | + order = {'QED':1}) |
1580 | + |
1581 | +GC_22 = Coupling(name = 'GC_22', |
1582 | value = '-(cw*ee*complex(0,1))/(2.*sw)', |
1583 | order = {'QED':1}) |
1584 | |
1585 | -GC_22 = Coupling(name = 'GC_22', |
1586 | +GC_23 = Coupling(name = 'GC_23', |
1587 | value = '(cw*ee*complex(0,1))/(2.*sw)', |
1588 | order = {'QED':1}) |
1589 | |
1590 | -GC_23 = Coupling(name = 'GC_23', |
1591 | +GC_24 = Coupling(name = 'GC_24', |
1592 | value = '-(ee*complex(0,1)*sw)/(6.*cw)', |
1593 | order = {'QED':1}) |
1594 | |
1595 | -GC_24 = Coupling(name = 'GC_24', |
1596 | +GC_25 = Coupling(name = 'GC_25', |
1597 | value = '(ee*complex(0,1)*sw)/(2.*cw)', |
1598 | order = {'QED':1}) |
1599 | |
1600 | -GC_25 = Coupling(name = 'GC_25', |
1601 | +GC_26 = Coupling(name = 'GC_26', |
1602 | value = 'complex(0,1)*gw*sw', |
1603 | order = {'QED':1}) |
1604 | |
1605 | -GC_26 = Coupling(name = 'GC_26', |
1606 | +GC_27 = Coupling(name = 'GC_27', |
1607 | value = '-2*cw*complex(0,1)*gw**2*sw', |
1608 | order = {'QED':2}) |
1609 | |
1610 | -GC_27 = Coupling(name = 'GC_27', |
1611 | +GC_28 = Coupling(name = 'GC_28', |
1612 | value = 'complex(0,1)*gw**2*sw**2', |
1613 | order = {'QED':2}) |
1614 | |
1615 | -GC_28 = Coupling(name = 'GC_28', |
1616 | +GC_29 = Coupling(name = 'GC_29', |
1617 | value = '(cw*ee*complex(0,1))/(2.*sw) + (ee*complex(0,1)*sw)/(2.*cw)', |
1618 | order = {'QED':1}) |
1619 | |
1620 | -GC_29 = Coupling(name = 'GC_29', |
1621 | +GC_30 = Coupling(name = 'GC_30', |
1622 | value = 'ee**2*complex(0,1) + (cw**2*ee**2*complex(0,1))/(2.*sw**2) + (ee**2*complex(0,1)*sw**2)/(2.*cw**2)', |
1623 | order = {'QED':2}) |
1624 | |
1625 | -GC_30 = Coupling(name = 'GC_30', |
1626 | +GC_31 = Coupling(name = 'GC_31', |
1627 | value = '-6*complex(0,1)*lam*v', |
1628 | order = {'QED':1}) |
1629 | |
1630 | -GC_31 = Coupling(name = 'GC_31', |
1631 | +GC_32 = Coupling(name = 'GC_32', |
1632 | value = '(ee**2*complex(0,1)*v)/(2.*sw**2)', |
1633 | order = {'QED':1}) |
1634 | |
1635 | -GC_32 = Coupling(name = 'GC_32', |
1636 | +GC_33 = Coupling(name = 'GC_33', |
1637 | value = 'ee**2*complex(0,1)*v + (cw**2*ee**2*complex(0,1)*v)/(2.*sw**2) + (ee**2*complex(0,1)*sw**2*v)/(2.*cw**2)', |
1638 | order = {'QED':1}) |
1639 | |
1640 | -GC_33 = Coupling(name = 'GC_33', |
1641 | +GC_34 = Coupling(name = 'GC_34', |
1642 | value = '-((complex(0,1)*yb)/cmath.sqrt(2))', |
1643 | order = {'QED':1}) |
1644 | |
1645 | -GC_34 = Coupling(name = 'GC_34', |
1646 | +GC_35 = Coupling(name = 'GC_35', |
1647 | value = '-((complex(0,1)*yc)/cmath.sqrt(2))', |
1648 | order = {'QED':1}) |
1649 | |
1650 | -GC_35 = Coupling(name = 'GC_35', |
1651 | +GC_36 = Coupling(name = 'GC_36', |
1652 | value = '-((complex(0,1)*ye)/cmath.sqrt(2))', |
1653 | order = {'QED':1}) |
1654 | |
1655 | -GC_36 = Coupling(name = 'GC_36', |
1656 | +GC_37 = Coupling(name = 'GC_37', |
1657 | value = '-((complex(0,1)*ym)/cmath.sqrt(2))', |
1658 | order = {'QED':1}) |
1659 | |
1660 | -GC_37 = Coupling(name = 'GC_37', |
1661 | +GC_38 = Coupling(name = 'GC_38', |
1662 | value = '-((complex(0,1)*yt)/cmath.sqrt(2))', |
1663 | order = {'QED':1}) |
1664 | |
1665 | -GC_38 = Coupling(name = 'GC_38', |
1666 | +GC_39 = Coupling(name = 'GC_39', |
1667 | value = '-((complex(0,1)*ytau)/cmath.sqrt(2))', |
1668 | order = {'QED':1}) |
1669 | |
1670 | -GC_39 = Coupling(name = 'GC_39', |
1671 | - value = '(ee*complex(0,1)*complexconjugate(CKM11))/(sw*cmath.sqrt(2))', |
1672 | - order = {'QED':1}) |
1673 | - |
1674 | GC_40 = Coupling(name = 'GC_40', |
1675 | - value = '(ee*complex(0,1)*complexconjugate(CKM12))/(sw*cmath.sqrt(2))', |
1676 | + value = '(ee*complex(0,1)*complexconjugate(CKM1x1))/(sw*cmath.sqrt(2))', |
1677 | order = {'QED':1}) |
1678 | |
1679 | GC_41 = Coupling(name = 'GC_41', |
1680 | - value = '(ee*complex(0,1)*complexconjugate(CKM13))/(sw*cmath.sqrt(2))', |
1681 | + value = '(ee*complex(0,1)*complexconjugate(CKM1x2))/(sw*cmath.sqrt(2))', |
1682 | order = {'QED':1}) |
1683 | |
1684 | GC_42 = Coupling(name = 'GC_42', |
1685 | - value = '(ee*complex(0,1)*complexconjugate(CKM21))/(sw*cmath.sqrt(2))', |
1686 | + value = '(ee*complex(0,1)*complexconjugate(CKM1x3))/(sw*cmath.sqrt(2))', |
1687 | order = {'QED':1}) |
1688 | |
1689 | GC_43 = Coupling(name = 'GC_43', |
1690 | - value = '(ee*complex(0,1)*complexconjugate(CKM22))/(sw*cmath.sqrt(2))', |
1691 | + value = '(ee*complex(0,1)*complexconjugate(CKM2x1))/(sw*cmath.sqrt(2))', |
1692 | order = {'QED':1}) |
1693 | |
1694 | GC_44 = Coupling(name = 'GC_44', |
1695 | - value = '(ee*complex(0,1)*complexconjugate(CKM23))/(sw*cmath.sqrt(2))', |
1696 | + value = '(ee*complex(0,1)*complexconjugate(CKM2x2))/(sw*cmath.sqrt(2))', |
1697 | order = {'QED':1}) |
1698 | |
1699 | GC_45 = Coupling(name = 'GC_45', |
1700 | - value = '(ee*complex(0,1)*complexconjugate(CKM31))/(sw*cmath.sqrt(2))', |
1701 | + value = '(ee*complex(0,1)*complexconjugate(CKM2x3))/(sw*cmath.sqrt(2))', |
1702 | order = {'QED':1}) |
1703 | |
1704 | GC_46 = Coupling(name = 'GC_46', |
1705 | - value = '(ee*complex(0,1)*complexconjugate(CKM32))/(sw*cmath.sqrt(2))', |
1706 | + value = '(ee*complex(0,1)*complexconjugate(CKM3x1))/(sw*cmath.sqrt(2))', |
1707 | order = {'QED':1}) |
1708 | |
1709 | GC_47 = Coupling(name = 'GC_47', |
1710 | - value = '(ee*complex(0,1)*complexconjugate(CKM33))/(sw*cmath.sqrt(2))', |
1711 | + value = '(ee*complex(0,1)*complexconjugate(CKM3x2))/(sw*cmath.sqrt(2))', |
1712 | + order = {'QED':1}) |
1713 | + |
1714 | +GC_48 = Coupling(name = 'GC_48', |
1715 | + value = '(ee*complex(0,1)*complexconjugate(CKM3x3))/(sw*cmath.sqrt(2))', |
1716 | order = {'QED':1}) |
1717 | |
1718 | |
1719 | === modified file 'models/sm/lorentz.py' |
1720 | --- models/sm/lorentz.py 2011-07-19 18:58:02 +0000 |
1721 | +++ models/sm/lorentz.py 2012-05-16 04:17:21 +0000 |
1722 | @@ -1,6 +1,6 @@ |
1723 | -# This file was automatically created by FeynRules $Revision: 634 $ |
1724 | +# This file was automatically created by FeynRules $Revision: 1105 $ |
1725 | # Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010) |
1726 | -# Date: Wed 6 Jul 2011 14:07:37 |
1727 | +# Date: Tue 3 Apr 2012 09:10:20 |
1728 | |
1729 | |
1730 | from object_library import all_lorentz, Lorentz |
1731 | @@ -49,6 +49,10 @@ |
1732 | spins = [ 3, 3, 3 ], |
1733 | structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(2,3)*Metric(1,3) + P(1,2)*Metric(2,3) - P(1,3)*Metric(2,3)') |
1734 | |
1735 | +SSSS1 = Lorentz(name = 'SSSS1', |
1736 | + spins = [ 1, 1, 1, 1 ], |
1737 | + structure = '1') |
1738 | + |
1739 | VVSS1 = Lorentz(name = 'VVSS1', |
1740 | spins = [ 3, 3, 1, 1 ], |
1741 | structure = 'Metric(1,2)') |
1742 | |
1743 | === modified file 'models/sm/parameters.py' |
1744 | --- models/sm/parameters.py 2011-07-19 18:58:02 +0000 |
1745 | +++ models/sm/parameters.py 2012-05-16 04:17:21 +0000 |
1746 | @@ -1,6 +1,6 @@ |
1747 | -# This file was automatically created by FeynRules $Revision: 634 $ |
1748 | +# This file was automatically created by FeynRules $Revision: 1105 $ |
1749 | # Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010) |
1750 | -# Date: Wed 6 Jul 2011 14:07:37 |
1751 | +# Date: Tue 3 Apr 2012 09:10:20 |
1752 | |
1753 | |
1754 | |
1755 | @@ -225,59 +225,59 @@ |
1756 | lhablock = 'DECAY', |
1757 | lhacode = [ 15 ]) |
1758 | |
1759 | -CKM11 = Parameter(name = 'CKM11', |
1760 | - nature = 'internal', |
1761 | - type = 'complex', |
1762 | - value = '1 - lamWS**2/2.', |
1763 | - texname = '\\text{CKM11}') |
1764 | - |
1765 | -CKM12 = Parameter(name = 'CKM12', |
1766 | - nature = 'internal', |
1767 | - type = 'complex', |
1768 | - value = 'lamWS', |
1769 | - texname = '\\text{CKM12}') |
1770 | - |
1771 | -CKM13 = Parameter(name = 'CKM13', |
1772 | - nature = 'internal', |
1773 | - type = 'complex', |
1774 | - value = 'AWS*lamWS**3*(-(etaWS*complex(0,1)) + rhoWS)', |
1775 | - texname = '\\text{CKM13}') |
1776 | - |
1777 | -CKM21 = Parameter(name = 'CKM21', |
1778 | - nature = 'internal', |
1779 | - type = 'complex', |
1780 | - value = '-lamWS', |
1781 | - texname = '\\text{CKM21}') |
1782 | - |
1783 | -CKM22 = Parameter(name = 'CKM22', |
1784 | - nature = 'internal', |
1785 | - type = 'complex', |
1786 | - value = '1 - lamWS**2/2.', |
1787 | - texname = '\\text{CKM22}') |
1788 | - |
1789 | -CKM23 = Parameter(name = 'CKM23', |
1790 | - nature = 'internal', |
1791 | - type = 'complex', |
1792 | - value = 'AWS*lamWS**2', |
1793 | - texname = '\\text{CKM23}') |
1794 | - |
1795 | -CKM31 = Parameter(name = 'CKM31', |
1796 | - nature = 'internal', |
1797 | - type = 'complex', |
1798 | - value = 'AWS*lamWS**3*(1 - etaWS*complex(0,1) - rhoWS)', |
1799 | - texname = '\\text{CKM31}') |
1800 | - |
1801 | -CKM32 = Parameter(name = 'CKM32', |
1802 | - nature = 'internal', |
1803 | - type = 'complex', |
1804 | - value = '-(AWS*lamWS**2)', |
1805 | - texname = '\\text{CKM32}') |
1806 | - |
1807 | -CKM33 = Parameter(name = 'CKM33', |
1808 | - nature = 'internal', |
1809 | - type = 'complex', |
1810 | - value = '1', |
1811 | - texname = '\\text{CKM33}') |
1812 | +CKM1x1 = Parameter(name = 'CKM1x1', |
1813 | + nature = 'internal', |
1814 | + type = 'complex', |
1815 | + value = '1 - lamWS**2/2.', |
1816 | + texname = '\\text{CKM1x1}') |
1817 | + |
1818 | +CKM1x2 = Parameter(name = 'CKM1x2', |
1819 | + nature = 'internal', |
1820 | + type = 'complex', |
1821 | + value = 'lamWS', |
1822 | + texname = '\\text{CKM1x2}') |
1823 | + |
1824 | +CKM1x3 = Parameter(name = 'CKM1x3', |
1825 | + nature = 'internal', |
1826 | + type = 'complex', |
1827 | + value = 'AWS*lamWS**3*(-(etaWS*complex(0,1)) + rhoWS)', |
1828 | + texname = '\\text{CKM1x3}') |
1829 | + |
1830 | +CKM2x1 = Parameter(name = 'CKM2x1', |
1831 | + nature = 'internal', |
1832 | + type = 'complex', |
1833 | + value = '-lamWS', |
1834 | + texname = '\\text{CKM2x1}') |
1835 | + |
1836 | +CKM2x2 = Parameter(name = 'CKM2x2', |
1837 | + nature = 'internal', |
1838 | + type = 'complex', |
1839 | + value = '1 - lamWS**2/2.', |
1840 | + texname = '\\text{CKM2x2}') |
1841 | + |
1842 | +CKM2x3 = Parameter(name = 'CKM2x3', |
1843 | + nature = 'internal', |
1844 | + type = 'complex', |
1845 | + value = 'AWS*lamWS**2', |
1846 | + texname = '\\text{CKM2x3}') |
1847 | + |
1848 | +CKM3x1 = Parameter(name = 'CKM3x1', |
1849 | + nature = 'internal', |
1850 | + type = 'complex', |
1851 | + value = 'AWS*lamWS**3*(1 - etaWS*complex(0,1) - rhoWS)', |
1852 | + texname = '\\text{CKM3x1}') |
1853 | + |
1854 | +CKM3x2 = Parameter(name = 'CKM3x2', |
1855 | + nature = 'internal', |
1856 | + type = 'complex', |
1857 | + value = '-(AWS*lamWS**2)', |
1858 | + texname = '\\text{CKM3x2}') |
1859 | + |
1860 | +CKM3x3 = Parameter(name = 'CKM3x3', |
1861 | + nature = 'internal', |
1862 | + type = 'complex', |
1863 | + value = '1', |
1864 | + texname = '\\text{CKM3x3}') |
1865 | |
1866 | aEW = Parameter(name = 'aEW', |
1867 | nature = 'internal', |
1868 | |
1869 | === modified file 'models/sm/particles.py' |
1870 | --- models/sm/particles.py 2011-07-19 18:58:02 +0000 |
1871 | +++ models/sm/particles.py 2012-05-16 04:17:21 +0000 |
1872 | @@ -1,6 +1,6 @@ |
1873 | -# This file was automatically created by FeynRules $Revision: 634 $ |
1874 | +# This file was automatically created by FeynRules $Revision: 1105 $ |
1875 | # Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010) |
1876 | -# Date: Wed 6 Jul 2011 14:07:37 |
1877 | +# Date: Tue 3 Apr 2012 09:10:20 |
1878 | |
1879 | |
1880 | from __future__ import division |
1881 | @@ -15,10 +15,10 @@ |
1882 | mass = Param.ZERO, |
1883 | width = Param.ZERO, |
1884 | texname = 've', |
1885 | - antitexname = 've', |
1886 | + antitexname = 've~', |
1887 | charge = 0, |
1888 | - LeptonNumber = 1, |
1889 | - GhostNumber = 0) |
1890 | + GhostNumber = 0, |
1891 | + LeptonNumber = 1) |
1892 | |
1893 | ve__tilde__ = ve.anti() |
1894 | |
1895 | @@ -30,10 +30,10 @@ |
1896 | mass = Param.ZERO, |
1897 | width = Param.ZERO, |
1898 | texname = 'vm', |
1899 | - antitexname = 'vm', |
1900 | + antitexname = 'vm~', |
1901 | charge = 0, |
1902 | - LeptonNumber = 1, |
1903 | - GhostNumber = 0) |
1904 | + GhostNumber = 0, |
1905 | + LeptonNumber = 1) |
1906 | |
1907 | vm__tilde__ = vm.anti() |
1908 | |
1909 | @@ -45,10 +45,10 @@ |
1910 | mass = Param.ZERO, |
1911 | width = Param.ZERO, |
1912 | texname = 'vt', |
1913 | - antitexname = 'vt', |
1914 | + antitexname = 'vt~', |
1915 | charge = 0, |
1916 | - LeptonNumber = 1, |
1917 | - GhostNumber = 0) |
1918 | + GhostNumber = 0, |
1919 | + LeptonNumber = 1) |
1920 | |
1921 | vt__tilde__ = vt.anti() |
1922 | |
1923 | @@ -60,10 +60,10 @@ |
1924 | mass = Param.ZERO, |
1925 | width = Param.ZERO, |
1926 | texname = 'u', |
1927 | - antitexname = 'u', |
1928 | + antitexname = 'u~', |
1929 | charge = 2/3, |
1930 | - LeptonNumber = 0, |
1931 | - GhostNumber = 0) |
1932 | + GhostNumber = 0, |
1933 | + LeptonNumber = 0) |
1934 | |
1935 | u__tilde__ = u.anti() |
1936 | |
1937 | @@ -75,10 +75,10 @@ |
1938 | mass = Param.MC, |
1939 | width = Param.ZERO, |
1940 | texname = 'c', |
1941 | - antitexname = 'c', |
1942 | + antitexname = 'c~', |
1943 | charge = 2/3, |
1944 | - LeptonNumber = 0, |
1945 | - GhostNumber = 0) |
1946 | + GhostNumber = 0, |
1947 | + LeptonNumber = 0) |
1948 | |
1949 | c__tilde__ = c.anti() |
1950 | |
1951 | @@ -90,10 +90,10 @@ |
1952 | mass = Param.MT, |
1953 | width = Param.WT, |
1954 | texname = 't', |
1955 | - antitexname = 't', |
1956 | + antitexname = 't~', |
1957 | charge = 2/3, |
1958 | - LeptonNumber = 0, |
1959 | - GhostNumber = 0) |
1960 | + GhostNumber = 0, |
1961 | + LeptonNumber = 0) |
1962 | |
1963 | t__tilde__ = t.anti() |
1964 | |
1965 | @@ -105,10 +105,10 @@ |
1966 | mass = Param.ZERO, |
1967 | width = Param.ZERO, |
1968 | texname = 'd', |
1969 | - antitexname = 'd', |
1970 | + antitexname = 'd~', |
1971 | charge = -1/3, |
1972 | - LeptonNumber = 0, |
1973 | - GhostNumber = 0) |
1974 | + GhostNumber = 0, |
1975 | + LeptonNumber = 0) |
1976 | |
1977 | d__tilde__ = d.anti() |
1978 | |
1979 | @@ -120,10 +120,10 @@ |
1980 | mass = Param.ZERO, |
1981 | width = Param.ZERO, |
1982 | texname = 's', |
1983 | - antitexname = 's', |
1984 | + antitexname = 's~', |
1985 | charge = -1/3, |
1986 | - LeptonNumber = 0, |
1987 | - GhostNumber = 0) |
1988 | + GhostNumber = 0, |
1989 | + LeptonNumber = 0) |
1990 | |
1991 | s__tilde__ = s.anti() |
1992 | |
1993 | @@ -135,10 +135,10 @@ |
1994 | mass = Param.MB, |
1995 | width = Param.ZERO, |
1996 | texname = 'b', |
1997 | - antitexname = 'b', |
1998 | + antitexname = 'b~', |
1999 | charge = -1/3, |
2000 | - LeptonNumber = 0, |
2001 | - GhostNumber = 0) |
2002 | + GhostNumber = 0, |
2003 | + LeptonNumber = 0) |
2004 | |
2005 | b__tilde__ = b.anti() |
2006 | |
2007 | @@ -150,10 +150,10 @@ |
2008 | mass = Param.ZERO, |
2009 | width = Param.ZERO, |
2010 | texname = 'ghA', |
2011 | - antitexname = 'ghA', |
2012 | + antitexname = 'ghA~', |
2013 | charge = 0, |
2014 | - LeptonNumber = 0, |
2015 | - GhostNumber = 1) |
2016 | + GhostNumber = 1, |
2017 | + LeptonNumber = 0) |
2018 | |
2019 | ghA__tilde__ = ghA.anti() |
2020 | |
2021 | @@ -163,12 +163,12 @@ |
2022 | spin = -1, |
2023 | color = 1, |
2024 | mass = Param.MZ, |
2025 | - width = Param.ZERO, |
2026 | + width = Param.WZ, |
2027 | texname = 'ghZ', |
2028 | - antitexname = 'ghZ', |
2029 | + antitexname = 'ghZ~', |
2030 | charge = 0, |
2031 | - LeptonNumber = 0, |
2032 | - GhostNumber = 1) |
2033 | + GhostNumber = 1, |
2034 | + LeptonNumber = 0) |
2035 | |
2036 | ghZ__tilde__ = ghZ.anti() |
2037 | |
2038 | @@ -178,12 +178,12 @@ |
2039 | spin = -1, |
2040 | color = 1, |
2041 | mass = Param.MW, |
2042 | - width = Param.ZERO, |
2043 | + width = Param.WW, |
2044 | texname = 'ghWp', |
2045 | - antitexname = 'ghWp', |
2046 | + antitexname = 'ghWp~', |
2047 | charge = 1, |
2048 | - LeptonNumber = 0, |
2049 | - GhostNumber = 1) |
2050 | + GhostNumber = 1, |
2051 | + LeptonNumber = 0) |
2052 | |
2053 | ghWp__tilde__ = ghWp.anti() |
2054 | |
2055 | @@ -193,12 +193,12 @@ |
2056 | spin = -1, |
2057 | color = 1, |
2058 | mass = Param.MW, |
2059 | - width = Param.ZERO, |
2060 | + width = Param.WW, |
2061 | texname = 'ghWm', |
2062 | - antitexname = 'ghWm', |
2063 | + antitexname = 'ghWm~', |
2064 | charge = -1, |
2065 | - LeptonNumber = 0, |
2066 | - GhostNumber = 1) |
2067 | + GhostNumber = 1, |
2068 | + LeptonNumber = 0) |
2069 | |
2070 | ghWm__tilde__ = ghWm.anti() |
2071 | |
2072 | @@ -210,10 +210,10 @@ |
2073 | mass = Param.ZERO, |
2074 | width = Param.ZERO, |
2075 | texname = 'ghG', |
2076 | - antitexname = 'ghG', |
2077 | + antitexname = 'ghG~', |
2078 | charge = 0, |
2079 | - LeptonNumber = 0, |
2080 | - GhostNumber = 1) |
2081 | + GhostNumber = 1, |
2082 | + LeptonNumber = 0) |
2083 | |
2084 | ghG__tilde__ = ghG.anti() |
2085 | |
2086 | @@ -227,8 +227,8 @@ |
2087 | texname = 'A', |
2088 | antitexname = 'A', |
2089 | charge = 0, |
2090 | - LeptonNumber = 0, |
2091 | - GhostNumber = 0) |
2092 | + GhostNumber = 0, |
2093 | + LeptonNumber = 0) |
2094 | |
2095 | Z = Particle(pdg_code = 23, |
2096 | name = 'Z', |
2097 | @@ -240,8 +240,8 @@ |
2098 | texname = 'Z', |
2099 | antitexname = 'Z', |
2100 | charge = 0, |
2101 | - LeptonNumber = 0, |
2102 | - GhostNumber = 0) |
2103 | + GhostNumber = 0, |
2104 | + LeptonNumber = 0) |
2105 | |
2106 | W__plus__ = Particle(pdg_code = 24, |
2107 | name = 'W+', |
2108 | @@ -251,10 +251,10 @@ |
2109 | mass = Param.MW, |
2110 | width = Param.WW, |
2111 | texname = 'W+', |
2112 | - antitexname = 'W+', |
2113 | + antitexname = 'W-', |
2114 | charge = 1, |
2115 | - LeptonNumber = 0, |
2116 | - GhostNumber = 0) |
2117 | + GhostNumber = 0, |
2118 | + LeptonNumber = 0) |
2119 | |
2120 | W__minus__ = W__plus__.anti() |
2121 | |
2122 | @@ -268,8 +268,8 @@ |
2123 | texname = 'G', |
2124 | antitexname = 'G', |
2125 | charge = 0, |
2126 | - LeptonNumber = 0, |
2127 | - GhostNumber = 0) |
2128 | + GhostNumber = 0, |
2129 | + LeptonNumber = 0) |
2130 | |
2131 | H = Particle(pdg_code = 25, |
2132 | name = 'H', |
2133 | @@ -281,8 +281,8 @@ |
2134 | texname = '\\phi', |
2135 | antitexname = '\\phi', |
2136 | charge = 0, |
2137 | - LeptonNumber = 0, |
2138 | - GhostNumber = 0) |
2139 | + GhostNumber = 0, |
2140 | + LeptonNumber = 0) |
2141 | |
2142 | phi0 = Particle(pdg_code = 250, |
2143 | name = 'phi0', |
2144 | @@ -295,8 +295,8 @@ |
2145 | antitexname = 'phi0', |
2146 | GoldstoneBoson = True, |
2147 | charge = 0, |
2148 | - LeptonNumber = 0, |
2149 | - GhostNumber = 0) |
2150 | + GhostNumber = 0, |
2151 | + LeptonNumber = 0) |
2152 | |
2153 | phi__plus__ = Particle(pdg_code = 251, |
2154 | name = 'phi+', |
2155 | @@ -306,11 +306,11 @@ |
2156 | mass = Param.MW, |
2157 | width = Param.ZERO, |
2158 | texname = '\\phi^+', |
2159 | - antitexname = '\\phi^+', |
2160 | + antitexname = '\\phi^-', |
2161 | GoldstoneBoson = True, |
2162 | charge = 1, |
2163 | - LeptonNumber = 0, |
2164 | - GhostNumber = 0) |
2165 | + GhostNumber = 0, |
2166 | + LeptonNumber = 0) |
2167 | |
2168 | phi__minus__ = phi__plus__.anti() |
2169 | |
2170 | @@ -322,10 +322,10 @@ |
2171 | mass = Param.Me, |
2172 | width = Param.ZERO, |
2173 | texname = 'e-', |
2174 | - antitexname = 'e-', |
2175 | + antitexname = 'e+', |
2176 | charge = -1, |
2177 | - LeptonNumber = 1, |
2178 | - GhostNumber = 0) |
2179 | + GhostNumber = 0, |
2180 | + LeptonNumber = 1) |
2181 | |
2182 | e__plus__ = e__minus__.anti() |
2183 | |
2184 | @@ -337,10 +337,10 @@ |
2185 | mass = Param.MM, |
2186 | width = Param.ZERO, |
2187 | texname = 'm-', |
2188 | - antitexname = 'm-', |
2189 | + antitexname = 'm+', |
2190 | charge = -1, |
2191 | - LeptonNumber = 1, |
2192 | - GhostNumber = 0) |
2193 | + GhostNumber = 0, |
2194 | + LeptonNumber = 1) |
2195 | |
2196 | m__plus__ = m__minus__.anti() |
2197 | |
2198 | @@ -352,10 +352,10 @@ |
2199 | mass = Param.MTA, |
2200 | width = Param.WTau, |
2201 | texname = 'tt-', |
2202 | - antitexname = 'tt-', |
2203 | + antitexname = 'tt+', |
2204 | charge = -1, |
2205 | - LeptonNumber = 1, |
2206 | - GhostNumber = 0) |
2207 | + GhostNumber = 0, |
2208 | + LeptonNumber = 1) |
2209 | |
2210 | tt__plus__ = tt__minus__.anti() |
2211 | |
2212 | |
2213 | === added file 'models/sm/restrict_lepton_masses.dat' |
2214 | --- models/sm/restrict_lepton_masses.dat 1970-01-01 00:00:00 +0000 |
2215 | +++ models/sm/restrict_lepton_masses.dat 2012-05-16 04:17:21 +0000 |
2216 | @@ -0,0 +1,53 @@ |
2217 | +###################################################################### |
2218 | +## PARAM_CARD AUTOMATICALY GENERATED BY THE UFO ##################### |
2219 | +###################################################################### |
2220 | + |
2221 | +################################### |
2222 | +## INFORMATION FOR SMINPUTS |
2223 | +################################### |
2224 | +Block SMINPUTS |
2225 | + 1 1.325070e+02 # aEWM1 |
2226 | + 2 1.166390e-05 # Gf |
2227 | + 3 1.180000e-01 # aS |
2228 | + |
2229 | +################################### |
2230 | +## INFORMATION FOR MASS |
2231 | +################################### |
2232 | +Block MASS |
2233 | + 4 0.000000e+00 # MC |
2234 | + 5 4.700000e+00 # MB |
2235 | + 6 1.730000e+02 # MT |
2236 | + 11 5.110000e-04 # Me |
2237 | + 13 1.056600e-01 # MM |
2238 | + 15 1.777000e+00 # MTA |
2239 | + 23 9.118800e+01 # MZ |
2240 | + 25 1.200000e+02 # MH |
2241 | + |
2242 | +################################### |
2243 | +## INFORMATION FOR DECAY |
2244 | +################################### |
2245 | +DECAY 6 1.491500E+00 |
2246 | +DECAY 15 2.270000e-12 |
2247 | +DECAY 23 2.441404e+00 |
2248 | +DECAY 24 2.047600e+00 |
2249 | +DECAY 25 5.753088e-03 |
2250 | + |
2251 | +################################### |
2252 | +## INFORMATION FOR WOLFENSTEIN |
2253 | +################################### |
2254 | +Block Wolfenstein |
2255 | + 1 0.000000e+00 # lamWS |
2256 | + 2 0.000000e+00 # AWS |
2257 | + 3 0.000000e+00 # rhoWS |
2258 | + 4 0.000000e+00 # etaWS |
2259 | + |
2260 | +################################### |
2261 | +## INFORMATION FOR YUKAWA |
2262 | +################################### |
2263 | +Block YUKAWA |
2264 | + 4 0.000000e+00 # ymc |
2265 | + 5 4.200000e+00 # ymb |
2266 | + 6 1.645000e+02 # ymt |
2267 | + 11 0.000000e+00 # yme |
2268 | + 13 0.000000e+00 # ymm |
2269 | + 15 1.777000e+00 # ymtau |
2270 | |
2271 | === modified file 'models/sm/vertices.py' |
2272 | --- models/sm/vertices.py 2011-07-19 18:58:02 +0000 |
2273 | +++ models/sm/vertices.py 2012-05-16 04:17:21 +0000 |
2274 | @@ -1,6 +1,6 @@ |
2275 | -# This file was automatically created by FeynRules $Revision: 634 $ |
2276 | +# This file was automatically created by FeynRules $Revision: 1105 $ |
2277 | # Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010) |
2278 | -# Date: Wed 6 Jul 2011 14:07:37 |
2279 | +# Date: Tue 3 Apr 2012 09:10:20 |
2280 | |
2281 | |
2282 | from object_library import all_vertices, Vertex |
2283 | @@ -10,428 +10,434 @@ |
2284 | |
2285 | |
2286 | V_1 = Vertex(name = 'V_1', |
2287 | + particles = [ P.H, P.H, P.H, P.H ], |
2288 | + color = [ '1' ], |
2289 | + lorentz = [ L.SSSS1 ], |
2290 | + couplings = {(0,0):C.GC_10}) |
2291 | + |
2292 | +V_2 = Vertex(name = 'V_2', |
2293 | particles = [ P.H, P.H, P.H ], |
2294 | color = [ '1' ], |
2295 | lorentz = [ L.SSS1 ], |
2296 | - couplings = {(0,0):C.GC_30}) |
2297 | + couplings = {(0,0):C.GC_31}) |
2298 | |
2299 | -V_2 = Vertex(name = 'V_2', |
2300 | +V_3 = Vertex(name = 'V_3', |
2301 | particles = [ P.ghG, P.ghG__tilde__, P.G ], |
2302 | color = [ 'f(3,1,2)' ], |
2303 | lorentz = [ L.UUV1 ], |
2304 | couplings = {(0,0):C.GC_4}) |
2305 | |
2306 | -V_3 = Vertex(name = 'V_3', |
2307 | +V_4 = Vertex(name = 'V_4', |
2308 | particles = [ P.G, P.G, P.G ], |
2309 | color = [ 'f(1,2,3)' ], |
2310 | lorentz = [ L.VVV1 ], |
2311 | couplings = {(0,0):C.GC_4}) |
2312 | |
2313 | -V_4 = Vertex(name = 'V_4', |
2314 | +V_5 = Vertex(name = 'V_5', |
2315 | particles = [ P.G, P.G, P.G, P.G ], |
2316 | color = [ 'f(-1,1,2)*f(3,4,-1)', 'f(-1,1,3)*f(2,4,-1)', 'f(-1,1,4)*f(2,3,-1)' ], |
2317 | lorentz = [ L.VVVV1, L.VVVV3, L.VVVV4 ], |
2318 | couplings = {(1,1):C.GC_6,(0,0):C.GC_6,(2,2):C.GC_6}) |
2319 | |
2320 | -V_5 = Vertex(name = 'V_5', |
2321 | +V_6 = Vertex(name = 'V_6', |
2322 | particles = [ P.A, P.W__minus__, P.W__plus__ ], |
2323 | color = [ '1' ], |
2324 | lorentz = [ L.VVV1 ], |
2325 | - couplings = {(0,0):C.GC_25}) |
2326 | + couplings = {(0,0):C.GC_26}) |
2327 | |
2328 | -V_6 = Vertex(name = 'V_6', |
2329 | +V_7 = Vertex(name = 'V_7', |
2330 | particles = [ P.W__minus__, P.W__plus__, P.H, P.H ], |
2331 | color = [ '1' ], |
2332 | lorentz = [ L.VVSS1 ], |
2333 | - couplings = {(0,0):C.GC_10}) |
2334 | + couplings = {(0,0):C.GC_11}) |
2335 | |
2336 | -V_7 = Vertex(name = 'V_7', |
2337 | +V_8 = Vertex(name = 'V_8', |
2338 | particles = [ P.W__minus__, P.W__plus__, P.H ], |
2339 | color = [ '1' ], |
2340 | lorentz = [ L.VVS1 ], |
2341 | - couplings = {(0,0):C.GC_31}) |
2342 | + couplings = {(0,0):C.GC_32}) |
2343 | |
2344 | -V_8 = Vertex(name = 'V_8', |
2345 | +V_9 = Vertex(name = 'V_9', |
2346 | particles = [ P.A, P.A, P.W__minus__, P.W__plus__ ], |
2347 | color = [ '1' ], |
2348 | lorentz = [ L.VVVV2 ], |
2349 | - couplings = {(0,0):C.GC_27}) |
2350 | - |
2351 | -V_9 = Vertex(name = 'V_9', |
2352 | - particles = [ P.W__minus__, P.W__plus__, P.Z ], |
2353 | - color = [ '1' ], |
2354 | - lorentz = [ L.VVV1 ], |
2355 | - couplings = {(0,0):C.GC_7}) |
2356 | + couplings = {(0,0):C.GC_28}) |
2357 | |
2358 | V_10 = Vertex(name = 'V_10', |
2359 | + particles = [ P.W__minus__, P.W__plus__, P.Z ], |
2360 | + color = [ '1' ], |
2361 | + lorentz = [ L.VVV1 ], |
2362 | + couplings = {(0,0):C.GC_7}) |
2363 | + |
2364 | +V_11 = Vertex(name = 'V_11', |
2365 | particles = [ P.W__minus__, P.W__minus__, P.W__plus__, P.W__plus__ ], |
2366 | color = [ '1' ], |
2367 | lorentz = [ L.VVVV2 ], |
2368 | couplings = {(0,0):C.GC_8}) |
2369 | |
2370 | -V_11 = Vertex(name = 'V_11', |
2371 | +V_12 = Vertex(name = 'V_12', |
2372 | particles = [ P.A, P.W__minus__, P.W__plus__, P.Z ], |
2373 | color = [ '1' ], |
2374 | lorentz = [ L.VVVV5 ], |
2375 | - couplings = {(0,0):C.GC_26}) |
2376 | + couplings = {(0,0):C.GC_27}) |
2377 | |
2378 | -V_12 = Vertex(name = 'V_12', |
2379 | +V_13 = Vertex(name = 'V_13', |
2380 | particles = [ P.Z, P.Z, P.H, P.H ], |
2381 | color = [ '1' ], |
2382 | lorentz = [ L.VVSS1 ], |
2383 | - couplings = {(0,0):C.GC_29}) |
2384 | + couplings = {(0,0):C.GC_30}) |
2385 | |
2386 | -V_13 = Vertex(name = 'V_13', |
2387 | +V_14 = Vertex(name = 'V_14', |
2388 | particles = [ P.Z, P.Z, P.H ], |
2389 | color = [ '1' ], |
2390 | lorentz = [ L.VVS1 ], |
2391 | - couplings = {(0,0):C.GC_32}) |
2392 | + couplings = {(0,0):C.GC_33}) |
2393 | |
2394 | -V_14 = Vertex(name = 'V_14', |
2395 | +V_15 = Vertex(name = 'V_15', |
2396 | particles = [ P.W__minus__, P.W__plus__, P.Z, P.Z ], |
2397 | color = [ '1' ], |
2398 | lorentz = [ L.VVVV2 ], |
2399 | couplings = {(0,0):C.GC_9}) |
2400 | |
2401 | -V_15 = Vertex(name = 'V_15', |
2402 | +V_16 = Vertex(name = 'V_16', |
2403 | particles = [ P.d__tilde__, P.d, P.A ], |
2404 | color = [ 'Identity(1,2)' ], |
2405 | lorentz = [ L.FFV1 ], |
2406 | couplings = {(0,0):C.GC_1}) |
2407 | |
2408 | -V_16 = Vertex(name = 'V_16', |
2409 | +V_17 = Vertex(name = 'V_17', |
2410 | particles = [ P.s__tilde__, P.s, P.A ], |
2411 | color = [ 'Identity(1,2)' ], |
2412 | lorentz = [ L.FFV1 ], |
2413 | couplings = {(0,0):C.GC_1}) |
2414 | |
2415 | -V_17 = Vertex(name = 'V_17', |
2416 | +V_18 = Vertex(name = 'V_18', |
2417 | particles = [ P.b__tilde__, P.b, P.A ], |
2418 | color = [ 'Identity(1,2)' ], |
2419 | lorentz = [ L.FFV1 ], |
2420 | couplings = {(0,0):C.GC_1}) |
2421 | |
2422 | -V_18 = Vertex(name = 'V_18', |
2423 | - particles = [ P.e__plus__, P.e__minus__, P.A ], |
2424 | - color = [ '1' ], |
2425 | - lorentz = [ L.FFV1 ], |
2426 | - couplings = {(0,0):C.GC_3}) |
2427 | - |
2428 | V_19 = Vertex(name = 'V_19', |
2429 | - particles = [ P.m__plus__, P.m__minus__, P.A ], |
2430 | - color = [ '1' ], |
2431 | + particles = [ P.d__tilde__, P.d, P.G ], |
2432 | + color = [ 'T(3,2,1)' ], |
2433 | lorentz = [ L.FFV1 ], |
2434 | - couplings = {(0,0):C.GC_3}) |
2435 | + couplings = {(0,0):C.GC_5}) |
2436 | |
2437 | V_20 = Vertex(name = 'V_20', |
2438 | - particles = [ P.tt__plus__, P.tt__minus__, P.A ], |
2439 | - color = [ '1' ], |
2440 | + particles = [ P.s__tilde__, P.s, P.G ], |
2441 | + color = [ 'T(3,2,1)' ], |
2442 | lorentz = [ L.FFV1 ], |
2443 | - couplings = {(0,0):C.GC_3}) |
2444 | + couplings = {(0,0):C.GC_5}) |
2445 | |
2446 | V_21 = Vertex(name = 'V_21', |
2447 | - particles = [ P.u__tilde__, P.u, P.A ], |
2448 | - color = [ 'Identity(1,2)' ], |
2449 | + particles = [ P.b__tilde__, P.b, P.G ], |
2450 | + color = [ 'T(3,2,1)' ], |
2451 | lorentz = [ L.FFV1 ], |
2452 | - couplings = {(0,0):C.GC_2}) |
2453 | + couplings = {(0,0):C.GC_5}) |
2454 | |
2455 | V_22 = Vertex(name = 'V_22', |
2456 | - particles = [ P.c__tilde__, P.c, P.A ], |
2457 | + particles = [ P.b__tilde__, P.b, P.H ], |
2458 | color = [ 'Identity(1,2)' ], |
2459 | - lorentz = [ L.FFV1 ], |
2460 | - couplings = {(0,0):C.GC_2}) |
2461 | + lorentz = [ L.FFS1 ], |
2462 | + couplings = {(0,0):C.GC_34}) |
2463 | |
2464 | V_23 = Vertex(name = 'V_23', |
2465 | - particles = [ P.t__tilde__, P.t, P.A ], |
2466 | + particles = [ P.d__tilde__, P.d, P.Z ], |
2467 | color = [ 'Identity(1,2)' ], |
2468 | - lorentz = [ L.FFV1 ], |
2469 | - couplings = {(0,0):C.GC_2}) |
2470 | + lorentz = [ L.FFV2, L.FFV3 ], |
2471 | + couplings = {(0,0):C.GC_22,(0,1):C.GC_24}) |
2472 | |
2473 | V_24 = Vertex(name = 'V_24', |
2474 | - particles = [ P.d__tilde__, P.d, P.G ], |
2475 | - color = [ 'T(3,2,1)' ], |
2476 | - lorentz = [ L.FFV1 ], |
2477 | - couplings = {(0,0):C.GC_5}) |
2478 | + particles = [ P.s__tilde__, P.s, P.Z ], |
2479 | + color = [ 'Identity(1,2)' ], |
2480 | + lorentz = [ L.FFV2, L.FFV3 ], |
2481 | + couplings = {(0,0):C.GC_22,(0,1):C.GC_24}) |
2482 | |
2483 | V_25 = Vertex(name = 'V_25', |
2484 | - particles = [ P.s__tilde__, P.s, P.G ], |
2485 | - color = [ 'T(3,2,1)' ], |
2486 | - lorentz = [ L.FFV1 ], |
2487 | - couplings = {(0,0):C.GC_5}) |
2488 | + particles = [ P.b__tilde__, P.b, P.Z ], |
2489 | + color = [ 'Identity(1,2)' ], |
2490 | + lorentz = [ L.FFV2, L.FFV3 ], |
2491 | + couplings = {(0,1):C.GC_24,(0,0):C.GC_22}) |
2492 | |
2493 | V_26 = Vertex(name = 'V_26', |
2494 | - particles = [ P.b__tilde__, P.b, P.G ], |
2495 | - color = [ 'T(3,2,1)' ], |
2496 | - lorentz = [ L.FFV1 ], |
2497 | - couplings = {(0,0):C.GC_5}) |
2498 | + particles = [ P.u__tilde__, P.d, P.W__plus__ ], |
2499 | + color = [ 'Identity(1,2)' ], |
2500 | + lorentz = [ L.FFV2 ], |
2501 | + couplings = {(0,0):C.GC_40}) |
2502 | |
2503 | V_27 = Vertex(name = 'V_27', |
2504 | - particles = [ P.b__tilde__, P.b, P.H ], |
2505 | + particles = [ P.c__tilde__, P.d, P.W__plus__ ], |
2506 | color = [ 'Identity(1,2)' ], |
2507 | - lorentz = [ L.FFS1 ], |
2508 | - couplings = {(0,0):C.GC_33}) |
2509 | + lorentz = [ L.FFV2 ], |
2510 | + couplings = {(0,0):C.GC_43}) |
2511 | |
2512 | V_28 = Vertex(name = 'V_28', |
2513 | - particles = [ P.d__tilde__, P.d, P.Z ], |
2514 | + particles = [ P.t__tilde__, P.d, P.W__plus__ ], |
2515 | color = [ 'Identity(1,2)' ], |
2516 | - lorentz = [ L.FFV2, L.FFV3 ], |
2517 | - couplings = {(0,0):C.GC_21,(0,1):C.GC_23}) |
2518 | + lorentz = [ L.FFV2 ], |
2519 | + couplings = {(0,0):C.GC_46}) |
2520 | |
2521 | V_29 = Vertex(name = 'V_29', |
2522 | - particles = [ P.s__tilde__, P.s, P.Z ], |
2523 | + particles = [ P.u__tilde__, P.s, P.W__plus__ ], |
2524 | color = [ 'Identity(1,2)' ], |
2525 | - lorentz = [ L.FFV2, L.FFV3 ], |
2526 | - couplings = {(0,0):C.GC_21,(0,1):C.GC_23}) |
2527 | + lorentz = [ L.FFV2 ], |
2528 | + couplings = {(0,0):C.GC_41}) |
2529 | |
2530 | V_30 = Vertex(name = 'V_30', |
2531 | - particles = [ P.b__tilde__, P.b, P.Z ], |
2532 | + particles = [ P.c__tilde__, P.s, P.W__plus__ ], |
2533 | color = [ 'Identity(1,2)' ], |
2534 | - lorentz = [ L.FFV2, L.FFV3 ], |
2535 | - couplings = {(0,0):C.GC_21,(0,1):C.GC_23}) |
2536 | + lorentz = [ L.FFV2 ], |
2537 | + couplings = {(0,0):C.GC_44}) |
2538 | |
2539 | V_31 = Vertex(name = 'V_31', |
2540 | - particles = [ P.d__tilde__, P.u, P.W__minus__ ], |
2541 | + particles = [ P.t__tilde__, P.s, P.W__plus__ ], |
2542 | color = [ 'Identity(1,2)' ], |
2543 | lorentz = [ L.FFV2 ], |
2544 | - couplings = {(0,0):C.GC_12}) |
2545 | + couplings = {(0,0):C.GC_47}) |
2546 | |
2547 | V_32 = Vertex(name = 'V_32', |
2548 | - particles = [ P.d__tilde__, P.c, P.W__minus__ ], |
2549 | + particles = [ P.u__tilde__, P.b, P.W__plus__ ], |
2550 | color = [ 'Identity(1,2)' ], |
2551 | lorentz = [ L.FFV2 ], |
2552 | - couplings = {(0,0):C.GC_15}) |
2553 | + couplings = {(0,0):C.GC_42}) |
2554 | |
2555 | V_33 = Vertex(name = 'V_33', |
2556 | - particles = [ P.d__tilde__, P.t, P.W__minus__ ], |
2557 | + particles = [ P.c__tilde__, P.b, P.W__plus__ ], |
2558 | color = [ 'Identity(1,2)' ], |
2559 | lorentz = [ L.FFV2 ], |
2560 | - couplings = {(0,0):C.GC_18}) |
2561 | + couplings = {(0,0):C.GC_45}) |
2562 | |
2563 | V_34 = Vertex(name = 'V_34', |
2564 | - particles = [ P.s__tilde__, P.u, P.W__minus__ ], |
2565 | + particles = [ P.t__tilde__, P.b, P.W__plus__ ], |
2566 | color = [ 'Identity(1,2)' ], |
2567 | lorentz = [ L.FFV2 ], |
2568 | - couplings = {(0,0):C.GC_13}) |
2569 | + couplings = {(0,0):C.GC_48}) |
2570 | |
2571 | V_35 = Vertex(name = 'V_35', |
2572 | - particles = [ P.s__tilde__, P.c, P.W__minus__ ], |
2573 | - color = [ 'Identity(1,2)' ], |
2574 | - lorentz = [ L.FFV2 ], |
2575 | - couplings = {(0,0):C.GC_16}) |
2576 | + particles = [ P.e__plus__, P.e__minus__, P.A ], |
2577 | + color = [ '1' ], |
2578 | + lorentz = [ L.FFV1 ], |
2579 | + couplings = {(0,0):C.GC_3}) |
2580 | |
2581 | V_36 = Vertex(name = 'V_36', |
2582 | - particles = [ P.s__tilde__, P.t, P.W__minus__ ], |
2583 | - color = [ 'Identity(1,2)' ], |
2584 | - lorentz = [ L.FFV2 ], |
2585 | - couplings = {(0,0):C.GC_19}) |
2586 | + particles = [ P.m__plus__, P.m__minus__, P.A ], |
2587 | + color = [ '1' ], |
2588 | + lorentz = [ L.FFV1 ], |
2589 | + couplings = {(0,0):C.GC_3}) |
2590 | |
2591 | V_37 = Vertex(name = 'V_37', |
2592 | - particles = [ P.b__tilde__, P.u, P.W__minus__ ], |
2593 | - color = [ 'Identity(1,2)' ], |
2594 | - lorentz = [ L.FFV2 ], |
2595 | - couplings = {(0,0):C.GC_14}) |
2596 | + particles = [ P.tt__plus__, P.tt__minus__, P.A ], |
2597 | + color = [ '1' ], |
2598 | + lorentz = [ L.FFV1 ], |
2599 | + couplings = {(0,0):C.GC_3}) |
2600 | |
2601 | V_38 = Vertex(name = 'V_38', |
2602 | - particles = [ P.b__tilde__, P.c, P.W__minus__ ], |
2603 | - color = [ 'Identity(1,2)' ], |
2604 | - lorentz = [ L.FFV2 ], |
2605 | - couplings = {(0,0):C.GC_17}) |
2606 | + particles = [ P.e__plus__, P.e__minus__, P.H ], |
2607 | + color = [ '1' ], |
2608 | + lorentz = [ L.FFS1 ], |
2609 | + couplings = {(0,0):C.GC_36}) |
2610 | |
2611 | V_39 = Vertex(name = 'V_39', |
2612 | - particles = [ P.b__tilde__, P.t, P.W__minus__ ], |
2613 | - color = [ 'Identity(1,2)' ], |
2614 | - lorentz = [ L.FFV2 ], |
2615 | - couplings = {(0,0):C.GC_20}) |
2616 | + particles = [ P.m__plus__, P.m__minus__, P.H ], |
2617 | + color = [ '1' ], |
2618 | + lorentz = [ L.FFS1 ], |
2619 | + couplings = {(0,0):C.GC_37}) |
2620 | |
2621 | V_40 = Vertex(name = 'V_40', |
2622 | - particles = [ P.u__tilde__, P.d, P.W__plus__ ], |
2623 | - color = [ 'Identity(1,2)' ], |
2624 | - lorentz = [ L.FFV2 ], |
2625 | + particles = [ P.tt__plus__, P.tt__minus__, P.H ], |
2626 | + color = [ '1' ], |
2627 | + lorentz = [ L.FFS1 ], |
2628 | couplings = {(0,0):C.GC_39}) |
2629 | |
2630 | V_41 = Vertex(name = 'V_41', |
2631 | - particles = [ P.c__tilde__, P.d, P.W__plus__ ], |
2632 | - color = [ 'Identity(1,2)' ], |
2633 | - lorentz = [ L.FFV2 ], |
2634 | - couplings = {(0,0):C.GC_42}) |
2635 | + particles = [ P.e__plus__, P.e__minus__, P.Z ], |
2636 | + color = [ '1' ], |
2637 | + lorentz = [ L.FFV2, L.FFV4 ], |
2638 | + couplings = {(0,0):C.GC_22,(0,1):C.GC_25}) |
2639 | |
2640 | V_42 = Vertex(name = 'V_42', |
2641 | - particles = [ P.t__tilde__, P.d, P.W__plus__ ], |
2642 | - color = [ 'Identity(1,2)' ], |
2643 | - lorentz = [ L.FFV2 ], |
2644 | - couplings = {(0,0):C.GC_45}) |
2645 | + particles = [ P.m__plus__, P.m__minus__, P.Z ], |
2646 | + color = [ '1' ], |
2647 | + lorentz = [ L.FFV2, L.FFV4 ], |
2648 | + couplings = {(0,0):C.GC_22,(0,1):C.GC_25}) |
2649 | |
2650 | V_43 = Vertex(name = 'V_43', |
2651 | - particles = [ P.u__tilde__, P.s, P.W__plus__ ], |
2652 | - color = [ 'Identity(1,2)' ], |
2653 | - lorentz = [ L.FFV2 ], |
2654 | - couplings = {(0,0):C.GC_40}) |
2655 | + particles = [ P.tt__plus__, P.tt__minus__, P.Z ], |
2656 | + color = [ '1' ], |
2657 | + lorentz = [ L.FFV2, L.FFV4 ], |
2658 | + couplings = {(0,0):C.GC_22,(0,1):C.GC_25}) |
2659 | |
2660 | V_44 = Vertex(name = 'V_44', |
2661 | - particles = [ P.c__tilde__, P.s, P.W__plus__ ], |
2662 | - color = [ 'Identity(1,2)' ], |
2663 | + particles = [ P.ve__tilde__, P.e__minus__, P.W__plus__ ], |
2664 | + color = [ '1' ], |
2665 | lorentz = [ L.FFV2 ], |
2666 | - couplings = {(0,0):C.GC_43}) |
2667 | + couplings = {(0,0):C.GC_12}) |
2668 | |
2669 | V_45 = Vertex(name = 'V_45', |
2670 | - particles = [ P.t__tilde__, P.s, P.W__plus__ ], |
2671 | - color = [ 'Identity(1,2)' ], |
2672 | + particles = [ P.vm__tilde__, P.m__minus__, P.W__plus__ ], |
2673 | + color = [ '1' ], |
2674 | lorentz = [ L.FFV2 ], |
2675 | - couplings = {(0,0):C.GC_46}) |
2676 | + couplings = {(0,0):C.GC_12}) |
2677 | |
2678 | V_46 = Vertex(name = 'V_46', |
2679 | - particles = [ P.u__tilde__, P.b, P.W__plus__ ], |
2680 | - color = [ 'Identity(1,2)' ], |
2681 | + particles = [ P.vt__tilde__, P.tt__minus__, P.W__plus__ ], |
2682 | + color = [ '1' ], |
2683 | lorentz = [ L.FFV2 ], |
2684 | - couplings = {(0,0):C.GC_41}) |
2685 | + couplings = {(0,0):C.GC_12}) |
2686 | |
2687 | V_47 = Vertex(name = 'V_47', |
2688 | - particles = [ P.c__tilde__, P.b, P.W__plus__ ], |
2689 | + particles = [ P.d__tilde__, P.u, P.W__minus__ ], |
2690 | color = [ 'Identity(1,2)' ], |
2691 | lorentz = [ L.FFV2 ], |
2692 | - couplings = {(0,0):C.GC_44}) |
2693 | + couplings = {(0,0):C.GC_13}) |
2694 | |
2695 | V_48 = Vertex(name = 'V_48', |
2696 | - particles = [ P.t__tilde__, P.b, P.W__plus__ ], |
2697 | + particles = [ P.s__tilde__, P.u, P.W__minus__ ], |
2698 | color = [ 'Identity(1,2)' ], |
2699 | lorentz = [ L.FFV2 ], |
2700 | - couplings = {(0,0):C.GC_47}) |
2701 | + couplings = {(0,0):C.GC_14}) |
2702 | |
2703 | V_49 = Vertex(name = 'V_49', |
2704 | - particles = [ P.u__tilde__, P.u, P.G ], |
2705 | - color = [ 'T(3,2,1)' ], |
2706 | - lorentz = [ L.FFV1 ], |
2707 | - couplings = {(0,0):C.GC_5}) |
2708 | + particles = [ P.b__tilde__, P.u, P.W__minus__ ], |
2709 | + color = [ 'Identity(1,2)' ], |
2710 | + lorentz = [ L.FFV2 ], |
2711 | + couplings = {(0,0):C.GC_15}) |
2712 | |
2713 | V_50 = Vertex(name = 'V_50', |
2714 | - particles = [ P.c__tilde__, P.c, P.G ], |
2715 | - color = [ 'T(3,2,1)' ], |
2716 | - lorentz = [ L.FFV1 ], |
2717 | - couplings = {(0,0):C.GC_5}) |
2718 | + particles = [ P.d__tilde__, P.c, P.W__minus__ ], |
2719 | + color = [ 'Identity(1,2)' ], |
2720 | + lorentz = [ L.FFV2 ], |
2721 | + couplings = {(0,0):C.GC_16}) |
2722 | |
2723 | V_51 = Vertex(name = 'V_51', |
2724 | - particles = [ P.t__tilde__, P.t, P.G ], |
2725 | - color = [ 'T(3,2,1)' ], |
2726 | - lorentz = [ L.FFV1 ], |
2727 | - couplings = {(0,0):C.GC_5}) |
2728 | + particles = [ P.s__tilde__, P.c, P.W__minus__ ], |
2729 | + color = [ 'Identity(1,2)' ], |
2730 | + lorentz = [ L.FFV2 ], |
2731 | + couplings = {(0,0):C.GC_17}) |
2732 | |
2733 | V_52 = Vertex(name = 'V_52', |
2734 | - particles = [ P.e__plus__, P.e__minus__, P.H ], |
2735 | - color = [ '1' ], |
2736 | - lorentz = [ L.FFS1 ], |
2737 | - couplings = {(0,0):C.GC_35}) |
2738 | + particles = [ P.b__tilde__, P.c, P.W__minus__ ], |
2739 | + color = [ 'Identity(1,2)' ], |
2740 | + lorentz = [ L.FFV2 ], |
2741 | + couplings = {(0,0):C.GC_18}) |
2742 | |
2743 | V_53 = Vertex(name = 'V_53', |
2744 | - particles = [ P.m__plus__, P.m__minus__, P.H ], |
2745 | - color = [ '1' ], |
2746 | - lorentz = [ L.FFS1 ], |
2747 | - couplings = {(0,0):C.GC_36}) |
2748 | + particles = [ P.d__tilde__, P.t, P.W__minus__ ], |
2749 | + color = [ 'Identity(1,2)' ], |
2750 | + lorentz = [ L.FFV2 ], |
2751 | + couplings = {(0,0):C.GC_19}) |
2752 | |
2753 | V_54 = Vertex(name = 'V_54', |
2754 | - particles = [ P.tt__plus__, P.tt__minus__, P.H ], |
2755 | - color = [ '1' ], |
2756 | - lorentz = [ L.FFS1 ], |
2757 | - couplings = {(0,0):C.GC_38}) |
2758 | + particles = [ P.s__tilde__, P.t, P.W__minus__ ], |
2759 | + color = [ 'Identity(1,2)' ], |
2760 | + lorentz = [ L.FFV2 ], |
2761 | + couplings = {(0,0):C.GC_20}) |
2762 | |
2763 | V_55 = Vertex(name = 'V_55', |
2764 | - particles = [ P.c__tilde__, P.c, P.H ], |
2765 | + particles = [ P.b__tilde__, P.t, P.W__minus__ ], |
2766 | color = [ 'Identity(1,2)' ], |
2767 | - lorentz = [ L.FFS1 ], |
2768 | - couplings = {(0,0):C.GC_34}) |
2769 | + lorentz = [ L.FFV2 ], |
2770 | + couplings = {(0,0):C.GC_21}) |
2771 | |
2772 | V_56 = Vertex(name = 'V_56', |
2773 | - particles = [ P.t__tilde__, P.t, P.H ], |
2774 | + particles = [ P.u__tilde__, P.u, P.A ], |
2775 | color = [ 'Identity(1,2)' ], |
2776 | - lorentz = [ L.FFS1 ], |
2777 | - couplings = {(0,0):C.GC_37}) |
2778 | + lorentz = [ L.FFV1 ], |
2779 | + couplings = {(0,0):C.GC_2}) |
2780 | |
2781 | V_57 = Vertex(name = 'V_57', |
2782 | - particles = [ P.e__plus__, P.e__minus__, P.Z ], |
2783 | - color = [ '1' ], |
2784 | - lorentz = [ L.FFV2, L.FFV4 ], |
2785 | - couplings = {(0,0):C.GC_21,(0,1):C.GC_24}) |
2786 | + particles = [ P.c__tilde__, P.c, P.A ], |
2787 | + color = [ 'Identity(1,2)' ], |
2788 | + lorentz = [ L.FFV1 ], |
2789 | + couplings = {(0,0):C.GC_2}) |
2790 | |
2791 | V_58 = Vertex(name = 'V_58', |
2792 | - particles = [ P.m__plus__, P.m__minus__, P.Z ], |
2793 | - color = [ '1' ], |
2794 | - lorentz = [ L.FFV2, L.FFV4 ], |
2795 | - couplings = {(0,0):C.GC_21,(0,1):C.GC_24}) |
2796 | + particles = [ P.t__tilde__, P.t, P.A ], |
2797 | + color = [ 'Identity(1,2)' ], |
2798 | + lorentz = [ L.FFV1 ], |
2799 | + couplings = {(0,0):C.GC_2}) |
2800 | |
2801 | V_59 = Vertex(name = 'V_59', |
2802 | - particles = [ P.tt__plus__, P.tt__minus__, P.Z ], |
2803 | - color = [ '1' ], |
2804 | - lorentz = [ L.FFV2, L.FFV4 ], |
2805 | - couplings = {(0,0):C.GC_21,(0,1):C.GC_24}) |
2806 | + particles = [ P.u__tilde__, P.u, P.G ], |
2807 | + color = [ 'T(3,2,1)' ], |
2808 | + lorentz = [ L.FFV1 ], |
2809 | + couplings = {(0,0):C.GC_5}) |
2810 | |
2811 | V_60 = Vertex(name = 'V_60', |
2812 | - particles = [ P.e__plus__, P.ve, P.W__minus__ ], |
2813 | - color = [ '1' ], |
2814 | - lorentz = [ L.FFV2 ], |
2815 | - couplings = {(0,0):C.GC_11}) |
2816 | + particles = [ P.c__tilde__, P.c, P.G ], |
2817 | + color = [ 'T(3,2,1)' ], |
2818 | + lorentz = [ L.FFV1 ], |
2819 | + couplings = {(0,0):C.GC_5}) |
2820 | |
2821 | V_61 = Vertex(name = 'V_61', |
2822 | - particles = [ P.m__plus__, P.vm, P.W__minus__ ], |
2823 | - color = [ '1' ], |
2824 | - lorentz = [ L.FFV2 ], |
2825 | - couplings = {(0,0):C.GC_11}) |
2826 | + particles = [ P.t__tilde__, P.t, P.G ], |
2827 | + color = [ 'T(3,2,1)' ], |
2828 | + lorentz = [ L.FFV1 ], |
2829 | + couplings = {(0,0):C.GC_5}) |
2830 | |
2831 | V_62 = Vertex(name = 'V_62', |
2832 | - particles = [ P.tt__plus__, P.vt, P.W__minus__ ], |
2833 | - color = [ '1' ], |
2834 | - lorentz = [ L.FFV2 ], |
2835 | - couplings = {(0,0):C.GC_11}) |
2836 | + particles = [ P.c__tilde__, P.c, P.H ], |
2837 | + color = [ 'Identity(1,2)' ], |
2838 | + lorentz = [ L.FFS1 ], |
2839 | + couplings = {(0,0):C.GC_35}) |
2840 | |
2841 | V_63 = Vertex(name = 'V_63', |
2842 | - particles = [ P.ve__tilde__, P.e__minus__, P.W__plus__ ], |
2843 | - color = [ '1' ], |
2844 | - lorentz = [ L.FFV2 ], |
2845 | - couplings = {(0,0):C.GC_11}) |
2846 | + particles = [ P.t__tilde__, P.t, P.H ], |
2847 | + color = [ 'Identity(1,2)' ], |
2848 | + lorentz = [ L.FFS1 ], |
2849 | + couplings = {(0,0):C.GC_38}) |
2850 | |
2851 | V_64 = Vertex(name = 'V_64', |
2852 | - particles = [ P.vm__tilde__, P.m__minus__, P.W__plus__ ], |
2853 | - color = [ '1' ], |
2854 | - lorentz = [ L.FFV2 ], |
2855 | - couplings = {(0,0):C.GC_11}) |
2856 | + particles = [ P.u__tilde__, P.u, P.Z ], |
2857 | + color = [ 'Identity(1,2)' ], |
2858 | + lorentz = [ L.FFV2, L.FFV5 ], |
2859 | + couplings = {(0,0):C.GC_23,(0,1):C.GC_24}) |
2860 | |
2861 | V_65 = Vertex(name = 'V_65', |
2862 | - particles = [ P.vt__tilde__, P.tt__minus__, P.W__plus__ ], |
2863 | - color = [ '1' ], |
2864 | - lorentz = [ L.FFV2 ], |
2865 | - couplings = {(0,0):C.GC_11}) |
2866 | + particles = [ P.c__tilde__, P.c, P.Z ], |
2867 | + color = [ 'Identity(1,2)' ], |
2868 | + lorentz = [ L.FFV2, L.FFV5 ], |
2869 | + couplings = {(0,0):C.GC_23,(0,1):C.GC_24}) |
2870 | |
2871 | V_66 = Vertex(name = 'V_66', |
2872 | - particles = [ P.u__tilde__, P.u, P.Z ], |
2873 | + particles = [ P.t__tilde__, P.t, P.Z ], |
2874 | color = [ 'Identity(1,2)' ], |
2875 | lorentz = [ L.FFV2, L.FFV5 ], |
2876 | - couplings = {(0,0):C.GC_22,(0,1):C.GC_23}) |
2877 | + couplings = {(0,0):C.GC_23,(0,1):C.GC_24}) |
2878 | |
2879 | V_67 = Vertex(name = 'V_67', |
2880 | - particles = [ P.c__tilde__, P.c, P.Z ], |
2881 | - color = [ 'Identity(1,2)' ], |
2882 | - lorentz = [ L.FFV2, L.FFV5 ], |
2883 | - couplings = {(0,0):C.GC_22,(0,1):C.GC_23}) |
2884 | + particles = [ P.e__plus__, P.ve, P.W__minus__ ], |
2885 | + color = [ '1' ], |
2886 | + lorentz = [ L.FFV2 ], |
2887 | + couplings = {(0,0):C.GC_12}) |
2888 | |
2889 | V_68 = Vertex(name = 'V_68', |
2890 | - particles = [ P.t__tilde__, P.t, P.Z ], |
2891 | - color = [ 'Identity(1,2)' ], |
2892 | - lorentz = [ L.FFV2, L.FFV5 ], |
2893 | - couplings = {(0,0):C.GC_22,(0,1):C.GC_23}) |
2894 | + particles = [ P.m__plus__, P.vm, P.W__minus__ ], |
2895 | + color = [ '1' ], |
2896 | + lorentz = [ L.FFV2 ], |
2897 | + couplings = {(0,0):C.GC_12}) |
2898 | |
2899 | V_69 = Vertex(name = 'V_69', |
2900 | + particles = [ P.tt__plus__, P.vt, P.W__minus__ ], |
2901 | + color = [ '1' ], |
2902 | + lorentz = [ L.FFV2 ], |
2903 | + couplings = {(0,0):C.GC_12}) |
2904 | + |
2905 | +V_70 = Vertex(name = 'V_70', |
2906 | particles = [ P.ve__tilde__, P.ve, P.Z ], |
2907 | color = [ '1' ], |
2908 | lorentz = [ L.FFV2 ], |
2909 | - couplings = {(0,0):C.GC_28}) |
2910 | + couplings = {(0,0):C.GC_29}) |
2911 | |
2912 | -V_70 = Vertex(name = 'V_70', |
2913 | +V_71 = Vertex(name = 'V_71', |
2914 | particles = [ P.vm__tilde__, P.vm, P.Z ], |
2915 | color = [ '1' ], |
2916 | lorentz = [ L.FFV2 ], |
2917 | - couplings = {(0,0):C.GC_28}) |
2918 | + couplings = {(0,0):C.GC_29}) |
2919 | |
2920 | -V_71 = Vertex(name = 'V_71', |
2921 | +V_72 = Vertex(name = 'V_72', |
2922 | particles = [ P.vt__tilde__, P.vt, P.Z ], |
2923 | color = [ '1' ], |
2924 | lorentz = [ L.FFV2 ], |
2925 | - couplings = {(0,0):C.GC_28}) |
2926 | + couplings = {(0,0):C.GC_29}) |
2927 | |
2928 | |
2929 | === modified file 'models/sm/write_param_card.py' |
2930 | --- models/sm/write_param_card.py 2011-03-20 16:49:47 +0000 |
2931 | +++ models/sm/write_param_card.py 2012-05-16 04:17:21 +0000 |
2932 | @@ -1,5 +1,5 @@ |
2933 | |
2934 | -__date__ = "3 june 2010" |
2935 | +__date__ = "22 Sept 2011" |
2936 | __author__ = 'olivier.mattelaer@uclouvain.be' |
2937 | |
2938 | from function_library import * |
2939 | @@ -162,7 +162,7 @@ |
2940 | text += self.data % {'pdg': part.pdg_code, |
2941 | 'name': part.name, |
2942 | 'charge': 3 * part.charge, |
2943 | - 'spin': 2 * part.spin + 1, |
2944 | + 'spin': part.spin, |
2945 | 'color': part.color, |
2946 | 'antipart': part.name != part.antiname and 1 or 0} |
2947 | |
2948 | |
2949 | === modified file 'tests/acceptance_tests/test_cmd.py' |
2950 | --- tests/acceptance_tests/test_cmd.py 2012-03-20 19:55:40 +0000 |
2951 | +++ tests/acceptance_tests/test_cmd.py 2012-05-16 04:17:21 +0000 |
2952 | @@ -1001,18 +1001,19 @@ |
2953 | |
2954 | self.do('import model sm') |
2955 | self.assertEqual(len(self.cmd._curr_model.get('particles')), 17) |
2956 | - self.assertEqual(len(self.cmd._curr_model.get('interactions')), 55) |
2957 | + self.assertEqual(len(self.cmd._curr_model.get('interactions')), 56) |
2958 | self.do('save model /tmp/model.pkl') |
2959 | self.do('import model mssm-full') |
2960 | self.do('load model /tmp/model.pkl') |
2961 | self.assertEqual(len(self.cmd._curr_model.get('particles')), 17) |
2962 | - self.assertEqual(len(self.cmd._curr_model.get('interactions')), 55) |
2963 | + self.assertEqual(len(self.cmd._curr_model.get('interactions')), 56) |
2964 | self.do('generate mu+ mu- > ta+ ta-') |
2965 | self.assertEqual(len(self.cmd._curr_amps), 1) |
2966 | nicestring = """Process: mu+ mu- > ta+ ta- WEIGHTED=4 |
2967 | 2 diagrams: |
2968 | -1 ((1(13),2(-13)>1(22),id:18),(3(-15),4(15),1(22),id:19)) (QCD=0,QED=2,WEIGHTED=4) |
2969 | -2 ((1(13),2(-13)>1(23),id:57),(3(-15),4(15),1(23),id:58)) (QCD=0,QED=2,WEIGHTED=4)""" |
2970 | +1 ((1(13),2(-13)>1(22),id:35),(3(-15),4(15),1(22),id:36)) (QCD=0,QED=2,WEIGHTED=4) |
2971 | +2 ((1(13),2(-13)>1(23),id:41),(3(-15),4(15),1(23),id:42)) (QCD=0,QED=2,WEIGHTED=4)""" |
2972 | + |
2973 | self.assertEqual(self.cmd._curr_amps[0].nice_string().split('\n'), nicestring.split('\n')) |
2974 | self.do('save processes /tmp/model.pkl') |
2975 | self.do('generate e+ e- > e+ e-') |
2976 | |
2977 | === modified file 'tests/acceptance_tests/test_model_equivalence.py' |
2978 | --- tests/acceptance_tests/test_model_equivalence.py 2012-03-20 21:46:23 +0000 |
2979 | +++ tests/acceptance_tests/test_model_equivalence.py 2012-05-16 04:17:21 +0000 |
2980 | @@ -121,7 +121,7 @@ |
2981 | except ValueError: |
2982 | mg4_vertices.append(pdg_code_mg4) |
2983 | |
2984 | - self.assertEqual(ufo_vertices, []) # [[25,25,25,25]] |
2985 | + self.assertEqual(ufo_vertices, [[25,25,25,25]]) |
2986 | self.assertEqual(mg4_vertices, []) |
2987 | |
2988 | def test_mssm_equivalence(self): |
2989 | @@ -299,7 +299,8 @@ |
2990 | testprog = subprocess.Popen("./testprog", stdout=subprocess.PIPE, |
2991 | cwd=self.output_path, |
2992 | stderr=subprocess.STDOUT, shell=True) |
2993 | - solutions={'CKM22 ': [1.0], 'G ': [1.2177157847767195], 'GC_1 ': [-0.0, -0.10265], 'GC_10 ': [0.0, 0.21336], 'GC_16 ': [0.0, 0.46191], 'GC_2 ': [0.0, 0.2053], 'GC_21 ': [-0.0, -0.28804], 'GC_22 ': [0.0, 0.28804], 'GC_23 ': [-0.0, -0.027437], 'GC_24 ': [0.0, 0.08231], 'GC_25 ': [0.0, 0.30795], 'GC_26 ': [-0.0, -0.35482], 'GC_27 ': [0.0, 0.094836], 'GC_28 ': [0.0, 0.37035], 'GC_29 ': [0.0, 0.27432], 'GC_3 ': [-0.0, -0.30795], 'GC_30 ': [-0.0, -175.45], 'GC_31 ': [0.0, 52.532], 'GC_32 ': [0.0, 67.544], 'GC_33 ': [-0.0, -0.017058], 'GC_37 ': [-0.0, -0.66811], 'GC_38 ': [-0.0, -0.0072172], 'GC_4 ': [-1.2177, 0.0], 'GC_5 ': [0.0, 1.2177], 'GC_6 ': [0.0, 1.4828], 'GC_7 ': [0.0, 0.57609], 'GC_8 ': [-0.0, -0.42671], 'GC_9 ': [0.0, 0.33188], 'G__exp__2 ': [1.4828317324943818], 'Gf ': [1.16639e-05], 'MB ': [4.7], 'MH ': [120.0], 'MH__exp__2 ': [14400.0], 'MT ': [173.0], 'MTA ': [1.777], 'MW ': [80.419002445756163], 'MW__exp__2 ': [6467.2159543705357], 'MZ ': [91.188], 'MZ__exp__2 ': [8315.25134], 'MZ__exp__4 ': [69143404.913893804], 'WH ': [0.005753088], 'WT ': [1.4915], 'WW ': [2.0476], 'WZ ': [2.441404], 'aEW ': [0.0075467711139788835], 'aEWM1 ': [132.507], 'aS ': [0.118], 'complexi ': (0.0, 1.0), 'cw ': [0.88190334743339216], 'cw__exp__2 ': [0.77775351421422245], 'ee ': [0.30795376724436879], 'ee__exp__2 ': [0.094835522759998875], 'g1 ': [0.34919219678733299], 'gw ': [0.6532329303475799], 'gw__exp__2 ': [0.42671326129048615], 'lam ': [0.11876576810517747], 'muH ': [84.852813742385706], 'sqrt__2 ': [1.4142135623730951], 'sqrt__aEW ': [0.086872153846781555], 'sqrt__aS ': [0.34351128074635334], 'sqrt__sw2 ': [0.4714302554840723], 'sw ': [0.4714302554840723], 'sw2 ': [0.22224648578577766], 'sw__exp__2 ': [0.22224648578577769], 'v ': [246.21845810181637], 'v__exp__2 ': [60623.529110035903], 'yb ': [0.024123686777011714], 'ymb ': [4.2], 'ymt ': [164.5], 'ymtau ': [1.777], 'yt ': [0.944844398766292], 'ytau ': [0.010206617000654717]} |
2994 | + |
2995 | + solutions={'sqrt__aEW ': [0.0868721538], 'ymtau ': [1.777], 'GC_5 ': [0.0, 1.2177], 'sqrt__sw2 ': [0.471430255], 'sw__exp__2 ': [0.222246486], 'GC_11 ': [0.0, 0.21336], 'GC_3 ': [0.0, -0.30795], 'aEW ': [0.00754677111], 'MZ__exp__2 ': [8315.25134], 'MZ ': [91.188], 'WW ': [2.0476], 'GC_1 ': [0.0, -0.10265], 'GC_38 ': [0.0, -0.66811], 'GC_9 ': [0.0, 0.33188], 'GC_7 ': [0.0, 0.57609], 'GC_10 ': [0.0, -0.71259], 'ee__exp__2 ': [0.0948355228], 'aEWM1 ': [132.507], 'GC_29 ': [0.0, 0.37035], 'gw ': [0.65323293], 'ytau ': [0.010206617], 'GC_8 ': [0.0, -0.42671], 'MTA ': [1.777], 'sqrt__aS ': [0.343511281], 'MH ': [120.0], 'GC_27 ': [0.0, -0.35482], 'GC_31 ': [0.0, -175.45], 'GC_23 ': [0.0, 0.28804], 'aS ': [0.118], 'ymb ': [4.2], 'MZ__exp__4 ': [69143404.9], 'complexi ': [0.0, 1.0], 'yb ': [0.0241236868], 'MW__exp__2 ': [6467.21595], 'Gf ': [1.16639e-05], 'GC_33 ': [0.0, 67.544], 'ee ': [0.307953767], 'WZ ': [2.441404], 'v__exp__2 ': [60623.5291], 'v ': [246.218458], 'WH ': [0.005753088], 'cw__exp__2 ': [0.777753514], 'GC_6 ': [0.0, 1.4828], 'sw2 ': [0.222246486], 'GC_2 ': [0.0, 0.2053], 'GC_24 ': [0.0, -0.027437], 'MB ': [4.7], 'WT ': [1.4915], 'GC_28 ': [0.0, 0.094836], 'GC_4 ': [-1.2177, 0.0], 'MH__exp__2 ': [14400.0], 'ymt ': [164.5], 'GC_39 ': [0.0, -0.0072172], 'G__exp__2 ': [1.48283173], 'MT ': [173.0], 'lam ': [0.118765768], 'GC_25 ': [0.0, 0.08231], 'sw ': [0.471430255], 'gw__exp__2 ': [0.426713261], 'GC_26 ': [0.0, 0.30795], 'GC_34 ': [0.0, -0.017058], 'g1 ': [0.349192197], 'GC_22 ': [0.0, -0.28804], 'GC_30 ': [0.0, 0.27432], 'MW ': [80.4190024], 'CKM2x2 ': [1.0], 'muH ': [84.8528137], 'GC_17 ': [0.0, 0.46191], 'cw ': [0.881903347], 'sqrt__2 ': [1.41421356], 'GC_32 ': [0.0, 52.532], 'yt ': [0.944844399]} |
2996 | nb_value = 0 |
2997 | for line in testprog.stdout: |
2998 | self.assertTrue('Warning' not in line) |
2999 | @@ -325,8 +326,8 @@ |
3000 | # solutions[variable] = [singlevalue] |
3001 | # else: |
3002 | # solutions[variable].append(singlevalue) |
3003 | - |
3004 | - self.assertEqual(nb_value, 71) |
3005 | + |
3006 | + self.assertEqual(nb_value, 72) |
3007 | |
3008 | |
3009 | |
3010 | @@ -346,7 +347,7 @@ |
3011 | alreadydefine.append(new_def) |
3012 | alreadydefine = [name.lower() for name in alreadydefine] |
3013 | alreadydefine.sort() |
3014 | - solution = ['aew ', 'as ', 'ckm22 ', 'complexi ', 'cw ', 'cw__exp__2 ', 'ee ', 'ee__exp__2 ','g ', 'g1 ', 'g__exp__2 ', 'gal(1) ', 'gal(2) ', 'gw ', 'gw__exp__2 ', 'lam ', 'mh__exp__2 ', 'muh ', 'mw ', 'mw__exp__2 ', 'mz__exp__2 ', 'mz__exp__4 ', 'sqrt__2 ', 'sqrt__aew ', 'sqrt__as ', 'sqrt__sw2 ', 'sw ', 'sw2 ', 'sw__exp__2 ', 'v ', 'v__exp__2 ', 'yb ', 'yt ', 'ytau '] |
3015 | + solution = ['aew ', 'as ', 'ckm2x2 ', 'complexi ', 'cw ', 'cw__exp__2 ', 'ee ', 'ee__exp__2 ','g ', 'g1 ', 'g__exp__2 ', 'gal(1) ', 'gal(2) ', 'gw ', 'gw__exp__2 ', 'lam ', 'mh__exp__2 ', 'muh ', 'mw ', 'mw__exp__2 ', 'mz__exp__2 ', 'mz__exp__4 ', 'sqrt__2 ', 'sqrt__aew ', 'sqrt__as ', 'sqrt__sw2 ', 'sw ', 'sw2 ', 'sw__exp__2 ', 'v ', 'v__exp__2 ', 'yb ', 'yt ', 'ytau '] |
3016 | self.assertEqual(alreadydefine, solution) |
3017 | |
3018 | |
3019 | |
3020 | === modified file 'tests/parallel_tests/compare_with_old_mg5_version.py' |
3021 | --- tests/parallel_tests/compare_with_old_mg5_version.py 2012-02-27 16:23:02 +0000 |
3022 | +++ tests/parallel_tests/compare_with_old_mg5_version.py 2012-05-16 04:17:21 +0000 |
3023 | @@ -38,7 +38,7 @@ |
3024 | """A class to compare the value of a old MG5 version and the current one""" |
3025 | |
3026 | old_mg5 = None # link to the previous version of MG5 (prevent multiple build) |
3027 | - reference_number = 186 #146 corresponds to 1.3.3 |
3028 | + reference_number = 229 #186 #146 corresponds to 1.3.3 |
3029 | nb_test = 0 |
3030 | |
3031 | |
3032 | |
3033 | === modified file 'tests/parallel_tests/input_files/mg5_short_paralleltest_sm.pkl' |
3034 | Binary files tests/parallel_tests/input_files/mg5_short_paralleltest_sm.pkl 2011-11-28 20:34:18 +0000 and tests/parallel_tests/input_files/mg5_short_paralleltest_sm.pkl 2012-05-16 04:17:21 +0000 differ |
3035 | === modified file 'tests/unit_tests/iolibs/test_export_cpp.py' |
3036 | --- tests/unit_tests/iolibs/test_export_cpp.py 2012-02-17 06:01:41 +0000 |
3037 | +++ tests/unit_tests/iolibs/test_export_cpp.py 2012-05-16 04:17:21 +0000 |
3038 | @@ -1300,6 +1300,562 @@ |
3039 | #print open(self.give_pos('test.cc')).read() |
3040 | self.assertFileContains('test.cc', goal_string) |
3041 | |
3042 | + def test_write_cpp_four_fermion_vertex(self): |
3043 | + """Testing process u u > t t g with fermion flow (u~t)(u~t) |
3044 | + """ |
3045 | + |
3046 | + # Set up model |
3047 | + |
3048 | + mypartlist = base_objects.ParticleList() |
3049 | + myinterlist = base_objects.InteractionList() |
3050 | + |
3051 | + # A u quark and its antiparticle |
3052 | + mypartlist.append(base_objects.Particle({'name':'u', |
3053 | + 'antiname':'u~', |
3054 | + 'spin':2, |
3055 | + 'color':3, |
3056 | + 'mass':'zero', |
3057 | + 'width':'zero', |
3058 | + 'texname':'u', |
3059 | + 'antitexname':'\bar u', |
3060 | + 'line':'straight', |
3061 | + 'charge':2. / 3., |
3062 | + 'pdg_code':2, |
3063 | + 'propagating':True, |
3064 | + 'is_part':True, |
3065 | + 'self_antipart':False})) |
3066 | + u = mypartlist[len(mypartlist) - 1] |
3067 | + antiu = copy.copy(u) |
3068 | + antiu.set('is_part', False) |
3069 | + |
3070 | + # A t quark and its antiparticle |
3071 | + mypartlist.append(base_objects.Particle({'name':'t', |
3072 | + 'antiname':'t~', |
3073 | + 'spin':2, |
3074 | + 'color':3, |
3075 | + 'mass':'MT', |
3076 | + 'width':'WT', |
3077 | + 'texname':'t', |
3078 | + 'antitexname':'\bar t', |
3079 | + 'line':'straight', |
3080 | + 'charge':2. / 3., |
3081 | + 'pdg_code':6, |
3082 | + 'propagating':True, |
3083 | + 'is_part':True, |
3084 | + 'self_antipart':False})) |
3085 | + t = mypartlist[len(mypartlist) - 1] |
3086 | + antit = copy.copy(t) |
3087 | + antit.set('is_part', False) |
3088 | + |
3089 | + # A gluon |
3090 | + mypartlist.append(base_objects.Particle({'name':'g', |
3091 | + 'antiname':'g', |
3092 | + 'spin':3, |
3093 | + 'color':8, |
3094 | + 'mass':'zero', |
3095 | + 'width':'zero', |
3096 | + 'texname':'g', |
3097 | + 'antitexname':'g', |
3098 | + 'line':'curly', |
3099 | + 'charge':0., |
3100 | + 'pdg_code':21, |
3101 | + 'propagating':True, |
3102 | + 'is_part':True, |
3103 | + 'self_antipart':True})) |
3104 | + |
3105 | + g = mypartlist[len(mypartlist) - 1] |
3106 | + |
3107 | + # Gluon couplings to quarks |
3108 | + myinterlist.append(base_objects.Interaction({ |
3109 | + 'id': 1, |
3110 | + 'particles': base_objects.ParticleList(\ |
3111 | + [antiu, \ |
3112 | + u, \ |
3113 | + g]), |
3114 | + 'color': [color.ColorString([color.T(2, 1, 0)])], |
3115 | + 'lorentz':['FFV1'], |
3116 | + 'couplings':{(0, 0):'GG'}, |
3117 | + 'orders':{'QCD':1}})) |
3118 | + |
3119 | + myinterlist.append(base_objects.Interaction({ |
3120 | + 'id': 2, |
3121 | + 'particles': base_objects.ParticleList(\ |
3122 | + [antit, \ |
3123 | + t, \ |
3124 | + g]), |
3125 | + 'color': [color.ColorString([color.T(2, 1, 0)])], |
3126 | + 'lorentz':['FFV1'], |
3127 | + 'couplings':{(0, 0):'GG'}, |
3128 | + 'orders':{'QCD':1}})) |
3129 | + |
3130 | + # Four fermion vertex |
3131 | + myinterlist.append(base_objects.Interaction({ |
3132 | + 'id': 3, |
3133 | + 'particles': base_objects.ParticleList(\ |
3134 | + [antiu, |
3135 | + t, |
3136 | + antiu, |
3137 | + t]), |
3138 | + 'color': [color.ColorString([color.T(1, 0), |
3139 | + color.T(3, 2)])], |
3140 | + 'lorentz':['FFFF1'], |
3141 | + 'couplings':{(0, 0):'GEFF'}, |
3142 | + 'orders':{'NP':2}})) |
3143 | + |
3144 | + mybasemodel = base_objects.Model() |
3145 | + mybasemodel.set('particles', mypartlist) |
3146 | + mybasemodel.set('interactions', myinterlist) |
3147 | + |
3148 | + myleglist = base_objects.LegList() |
3149 | + |
3150 | + myleglist.append(base_objects.Leg({'id':2, |
3151 | + 'state':False})) |
3152 | + myleglist.append(base_objects.Leg({'id':2, |
3153 | + 'state':False})) |
3154 | + myleglist.append(base_objects.Leg({'id':6, |
3155 | + 'state':True})) |
3156 | + myleglist.append(base_objects.Leg({'id':6, |
3157 | + 'state':True})) |
3158 | + myleglist.append(base_objects.Leg({'id':21, |
3159 | + 'state':True})) |
3160 | + |
3161 | + myproc = base_objects.Process({'legs':myleglist, |
3162 | + 'model':mybasemodel}) |
3163 | + |
3164 | + myamplitude = diagram_generation.Amplitude({'process': myproc}) |
3165 | + |
3166 | + matrix_element = helas_objects.HelasMultiProcess(myamplitude) |
3167 | + matrix_element.get('matrix_elements')[0].set('has_mirror_process', |
3168 | + True) |
3169 | + |
3170 | + goal_string = \ |
3171 | +"""//========================================================================== |
3172 | +// This file has been automatically generated for Pythia 8 |
3173 | +// MadGraph 5 v. %(version)s, %(date)s |
3174 | +// By the MadGraph Development Team |
3175 | +// Please visit us at https://launchpad.net/madgraph5 |
3176 | +//========================================================================== |
3177 | + |
3178 | +#ifndef Pythia8_Sigma__uu_ttg_H |
3179 | +#define Pythia8_Sigma__uu_ttg_H |
3180 | + |
3181 | +#include <complex> |
3182 | + |
3183 | +#include "SigmaProcess.h" |
3184 | +#include "Parameters_.h" |
3185 | + |
3186 | +using namespace std; |
3187 | + |
3188 | +namespace Pythia8 |
3189 | +{ |
3190 | +//========================================================================== |
3191 | +// A class for calculating the matrix elements for |
3192 | +// Process: u u > t t g |
3193 | +//-------------------------------------------------------------------------- |
3194 | + |
3195 | +class Sigma__uu_ttg : public Sigma3Process |
3196 | +{ |
3197 | + public: |
3198 | + |
3199 | + // Constructor. |
3200 | + Sigma__uu_ttg() {} |
3201 | + |
3202 | + // Initialize process. |
3203 | + virtual void initProc(); |
3204 | + |
3205 | + // Calculate flavour-independent parts of cross section. |
3206 | + virtual void sigmaKin(); |
3207 | + |
3208 | + // Evaluate sigmaHat(sHat). |
3209 | + virtual double sigmaHat(); |
3210 | + |
3211 | + // Select flavour, colour and anticolour. |
3212 | + virtual void setIdColAcol(); |
3213 | + |
3214 | + // Evaluate weight for decay angles. |
3215 | + virtual double weightDecay(Event& process, int iResBeg, int iResEnd); |
3216 | + |
3217 | + // Info on the subprocess. |
3218 | + virtual string name() const {return "u u > t t g ()";} |
3219 | + |
3220 | + virtual int code() const {return 10000;} |
3221 | + |
3222 | + virtual string inFlux() const {return "qq";} |
3223 | + int id3Mass() const {return 6;} |
3224 | + int id4Mass() const {return 6;} |
3225 | + virtual int resonanceA() const {return 6;} |
3226 | + // Tell Pythia that sigmaHat returns the ME^2 |
3227 | + virtual bool convertM2() const {return true;} |
3228 | + |
3229 | + private: |
3230 | + |
3231 | + // Private functions to calculate the matrix element for all subprocesses |
3232 | + // Calculate wavefunctions |
3233 | + void calculate_wavefunctions(const int perm[], const int hel[]); |
3234 | + static const int nwavefuncs = 9; |
3235 | + std::complex<double> w[nwavefuncs][18]; |
3236 | + static const int namplitudes = 4; |
3237 | + std::complex<double> amp[namplitudes]; |
3238 | + double matrix_uu_ttg(); |
3239 | + |
3240 | + // Constants for array limits |
3241 | + static const int nexternal = 5; |
3242 | + static const int nprocesses = 2; |
3243 | + |
3244 | + // Store the matrix element value from sigmaKin |
3245 | + double matrix_element[nprocesses]; |
3246 | + |
3247 | + // Color flows, used when selecting color |
3248 | + double * jamp2[nprocesses]; |
3249 | + |
3250 | + // Pointer to the model parameters |
3251 | + Parameters_ * pars; |
3252 | + |
3253 | +}; |
3254 | + |
3255 | +} // end namespace Pythia |
3256 | + |
3257 | +#endif // Pythia8_Sigma__uu_ttg_H |
3258 | +""" % misc.get_pkg_info() |
3259 | + |
3260 | + exporter = export_cpp.ProcessExporterPythia8(matrix_element, |
3261 | + self.mycppwriter) |
3262 | + |
3263 | + exporter.write_process_h_file(\ |
3264 | + writers.CPPWriter(self.give_pos('test.h'))) |
3265 | + |
3266 | + #print open(self.give_pos('test.h')).read() |
3267 | + self.assertFileContains('test.h', goal_string) |
3268 | + |
3269 | + goal_string = \ |
3270 | +"""//========================================================================== |
3271 | +// This file has been automatically generated for Pythia 8 by |
3272 | +// MadGraph 5 v. 1.4.6, 2012-04-XX |
3273 | +// By the MadGraph Development Team |
3274 | +// Please visit us at https://launchpad.net/madgraph5 |
3275 | +//========================================================================== |
3276 | + |
3277 | +#include "Sigma__uu_ttg.h" |
3278 | +#include "HelAmps_.h" |
3279 | + |
3280 | +using namespace Pythia8_; |
3281 | + |
3282 | +namespace Pythia8 |
3283 | +{ |
3284 | + |
3285 | +//========================================================================== |
3286 | +// Class member functions for calculating the matrix elements for |
3287 | +// Process: u u > t t g |
3288 | + |
3289 | +//-------------------------------------------------------------------------- |
3290 | +// Initialize process. |
3291 | + |
3292 | +void Sigma__uu_ttg::initProc() |
3293 | +{ |
3294 | + // Instantiate the model class and set parameters that stay fixed during run |
3295 | + pars = Parameters_::getInstance(); |
3296 | + pars->setIndependentParameters(particleDataPtr, couplingsPtr, slhaPtr); |
3297 | + pars->setIndependentCouplings(); |
3298 | + // Set massive/massless matrix elements for c/b/mu/tau |
3299 | + mcME = 0.; |
3300 | + mbME = 0.; |
3301 | + mmuME = 0.; |
3302 | + mtauME = 0.; |
3303 | + jamp2[0] = new double[3]; |
3304 | +} |
3305 | + |
3306 | +//-------------------------------------------------------------------------- |
3307 | +// Evaluate |M|^2, part independent of incoming flavour. |
3308 | + |
3309 | +void Sigma__uu_ttg::sigmaKin() |
3310 | +{ |
3311 | + // Set the parameters which change event by event |
3312 | + pars->setDependentParameters(particleDataPtr, couplingsPtr, slhaPtr, alpS); |
3313 | + pars->setDependentCouplings(); |
3314 | + // Reset color flows |
3315 | + for(int i = 0; i < 3; i++ ) |
3316 | + jamp2[0][i] = 0.; |
3317 | + |
3318 | + // Local variables and constants |
3319 | + const int ncomb = 32; |
3320 | + static bool goodhel[ncomb] = {ncomb * false}; |
3321 | + static int ntry = 0, sum_hel = 0, ngood = 0; |
3322 | + static int igood[ncomb]; |
3323 | + static int jhel; |
3324 | + double t[nprocesses]; |
3325 | + // Helicities for the process |
3326 | + static const int helicities[ncomb][nexternal] = {{-1, -1, -1, -1, -1}, {-1, |
3327 | + -1, -1, -1, 1}, {-1, -1, -1, 1, -1}, {-1, -1, -1, 1, 1}, {-1, -1, 1, -1, |
3328 | + -1}, {-1, -1, 1, -1, 1}, {-1, -1, 1, 1, -1}, {-1, -1, 1, 1, 1}, {-1, 1, |
3329 | + -1, -1, -1}, {-1, 1, -1, -1, 1}, {-1, 1, -1, 1, -1}, {-1, 1, -1, 1, 1}, |
3330 | + {-1, 1, 1, -1, -1}, {-1, 1, 1, -1, 1}, {-1, 1, 1, 1, -1}, {-1, 1, 1, 1, |
3331 | + 1}, {1, -1, -1, -1, -1}, {1, -1, -1, -1, 1}, {1, -1, -1, 1, -1}, {1, -1, |
3332 | + -1, 1, 1}, {1, -1, 1, -1, -1}, {1, -1, 1, -1, 1}, {1, -1, 1, 1, -1}, {1, |
3333 | + -1, 1, 1, 1}, {1, 1, -1, -1, -1}, {1, 1, -1, -1, 1}, {1, 1, -1, 1, -1}, |
3334 | + {1, 1, -1, 1, 1}, {1, 1, 1, -1, -1}, {1, 1, 1, -1, 1}, {1, 1, 1, 1, -1}, |
3335 | + {1, 1, 1, 1, 1}}; |
3336 | + // Denominators: spins, colors and identical particles |
3337 | + const int denominators[nprocesses] = {72, 72}; |
3338 | + |
3339 | + ntry = ntry + 1; |
3340 | + |
3341 | + // Reset the matrix elements |
3342 | + for(int i = 0; i < nprocesses; i++ ) |
3343 | + { |
3344 | + matrix_element[i] = 0.; |
3345 | + t[i] = 0.; |
3346 | + } |
3347 | + |
3348 | + // Define permutation |
3349 | + int perm[nexternal]; |
3350 | + for(int i = 0; i < nexternal; i++ ) |
3351 | + { |
3352 | + perm[i] = i; |
3353 | + } |
3354 | + |
3355 | + // For now, call setupForME() here |
3356 | + id1 = 2; |
3357 | + id2 = 2; |
3358 | + if( !setupForME()) |
3359 | + { |
3360 | + return; |
3361 | + } |
3362 | + |
3363 | + if (sum_hel == 0 || ntry < 10) |
3364 | + { |
3365 | + // Calculate the matrix element for all helicities |
3366 | + for(int ihel = 0; ihel < ncomb; ihel++ ) |
3367 | + { |
3368 | + if (goodhel[ihel] || ntry < 2) |
3369 | + { |
3370 | + calculate_wavefunctions(perm, helicities[ihel]); |
3371 | + t[0] = matrix_uu_ttg(); |
3372 | + // Mirror initial state momenta for mirror process |
3373 | + perm[0] = 1; |
3374 | + perm[1] = 0; |
3375 | + // Calculate wavefunctions |
3376 | + calculate_wavefunctions(perm, helicities[ihel]); |
3377 | + // Mirror back |
3378 | + perm[0] = 0; |
3379 | + perm[1] = 1; |
3380 | + // Calculate matrix elements |
3381 | + t[1] = matrix_uu_ttg(); |
3382 | + double tsum = 0; |
3383 | + for(int iproc = 0; iproc < nprocesses; iproc++ ) |
3384 | + { |
3385 | + matrix_element[iproc] += t[iproc]; |
3386 | + tsum += t[iproc]; |
3387 | + } |
3388 | + // Store which helicities give non-zero result |
3389 | + if (tsum != 0. && !goodhel[ihel]) |
3390 | + { |
3391 | + goodhel[ihel] = true; |
3392 | + ngood++; |
3393 | + igood[ngood] = ihel; |
3394 | + } |
3395 | + } |
3396 | + } |
3397 | + jhel = 0; |
3398 | + sum_hel = min(sum_hel, ngood); |
3399 | + } |
3400 | + else |
3401 | + { |
3402 | + // Only use the "good" helicities |
3403 | + for(int j = 0; j < sum_hel; j++ ) |
3404 | + { |
3405 | + jhel++; |
3406 | + if (jhel >= ngood) |
3407 | + jhel = 0; |
3408 | + double hwgt = double(ngood)/double(sum_hel); |
3409 | + int ihel = igood[jhel]; |
3410 | + calculate_wavefunctions(perm, helicities[ihel]); |
3411 | + t[0] = matrix_uu_ttg(); |
3412 | + // Mirror initial state momenta for mirror process |
3413 | + perm[0] = 1; |
3414 | + perm[1] = 0; |
3415 | + // Calculate wavefunctions |
3416 | + calculate_wavefunctions(perm, helicities[ihel]); |
3417 | + // Mirror back |
3418 | + perm[0] = 0; |
3419 | + perm[1] = 1; |
3420 | + // Calculate matrix elements |
3421 | + t[1] = matrix_uu_ttg(); |
3422 | + for(int iproc = 0; iproc < nprocesses; iproc++ ) |
3423 | + { |
3424 | + matrix_element[iproc] += t[iproc] * hwgt; |
3425 | + } |
3426 | + } |
3427 | + } |
3428 | + |
3429 | + for (int i = 0; i < nprocesses; i++ ) |
3430 | + matrix_element[i] /= denominators[i]; |
3431 | + |
3432 | + |
3433 | + |
3434 | +} |
3435 | + |
3436 | +//-------------------------------------------------------------------------- |
3437 | +// Evaluate |M|^2, including incoming flavour dependence. |
3438 | + |
3439 | +double Sigma__uu_ttg::sigmaHat() |
3440 | +{ |
3441 | + // Select between the different processes |
3442 | + if(id1 == 2 && id2 == 2) |
3443 | + { |
3444 | + // Add matrix elements for processes with beams (2, 2) |
3445 | + return matrix_element[0] + matrix_element[1]; |
3446 | + } |
3447 | + else |
3448 | + { |
3449 | + // Return 0 if not correct initial state assignment |
3450 | + return 0.; |
3451 | + } |
3452 | +} |
3453 | + |
3454 | +//-------------------------------------------------------------------------- |
3455 | +// Select identity, colour and anticolour. |
3456 | + |
3457 | +void Sigma__uu_ttg::setIdColAcol() |
3458 | +{ |
3459 | + if(id1 == 2 && id2 == 2) |
3460 | + { |
3461 | + // Pick one of the flavor combinations (6, 6, 21) |
3462 | + int flavors[1][3] = {{6, 6, 21}}; |
3463 | + vector<double> probs; |
3464 | + double sum = matrix_element[0]; |
3465 | + probs.push_back(matrix_element[0]/sum); |
3466 | + int choice = rndmPtr->pick(probs); |
3467 | + id3 = flavors[choice][0]; |
3468 | + id4 = flavors[choice][1]; |
3469 | + id5 = flavors[choice][2]; |
3470 | + } |
3471 | + setId(id1, id2, id3, id4, id5); |
3472 | + // Pick color flow |
3473 | + int ncolor[1] = {3}; |
3474 | + if(id1 == 2 && id2 == 2 && id3 == 6 && id4 == 6 && id5 == 21) |
3475 | + { |
3476 | + vector<double> probs; |
3477 | + double sum = jamp2[0][0] + jamp2[0][1] + jamp2[0][2]; |
3478 | + for(int i = 0; i < ncolor[0]; i++ ) |
3479 | + probs.push_back(jamp2[0][i]/sum); |
3480 | + int ic = rndmPtr->pick(probs); |
3481 | + static int colors[3][10] = {{3, 0, 1, 0, 1, 0, 2, 0, 3, 2}, {2, 0, 3, 0, 1, |
3482 | + 0, 2, 0, 3, 1}, {3, 0, 2, 0, 1, 0, 2, 0, 3, 1}}; |
3483 | + setColAcol(colors[ic][0], colors[ic][1], colors[ic][2], colors[ic][3], |
3484 | + colors[ic][4], colors[ic][5], colors[ic][6], colors[ic][7], |
3485 | + colors[ic][8], colors[ic][9]); |
3486 | + } |
3487 | + else if(id1 == 2 && id2 == 2 && id3 == 6 && id4 == 6 && id5 == 21) |
3488 | + { |
3489 | + vector<double> probs; |
3490 | + double sum = jamp2[0][0] + jamp2[0][1] + jamp2[0][2]; |
3491 | + for(int i = 0; i < ncolor[0]; i++ ) |
3492 | + probs.push_back(jamp2[0][i]/sum); |
3493 | + int ic = rndmPtr->pick(probs); |
3494 | + static int colors[3][10] = {{1, 0, 3, 0, 1, 0, 2, 0, 3, 2}, {3, 0, 2, 0, 1, |
3495 | + 0, 2, 0, 3, 1}, {2, 0, 3, 0, 1, 0, 2, 0, 3, 1}}; |
3496 | + setColAcol(colors[ic][0], colors[ic][1], colors[ic][2], colors[ic][3], |
3497 | + colors[ic][4], colors[ic][5], colors[ic][6], colors[ic][7], |
3498 | + colors[ic][8], colors[ic][9]); |
3499 | + } |
3500 | +} |
3501 | + |
3502 | +//-------------------------------------------------------------------------- |
3503 | +// Evaluate weight for angles of decay products in process |
3504 | + |
3505 | +double Sigma__uu_ttg::weightDecay(Event& process, int iResBeg, int iResEnd) |
3506 | +{ |
3507 | + // Just use isotropic decay (default) |
3508 | + return 1.; |
3509 | +} |
3510 | + |
3511 | +//========================================================================== |
3512 | +// Private class member functions |
3513 | + |
3514 | +//-------------------------------------------------------------------------- |
3515 | +// Evaluate |M|^2 for each subprocess |
3516 | + |
3517 | +void Sigma__uu_ttg::calculate_wavefunctions(const int perm[], const int hel[]) |
3518 | +{ |
3519 | + // Calculate wavefunctions for all processes |
3520 | + double p[nexternal][4]; |
3521 | + int i; |
3522 | + |
3523 | + // Convert Pythia 4-vectors to double[] |
3524 | + for(i = 0; i < nexternal; i++ ) |
3525 | + { |
3526 | + p[i][0] = pME[i].e(); |
3527 | + p[i][1] = pME[i].px(); |
3528 | + p[i][2] = pME[i].py(); |
3529 | + p[i][3] = pME[i].pz(); |
3530 | + } |
3531 | + |
3532 | + // Calculate all wavefunctions |
3533 | + ixxxxx(p[perm[0]], mME[0], hel[0], +1, w[0]); |
3534 | + ixxxxx(p[perm[1]], mME[1], hel[1], +1, w[1]); |
3535 | + oxxxxx(p[perm[2]], mME[2], hel[2], +1, w[2]); |
3536 | + oxxxxx(p[perm[3]], mME[3], hel[3], +1, w[3]); |
3537 | + vxxxxx(p[perm[4]], mME[4], hel[4], +1, w[4]); |
3538 | + FFV1_2(w[0], w[4], pars->GG, pars->zero, pars->zero, w[5]); |
3539 | + FFFF1_2(w[0], w[1], w[2], pars->GEFF, pars->MT, pars->WT, w[6]); |
3540 | + FFFF1_2(w[0], w[1], w[3], pars->GEFF, pars->MT, pars->WT, w[7]); |
3541 | + FFFF1_1(w[2], w[0], w[3], pars->GEFF, pars->zero, pars->zero, w[8]); |
3542 | + |
3543 | + // Calculate all amplitudes |
3544 | + // Amplitude(s) for diagram number 0 |
3545 | + FFFF1_0(w[1], w[2], w[5], w[3], pars->GEFF, amp[0]); |
3546 | + FFV1_0(w[6], w[3], w[4], pars->GG, amp[1]); |
3547 | + FFV1_0(w[7], w[2], w[4], pars->GG, amp[2]); |
3548 | + FFV1_0(w[1], w[8], w[4], pars->GG, amp[3]); |
3549 | + |
3550 | + |
3551 | +} |
3552 | +double Sigma__uu_ttg::matrix_uu_ttg() |
3553 | +{ |
3554 | + int i, j; |
3555 | + // Local variables |
3556 | + const int ngraphs = 4; |
3557 | + const int ncolor = 3; |
3558 | + std::complex<double> ztemp; |
3559 | + std::complex<double> jamp[ncolor]; |
3560 | + // The color matrix; |
3561 | + static const double denom[ncolor] = {1, 1, 1}; |
3562 | + static const double cf[ncolor][ncolor] = {{12, 0, 4}, {0, 12, 4}, {4, 4, |
3563 | + 12}}; |
3564 | + |
3565 | + // Calculate color flows |
3566 | + jamp[0] = +amp[0] + amp[1]; |
3567 | + jamp[1] = +amp[3]; |
3568 | + jamp[2] = -amp[2]; |
3569 | + |
3570 | + // Sum and square the color flows to get the matrix element |
3571 | + double matrix = 0; |
3572 | + for(i = 0; i < ncolor; i++ ) |
3573 | + { |
3574 | + ztemp = 0.; |
3575 | + for(j = 0; j < ncolor; j++ ) |
3576 | + ztemp = ztemp + cf[i][j] * jamp[j]; |
3577 | + matrix = matrix + real(ztemp * conj(jamp[i]))/denom[i]; |
3578 | + } |
3579 | + |
3580 | + // Store the leading color flows for choice of color |
3581 | + for(i = 0; i < ncolor; i++ ) |
3582 | + jamp2[0][i] += real(jamp[i] * conj(jamp[i])); |
3583 | + |
3584 | + return matrix; |
3585 | +} |
3586 | + |
3587 | + |
3588 | +} // end namespace Pythia |
3589 | +""" |
3590 | + |
3591 | + exporter.write_process_cc_file(\ |
3592 | + writers.CPPWriter(self.give_pos('test.cc'))) |
3593 | + |
3594 | + #print open(self.give_pos('test.cc')).read() |
3595 | + self.assertFileContains('test.cc', goal_string) |
3596 | + |
3597 | + |
3598 | def disabled_test_write_process_files(self): |
3599 | """Test writing the .h and .cc Pythia file for a matrix element""" |
3600 | |
3601 | @@ -1312,6 +1868,7 @@ |
3602 | print "cd /tmp; g++ -c -I $PATH_TO_PYTHIA8/include Sigma_sm_qqx_qqx.cc.cc" |
3603 | |
3604 | |
3605 | + |
3606 | #=============================================================================== |
3607 | # ExportUFOModelPythia8Test |
3608 | #=============================================================================== |
3609 | @@ -1340,68 +1897,54 @@ |
3610 | """Test writing the Pythia model parameter files""" |
3611 | |
3612 | goal_file_h = \ |
3613 | -"""//========================================================================== |
3614 | -// This file has been automatically generated for Pythia 8 |
3615 | +"""//==========================================================================\n |
3616 | +// This file has been automatically generated for Pythia 8\n |
3617 | # MadGraph 5 v. %(version)s, %(date)s |
3618 | -# By the MadGraph Development Team |
3619 | -# Please visit us at https://launchpad.net/madgraph5 |
3620 | -//========================================================================== |
3621 | - |
3622 | -#ifndef Pythia8_parameters_sm_H |
3623 | -#define Pythia8_parameters_sm_H |
3624 | - |
3625 | -#include <complex> |
3626 | - |
3627 | -#include "ParticleData.h" |
3628 | -#include "StandardModel.h" |
3629 | -#include "SusyLesHouches.h" |
3630 | - |
3631 | -using namespace std; |
3632 | - |
3633 | -namespace Pythia8 { |
3634 | - |
3635 | -class Parameters_sm |
3636 | -{ |
3637 | -public: |
3638 | - |
3639 | -static Parameters_sm* getInstance(); |
3640 | - |
3641 | -// Model parameters independent of aS |
3642 | -double WTau,WH,WW,WZ,WT,MTA,MM,Me,MH,MZ,MB,MT,MC,ymtau,ymm,yme,ymt,ymb,ymc,etaWS,rhoWS,AWS,lamWS,Gf,aEWM1,ZERO,lamWS__exp__2,lamWS__exp__3,MZ__exp__2,MZ__exp__4,sqrt__2,MH__exp__2,aEW,MW,sqrt__aEW,ee,MW__exp__2,sw2,cw,sqrt__sw2,sw,g1,gw,v,v__exp__2,lam,yb,yc,ye,ym,yt,ytau,muH,gw__exp__2,cw__exp__2,ee__exp__2,sw__exp__2; |
3643 | -std::complex<double> CKM11,CKM12,complexi,CKM13,CKM21,CKM22,CKM23,CKM31,CKM32,CKM33,conjg__CKM11,conjg__CKM12,conjg__CKM13,conjg__CKM21,conjg__CKM22,conjg__CKM23,conjg__CKM31,conjg__CKM32,conjg__CKM33; |
3644 | -// Model parameters dependent on aS |
3645 | -double aS,sqrt__aS,G,G__exp__2; |
3646 | -// Model couplings independent of aS |
3647 | -std::complex<double> GC_1,GC_2,GC_3,GC_7,GC_8,GC_9,GC_10,GC_11,GC_12,GC_13,GC_14,GC_15,GC_16,GC_17,GC_18,GC_19,GC_20,GC_21,GC_22,GC_23,GC_24,GC_25,GC_26,GC_27,GC_28,GC_29,GC_30,GC_31,GC_32,GC_33,GC_34,GC_35,GC_36,GC_37,GC_38,GC_39,GC_40,GC_41,GC_42,GC_43,GC_44,GC_45,GC_46,GC_47; |
3648 | -// Model couplings dependent on aS |
3649 | -std::complex<double> GC_6,GC_5,GC_4; |
3650 | - |
3651 | -// Set parameters that are unchanged during the run |
3652 | -void setIndependentParameters(ParticleData*& pd, Couplings*& csm, SusyLesHouches*& slhaPtr); |
3653 | -// Set couplings that are unchanged during the run |
3654 | -void setIndependentCouplings(); |
3655 | -// Set parameters that are changed event by event |
3656 | -void setDependentParameters(ParticleData*& pd, Couplings*& csm, SusyLesHouches*& slhaPtr, double alpS); |
3657 | -// Set couplings that are changed event by event |
3658 | -void setDependentCouplings(); |
3659 | - |
3660 | -// Print parameters that are unchanged during the run |
3661 | -void printIndependentParameters(); |
3662 | -// Print couplings that are unchanged during the run |
3663 | -void printIndependentCouplings(); |
3664 | -// Print parameters that are changed event by event |
3665 | -void printDependentParameters(); |
3666 | -// Print couplings that are changed event by event |
3667 | -void printDependentCouplings(); |
3668 | - |
3669 | - |
3670 | - private: |
3671 | -static Parameters_sm* instance; |
3672 | -}; |
3673 | - |
3674 | -} // end namespace Pythia8 |
3675 | -#endif // Pythia8_parameters_sm_H |
3676 | -""" % misc.get_pkg_info() |
3677 | +# By the MadGraph Development Team\n |
3678 | +# Please visit us at https://launchpad.net/madgraph5\n |
3679 | +//==========================================================================\n\n |
3680 | +#ifndef Pythia8_parameters_sm_H\n |
3681 | +#define Pythia8_parameters_sm_H\n\n |
3682 | +#include <complex>\n\n |
3683 | +#include "ParticleData.h"\n |
3684 | +#include "StandardModel.h"\n |
3685 | +#include "SusyLesHouches.h"\n\n |
3686 | +using namespace std;\n\n |
3687 | +namespace Pythia8 {\n\n |
3688 | +class Parameters_sm\n |
3689 | +{\n |
3690 | +public:\n\n |
3691 | +static Parameters_sm* getInstance();\n\n |
3692 | +// Model parameters independent of aS\n |
3693 | +double WTau,WH,WW,WZ,WT,MTA,MM,Me,MH,MZ,MB,MT,MC,ymtau,ymm,yme,ymt,ymb,ymc,etaWS,rhoWS,AWS,lamWS,Gf,aEWM1,ZERO,lamWS__exp__2,lamWS__exp__3,MZ__exp__2,MZ__exp__4,sqrt__2,MH__exp__2,aEW,MW,sqrt__aEW,ee,MW__exp__2,sw2,cw,sqrt__sw2,sw,g1,gw,v,v__exp__2,lam,yb,yc,ye,ym,yt,ytau,muH,gw__exp__2,cw__exp__2,ee__exp__2,sw__exp__2;\n |
3694 | +std::complex<double> CKM1x1,CKM1x2,complexi,CKM1x3,CKM2x1,CKM2x2,CKM2x3,CKM3x1,CKM3x2,CKM3x3,conjg__CKM1x1,conjg__CKM1x2,conjg__CKM1x3,conjg__CKM2x1,conjg__CKM2x2,conjg__CKM2x3,conjg__CKM3x1,conjg__CKM3x2,conjg__CKM3x3;\n |
3695 | +// Model parameters dependent on aS\n |
3696 | +double aS,sqrt__aS,G,G__exp__2;\n |
3697 | +// Model couplings independent of aS\n |
3698 | +std::complex<double> GC_1,GC_2,GC_3,GC_7,GC_8,GC_9,GC_10,GC_11,GC_12,GC_13,GC_14,GC_15,GC_16,GC_17,GC_18,GC_19,GC_20,GC_21,GC_22,GC_23,GC_24,GC_25,GC_26,GC_27,GC_28,GC_29,GC_30,GC_31,GC_32,GC_33,GC_34,GC_35,GC_36,GC_37,GC_38,GC_39,GC_40,GC_41,GC_42,GC_43,GC_44,GC_45,GC_46,GC_47,GC_48;\n |
3699 | +// Model couplings dependent on aS\n |
3700 | +std::complex<double> GC_6,GC_5,GC_4;\n\n |
3701 | +// Set parameters that are unchanged during the run\n |
3702 | +void setIndependentParameters(ParticleData*& pd, Couplings*& csm, SusyLesHouches*& slhaPtr);\n |
3703 | +// Set couplings that are unchanged during the run\n |
3704 | +void setIndependentCouplings();\n |
3705 | +// Set parameters that are changed event by event\n |
3706 | +void setDependentParameters(ParticleData*& pd, Couplings*& csm, SusyLesHouches*& slhaPtr, double alpS);\n |
3707 | +// Set couplings that are changed event by event\n |
3708 | +void setDependentCouplings();\n\n |
3709 | +// Print parameters that are unchanged during the run\n |
3710 | +void printIndependentParameters();\n |
3711 | +// Print couplings that are unchanged during the run\n |
3712 | +void printIndependentCouplings();\n |
3713 | +// Print parameters that are changed event by event\n |
3714 | +void printDependentParameters();\n |
3715 | +// Print couplings that are changed event by event\n |
3716 | +void printDependentCouplings();\n\n\n |
3717 | + private:\n |
3718 | +static Parameters_sm* instance;\n |
3719 | +};\n\n |
3720 | +} // end namespace Pythia8\n |
3721 | +#endif // Pythia8_parameters_sm_H\n""" % misc.get_pkg_info() |
3722 | |
3723 | goal_file_cc = \ |
3724 | """//========================================================================== |
3725 | @@ -1422,14 +1965,14 @@ |
3726 | |
3727 | // Function to get static instance - only one instance per program |
3728 | Parameters_sm* Parameters_sm::getInstance(){ |
3729 | - if (instance == 0) |
3730 | - instance = new Parameters_sm(); |
3731 | +\tif (instance == 0) |
3732 | +\t instance = new Parameters_sm(); |
3733 | |
3734 | - return instance; |
3735 | + return instance; |
3736 | } |
3737 | |
3738 | void Parameters_sm::setIndependentParameters(ParticleData*& pd, Couplings*& csm, SusyLesHouches*& slhaPtr){ |
3739 | - WTau=pd->mWidth(15); |
3740 | +\tWTau=pd->mWidth(15); |
3741 | WH=pd->mWidth(25); |
3742 | WW=pd->mWidth(24); |
3743 | WZ=pd->mWidth(23); |
3744 | @@ -1464,30 +2007,30 @@ |
3745 | aEWM1 = 1./csm->alphaEM(pow(pd->m0(23),2)); |
3746 | ZERO = 0.; |
3747 | lamWS__exp__2 = pow(lamWS,2.); |
3748 | -CKM11 = 1.-lamWS__exp__2/2.; |
3749 | -CKM12 = lamWS; |
3750 | +CKM1x1 = 1.-lamWS__exp__2/2.; |
3751 | +CKM1x2 = lamWS; |
3752 | complexi = std::complex<double>(0.,1.); |
3753 | lamWS__exp__3 = pow(lamWS,3.); |
3754 | -CKM13 = AWS*lamWS__exp__3*(-(etaWS*complexi)+rhoWS); |
3755 | -CKM21 = -lamWS; |
3756 | -CKM22 = 1.-lamWS__exp__2/2.; |
3757 | -CKM23 = AWS*lamWS__exp__2; |
3758 | -CKM31 = AWS*lamWS__exp__3*(1.-etaWS*complexi-rhoWS); |
3759 | -CKM32 = -(AWS*lamWS__exp__2); |
3760 | -CKM33 = 1.; |
3761 | +CKM1x3 = AWS*lamWS__exp__3*(-(etaWS*complexi)+rhoWS); |
3762 | +CKM2x1 = -lamWS; |
3763 | +CKM2x2 = 1.-lamWS__exp__2/2.; |
3764 | +CKM2x3 = AWS*lamWS__exp__2; |
3765 | +CKM3x1 = AWS*lamWS__exp__3*(1.-etaWS*complexi-rhoWS); |
3766 | +CKM3x2 = -(AWS*lamWS__exp__2); |
3767 | +CKM3x3 = 1.; |
3768 | MZ__exp__2 = pow(MZ,2.); |
3769 | MZ__exp__4 = pow(MZ,4.); |
3770 | sqrt__2 = sqrt(2.); |
3771 | MH__exp__2 = pow(MH,2.); |
3772 | -conjg__CKM11 = conj(CKM11); |
3773 | -conjg__CKM12 = conj(CKM12); |
3774 | -conjg__CKM13 = conj(CKM13); |
3775 | -conjg__CKM21 = conj(CKM21); |
3776 | -conjg__CKM22 = conj(CKM22); |
3777 | -conjg__CKM23 = conj(CKM23); |
3778 | -conjg__CKM31 = conj(CKM31); |
3779 | -conjg__CKM32 = conj(CKM32); |
3780 | -conjg__CKM33 = conj(CKM33); |
3781 | +conjg__CKM1x1 = conj(CKM1x1); |
3782 | +conjg__CKM1x2 = conj(CKM1x2); |
3783 | +conjg__CKM1x3 = conj(CKM1x3); |
3784 | +conjg__CKM2x1 = conj(CKM2x1); |
3785 | +conjg__CKM2x2 = conj(CKM2x2); |
3786 | +conjg__CKM2x3 = conj(CKM2x3); |
3787 | +conjg__CKM3x1 = conj(CKM3x1); |
3788 | +conjg__CKM3x2 = conj(CKM3x2); |
3789 | +conjg__CKM3x3 = conj(CKM3x3); |
3790 | aEW = 1./aEWM1; |
3791 | MW = sqrt(MZ__exp__2/2.+sqrt(MZ__exp__4/4.-(aEW*M_PI*MZ__exp__2)/(Gf*sqrt__2))); |
3792 | sqrt__aEW = sqrt(aEW); |
3793 | @@ -1515,67 +2058,68 @@ |
3794 | sw__exp__2 = pow(sw,2.); |
3795 | } |
3796 | void Parameters_sm::setIndependentCouplings(){ |
3797 | - GC_1 = -(ee*complexi)/3.; |
3798 | +\tGC_1 = -(ee*complexi)/3.; |
3799 | GC_2 = (2.*ee*complexi)/3.; |
3800 | GC_3 = -(ee*complexi); |
3801 | GC_7 = cw*complexi*gw; |
3802 | GC_8 = -(complexi*gw__exp__2); |
3803 | GC_9 = cw__exp__2*complexi*gw__exp__2; |
3804 | -GC_10 = (ee__exp__2*complexi)/(2.*sw__exp__2); |
3805 | -GC_11 = (ee*complexi)/(sw*sqrt__2); |
3806 | -GC_12 = (CKM11*ee*complexi)/(sw*sqrt__2); |
3807 | -GC_13 = (CKM12*ee*complexi)/(sw*sqrt__2); |
3808 | -GC_14 = (CKM13*ee*complexi)/(sw*sqrt__2); |
3809 | -GC_15 = (CKM21*ee*complexi)/(sw*sqrt__2); |
3810 | -GC_16 = (CKM22*ee*complexi)/(sw*sqrt__2); |
3811 | -GC_17 = (CKM23*ee*complexi)/(sw*sqrt__2); |
3812 | -GC_18 = (CKM31*ee*complexi)/(sw*sqrt__2); |
3813 | -GC_19 = (CKM32*ee*complexi)/(sw*sqrt__2); |
3814 | -GC_20 = (CKM33*ee*complexi)/(sw*sqrt__2); |
3815 | -GC_21 = -(cw*ee*complexi)/(2.*sw); |
3816 | -GC_22 = (cw*ee*complexi)/(2.*sw); |
3817 | -GC_23 = -(ee*complexi*sw)/(6.*cw); |
3818 | -GC_24 = (ee*complexi*sw)/(2.*cw); |
3819 | -GC_25 = complexi*gw*sw; |
3820 | -GC_26 = -2.*cw*complexi*gw__exp__2*sw; |
3821 | -GC_27 = complexi*gw__exp__2*sw__exp__2; |
3822 | -GC_28 = (cw*ee*complexi)/(2.*sw)+(ee*complexi*sw)/(2.*cw); |
3823 | -GC_29 = ee__exp__2*complexi+(cw__exp__2*ee__exp__2*complexi)/(2.*sw__exp__2)+(ee__exp__2*complexi*sw__exp__2)/(2.*cw__exp__2); |
3824 | -GC_30 = -6.*complexi*lam*v; |
3825 | -GC_31 = (ee__exp__2*complexi*v)/(2.*sw__exp__2); |
3826 | -GC_32 = ee__exp__2*complexi*v+(cw__exp__2*ee__exp__2*complexi*v)/(2.*sw__exp__2)+(ee__exp__2*complexi*sw__exp__2*v)/(2.*cw__exp__2); |
3827 | -GC_33 = -((complexi*yb)/sqrt__2); |
3828 | -GC_34 = -((complexi*yc)/sqrt__2); |
3829 | -GC_35 = -((complexi*ye)/sqrt__2); |
3830 | -GC_36 = -((complexi*ym)/sqrt__2); |
3831 | -GC_37 = -((complexi*yt)/sqrt__2); |
3832 | -GC_38 = -((complexi*ytau)/sqrt__2); |
3833 | -GC_39 = (ee*complexi*conjg__CKM11)/(sw*sqrt__2); |
3834 | -GC_40 = (ee*complexi*conjg__CKM12)/(sw*sqrt__2); |
3835 | -GC_41 = (ee*complexi*conjg__CKM13)/(sw*sqrt__2); |
3836 | -GC_42 = (ee*complexi*conjg__CKM21)/(sw*sqrt__2); |
3837 | -GC_43 = (ee*complexi*conjg__CKM22)/(sw*sqrt__2); |
3838 | -GC_44 = (ee*complexi*conjg__CKM23)/(sw*sqrt__2); |
3839 | -GC_45 = (ee*complexi*conjg__CKM31)/(sw*sqrt__2); |
3840 | -GC_46 = (ee*complexi*conjg__CKM32)/(sw*sqrt__2); |
3841 | -GC_47 = (ee*complexi*conjg__CKM33)/(sw*sqrt__2); |
3842 | +GC_10 = -6.*complexi*lam; |
3843 | +GC_11 = (ee__exp__2*complexi)/(2.*sw__exp__2); |
3844 | +GC_12 = (ee*complexi)/(sw*sqrt__2); |
3845 | +GC_13 = (CKM1x1*ee*complexi)/(sw*sqrt__2); |
3846 | +GC_14 = (CKM1x2*ee*complexi)/(sw*sqrt__2); |
3847 | +GC_15 = (CKM1x3*ee*complexi)/(sw*sqrt__2); |
3848 | +GC_16 = (CKM2x1*ee*complexi)/(sw*sqrt__2); |
3849 | +GC_17 = (CKM2x2*ee*complexi)/(sw*sqrt__2); |
3850 | +GC_18 = (CKM2x3*ee*complexi)/(sw*sqrt__2); |
3851 | +GC_19 = (CKM3x1*ee*complexi)/(sw*sqrt__2); |
3852 | +GC_20 = (CKM3x2*ee*complexi)/(sw*sqrt__2); |
3853 | +GC_21 = (CKM3x3*ee*complexi)/(sw*sqrt__2); |
3854 | +GC_22 = -(cw*ee*complexi)/(2.*sw); |
3855 | +GC_23 = (cw*ee*complexi)/(2.*sw); |
3856 | +GC_24 = -(ee*complexi*sw)/(6.*cw); |
3857 | +GC_25 = (ee*complexi*sw)/(2.*cw); |
3858 | +GC_26 = complexi*gw*sw; |
3859 | +GC_27 = -2.*cw*complexi*gw__exp__2*sw; |
3860 | +GC_28 = complexi*gw__exp__2*sw__exp__2; |
3861 | +GC_29 = (cw*ee*complexi)/(2.*sw)+(ee*complexi*sw)/(2.*cw); |
3862 | +GC_30 = ee__exp__2*complexi+(cw__exp__2*ee__exp__2*complexi)/(2.*sw__exp__2)+(ee__exp__2*complexi*sw__exp__2)/(2.*cw__exp__2); |
3863 | +GC_31 = -6.*complexi*lam*v; |
3864 | +GC_32 = (ee__exp__2*complexi*v)/(2.*sw__exp__2); |
3865 | +GC_33 = ee__exp__2*complexi*v+(cw__exp__2*ee__exp__2*complexi*v)/(2.*sw__exp__2)+(ee__exp__2*complexi*sw__exp__2*v)/(2.*cw__exp__2); |
3866 | +GC_34 = -((complexi*yb)/sqrt__2); |
3867 | +GC_35 = -((complexi*yc)/sqrt__2); |
3868 | +GC_36 = -((complexi*ye)/sqrt__2); |
3869 | +GC_37 = -((complexi*ym)/sqrt__2); |
3870 | +GC_38 = -((complexi*yt)/sqrt__2); |
3871 | +GC_39 = -((complexi*ytau)/sqrt__2); |
3872 | +GC_40 = (ee*complexi*conjg__CKM1x1)/(sw*sqrt__2); |
3873 | +GC_41 = (ee*complexi*conjg__CKM1x2)/(sw*sqrt__2); |
3874 | +GC_42 = (ee*complexi*conjg__CKM1x3)/(sw*sqrt__2); |
3875 | +GC_43 = (ee*complexi*conjg__CKM2x1)/(sw*sqrt__2); |
3876 | +GC_44 = (ee*complexi*conjg__CKM2x2)/(sw*sqrt__2); |
3877 | +GC_45 = (ee*complexi*conjg__CKM2x3)/(sw*sqrt__2); |
3878 | +GC_46 = (ee*complexi*conjg__CKM3x1)/(sw*sqrt__2); |
3879 | +GC_47 = (ee*complexi*conjg__CKM3x2)/(sw*sqrt__2); |
3880 | +GC_48 = (ee*complexi*conjg__CKM3x3)/(sw*sqrt__2); |
3881 | } |
3882 | void Parameters_sm::setDependentParameters(ParticleData*& pd, Couplings*& csm, SusyLesHouches*& slhaPtr, double alpS){ |
3883 | - aS = alpS; |
3884 | +\taS = alpS; |
3885 | sqrt__aS = sqrt(aS); |
3886 | G = 2.*sqrt__aS*sqrt(M_PI); |
3887 | G__exp__2 = pow(G,2.); |
3888 | } |
3889 | void Parameters_sm::setDependentCouplings(){ |
3890 | - GC_6 = complexi*G__exp__2; |
3891 | +\tGC_6 = complexi*G__exp__2; |
3892 | GC_5 = complexi*G; |
3893 | GC_4 = -G; |
3894 | } |
3895 | |
3896 | // Routines for printing out parameters |
3897 | void Parameters_sm::printIndependentParameters(){ |
3898 | - cout << "sm model parameters independent of event kinematics:" << endl; |
3899 | - cout << setw(20) << "WTau " << "= " << setiosflags(ios::scientific) << setw(10) << WTau << endl; |
3900 | +\tcout << "sm model parameters independent of event kinematics:" << endl; |
3901 | +\tcout << setw(20) << "WTau " << "= " << setiosflags(ios::scientific) << setw(10) << WTau << endl; |
3902 | cout << setw(20) << "WH " << "= " << setiosflags(ios::scientific) << setw(10) << WH << endl; |
3903 | cout << setw(20) << "WW " << "= " << setiosflags(ios::scientific) << setw(10) << WW << endl; |
3904 | cout << setw(20) << "WZ " << "= " << setiosflags(ios::scientific) << setw(10) << WZ << endl; |
3905 | @@ -1602,30 +2146,30 @@ |
3906 | cout << setw(20) << "aEWM1 " << "= " << setiosflags(ios::scientific) << setw(10) << aEWM1 << endl; |
3907 | cout << setw(20) << "ZERO " << "= " << setiosflags(ios::scientific) << setw(10) << ZERO << endl; |
3908 | cout << setw(20) << "lamWS__exp__2 " << "= " << setiosflags(ios::scientific) << setw(10) << lamWS__exp__2 << endl; |
3909 | -cout << setw(20) << "CKM11 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM11 << endl; |
3910 | -cout << setw(20) << "CKM12 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM12 << endl; |
3911 | +cout << setw(20) << "CKM1x1 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM1x1 << endl; |
3912 | +cout << setw(20) << "CKM1x2 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM1x2 << endl; |
3913 | cout << setw(20) << "complexi " << "= " << setiosflags(ios::scientific) << setw(10) << complexi << endl; |
3914 | cout << setw(20) << "lamWS__exp__3 " << "= " << setiosflags(ios::scientific) << setw(10) << lamWS__exp__3 << endl; |
3915 | -cout << setw(20) << "CKM13 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM13 << endl; |
3916 | -cout << setw(20) << "CKM21 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM21 << endl; |
3917 | -cout << setw(20) << "CKM22 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM22 << endl; |
3918 | -cout << setw(20) << "CKM23 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM23 << endl; |
3919 | -cout << setw(20) << "CKM31 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM31 << endl; |
3920 | -cout << setw(20) << "CKM32 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM32 << endl; |
3921 | -cout << setw(20) << "CKM33 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM33 << endl; |
3922 | +cout << setw(20) << "CKM1x3 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM1x3 << endl; |
3923 | +cout << setw(20) << "CKM2x1 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM2x1 << endl; |
3924 | +cout << setw(20) << "CKM2x2 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM2x2 << endl; |
3925 | +cout << setw(20) << "CKM2x3 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM2x3 << endl; |
3926 | +cout << setw(20) << "CKM3x1 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM3x1 << endl; |
3927 | +cout << setw(20) << "CKM3x2 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM3x2 << endl; |
3928 | +cout << setw(20) << "CKM3x3 " << "= " << setiosflags(ios::scientific) << setw(10) << CKM3x3 << endl; |
3929 | cout << setw(20) << "MZ__exp__2 " << "= " << setiosflags(ios::scientific) << setw(10) << MZ__exp__2 << endl; |
3930 | cout << setw(20) << "MZ__exp__4 " << "= " << setiosflags(ios::scientific) << setw(10) << MZ__exp__4 << endl; |
3931 | cout << setw(20) << "sqrt__2 " << "= " << setiosflags(ios::scientific) << setw(10) << sqrt__2 << endl; |
3932 | cout << setw(20) << "MH__exp__2 " << "= " << setiosflags(ios::scientific) << setw(10) << MH__exp__2 << endl; |
3933 | -cout << setw(20) << "conjg__CKM11 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM11 << endl; |
3934 | -cout << setw(20) << "conjg__CKM12 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM12 << endl; |
3935 | -cout << setw(20) << "conjg__CKM13 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM13 << endl; |
3936 | -cout << setw(20) << "conjg__CKM21 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM21 << endl; |
3937 | -cout << setw(20) << "conjg__CKM22 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM22 << endl; |
3938 | -cout << setw(20) << "conjg__CKM23 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM23 << endl; |
3939 | -cout << setw(20) << "conjg__CKM31 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM31 << endl; |
3940 | -cout << setw(20) << "conjg__CKM32 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM32 << endl; |
3941 | -cout << setw(20) << "conjg__CKM33 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM33 << endl; |
3942 | +cout << setw(20) << "conjg__CKM1x1 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM1x1 << endl; |
3943 | +cout << setw(20) << "conjg__CKM1x2 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM1x2 << endl; |
3944 | +cout << setw(20) << "conjg__CKM1x3 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM1x3 << endl; |
3945 | +cout << setw(20) << "conjg__CKM2x1 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM2x1 << endl; |
3946 | +cout << setw(20) << "conjg__CKM2x2 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM2x2 << endl; |
3947 | +cout << setw(20) << "conjg__CKM2x3 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM2x3 << endl; |
3948 | +cout << setw(20) << "conjg__CKM3x1 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM3x1 << endl; |
3949 | +cout << setw(20) << "conjg__CKM3x2 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM3x2 << endl; |
3950 | +cout << setw(20) << "conjg__CKM3x3 " << "= " << setiosflags(ios::scientific) << setw(10) << conjg__CKM3x3 << endl; |
3951 | cout << setw(20) << "aEW " << "= " << setiosflags(ios::scientific) << setw(10) << aEW << endl; |
3952 | cout << setw(20) << "MW " << "= " << setiosflags(ios::scientific) << setw(10) << MW << endl; |
3953 | cout << setw(20) << "sqrt__aEW " << "= " << setiosflags(ios::scientific) << setw(10) << sqrt__aEW << endl; |
3954 | @@ -1653,8 +2197,8 @@ |
3955 | cout << setw(20) << "sw__exp__2 " << "= " << setiosflags(ios::scientific) << setw(10) << sw__exp__2 << endl; |
3956 | } |
3957 | void Parameters_sm::printIndependentCouplings(){ |
3958 | - cout << "sm model couplings independent of event kinematics:" << endl; |
3959 | - cout << setw(20) << "GC_1 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_1 << endl; |
3960 | +\tcout << "sm model couplings independent of event kinematics:" << endl; |
3961 | +\tcout << setw(20) << "GC_1 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_1 << endl; |
3962 | cout << setw(20) << "GC_2 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_2 << endl; |
3963 | cout << setw(20) << "GC_3 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_3 << endl; |
3964 | cout << setw(20) << "GC_7 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_7 << endl; |
3965 | @@ -1698,17 +2242,18 @@ |
3966 | cout << setw(20) << "GC_45 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_45 << endl; |
3967 | cout << setw(20) << "GC_46 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_46 << endl; |
3968 | cout << setw(20) << "GC_47 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_47 << endl; |
3969 | +cout << setw(20) << "GC_48 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_48 << endl; |
3970 | } |
3971 | void Parameters_sm::printDependentParameters(){ |
3972 | - cout << "sm model parameters dependent on event kinematics:" << endl; |
3973 | - cout << setw(20) << "aS " << "= " << setiosflags(ios::scientific) << setw(10) << aS << endl; |
3974 | +\tcout << "sm model parameters dependent on event kinematics:" << endl; |
3975 | +\tcout << setw(20) << "aS " << "= " << setiosflags(ios::scientific) << setw(10) << aS << endl; |
3976 | cout << setw(20) << "sqrt__aS " << "= " << setiosflags(ios::scientific) << setw(10) << sqrt__aS << endl; |
3977 | cout << setw(20) << "G " << "= " << setiosflags(ios::scientific) << setw(10) << G << endl; |
3978 | cout << setw(20) << "G__exp__2 " << "= " << setiosflags(ios::scientific) << setw(10) << G__exp__2 << endl; |
3979 | } |
3980 | void Parameters_sm::printDependentCouplings(){ |
3981 | - cout << "sm model couplings dependent on event kinematics:" << endl; |
3982 | - cout << setw(20) << "GC_6 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_6 << endl; |
3983 | +\tcout << "sm model couplings dependent on event kinematics:" << endl; |
3984 | +\tcout << setw(20) << "GC_6 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_6 << endl; |
3985 | cout << setw(20) << "GC_5 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_5 << endl; |
3986 | cout << setw(20) << "GC_4 " << "= " << setiosflags(ios::scientific) << setw(10) << GC_4 << endl; |
3987 | } |
3988 | @@ -1718,6 +2263,9 @@ |
3989 | |
3990 | file_h, file_cc = self.model_builder.generate_parameters_class_files() |
3991 | |
3992 | - self.assertEqual(file_h, goal_file_h) |
3993 | - self.assertEqual(file_cc, goal_file_cc) |
3994 | + self.assertEqual([l for l in file_h.split('\n') if l.strip()], |
3995 | + [l for l in goal_file_h.split('\n') if l.strip()]) |
3996 | + |
3997 | + self.assertEqual([l.strip() for l in file_cc.split('\n') if l.strip()], |
3998 | + [l.strip() for l in goal_file_cc.split('\n') if l.strip()]) |
3999 | |
4000 | |
4001 | === modified file 'tests/unit_tests/iolibs/test_export_v4.py' |
4002 | --- tests/unit_tests/iolibs/test_export_v4.py 2012-04-16 08:48:53 +0000 |
4003 | +++ tests/unit_tests/iolibs/test_export_v4.py 2012-05-16 04:17:21 +0000 |
4004 | @@ -4775,6 +4775,259 @@ |
4005 | # Amplitude(s) for diagram number 28 |
4006 | CALL VVVXXX(W(1,4),W(1,2),W(1,24),MGVX5,AMP(28))""") |
4007 | |
4008 | + def test_helas_diagrams_gg_gogo_go_tt1x_t_wpb(self): |
4009 | + """Testing g g > go go, (go > t t1~, t > w+ b) |
4010 | + """ |
4011 | + |
4012 | + # Set up model |
4013 | + |
4014 | + mypartlist = base_objects.ParticleList() |
4015 | + myinterlist = base_objects.InteractionList() |
4016 | + |
4017 | + # A gluon and gluino |
4018 | + mypartlist.append(base_objects.Particle({'name':'g', |
4019 | + 'antiname':'g', |
4020 | + 'spin':3, |
4021 | + 'color':8, |
4022 | + 'mass':'zero', |
4023 | + 'width':'zero', |
4024 | + 'texname':'g', |
4025 | + 'antitexname':'g', |
4026 | + 'line':'curly', |
4027 | + 'charge':0., |
4028 | + 'pdg_code':21, |
4029 | + 'propagating':True, |
4030 | + 'is_part':True, |
4031 | + 'self_antipart':True})) |
4032 | + g = mypartlist[-1] |
4033 | + |
4034 | + mypartlist.append(base_objects.Particle({'name':'go', |
4035 | + 'antiname':'go', |
4036 | + 'spin':2, |
4037 | + 'color':8, |
4038 | + 'mass':'MGO', |
4039 | + 'width':'WGO', |
4040 | + 'texname':'g', |
4041 | + 'antitexname':'g', |
4042 | + 'line':'curly', |
4043 | + 'charge':0., |
4044 | + 'pdg_code':1000021, |
4045 | + 'propagating':True, |
4046 | + 'is_part':True, |
4047 | + 'self_antipart':True})) |
4048 | + go = mypartlist[-1] |
4049 | + |
4050 | + # A top quark and stop squark |
4051 | + mypartlist.append(base_objects.Particle({'name':'t', |
4052 | + 'antiname':'t~', |
4053 | + 'spin':2, |
4054 | + 'color':3, |
4055 | + 'mass':'MT', |
4056 | + 'width':'WT', |
4057 | + 'texname':'t', |
4058 | + 'antitexname':'\bar t', |
4059 | + 'line':'straight', |
4060 | + 'charge':2. / 3., |
4061 | + 'pdg_code':6, |
4062 | + 'propagating':True, |
4063 | + 'is_part':True, |
4064 | + 'self_antipart':False})) |
4065 | + t = mypartlist[len(mypartlist) - 1] |
4066 | + antit = copy.copy(t) |
4067 | + antit.set('is_part', False) |
4068 | + |
4069 | + mypartlist.append(base_objects.Particle({'name':'t1', |
4070 | + 'antiname':'t1~', |
4071 | + 'spin':0, |
4072 | + 'color':3, |
4073 | + 'mass':'MT1', |
4074 | + 'width':'WT1', |
4075 | + 'texname':'t1', |
4076 | + 'antitexname':'\bar t1', |
4077 | + 'line':'dashed', |
4078 | + 'charge':2. / 3., |
4079 | + 'pdg_code':1000006, |
4080 | + 'propagating':True, |
4081 | + 'is_part':True, |
4082 | + 'self_antipart':False})) |
4083 | + t1 = mypartlist[len(mypartlist) - 1] |
4084 | + antit1 = copy.copy(t1) |
4085 | + antit1.set('is_part', False) |
4086 | + |
4087 | + # A W |
4088 | + mypartlist.append(base_objects.Particle({'name':'W+', |
4089 | + 'antiname':'W-', |
4090 | + 'spin':3, |
4091 | + 'color':1, |
4092 | + 'mass':'MW', |
4093 | + 'width':'WW', |
4094 | + 'texname':'W^+', |
4095 | + 'antitexname':'W^-', |
4096 | + 'line':'wavy', |
4097 | + 'charge':1., |
4098 | + 'pdg_code':24, |
4099 | + 'propagating':True, |
4100 | + 'is_part':True, |
4101 | + 'self_antipart':False})) |
4102 | + Wplus = mypartlist[len(mypartlist) - 1] |
4103 | + Wminus = copy.copy(Wplus) |
4104 | + Wminus.set('is_part', False) |
4105 | + |
4106 | + # b quark |
4107 | + mypartlist.append(base_objects.Particle({'name':'b', |
4108 | + 'antiname':'b~', |
4109 | + 'spin':2, |
4110 | + 'color':3, |
4111 | + 'mass':'zero', |
4112 | + 'width':'zero', |
4113 | + 'texname':'b', |
4114 | + 'antitexname':'\bar b', |
4115 | + 'line':'straight', |
4116 | + 'charge':-1. / 3., |
4117 | + 'pdg_code':5, |
4118 | + 'propagating':True, |
4119 | + 'is_part':True, |
4120 | + 'self_antipart':False})) |
4121 | + b = mypartlist[len(mypartlist) - 1] |
4122 | + antib = copy.copy(b) |
4123 | + antib.set('is_part', False) |
4124 | + |
4125 | + # top-w-b coupling |
4126 | + myinterlist.append(base_objects.Interaction({ |
4127 | + 'id': 1, |
4128 | + 'particles': base_objects.ParticleList([antib, t, Wminus]), |
4129 | + 'color': [color.ColorString([color.T(1,0)])], |
4130 | + 'lorentz': ['FFV2'], |
4131 | + 'couplings': {(0, 0): 'GC_108'}, |
4132 | + 'orders': {'QED': 1} |
4133 | + })) |
4134 | + myinterlist.append(base_objects.Interaction({ |
4135 | + 'id': 2, |
4136 | + 'particles': base_objects.ParticleList([antit, b, Wplus]), |
4137 | + 'color': [color.ColorString([color.T(1,0)])], |
4138 | + 'lorentz': ['FFV2'], |
4139 | + 'couplings': {(0, 0): 'GC_108'}, |
4140 | + 'orders': {'QED': 1} |
4141 | + })) |
4142 | + |
4143 | + # Gluon couplings to gluino |
4144 | + myinterlist.append(base_objects.Interaction({ |
4145 | + 'id': 3, |
4146 | + 'particles': base_objects.ParticleList(\ |
4147 | + [go, \ |
4148 | + go, \ |
4149 | + g]), |
4150 | + 'color': [], |
4151 | + 'lorentz':['L1'], |
4152 | + 'couplings':{(0, 0):'GQQ'}, |
4153 | + 'orders':{'QCD':1}})) |
4154 | + |
4155 | + # Gluino couplings to top and stop |
4156 | + myinterlist.append(base_objects.Interaction({ |
4157 | + 'id': 11, |
4158 | + 'particles': base_objects.ParticleList(\ |
4159 | + [go, \ |
4160 | + t, \ |
4161 | + antit1]), |
4162 | + 'color': [], |
4163 | + 'lorentz':['L1'], |
4164 | + 'couplings':{(0, 0):'GQQ'}, |
4165 | + 'orders':{'QCD':1}})) |
4166 | + |
4167 | + myinterlist.append(base_objects.Interaction({ |
4168 | + 'id': 12, |
4169 | + 'particles': base_objects.ParticleList(\ |
4170 | + [antit, \ |
4171 | + go, \ |
4172 | + t1]), |
4173 | + 'color': [], |
4174 | + 'lorentz':['L1'], |
4175 | + 'couplings':{(0, 0):'GQQ'}, |
4176 | + 'orders':{'QCD':1}})) |
4177 | + |
4178 | + mybasemodel = base_objects.Model() |
4179 | + mybasemodel.set('particles', mypartlist) |
4180 | + mybasemodel.set('interactions', myinterlist) |
4181 | + |
4182 | + myleglist = base_objects.LegList() |
4183 | + |
4184 | + myleglist.append(base_objects.Leg({'id':21, |
4185 | + 'state':False})) |
4186 | + myleglist.append(base_objects.Leg({'id':21, |
4187 | + 'state':False})) |
4188 | + myleglist.append(base_objects.Leg({'id':1000021})) |
4189 | + myleglist.append(base_objects.Leg({'id':1000021})) |
4190 | + |
4191 | + core_proc = base_objects.Process({'legs':myleglist, |
4192 | + 'model':mybasemodel}) |
4193 | + |
4194 | + myleglist = base_objects.LegList() |
4195 | + |
4196 | + myleglist.append(base_objects.Leg({'id':1000021, |
4197 | + 'state':False})) |
4198 | + myleglist.append(base_objects.Leg({'id':6})) |
4199 | + myleglist.append(base_objects.Leg({'id':-1000006})) |
4200 | + |
4201 | + decay1_process = base_objects.Process({'legs':myleglist, |
4202 | + 'model':mybasemodel, |
4203 | + 'is_decay_chain': True}) |
4204 | + |
4205 | + core_proc.get('decay_chains').append(decay1_process) |
4206 | + |
4207 | + myleglist = base_objects.LegList() |
4208 | + |
4209 | + myleglist.append(base_objects.Leg({'id':6, |
4210 | + 'state':False})) |
4211 | + myleglist.append(base_objects.Leg({'id':5})) |
4212 | + myleglist.append(base_objects.Leg({'id':24})) |
4213 | + |
4214 | + decay2_process = base_objects.Process({'legs':myleglist, |
4215 | + 'model':mybasemodel, |
4216 | + 'is_decay_chain': True}) |
4217 | + |
4218 | + decay1_process.get('decay_chains').append(decay2_process) |
4219 | + |
4220 | + amplitude = diagram_generation.DecayChainAmplitude(core_proc) |
4221 | + |
4222 | + self.assertEqual(len(amplitude.get('amplitudes')),1) |
4223 | + |
4224 | + matrix_elements = helas_objects.HelasDecayChainProcess(amplitude) |
4225 | + |
4226 | + matrix_element = matrix_elements.combine_decay_chain_processes()[0] |
4227 | + |
4228 | + #print "\n".join(helas_call_writers.FortranUFOHelasCallWriter().\ |
4229 | + # get_matrix_element_calls(matrix_element)) |
4230 | + |
4231 | + self.assertEqual("\n".join(helas_call_writers.FortranUFOHelasCallWriter().\ |
4232 | + get_matrix_element_calls(matrix_element)), |
4233 | + """CALL VXXXXX(P(0,1),zero,NHEL(1),-1*IC(1),W(1,1)) |
4234 | +CALL VXXXXX(P(0,2),zero,NHEL(2),-1*IC(2),W(1,2)) |
4235 | +CALL OXXXXX(P(0,3),zero,NHEL(3),+1*IC(3),W(1,3)) |
4236 | +CALL VXXXXX(P(0,4),MW,NHEL(4),+1*IC(4),W(1,4)) |
4237 | +CALL FFV2_1(W(1,3),W(1,4),GC_108,MT, WT, W(1,5)) |
4238 | +CALL SXXXXX(P(0,5),+1*IC(5),W(1,6)) |
4239 | +CALL L1_1(W(1,5),W(1,6),GQQ,MGO, WGO, W(1,7)) |
4240 | +CALL IXXXXX(P(0,6),zero,NHEL(6),-1*IC(6),W(1,8)) |
4241 | +CALL VXXXXX(P(0,7),MW,NHEL(7),+1*IC(7),W(1,9)) |
4242 | +CALL FFV2C1_2(W(1,8),W(1,9),GC_108,MT, WT, W(1,10)) |
4243 | +CALL SXXXXX(P(0,8),+1*IC(8),W(1,11)) |
4244 | +CALL L1C1_2(W(1,10),W(1,11),GQQ,MGO, WGO, W(1,12)) |
4245 | +CALL L1_1(W(1,7),W(1,1),GQQ,MGO, WGO, W(1,13)) |
4246 | +# Amplitude(s) for diagram number 1 |
4247 | +CALL L1_0(W(1,12),W(1,13),W(1,2),GQQ,AMP(1)) |
4248 | +CALL L1_2(W(1,12),W(1,1),-GQQ,MGO, WGO, W(1,14)) |
4249 | +# Amplitude(s) for diagram number 2 |
4250 | +CALL L1_0(W(1,14),W(1,7),W(1,2),GQQ,AMP(2))""") |
4251 | + |
4252 | + # Test get_used_lorentz |
4253 | + goal_lorentz_list = [(('FFV2',), (), 1), (('L1',), (), 1), |
4254 | + (('FFV2',), (1,), 2), (('L1',), (1,), 2), |
4255 | + (('L1',), (), 1), (('L1',), (), 2), |
4256 | + (('L1',), (), 0), (('L1',), (), 0)] |
4257 | + |
4258 | + self.assertEqual(matrix_element.get_used_lorentz(), |
4259 | + goal_lorentz_list) |
4260 | + |
4261 | def test_multiple_lorentz_structures(self): |
4262 | """Testing multiple Lorentz structures for one diagram. |
4263 | """ |
4264 | @@ -9318,8 +9571,7 @@ |
4265 | |
4266 | # couplings |
4267 | self.assertEqual(len(mg4_model.coups_dep), 3) |
4268 | - sol= ['GC_1', 'GC_2', 'GC_3', 'GC_7', 'GC_8', 'GC_9', 'GC_10', 'GC_16', 'GC_21', 'GC_22', 'GC_23', 'GC_24', 'GC_25', 'GC_26', 'GC_27', 'GC_28', 'GC_29', 'GC_30', 'GC_31', 'GC_32', 'GC_33', 'GC_37', 'GC_38'] |
4269 | - |
4270 | + sol = ['GC_1', 'GC_2', 'GC_3', 'GC_7', 'GC_8', 'GC_9', 'GC_10', 'GC_11', 'GC_17', 'GC_22', 'GC_23', 'GC_24', 'GC_25', 'GC_26', 'GC_27', 'GC_28', 'GC_29', 'GC_30', 'GC_31', 'GC_32', 'GC_33', 'GC_34', 'GC_38', 'GC_39'] |
4271 | self.assertEqual(sol, [ p.name for p in mg4_model.coups_indep]) |
4272 | |
4273 | |
4274 | |
4275 | === modified file 'tests/unit_tests/iolibs/test_group_subprocs.py' |
4276 | --- tests/unit_tests/iolibs/test_group_subprocs.py 2012-02-17 06:01:41 +0000 |
4277 | +++ tests/unit_tests/iolibs/test_group_subprocs.py 2012-05-16 04:17:21 +0000 |
4278 | @@ -764,3 +764,371 @@ |
4279 | self.assertEqual(me.get('processes')[0].nice_string(), |
4280 | me_strings[i]) |
4281 | |
4282 | + |
4283 | + def test_even_more_special_group_decay_chain(self): |
4284 | + """Test group_amplitudes for even more special decay chain""" |
4285 | + |
4286 | + mypartlist = base_objects.ParticleList() |
4287 | + myinterlist = base_objects.InteractionList() |
4288 | + |
4289 | + # A d quark and its antiparticle |
4290 | + mypartlist.append(base_objects.Particle({'name':'d', |
4291 | + 'antiname':'d~', |
4292 | + 'spin':2, |
4293 | + 'color':1, |
4294 | + 'mass':'zero', |
4295 | + 'width':'zero', |
4296 | + 'texname':'d', |
4297 | + 'antitexname':'\bar d', |
4298 | + 'line':'straight', |
4299 | + 'charge':-1. / 3., |
4300 | + 'pdg_code':1, |
4301 | + 'propagating':True, |
4302 | + 'is_part':True, |
4303 | + 'self_antipart':False})) |
4304 | + d = mypartlist[-1] |
4305 | + antid = copy.copy(d) |
4306 | + antid.set('is_part', False) |
4307 | + |
4308 | + # A u quark and its antiparticle |
4309 | + mypartlist.append(base_objects.Particle({'name':'u', |
4310 | + 'antiname':'u~', |
4311 | + 'spin':2, |
4312 | + 'color':3, |
4313 | + 'mass':'zero', |
4314 | + 'width':'zero', |
4315 | + 'texname':'u', |
4316 | + 'antitexname':'\bar u', |
4317 | + 'line':'straight', |
4318 | + 'charge':2. / 3., |
4319 | + 'pdg_code':2, |
4320 | + 'propagating':True, |
4321 | + 'is_part':True, |
4322 | + 'self_antipart':False})) |
4323 | + u = mypartlist[len(mypartlist) - 1] |
4324 | + antiu = copy.copy(u) |
4325 | + antiu.set('is_part', False) |
4326 | + |
4327 | + # An s and its antiparticle |
4328 | + mypartlist.append(base_objects.Particle({'name':'s', |
4329 | + 'antiname':'s~', |
4330 | + 'spin':2, |
4331 | + 'color':1, |
4332 | + 'mass':'zero', |
4333 | + 'width':'zero', |
4334 | + 'texname':'d', |
4335 | + 'antitexname':'\bar d', |
4336 | + 'line':'straight', |
4337 | + 'charge':-1. / 3., |
4338 | + 'pdg_code':3, |
4339 | + 'propagating':True, |
4340 | + 'is_part':True, |
4341 | + 'self_antipart':False})) |
4342 | + s = mypartlist[-1] |
4343 | + antis = copy.copy(s) |
4344 | + antis.set('is_part', False) |
4345 | + |
4346 | + # A c quark and its antiparticle |
4347 | + mypartlist.append(base_objects.Particle({'name':'c', |
4348 | + 'antiname':'c~', |
4349 | + 'spin':2, |
4350 | + 'color':3, |
4351 | + 'mass':'zero', |
4352 | + 'width':'zero', |
4353 | + 'texname':'c', |
4354 | + 'antitexname':'\bar c', |
4355 | + 'line':'straight', |
4356 | + 'charge':2. / 3., |
4357 | + 'pdg_code':4, |
4358 | + 'propagating':True, |
4359 | + 'is_part':True, |
4360 | + 'self_antipart':False})) |
4361 | + c = mypartlist[len(mypartlist) - 1] |
4362 | + antic = copy.copy(c) |
4363 | + antic.set('is_part', False) |
4364 | + |
4365 | + # A b quark and its antiparticle |
4366 | + mypartlist.append(base_objects.Particle({'name':'b', |
4367 | + 'antiname':'b~', |
4368 | + 'spin':2, |
4369 | + 'color':1, |
4370 | + 'mass':'MB', |
4371 | + 'width':'zero', |
4372 | + 'texname':'b', |
4373 | + 'antitexname':'\bar b', |
4374 | + 'line':'straight', |
4375 | + 'charge':-1. / 3., |
4376 | + 'pdg_code':5, |
4377 | + 'propagating':True, |
4378 | + 'is_part':True, |
4379 | + 'self_antipart':False})) |
4380 | + b = mypartlist[-1] |
4381 | + antib = copy.copy(b) |
4382 | + antib.set('is_part', False) |
4383 | + |
4384 | + # A t quark and its antiparticle |
4385 | + mypartlist.append(base_objects.Particle({'name':'t', |
4386 | + 'antiname':'t~', |
4387 | + 'spin':2, |
4388 | + 'color':3, |
4389 | + 'mass':'MT', |
4390 | + 'width':'zero', |
4391 | + 'texname':'t', |
4392 | + 'antitexname':'\bar t', |
4393 | + 'line':'straight', |
4394 | + 'charge':2. / 3., |
4395 | + 'pdg_code':6, |
4396 | + 'propagating':True, |
4397 | + 'is_part':True, |
4398 | + 'self_antipart':False})) |
4399 | + t = mypartlist[len(mypartlist) - 1] |
4400 | + antit = copy.copy(t) |
4401 | + antit.set('is_part', False) |
4402 | + |
4403 | + # A funny Zprime |
4404 | + mypartlist.append(base_objects.Particle({ |
4405 | + 'name': 'Zp', |
4406 | + 'antiname': 'Zp', |
4407 | + 'spin': 3, |
4408 | + 'color': 1, |
4409 | + 'charge': 0.00, |
4410 | + 'mass': 'MZp', |
4411 | + 'width': 'WZp', |
4412 | + 'pdg_code': 9900032, |
4413 | + 'texname': 'Zp', |
4414 | + 'antitexname': 'Zp', |
4415 | + 'line': 'wavy', |
4416 | + 'propagating': True, |
4417 | + 'is_part': True, |
4418 | + 'self_antipart': True})) |
4419 | + |
4420 | + Zp = mypartlist[-1] |
4421 | + |
4422 | + # A funny neutralino |
4423 | + mypartlist.append(base_objects.Particle({ |
4424 | + 'name': '~n1', |
4425 | + 'antiname': '~n1', |
4426 | + 'spin': 2, |
4427 | + 'color': 1, |
4428 | + 'charge': 0.00, |
4429 | + 'mass': 'MnH1', |
4430 | + 'width': 'WnH1', |
4431 | + 'pdg_code': 9910012, |
4432 | + 'texname': '~n1', |
4433 | + 'antitexname': '~n1', |
4434 | + 'line': 'swavy', |
4435 | + 'propagating': True, |
4436 | + 'is_part': True, |
4437 | + 'self_antipart': True})) |
4438 | + n1 = mypartlist[-1] |
4439 | + |
4440 | + # A W |
4441 | + mypartlist.append(base_objects.Particle({'name':'W+', |
4442 | + 'antiname':'W-', |
4443 | + 'spin':3, |
4444 | + 'color':1, |
4445 | + 'mass':'MW', |
4446 | + 'width':'WW', |
4447 | + 'texname':'W^+', |
4448 | + 'antitexname':'W^-', |
4449 | + 'line':'wavy', |
4450 | + 'charge':1., |
4451 | + 'pdg_code':24, |
4452 | + 'propagating':True, |
4453 | + 'is_part':True, |
4454 | + 'self_antipart':False})) |
4455 | + Wplus = mypartlist[len(mypartlist) - 1] |
4456 | + Wminus = copy.copy(Wplus) |
4457 | + Wminus.set('is_part', False) |
4458 | + |
4459 | + # A electron and positron |
4460 | + mypartlist.append(base_objects.Particle({'name':'e-', |
4461 | + 'antiname':'e+', |
4462 | + 'spin':2, |
4463 | + 'color':1, |
4464 | + 'mass':'me', |
4465 | + 'width':'zero', |
4466 | + 'texname':'e^-', |
4467 | + 'antitexname':'e^+', |
4468 | + 'line':'straight', |
4469 | + 'charge':-1., |
4470 | + 'pdg_code':11, |
4471 | + 'propagating':True, |
4472 | + 'is_part':True, |
4473 | + 'self_antipart':False})) |
4474 | + eminus = mypartlist[len(mypartlist) - 1] |
4475 | + eplus = copy.copy(eminus) |
4476 | + eplus.set('is_part', False) |
4477 | + |
4478 | + # Interactions |
4479 | + |
4480 | + myinterlist.append(base_objects.Interaction({ |
4481 | + 'id': 1, |
4482 | + 'particles': base_objects.ParticleList(\ |
4483 | + [antid,u,Wminus]), |
4484 | + 'color': [], |
4485 | + 'lorentz': ['FFV3'], |
4486 | + 'couplings': {(0, 0): 'GC_35'}, |
4487 | + 'orders': {'QED': 1}})) |
4488 | + |
4489 | + myinterlist.append(base_objects.Interaction({ |
4490 | + 'id': 2, |
4491 | + 'particles': base_objects.ParticleList(\ |
4492 | + [antiu,d,Wplus]), |
4493 | + 'color': [], |
4494 | + 'lorentz': ['FFV3'], |
4495 | + 'couplings': {(0, 0): 'GC_112'}, |
4496 | + 'orders': {'QED': 1}})) |
4497 | + |
4498 | + myinterlist.append(base_objects.Interaction({ |
4499 | + 'id': 3, |
4500 | + 'particles': base_objects.ParticleList(\ |
4501 | + [antis,c,Wminus]), |
4502 | + 'color': [], |
4503 | + 'lorentz': ['FFV3'], |
4504 | + 'couplings': {(0, 0): 'GC_35'}, |
4505 | + 'orders': {'QED': 1}})) |
4506 | + |
4507 | + myinterlist.append(base_objects.Interaction({ |
4508 | + 'id': 4, |
4509 | + 'particles': base_objects.ParticleList(\ |
4510 | + [antic,s,Wplus]), |
4511 | + 'color': [], |
4512 | + 'lorentz': ['FFV3'], |
4513 | + 'couplings': {(0, 0): 'GC_112'}, |
4514 | + 'orders': {'QED': 1}})) |
4515 | + |
4516 | + myinterlist.append(base_objects.Interaction({ |
4517 | + 'id': 5, |
4518 | + 'particles': base_objects.ParticleList(\ |
4519 | + [antib,t,Wminus]), |
4520 | + 'color': [], |
4521 | + 'lorentz': ['FFV3'], |
4522 | + 'couplings': {(0, 0): 'GC_35'}, |
4523 | + 'orders': {'QED': 1}})) |
4524 | + |
4525 | + myinterlist.append(base_objects.Interaction({ |
4526 | + 'id': 6, |
4527 | + 'particles': base_objects.ParticleList(\ |
4528 | + [antit,b,Wplus]), |
4529 | + 'color': [], |
4530 | + 'lorentz': ['FFV3'], |
4531 | + 'couplings': {(0, 0): 'GC_112'}, |
4532 | + 'orders': {'QED': 1}})) |
4533 | + |
4534 | + myinterlist.append(base_objects.Interaction({ |
4535 | + 'id': 7, |
4536 | + 'particles': base_objects.ParticleList(\ |
4537 | + [antid,d,Zp]), |
4538 | + 'color': [], |
4539 | + 'lorentz': ['FFV1'], |
4540 | + 'couplings': {(0, 0): 'GC_7'}, |
4541 | + 'orders': {'QED': 1} |
4542 | + })) |
4543 | + |
4544 | + myinterlist.append(base_objects.Interaction({ |
4545 | + 'id': 8, |
4546 | + 'particles': base_objects.ParticleList(\ |
4547 | + [n1,n1,Zp]), |
4548 | + 'color': [], |
4549 | + 'lorentz': ['FFV2'], |
4550 | + 'couplings': {(0, 0): 'GC_22'}, |
4551 | + 'orders': {'QED': 1} |
4552 | + })) |
4553 | + |
4554 | + myinterlist.append(base_objects.Interaction({ |
4555 | + 'id': 9, |
4556 | + 'particles': base_objects.ParticleList(\ |
4557 | + [eplus,n1,Wminus]), |
4558 | + 'color': [], |
4559 | + 'lorentz': ['FFV3'], |
4560 | + 'couplings': {(0, 0): 'GC_46'}, |
4561 | + 'orders': {'QED': 1} |
4562 | + })) |
4563 | + |
4564 | + myinterlist.append(base_objects.Interaction({ |
4565 | + 'id': 10, |
4566 | + 'particles': base_objects.ParticleList(\ |
4567 | + [n1,eminus,Wplus]), |
4568 | + 'color': [], |
4569 | + 'lorentz': ['FFV3'], |
4570 | + 'couplings': {(0, 0): 'GC_46'}, |
4571 | + 'orders': {'QED': 1} |
4572 | + })) |
4573 | + |
4574 | + mymodel = base_objects.Model() |
4575 | + mymodel.set('particles', mypartlist) |
4576 | + mymodel.set('interactions', myinterlist) |
4577 | + mymodel.set('name', 'sm') |
4578 | + |
4579 | + # Multiparticle labels |
4580 | + ds = [1,-1] |
4581 | + qs = [1,3,2,4,-1,-3,-2,-4] |
4582 | + |
4583 | + my_leglist = base_objects.MultiLegList() |
4584 | + my_leglist.append(base_objects.MultiLeg({'ids': ds, |
4585 | + 'state': False})) |
4586 | + my_leglist.append(base_objects.MultiLeg({'ids': ds, |
4587 | + 'state': False})) |
4588 | + my_leglist.append(base_objects.MultiLeg({'ids': [n1.get('pdg_code')]})) |
4589 | + my_leglist.append(base_objects.MultiLeg({'ids': [n1.get('pdg_code')]})) |
4590 | + |
4591 | + core_process = base_objects.ProcessDefinition({'legs':my_leglist, |
4592 | + 'model':mymodel}) |
4593 | + |
4594 | + decay1proc1 = [[n1.get('pdg_code')], |
4595 | + [11], [24]] |
4596 | + my_leglist = base_objects.MultiLegList([\ |
4597 | + base_objects.MultiLeg({'ids': id}) for id in decay1proc1]) |
4598 | + my_leglist[0].set('state', False) |
4599 | + decay1process1 = base_objects.ProcessDefinition({'legs':my_leglist, |
4600 | + 'model':mymodel}) |
4601 | + decay1process2 = base_objects.ProcessDefinition({'legs':my_leglist, |
4602 | + 'model':mymodel}) |
4603 | + |
4604 | + decay2proc1 = [[24], qs, qs] |
4605 | + my_leglist = base_objects.MultiLegList([\ |
4606 | + base_objects.MultiLeg({'ids': id}) for id in decay2proc1]) |
4607 | + my_leglist[0].set('state', False) |
4608 | + decay2process1 = base_objects.ProcessDefinition({'legs':my_leglist, |
4609 | + 'model':mymodel}) |
4610 | + decay2proc2 = [[24], [6], [-5]] |
4611 | + my_leglist = base_objects.MultiLegList([\ |
4612 | + base_objects.MultiLeg({'ids': id}) for id in decay2proc2]) |
4613 | + my_leglist[0].set('state', False) |
4614 | + decay2process2 = base_objects.ProcessDefinition({'legs':my_leglist, |
4615 | + 'model':mymodel}) |
4616 | + |
4617 | + decay1process1.get('decay_chains').append(decay2process1) |
4618 | + decay1process2.get('decay_chains').append(decay2process2) |
4619 | + core_process.get('decay_chains').append(decay1process1) |
4620 | + core_process.get('decay_chains').append(decay1process2) |
4621 | + |
4622 | + my_amplitude = diagram_generation.DecayChainAmplitude(core_process) |
4623 | + |
4624 | + dc_subproc_group = group_subprocs.DecayChainSubProcessGroup.\ |
4625 | + group_amplitudes(my_amplitude) |
4626 | + |
4627 | + subproc_groups = \ |
4628 | + dc_subproc_group.generate_helas_decay_chain_subproc_groups() |
4629 | + |
4630 | + self.assertEqual(len(subproc_groups), 1) |
4631 | + |
4632 | + self.assertEqual(len(subproc_groups[0].get('matrix_elements')),2) |
4633 | + |
4634 | + me_strings = ["""Process: d d~ > ~n1 ~n1 WEIGHTED=2 |
4635 | + Decay: ~n1 > e- W+ WEIGHTED=1 |
4636 | + Decay: W+ > u d~ WEIGHTED=1 |
4637 | + Decay: ~n1 > e- W+ WEIGHTED=1 |
4638 | + Decay: W+ > t b~ WEIGHTED=1""", |
4639 | + """Process: d~ d > ~n1 ~n1 WEIGHTED=2 |
4640 | + Decay: ~n1 > e- W+ WEIGHTED=1 |
4641 | + Decay: W+ > u d~ WEIGHTED=1 |
4642 | + Decay: ~n1 > e- W+ WEIGHTED=1 |
4643 | + Decay: W+ > t b~ WEIGHTED=1"""] |
4644 | + |
4645 | + |
4646 | + for i,me in enumerate(subproc_groups[0].get('matrix_elements')): |
4647 | + self.assertEqual(me.get('processes')[0].nice_string(), |
4648 | + me_strings[i]) |
4649 | + |
4650 | |
4651 | === modified file 'tests/unit_tests/various/test_aloha.py' |
4652 | --- tests/unit_tests/various/test_aloha.py 2012-03-06 17:38:56 +0000 |
4653 | +++ tests/unit_tests/various/test_aloha.py 2012-05-16 04:17:21 +0000 |
4654 | @@ -3051,7 +3051,8 @@ |
4655 | # Check that full identification symmetry works |
4656 | helas_suite = create_aloha.AbstractALOHAModel('sm') |
4657 | helas_suite.look_for_symmetries() |
4658 | - solution = {'VVVV2': {2: 1 ,4: 3}, 'SSS1': {2: 1, 3: 2}, 'VVSS1': {2: 1, 4: 3}, 'VVS1': {2: 1}} |
4659 | + solution = {'VVVV2': {2: 1 ,4: 3}, 'SSS1': {2: 1, 3: 2}, 'VVSS1': {2: 1, 4: 3}, |
4660 | + 'VVS1': {2: 1},'SSSS1': {2: 1, 3: 2, 4:3}} |
4661 | self.assertEqual(solution, helas_suite.symmetries) |
4662 | |
4663 | def test_has_symmetries(self): |
4664 | |
4665 | === modified file 'tests/unit_tests/various/test_import_ufo.py' |
4666 | --- tests/unit_tests/various/test_import_ufo.py 2011-12-14 17:09:28 +0000 |
4667 | +++ tests/unit_tests/various/test_import_ufo.py 2012-05-16 04:17:21 +0000 |
4668 | @@ -73,12 +73,12 @@ |
4669 | def test_detect_special_parameters(self): |
4670 | """ check that detect zero parameters works""" |
4671 | |
4672 | - expected = set(['etaWS', 'conjg__CKM13', 'conjg__CKM12', 'conjg__CKM32', 'conjg__CKM31', 'CKM23', 'WT', 'lamWS', 'WTau', 'AWS', 'ymc', 'ymb', 'yme', 'ymm', 'Me', 'MB', 'CKM32', 'CKM31', 'ym', 'CKM13', 'CKM12', 'lamWS__exp__2', 'lamWS__exp__3', 'yc', 'yb', 'ye', 'conjg__CKM21', 'CKM21', 'conjg__CKM23', 'MC', 'MM', 'rhoWS']) |
4673 | + expected = set(['etaWS', 'conjg__CKM1x3', 'conjg__CKM1x2', 'conjg__CKM3x2', 'conjg__CKM3x1', 'CKM2x3', 'WT', 'lamWS', 'WTau', 'AWS', 'ymc', 'ymb', 'yme', 'ymm', 'Me', 'MB', 'CKM3x2', 'CKM3x1', 'ym', 'CKM1x3', 'CKM1x2', 'lamWS__exp__2', 'lamWS__exp__3', 'yc', 'yb', 'ye', 'conjg__CKM2x1', 'CKM2x1', 'conjg__CKM2x3', 'MC', 'MM', 'rhoWS']) |
4674 | zero, one = self.model.detect_special_parameters() |
4675 | result = set(zero) |
4676 | self.assertEqual(expected, result) |
4677 | |
4678 | - expected = set(['CKM33', 'conjg__CKM11', 'conjg__CKM33', 'CKM22', 'CKM11', 'conjg__CKM22']) |
4679 | + expected = set(['CKM3x3', 'conjg__CKM1x1', 'conjg__CKM3x3', 'CKM2x2', 'CKM1x1', 'conjg__CKM2x2']) |
4680 | result = set(one) |
4681 | self.assertEqual(expected, result) |
4682 | |
4683 | @@ -130,7 +130,7 @@ |
4684 | zero, iden = self.model.detect_identical_couplings() |
4685 | |
4686 | # check what is the zero coupling |
4687 | - expected = set(['GC_17', 'GC_15', 'GC_14', 'GC_13', 'GC_40', 'GC_41', 'GC_19', 'GC_18', 'GC_46', 'GC_44', 'GC_45', 'GC_33', 'GC_35', 'GC_34', 'GC_42', 'GC_36']) |
4688 | + expected = set(['GC_18', 'GC_16', 'GC_15', 'GC_14', 'GC_41', 'GC_42', 'GC_20', 'GC_19', 'GC_47', 'GC_45', 'GC_46', 'GC_34', 'GC_36', 'GC_35', 'GC_43', 'GC_37']) |
4689 | result = set(zero) |
4690 | for name in result: |
4691 | self.assertEqual(self.model['coupling_dict'][name], 0) |
4692 | @@ -138,7 +138,7 @@ |
4693 | self.assertEqual(expected, result) |
4694 | |
4695 | # check what are the identical coupling |
4696 | - expected = [['GC_16', 'GC_12', 'GC_11', 'GC_39', 'GC_47', 'GC_43', 'GC_20']] |
4697 | + expected = [['GC_17', 'GC_13', 'GC_12', 'GC_40', 'GC_44', 'GC_48', 'GC_21']] |
4698 | expected.sort() |
4699 | iden.sort() |
4700 | self.assertEqual(expected, iden) |
4701 | @@ -146,11 +146,11 @@ |
4702 | def test_locate_couplings(self): |
4703 | """ check the creation of the coupling to vertex dict """ |
4704 | |
4705 | - target = ['GC_33', 'GC_29', 'GC_24', 'GC_25'] |
4706 | - sol = {'GC_33': [26], |
4707 | - 'GC_29': [11], |
4708 | - 'GC_24': [56, 57, 58], |
4709 | - 'GC_25': [4]} |
4710 | + target = ['GC_34', 'GC_30', 'GC_25', 'GC_26'] |
4711 | + sol = {'GC_34': [21], |
4712 | + 'GC_30': [12], |
4713 | + 'GC_25': [40, 41, 42], |
4714 | + 'GC_26': [5]} |
4715 | |
4716 | self.model.locate_coupling() |
4717 | for coup in target: |
4718 | @@ -166,13 +166,15 @@ |
4719 | zero, iden = self.model.detect_identical_couplings() |
4720 | |
4721 | # Check that All the code/model is the one intended for this test |
4722 | - target = ['GC_16', 'GC_12', 'GC_11', 'GC_39', 'GC_47', 'GC_43', 'GC_20'] |
4723 | + target = ['GC_17', 'GC_13', 'GC_12', 'GC_40', 'GC_44', 'GC_48', 'GC_21'] |
4724 | assert target in iden, 'test not up-to-date' |
4725 | |
4726 | - check_content = [['d', 'u', 'w+'], ['s', 'c', 'w+'], ['b', 't', 'w+'], ['u', 'd', 'w+'], ['c', 's', 'w+'], ['t', 'b', 'w+'], ['e-', 've', 'w+'], ['m-', 'vm', 'w+'], ['tt-', 'vt', 'w+'], ['ve', 'e-', 'w+'], ['vm', 'm-', 'w+'], ['vt', 'tt-', 'w+']] |
4727 | + check_content = [['u', 'd', 'w+'], ['c', 's', 'w+'], ['t', 'b', 'w+'], ['ve', 'e-', 'w+'], ['vm', 'm-', 'w+'], ['vt', 'tt-', 'w+'], ['d', 'u', 'w+'], ['s', 'c', 'w+'], ['b', 't', 'w+'], ['e-', 've', 'w+'], ['m-', 'vm', 'w+'], ['tt-', 'vt', 'w+']] |
4728 | + |
4729 | content = [[p.get('name') for p in v.get('particles')] \ |
4730 | for v in self.model.get('interactions') \ |
4731 | if any([c in target for c in v['couplings'].values()])] |
4732 | + |
4733 | assert check_content == content, 'test not up-to-date' |
4734 | |
4735 | vertex_id = [v.get('id') \ |
4736 | @@ -190,12 +192,12 @@ |
4737 | # check now that everything is fine |
4738 | self.model.merge_iden_couplings(target) |
4739 | for id in vertex_id: |
4740 | - has_33 = False |
4741 | + has_coup = False |
4742 | for coup in self.model.get_interaction(id)['couplings'].values(): |
4743 | self.assertFalse(coup in target[1:]) |
4744 | - if coup == 'GC_16': |
4745 | - has_16 = True |
4746 | - self.assertTrue(has_16, True) |
4747 | + if coup == 'GC_17': |
4748 | + has_coup = True |
4749 | + self.assertTrue(has_coup, True) |
4750 | |
4751 | def test_remove_couplings(self): |
4752 | """ check that the detection of irrelevant interactions works """ |
4753 | @@ -203,24 +205,24 @@ |
4754 | # first test case where they are all deleted |
4755 | # check that we have the valid model |
4756 | input = self.model['interactions'][3] # four gluon |
4757 | - input2 = self.model['interactions'][28] # b b~ h |
4758 | - self.assertTrue('GC_25' in input['couplings'].values()) |
4759 | - self.assertTrue('GC_21' in input2['couplings'].values()) |
4760 | - found_25 = 0 |
4761 | - found_21 = 0 |
4762 | + input2 = self.model['interactions'][20] # b b~ h |
4763 | + self.assertTrue('GC_6' in input['couplings'].values()) |
4764 | + self.assertTrue('GC_34' in input2['couplings'].values()) |
4765 | + found_gggg = 0 |
4766 | + found_bbh = 0 |
4767 | for dep,data in self.model['couplings'].items(): |
4768 | for param in data: |
4769 | - if param.name == 'GC_25': found_25 +=1 |
4770 | - elif param.name == 'GC_21': found_21 +=1 |
4771 | - self.assertTrue(found_25>0) |
4772 | - self.assertTrue(found_21>0) |
4773 | + if param.name == 'GC_6': found_gggg +=1 |
4774 | + elif param.name == 'GC_34': found_bbh +=1 |
4775 | + self.assertTrue(found_gggg>0) |
4776 | + self.assertTrue(found_bbh>0) |
4777 | |
4778 | # make the real test |
4779 | - result = self.model.remove_couplings(['GC_25','GC_21']) |
4780 | + result = self.model.remove_couplings(['GC_6','GC_34']) |
4781 | |
4782 | for dep,data in self.model['couplings'].items(): |
4783 | for param in data: |
4784 | - self.assertFalse(param.name in ['GC_25', 'GC_21']) |
4785 | + self.assertFalse(param.name in ['GC_6', 'GC_34']) |
4786 | |
4787 | |
4788 | def test_remove_interactions(self): |
4789 | @@ -229,38 +231,38 @@ |
4790 | |
4791 | # first test case where they are all deleted |
4792 | # check that we have the valid model |
4793 | - input = self.model['interactions'][2] # four gluon |
4794 | - input2 = self.model['interactions'][25] # b b~ h |
4795 | + input = self.model['interactions'][3] # four gluon |
4796 | + input2 = self.model['interactions'][20] # b b~ h |
4797 | self.assertTrue('GC_6' in input['couplings'].values()) |
4798 | - self.assertTrue('GC_33' in input2['couplings'].values()) |
4799 | + self.assertTrue('GC_34' in input2['couplings'].values()) |
4800 | found_6 = 0 |
4801 | - found_33 = 0 |
4802 | + found_34 = 0 |
4803 | for dep,data in self.model['couplings'].items(): |
4804 | for param in data: |
4805 | if param.name == 'GC_6': found_6 +=1 |
4806 | - elif param.name == 'GC_33': found_33 +=1 |
4807 | + elif param.name == 'GC_34': found_34 +=1 |
4808 | self.assertTrue(found_6>0) |
4809 | - self.assertTrue(found_33>0) |
4810 | + self.assertTrue(found_34>0) |
4811 | |
4812 | # make the real test |
4813 | self.model.locate_coupling() |
4814 | - result = self.model.remove_interactions(['GC_6','GC_33']) |
4815 | + result = self.model.remove_interactions(['GC_6','GC_34']) |
4816 | self.assertFalse(input in self.model['interactions']) |
4817 | self.assertFalse(input2 in self.model['interactions']) |
4818 | |
4819 | |
4820 | # Now test case where some of them are deleted and some not |
4821 | - input = self.model['interactions'][26] # d d~ Z |
4822 | - input2 = self.model['interactions'][55] # e+ e- Z |
4823 | - self.assertTrue('GC_23' in input['couplings'].values()) |
4824 | - self.assertTrue('GC_21' in input['couplings'].values()) |
4825 | - self.assertTrue('GC_21' in input2['couplings'].values()) |
4826 | - self.assertTrue('GC_24' in input2['couplings'].values()) |
4827 | - result = self.model.remove_interactions(['GC_21','GC_24']) |
4828 | - self.assertTrue('GC_23' in input['couplings'].values()) |
4829 | - self.assertFalse('GC_21' in input['couplings'].values()) |
4830 | - self.assertFalse('GC_21' in input2['couplings'].values()) |
4831 | - self.assertFalse('GC_24' in input2['couplings'].values()) |
4832 | + input = self.model['interactions'][21] # d d~ Z |
4833 | + input2 = self.model['interactions'][39] # e+ e- Z |
4834 | + self.assertTrue('GC_24' in input['couplings'].values()) |
4835 | + self.assertTrue('GC_22' in input['couplings'].values()) |
4836 | + self.assertTrue('GC_22' in input2['couplings'].values()) |
4837 | + self.assertTrue('GC_25' in input2['couplings'].values()) |
4838 | + result = self.model.remove_interactions(['GC_22','GC_25']) |
4839 | + self.assertTrue('GC_24' in input['couplings'].values()) |
4840 | + self.assertFalse('GC_22' in input['couplings'].values()) |
4841 | + self.assertFalse('GC_22' in input2['couplings'].values()) |
4842 | + self.assertFalse('GC_25' in input2['couplings'].values()) |
4843 | |
4844 | def test_put_parameters_to_zero(self): |
4845 | """check that we remove parameters correctly""" |
4846 | @@ -302,11 +304,11 @@ |
4847 | def test_restrict_from_a_param_card(self): |
4848 | """ check the full restriction chain in one case b b~ h """ |
4849 | |
4850 | - interaction = self.model['interactions'][25] |
4851 | + interaction = self.model['interactions'][20] |
4852 | #check sanity of the checks |
4853 | assert [p['pdg_code'] for p in interaction['particles']] == [5, 5, 25], \ |
4854 | 'Initial model not valid for this test => update the test' |
4855 | - assert interaction['couplings'] == {(0,0): 'GC_33'} |
4856 | + assert interaction['couplings'] == {(0,0): 'GC_34'} |
4857 | |
4858 | self.model.restrict_model(self.restrict_file) |
4859 | |
4860 | @@ -321,7 +323,7 @@ |
4861 | # check remove couplings |
4862 | for dep,data in self.model['couplings'].items(): |
4863 | for param in data: |
4864 | - self.assertFalse(param.name in ['GC_33']) |
4865 | + self.assertFalse(param.name in ['GC_34']) |
4866 | |
4867 | # check masses |
4868 | part_b = self.model.get_particle(5) |
4869 | |
4870 | === modified file 'tests/unit_tests/various/test_process_checks.py' |
4871 | --- tests/unit_tests/various/test_process_checks.py 2011-07-21 04:25:51 +0000 |
4872 | +++ tests/unit_tests/various/test_process_checks.py 2012-05-16 04:17:21 +0000 |
4873 | @@ -199,7 +199,8 @@ |
4874 | """Test that check process fails for wrong color-Lorentz.""" |
4875 | |
4876 | # Change 4g interaction so color and lorentz don't agree |
4877 | - gggg = self.base_model.get_interaction(3) |
4878 | + gggg = self.base_model.get_interaction(4) |
4879 | + assert [p['pdg_code'] for p in gggg['particles']] == [21,21,21,21] |
4880 | gggg.set('lorentz', ['VVVV1', 'VVVV4', 'VVVV3']) |
4881 | |
4882 | myleglist = base_objects.LegList() |
Since this affects the matching,
It would be nice to release this version as soon as possible.
Thanks,
Olivier