Merge lp:~maddevelopers/mg5amcnlo/2.5.5_NLOandLOmerging into lp:~mg5core2/mg5amcnlo/2.6.1

Proposed by marco zaro
Status: Merged
Merged at revision: 314
Proposed branch: lp:~maddevelopers/mg5amcnlo/2.5.5_NLOandLOmerging
Merge into: lp:~mg5core2/mg5amcnlo/2.6.1
Diff against target: 1014 lines (+549/-82)
29 files modified
Template/NLO/Source/setrun.f (+1/-1)
Template/NLO/SubProcesses/driver_mintFO.f (+5/-5)
Template/NLO/SubProcesses/driver_mintMC.f (+5/-5)
Template/NLO/SubProcesses/fks_singular.f (+4/-1)
Template/NLO/SubProcesses/reweight.f (+9/-3)
UpdateNotes.txt (+5/-0)
madgraph/fks/fks_helas_objects.py (+12/-6)
madgraph/interface/madgraph_interface.py (+1/-1)
madgraph/interface/master_interface.py (+5/-2)
madgraph/iolibs/export_fks.py (+265/-13)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%configs_and_props_decl.inc (+11/-11)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%configs_and_props_info.dat (+54/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%leshouche_info.dat (+8/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%ngraphs.inc (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%real_from_born_configs.inc (+2/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%configs_and_props_decl.inc (+11/-11)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%configs_and_props_info.dat (+20/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%leshouche_info.dat (+17/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%ngraphs.inc (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%real_from_born_configs.inc (+2/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%configs_and_props_decl.inc (+11/-11)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%configs_and_props_info.dat (+20/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%leshouche_info.dat (+17/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%ngraphs.inc (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%real_from_born_configs.inc (+2/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%genps.inc.moved (+4/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%genps.inc.moved (+4/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%genps.inc.moved (+4/-0)
tests/unit_tests/iolibs/test_export_fks.py (+47/-0)
To merge this branch: bzr merge lp:~maddevelopers/mg5amcnlo/2.5.5_NLOandLOmerging
Reviewer Review Type Date Requested Status
Olivier Mattelaer Approve
Rikkert Frederix (community) Approve
Review via email: mp+331151@code.launchpad.net

Description of the change

The LOonly output mode has been modified in order to have the diagram and color informations needed to do FxFx merging including LO matrix elements after a given multiplicity.
Josh Bendavid suggested to make this functionality available in the next release even some more tests need to be done on the results.

To post a comment you must log in.
Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Hi,

That's cool, before starting the review:

So What would be the syntax in this case? (Do you have this documented somewhere?
Would it be:
generate p p > e+ e- [QCD]
add process p p > e+ e- j [LOonly]
add process p p > e+ e- j j [LOonly]
Or should I skip the one jet multiplicity?

Do I understand correctly that this is not working for UNLOPS?

Can you be more specific by "it required more test"? Should we release this functionality as "beta"?

Cheers,

Olivier

Revision history for this message
Rikkert Frederix (frederix) wrote :

Hi Olivier,

Yes, that's indeed the syntax.

All tests with kind of low statistics have been performed. However, we wanted to give the code to Josh Bendavid (who requested this feature) to perform some high-statistics tests and to confirm that's working within the CMS framework. He prefers that the code is part of the main branch, as he's loosing track of all separate contributions. That's why Marco wrote that some more testing is needed. Hence, we should keep this functionality somewhat hidden (or in beta) for the moment.

Indeed, it's not working with UNLOPS. However, with UNLOPS one can always generate separate samples and put them together at the end (at the cost of introducing large fractions of negative weights).

best,
Rikkert

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

Hi,

I'm starting to look at this. My question are so far on the interface/physics limitation.
Actually a lot of the point below should also be consider for FxFx run in general since they are not specific to LOonly.

1) the syntax "add process p p > e+ e- j [LOonly]" does not work. Would be great to not be force to do "add process p p > e+ e- j [LOonly=QCD]" since the QCD here is meaningless (I guess)

2) It would be great that ickkw being on default on 3 in this case.

3) Would be great that the code crash if it is on 4.

4) What would be the meaning of having order=LO in this setup? (This is actually a valid question even without the LOonly option). I guess the answer is None. Should we prevent it?
(actually same question with fixed_order=ON)

5) Does it make sense to have the shower ON by default? should not we have turn it off?

6) If this is to be consider as beta, I would prefer that a warning appear when the matrix-element are generated. (Such that this is clear)

7) When running, I have the following:
   --------------------------------------------------------------
      Summary:
      Process p p > e+ e- [QCD] ; p p > e+ e- j [LOonly=QCD]
      Run at p-p collider (6500.0 + 6500.0 GeV)
      Number of events generated: 10000
      Total cross section: 2.103e+03 +- 8.4e+00 pb
   --------------------------------------------------------------
      Scale variation (computed from LHE events):
          Dynamical_scale_choice -1 (envelope of 9 values):
              2.130e+03 pb +6.3% -11.9%
   --------------------------------------------------------------

Can we trust the scale variation?

I did not test the physics but I checked the code and this sounds fine.
I would have prefer that you factorise the code to have less a huge function with a bunch of if.
But this is not critical and we will be able to split the function in smaller piece if needed in the future.

Thanks for this work,

Olivier

Revision history for this message
Rikkert Frederix (frederix) wrote :

Hi Olivier,

I see your points. However, most are very generally to FxFx and do not really apply specifically to this branch. Therefore, I'm not sure that this is the right time to implement them...

>
> 1) the syntax "add process p p > e+ e- j [LOonly]" does not work. Would be
> great to not be force to do "add process p p > e+ e- j [LOonly=QCD]" since the
> QCD here is meaningless (I guess)

I think this would be a good idea. Marco, do you know if this is easy? Will at then also work with add-ons like MadSpin?

> 2) It would be great that ickkw being on default on 3 in this case.
>

Boahh.. don't know. Is this relevant? And how do you know when to put this? Do you suggest to count the 'j' in each 'add process' and check if it's more than in the 'generate' command? Is this sufficient?

> 3) Would be great that the code crash if it is on 4.
>

Same as for previous comment.

> 4) What would be the meaning of having order=LO in this setup? (This is
> actually a valid question even without the LOonly option). I guess the answer
> is None. Should we prevent it?
> (actually same question with fixed_order=ON)
>

The results for order=LO are not necessarily wrong. Therefore I would keep it. Same for fixed_order=ON.

> 5) Does it make sense to have the shower ON by default? should not we have
> turn it off?
>

It should be "On" in my opinion. But also here: in practice this will only be used by experimentalists. They know how to deal with either On or Off.

>
> 6) If this is to be consider as beta, I would prefer that a warning appear
> when the matrix-element are generated. (Such that this is clear)
>

The [LOonly=QCD] option is not in beta. Rather the NLO+LO merging is. Hence at the level of the generation, one doesn't know yet if the user will use the merging or not.

>
> 7) When running, I have the following:
> --------------------------------------------------------------
> Summary:
> Process p p > e+ e- [QCD] ; p p > e+ e- j [LOonly=QCD]
> Run at p-p collider (6500.0 + 6500.0 GeV)
> Number of events generated: 10000
> Total cross section: 2.103e+03 +- 8.4e+00 pb
> --------------------------------------------------------------
> Scale variation (computed from LHE events):
> Dynamical_scale_choice -1 (envelope of 9 values):
> 2.130e+03 pb +6.3% -11.9%
> --------------------------------------------------------------
>
> Can we trust the scale variation?

No. Nor the cross section as the showering will/should reject a fraction of the events. Just as for NLO FxFx. However, I'm against removing this since it serves as a check that all required weights are written correctly in the event-file.

Best,
Rikkert

Revision history for this message
marco zaro (marco-zaro) wrote :
Download full text (3.6 KiB)

Hi,
thanks to Olivier for the review and to Rik for the answers
On 02 Oct 2017, at 15:38, Rikkert Frederix <email address hidden> wrote:

> Hi Olivier,
>
> I see your points. However, most are very generally to FxFx and do not really apply specifically to this branch. Therefore, I'm not sure that this is the right time to implement them...
>
>>
>> 1) the syntax "add process p p > e+ e- j [LOonly]" does not work. Would be
>> great to not be force to do "add process p p > e+ e- j [LOonly=QCD]" since the
>> QCD here is meaningless (I guess)
> I think this would be a good idea. Marco, do you know if this is easy? Will at then also work with add-ons like MadSpin?

hmm…
currently the code searches a regular expression like [<option> = <orders>]. If option is not there (like for [QCD]) the option is set to ‘all’. In our case, [LOonly] would be equivalent to ‘all=LOonly’, which is certainly something that does not make sense. So, i don’t have any smarter idea than checking that, when one has orders=LOonly and option =all, then one assigns orders=QCD, option=LOonly with an ‘if’ around line 177 inside master_interface.
It is rather ugly, but I have no smarter idea…
What would you say?

Cheers,

Marco

>
>> 2) It would be great that ickkw being on default on 3 in this case.
>>
>
> Boahh.. don't know. Is this relevant? And how do you know when to put this? Do you suggest to count the 'j' in each 'add process' and check if it's more than in the 'generate' command? Is this sufficient?
>
>
>> 3) Would be great that the code crash if it is on 4.
>>
>
> Same as for previous comment.
>
>> 4) What would be the meaning of having order=LO in this setup? (This is
>> actually a valid question even without the LOonly option). I guess the answer
>> is None. Should we prevent it?
>> (actually same question with fixed_order=ON)
>>
>
> The results for order=LO are not necessarily wrong. Therefore I would keep it. Same for fixed_order=ON.
>
>> 5) Does it make sense to have the shower ON by default? should not we have
>> turn it off?
>>
>
> It should be "On" in my opinion. But also here: in practice this will only be used by experimentalists. They know how to deal with either On or Off.
>
>>
>> 6) If this is to be consider as beta, I would prefer that a warning appear
>> when the matrix-element are generated. (Such that this is clear)
>>
>
> The [LOonly=QCD] option is not in beta. Rather the NLO+LO merging is. Hence at the level of the generation, one doesn't know yet if the user will use the merging or not.
>
>>
>> 7) When running, I have the following:
>> --------------------------------------------------------------
>> Summary:
>> Process p p > e+ e- [QCD] ; p p > e+ e- j [LOonly=QCD]
>> Run at p-p collider (6500.0 + 6500.0 GeV)
>> Number of events generated: 10000
>> Total cross section: 2.103e+03 +- 8.4e+00 pb
>> --------------------------------------------------------------
>> Scale variation (computed from LHE events):
>> Dynamical_scale_choice -1 (envelope of 9 values):
>> 2.130e+03 pb +6.3% -11.9%
>> --------------------------------------------------------------
>>
>> Can we trus...

Read more...

Revision history for this message
Stefano Frixione (stefano-frixione) wrote :

Hi Olivier,
a few scattered comments. In general, this branch has been set up to
comply with CMS request of having a LO option on top of FxFx, in order
to extend somewhat the multiplicity reach. So I'm not sure a discussion
unrelated to FxFx does make sense (although technically it does).

> 1) the syntax "add process p p > e+ e- j [LOonly]" does not work. Would
> be great to not be force to do "add process p p > e+ e- j
> [LOonly=QCD]" since the QCD here is meaningless (I guess)
not necessarily: there could be processes mediated by either QCD
or QED, with the same final state.
Since this is going to be used by advanced users, I think the effort
spent into rendering this cleaner is not particularly worth.

> 2) It would be great that ickkw being on default on 3 in this case.
Same as before.

> 3) Would be great that the code crash if it is on 4.
Same as before.

> 5) Does it make sense to have the shower ON by default? should not we
> have turn it off?
I'm inclined to have it off, since this prevents the code from crashing
in absence of MC installations (or if they have been done incorrectly).

> 7) When running, I have the following:
> --------------------------------------------------------------
> Summary:
> Process p p > e+ e- [QCD] ; p p > e+ e- j [LOonly=QCD]
> Run at p-p collider (6500.0 + 6500.0 GeV)
> Number of events generated: 10000
> Total cross section: 2.103e+03 +- 8.4e+00 pb
> --------------------------------------------------------------
> Scale variation (computed from LHE events):
> Dynamical_scale_choice -1 (envelope of 9 values):
> 2.130e+03 pb +6.3% -11.9%
> --------------------------------------------------------------
>
> Can we trust the scale variation?
I agree with Rikkert: maybe not, but it's a double check.

Cheers, Stefano.

>
> I did not test the physics but I checked the code and this sounds fine.
> I would have prefer that you factorise the code to have less a huge function with a bunch of if.
> But this is not critical and we will be able to split the function in smaller piece if needed in the future.
>
> Thanks for this work,
>
> Olivier
>
> --
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/2.5.5_NLOandLOmerging/+merge/331151
> Your team MadDevelopers is subscribed to branch lp:~maddevelopers/mg5amcnlo/2.5.5_NLOandLOmerging.
>

Revision history for this message
marco zaro (marco-zaro) wrote :

Hi all,
any news on this?

thanks!
cheers,

Marco

Revision history for this message
Rikkert Frederix (frederix) :
review: Approve
303. By Olivier Mattelaer

merge with 2.6.1

304. By Olivier Mattelaer

merge with latest 2.6.1

305. By Olivier Mattelaer

allow [LOonly] syntax

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

I'm doing the merge

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Template/NLO/Source/setrun.f'
2--- Template/NLO/Source/setrun.f 2017-07-25 14:13:14 +0000
3+++ Template/NLO/Source/setrun.f 2017-11-30 23:06:43 +0000
4@@ -125,7 +125,7 @@
5 else
6 idbmup(i)=lpp(i)
7 endif
8- ebmup(i)=ebeam(i)
9+ ebmup(i)=ebeam(i)
10 enddo
11 call get_pdfup(pdlabel,pdfgup,pdfsup,lhaid)
12 c Fill the nmemPDF(i) array with the number of PDF error set. This we
13
14=== modified file 'Template/NLO/SubProcesses/driver_mintFO.f'
15--- Template/NLO/SubProcesses/driver_mintFO.f 2017-06-19 17:15:00 +0000
16+++ Template/NLO/SubProcesses/driver_mintFO.f 2017-11-30 23:06:43 +0000
17@@ -784,11 +784,11 @@
18 write (*,*) 'Process generated with [LOonly=QCD]. '/
19 $ /'Setting abrv to "born".'
20 abrv='born'
21- if (ickkw.eq.3) then
22- write (*,*) 'FxFx merging not possible with'/
23- $ /' [LOonly=QCD] processes'
24- stop 1
25- endif
26+c$$$ if (ickkw.eq.3) then
27+c$$$ write (*,*) 'FxFx merging not possible with'/
28+c$$$ $ /' [LOonly=QCD] processes'
29+c$$$ stop 1
30+c$$$ endif
31 endif
32 endif
33 c
34
35=== modified file 'Template/NLO/SubProcesses/driver_mintMC.f'
36--- Template/NLO/SubProcesses/driver_mintMC.f 2017-07-29 08:03:34 +0000
37+++ Template/NLO/SubProcesses/driver_mintMC.f 2017-11-30 23:06:43 +0000
38@@ -711,11 +711,11 @@
39 write (*,*) 'Process generated with [LOonly=QCD]. '/
40 $ /'Setting abrv to "born".'
41 abrv='born'
42- if (ickkw.eq.3) then
43- write (*,*) 'FxFx merging not possible with'/
44- $ /' [LOonly=QCD] processes'
45- stop 1
46- endif
47+c$$$ if (ickkw.eq.3) then
48+c$$$ write (*,*) 'FxFx merging not possible with'/
49+c$$$ $ /' [LOonly=QCD] processes'
50+c$$$ stop 1
51+c$$$ endif
52 endif
53 endif
54 if(nbody.and.abrv.ne.'born'.and.abrv(1:2).ne.'vi'
55
56=== modified file 'Template/NLO/SubProcesses/fks_singular.f'
57--- Template/NLO/SubProcesses/fks_singular.f 2017-07-26 11:45:39 +0000
58+++ Template/NLO/SubProcesses/fks_singular.f 2017-11-30 23:06:43 +0000
59@@ -54,6 +54,8 @@
60 common /cxiScut_used/xiScut_used,xiBSVcut_used
61 double precision fxfx_exp_rewgt
62 common /c_fxfx_exp_regt/ fxfx_exp_rewgt
63+ character*4 abrv
64+ common /to_abrv/ abrv
65 call cpu_time(tBefore)
66 if (f_nb.eq.0d0) return
67 if (xi_i_fks_ev .gt. xiBSVcut_used) return
68@@ -62,7 +64,8 @@
69 g22=g**(nint(2*wgtbpower+2))
70 wgt1=wgtnstmp*f_nb/g22
71 wgt4=wgtnstmp_avgvirt*f_nb/g22
72- if (ickkw.eq.3 .and. fxfx_exp_rewgt.ne.0d0) then
73+ if (ickkw.eq.3 .and. fxfx_exp_rewgt.ne.0d0 .and. abrv.ne.'born')
74+ $ then
75 wgt1=wgt1 - fxfx_exp_rewgt*born_wgt*f_nb/g2/(4d0*pi)
76 elseif (ickkw.eq.-1) then
77 if (wgtbpower.ne.0) then
78
79=== modified file 'Template/NLO/SubProcesses/reweight.f'
80--- Template/NLO/SubProcesses/reweight.f 2017-06-19 14:42:53 +0000
81+++ Template/NLO/SubProcesses/reweight.f 2017-11-30 23:06:43 +0000
82@@ -48,7 +48,7 @@
83 stop
84 endif
85
86- if (iipdg.eq.21) then
87+ if (abs(iipdg).eq.21) then
88 c Gluon sudakov
89 c g->gg contribution
90 gamma=CA*alphasq0*log(Q1/q0)/pi ! A1
91@@ -211,7 +211,9 @@
92 integer ipdg, irfl
93 integer get_color
94
95- isqcd=(iabs(get_color(ipdg)).gt.1)
96+ irfl=ipdg
97+ if (irfl.eq.-21)irfl=21
98+ isqcd=(iabs(get_color(irfl)).gt.1)
99
100 return
101 end
102@@ -276,6 +278,9 @@
103 idmo=ipdg(imo)
104 idda1=ipdg(ida1)
105 idda2=ipdg(ida2)
106+ if (idmo.eq.-21) idmo=21
107+ if (idda1.eq.-21) idda1=21
108+ if (idda2.eq.-21) idda2=21
109
110 if (btest(mlevel,4)) then
111 write(*,*) ' updating ipart for: ',ida1,ida2,' -> ',imo
112@@ -429,6 +434,7 @@
113 idmo=ipdg(imo)
114 idda1=ipdg(ida1)
115 idda2=ipdg(ida2)
116+
117 c Check QCD vertex
118 if(islast.or..not.isqcd(idmo).or..not.isqcd(idda1).or.
119 & .not.isqcd(idda2)) then
120@@ -795,7 +801,7 @@
121 c line
122 if(goodjet(ida(3-i))) then
123 if(partonline(j).or.
124- $ ipdgcl(ida(3-i),igraphs(1),nFKSprocess).eq.21)then
125+ $ abs(ipdgcl(ida(3-i),igraphs(1),nFKSprocess)).eq.21)then
126 c Need to include gluon to avoid soft singularity
127 iqjets(ipart(1,ida(3-i)))=1 ! 1 means for sure jet
128 else
129
130=== modified file 'UpdateNotes.txt'
131--- UpdateNotes.txt 2017-11-24 22:52:27 +0000
132+++ UpdateNotes.txt 2017-11-30 23:06:43 +0000
133@@ -1,4 +1,9 @@
134 Update notes for MadGraph5_aMC@NLO (in reverse time order)
135+2.6.1 (XX/XX/17)
136+ New Functionalities:
137+ --------------------
138+ RF+MZ: It is now possible to add LO matrix elements (with [LOonly])
139+ to Fx-Fx merged samples. Thanks to Josh Bendavid for testing.
140
141 2.6.1
142 OM: Re-factoring the code asking which program to use (both at LO and NLO)
143
144=== modified file 'madgraph/fks/fks_helas_objects.py'
145--- madgraph/fks/fks_helas_objects.py 2016-02-23 09:08:23 +0000
146+++ madgraph/fks/fks_helas_objects.py 2017-11-30 23:06:43 +0000
147@@ -125,6 +125,8 @@
148 gen_color=False)
149
150 processes = helasfull.born_matrix_element.get('processes')
151+
152+ max_configs = helasfull.born_matrix_element.get_num_configs()
153
154 metag = helas_objects.IdentifyMETag.create_tag(helasfull.born_matrix_element.get('base_amplitude'))
155
156@@ -134,7 +136,7 @@
157 cPickle.dump(outdata,output,protocol=2)
158 output.close()
159
160- return [output.name,metag,has_loops,processes]
161+ return [output.name,metag,has_loops,processes,max_configs]
162
163
164 def async_finalize_matrix_elements(args):
165@@ -322,6 +324,8 @@
166 self['has_loops'] = self['has_loops'] or has_loops
167 processes = bornout[3]
168 self['processes'].extend(processes)
169+ self['max_particles'] = max([self['max_configs']] + [len(p['legs']) + 1 for p in bornout[3]])
170+ self['max_configs'] = max(self['max_configs'], bornout[4])
171 unique = True
172 for ime2,bornout2 in enumerate(unique_me_list):
173 mefile2 = bornout2[0]
174@@ -394,12 +398,12 @@
175 break
176 self['has_virtuals'] = has_virtuals
177
178- configs_list = []
179+ configs_list = [self['max_configs']]
180 for meout in realmapout:
181 configs_list.append(meout[1])
182 self['max_configs'] = max(configs_list)
183
184- nparticles_list = []
185+ nparticles_list = [self['max_particles']]
186 for meout in realmapout:
187 nparticles_list.append(meout[2])
188 self['max_particles'] = max(nparticles_list)
189@@ -453,14 +457,16 @@
190
191 def get_max_configs(self):
192 """Return max_configs"""
193-
194+
195 if self['max_configs'] < 0:
196 try:
197 self['max_configs'] = max([me.get_num_configs() \
198 for me in self['real_matrix_elements']])
199 except ValueError:
200- self['max_configs'] = max([me.born_matrix_element.get_num_configs() \
201- for me in self['matrix_elements']])
202+ pass
203+ self['max_configs'] = max(self['max_configs'],\
204+ max([me.born_matrix_element.get_num_configs() \
205+ for me in self['matrix_elements']]))
206
207 return self['max_configs']
208
209
210=== modified file 'madgraph/interface/madgraph_interface.py'
211--- madgraph/interface/madgraph_interface.py 2017-11-23 12:05:44 +0000
212+++ madgraph/interface/madgraph_interface.py 2017-11-30 23:06:43 +0000
213@@ -4535,7 +4535,7 @@
214 raise self.InvalidCmd, "No particle %s in model" % part_name
215
216 # Apply the keyword 'all' for perturbed coupling orders.
217- if perturbation_couplings.lower()=='all':
218+ if perturbation_couplings.lower() in ['all', 'loonly']:
219 perturbation_couplings=' '.join(self._curr_model['perturbation_couplings'])
220
221 if filter(lambda leg: leg.get('state') == True, myleglist):
222
223=== modified file 'madgraph/interface/master_interface.py'
224--- madgraph/interface/master_interface.py 2017-03-27 08:37:47 +0000
225+++ madgraph/interface/master_interface.py 2017-11-30 23:06:43 +0000
226@@ -184,8 +184,11 @@
227 else:
228 # If not option is set the convention is that the mode is 'all'
229 # unless no perturbation orders is defined.
230- if len(orders)>0:
231- return ('NLO','all',orders)
232+ # if order is set to LOonly assume LOonly=QCD
233+ if orders == ['LOonly']:
234+ return ('NLO', 'LOonly', ['QCD'])
235+ elif len(orders)>0:
236+ return ('NLO','all',orders)
237 else:
238 return ('tree',None,[])
239 else:
240
241=== modified file 'madgraph/iolibs/export_fks.py'
242--- madgraph/iolibs/export_fks.py 2017-06-16 15:25:01 +0000
243+++ madgraph/iolibs/export_fks.py 2017-11-30 23:06:43 +0000
244@@ -524,7 +524,7 @@
245 ncolor,maxflow,fortran_model)
246
247 filename = 'configs_and_props_info.dat'
248- nconfigs,max_leg_number,nfksconfs=self.write_configs_and_props_info_file(
249+ nconfigs,max_leg_number=self.write_configs_and_props_info_file(
250 filename,
251 matrix_element)
252
253@@ -670,12 +670,6 @@
254 else:
255 os.system("ln -s ../BinothLHA_user.f ./BinothLHA.f")
256
257-
258- #import nexternal/leshouches in Source
259-# ln('nexternal.inc', '../../Source', log=False)
260-# ln('born_leshouche.inc', '../../Source', log=False)
261-
262-
263 # Return to SubProcesses dir
264 os.chdir(os.path.pardir)
265 # Add subprocess to subproc.mg
266@@ -683,7 +677,6 @@
267 files.append_to_file(filename,
268 self.write_subproc,
269 borndir)
270-
271
272 os.chdir(cwd)
273 # Generate info page
274@@ -955,9 +948,28 @@
275 lines.append("data (real_from_born_conf(irfbc,%d),irfbc=1,%d) /%s/" \
276 % (iFKS,len(links),real_configs))
277
278+ # this is for 'LOonly' processes; in this case, a fake configuration
279+ # with all the born diagrams is written
280+ if not matrix_element.get_fks_info_list():
281+ # compute (again) the number of configurations at the born
282+ base_diagrams = born_me.get('base_amplitude').get('diagrams')
283+ minvert = min([max([len(vert.get('legs')) for vert in \
284+ diag.get('vertices')]) for diag in base_diagrams])
285+
286+ for idiag, diag in enumerate(base_diagrams):
287+ if any([len(vert.get('legs')) > minvert for vert in
288+ diag.get('vertices')]):
289+ # Only 3-vertices allowed in configs.inc
290+ continue
291+ max_links = max_links + 1
292+
293+ real_configs=', '.join(['%d' % i for i in range(1, max_links+1)])
294+ lines.append("data (real_from_born_conf(irfbc,%d),irfbc=1,%d) /%s/" \
295+ % (1,max_links,real_configs))
296+
297 lines2.append("integer irfbc")
298 lines2.append("integer real_from_born_conf(%d,%d)" \
299- % (max_links,len(matrix_element.get_fks_info_list())))
300+ % (max_links, max(len(matrix_element.get_fks_info_list()),1)))
301 # Write the file
302 writer.writelines(lines2+lines)
303
304@@ -1057,12 +1069,14 @@
305 lines.append("# M -> PMASS_D/PWIDTH_D")
306 lines.append("# P -> POW_D")
307 lines2 = []
308- nconfs = len(matrix_element.get_fks_info_list())
309 (nexternal, ninitial) = matrix_element.get_nexternal_ninitial()
310
311 max_iconfig=0
312 max_leg_number=0
313
314+ ########################################################
315+ # this is for standard processes with [(real=)XXX]
316+ ########################################################
317 for iFKS, conf in enumerate(matrix_element.get_fks_info_list()):
318 iFKS=iFKS+1
319 iconfig = 0
320@@ -1147,11 +1161,141 @@
321 (iFKS,leg.get('number'), iconf + 1, leg.get('id')))
322 lines2.append("P %4d %4d %4d %4d " % \
323 (iFKS,leg.get('number'), iconf + 1, pow_part))
324+
325+ ########################################################
326+ # this is for [LOonly=XXX]
327+ ########################################################
328+ if not matrix_element.get_fks_info_list():
329+ born_me = matrix_element.born_matrix_element
330+ # as usual, in this case we assume just one FKS configuration
331+ # exists with diagrams corresponding to born ones X the ij -> i,j
332+ # splitting. Here j is chosen to be the last colored particle in
333+ # the particle list
334+ bornproc = born_me.get('processes')[0]
335+ colors = [l.get('color') for l in bornproc.get('legs')]
336+
337+ fks_i = len(colors)
338+ # use the last colored particle if it exists, or
339+ # just the last
340+ fks_j=1
341+ for cpos, col in enumerate(colors):
342+ if col != 1:
343+ fks_j = cpos+1
344+ fks_j_id = [l.get('id') for l in bornproc.get('legs')][cpos]
345+
346+ # for the moment, if j is initial-state, we do nothing
347+ if fks_j > ninitial:
348+ iFKS=1
349+ iconfig = 0
350+ s_and_t_channels = []
351+ mapconfigs = []
352+ base_diagrams = born_me.get('base_amplitude').get('diagrams')
353+ model = born_me.get('base_amplitude').get('process').get('model')
354+ minvert = min([max([len(vert.get('legs')) for vert in \
355+ diag.get('vertices')]) for diag in base_diagrams])
356+
357+ lines.append("# ")
358+ lines.append("# nFKSprocess %d" % iFKS)
359+ for idiag, diag in enumerate(base_diagrams):
360+ if any([len(vert.get('legs')) > minvert for vert in
361+ diag.get('vertices')]):
362+ # Only 3-vertices allowed in configs.inc
363+ continue
364+ iconfig = iconfig + 1
365+ helas_diag = born_me.get('diagrams')[idiag]
366+ mapconfigs.append(helas_diag.get('number'))
367+ lines.append("# Diagram %d for nFKSprocess %d" % \
368+ (helas_diag.get('number'),iFKS))
369+ # Correspondance between the config and the amplitudes
370+ lines.append("C %4d %4d %4d " % (iFKS,iconfig,
371+ helas_diag.get('number')))
372+
373+ # Need to reorganize the topology so that we start with all
374+ # final state external particles and work our way inwards
375+ schannels, tchannels = helas_diag.get('amplitudes')[0].\
376+ get_s_and_t_channels(ninitial, model, 990)
377+
378+ s_and_t_channels.append([schannels, tchannels])
379+
380+ #the first thing to write is the splitting ij -> i,j
381+ lines.append("F %4d %4d %4d %4d" % \
382+ (iFKS,-1,iconfig,2))
383+ #(iFKS,last_leg.get('number'), iconfig, len(daughters)))
384+ lines.append("D %4d" % nexternal)
385+ lines.append("D %4d" % fks_j)
386+ lines.append("S %4d %4d %4d %10d" % \
387+ (iFKS,-1, iconfig,fks_j_id))
388+ # now we continue with all the other vertices of the diagrams;
389+ # we need to shift the 'last_leg' by 1 and replace leg fks_j with -1
390+
391+ # Write out propagators for s-channel and t-channel vertices
392+ allchannels = schannels
393+ if len(tchannels) > 1:
394+ # Write out tchannels only if there are any non-trivial ones
395+ allchannels = schannels + tchannels
396+
397+ for vert in allchannels:
398+ daughters = [leg.get('number') for leg in vert.get('legs')[:-1]]
399+ last_leg = vert.get('legs')[-1]
400+ lines.append("F %4d %4d %4d %4d" % \
401+ (iFKS,last_leg.get('number')-1, iconfig, len(daughters)))
402+
403+ # legs with negative number in daughters have to be shifted by -1
404+ for i_dau in range(len(daughters)):
405+ if daughters[i_dau] < 0:
406+ daughters[i_dau] += -1
407+ # finally relable fks with -1 if it appears in daughters
408+ if fks_j in daughters:
409+ daughters[daughters.index(fks_j)] = -1
410+ for d in daughters:
411+ lines.append("D %4d" % d)
412+ if vert in schannels:
413+ lines.append("S %4d %4d %4d %10d" % \
414+ (iFKS,last_leg.get('number')-1, iconfig,
415+ last_leg.get('id')))
416+ elif vert in tchannels[:-1]:
417+ lines.append("T %4d %4d %4d %10d" % \
418+ (iFKS,last_leg.get('number')-1, iconfig,
419+ abs(last_leg.get('id'))))
420+
421+ # update what the array sizes (mapconfig,iforest,etc) will be
422+ max_leg_number = min(max_leg_number,last_leg.get('number')-1)
423+ max_iconfig = max(max_iconfig,iconfig)
424+
425+ # Write out number of configs
426+ lines.append("# Number of configs for nFKSprocess %d" % iFKS)
427+ lines.append("C %4d %4d %4d" % (iFKS,0,iconfig))
428+
429+ # write the props.inc information
430+ lines2.append("# ")
431+ particle_dict = born_me.get('processes')[0].get('model').\
432+ get('particle_dict')
433+
434+ for iconf, configs in enumerate(s_and_t_channels):
435+ lines2.append("M %4d %4d %4d %10d " % \
436+ (iFKS,-1, iconf + 1, fks_j_id))
437+ pow_part = 1 + int(particle_dict[fks_j_id].is_boson())
438+ lines2.append("P %4d %4d %4d %4d " % \
439+ (iFKS,-1, iconf + 1, pow_part))
440+ for vertex in configs[0] + configs[1][:-1]:
441+ leg = vertex.get('legs')[-1]
442+ if leg.get('id') not in particle_dict:
443+ # Fake propagator used in multiparticle vertices
444+ pow_part = 0
445+ else:
446+ particle = particle_dict[leg.get('id')]
447+
448+ pow_part = 1 + int(particle.is_boson())
449+
450+ lines2.append("M %4d %4d %4d %10d " % \
451+ (iFKS,leg.get('number')-1, iconf + 1, leg.get('id')))
452+ lines2.append("P %4d %4d %4d %4d " % \
453+ (iFKS,leg.get('number')-1, iconf + 1, pow_part))
454
455 # Write the file
456 open(filename,'w').write('\n'.join(lines+lines2))
457
458- return max_iconfig, max_leg_number, nconfs
459+ return max_iconfig, max_leg_number
460
461
462 def write_leshouche_info_declarations(self, writer, nfksconfs,
463@@ -1203,6 +1347,11 @@
464 maxproc = max(maxproc, nprocs)
465 maxflow = max(maxflow, nflows)
466
467+ # this is for LOonly
468+ if not matrix_element.get_fks_info_list():
469+ (newlines, nprocs, nflows) = self.get_leshouche_lines_dummy(matrix_element.born_matrix_element, 1)
470+ lines.extend(newlines)
471+
472 # Write the file
473 open(filename,'w').write('\n'.join(lines))
474
475@@ -2206,8 +2355,8 @@
476 charges = [0.] * len(colors)
477
478 fks_i = len(colors)
479- # use the first colored particle if it exists, or
480- # just the first
481+ # use the last colored particle if it exists, or
482+ # just the last
483 fks_j=1
484 for cpos, col in enumerate(colors[:-1]):
485 if col != 1:
486@@ -2709,6 +2858,109 @@
487 return lines, nproc, nflow
488
489
490+ def get_leshouche_lines_dummy(self, matrix_element, ime):
491+ #test written
492+ """As get_leshouche_lines, but for 'fake' real emission processes (LOonly
493+ In this case, write born color structure times ij -> i,j splitting)
494+ """
495+
496+ bornproc = matrix_element.get('processes')[0]
497+ colors = [l.get('color') for l in bornproc.get('legs')]
498+
499+ fks_i = len(colors)
500+ # use the last colored particle if it exists, or
501+ # just the last
502+ fks_j=1
503+ for cpos, col in enumerate(colors):
504+ if col != 1:
505+ fks_j = cpos+1
506+
507+ # Extract number of external particles
508+ (nexternal, ninitial) = matrix_element.get_nexternal_ninitial()
509+ nexternal+=1 # remember, in this case matrix_element is born
510+
511+ lines = []
512+ for iproc, proc in enumerate(matrix_element.get('processes')):
513+ # add the fake extra leg
514+ legs = proc.get_legs_with_decays() + \
515+ [fks_common.FKSLeg({'id': -21,
516+ 'number': nexternal,
517+ 'state': True,
518+ 'fks': 'i',
519+ 'color': 8,
520+ 'charge': 0.,
521+ 'massless': True,
522+ 'spin': 3,
523+ 'is_part': True,
524+ 'self_antipart': True})]
525+
526+ lines.append("I %4d %4d %s" % \
527+ (ime, iproc + 1,
528+ " ".join([str(l.get('id')) for l in legs])))
529+ for i in [1, 2]:
530+ lines.append("M %4d %4d %4d %s" % \
531+ (ime, i, iproc + 1,
532+ " ".join([ "%3d" % 0 ] * ninitial + \
533+ [ "%3d" % i ] * (nexternal - ninitial))))
534+
535+ # Here goes the color connections corresponding to the JAMPs
536+ # Only one output, for the first subproc!
537+ if iproc == 0:
538+ # If no color basis, just output trivial color flow
539+ if not matrix_element.get('color_basis'):
540+ for i in [1, 2]:
541+ lines.append("C %4d %4d 1 %s" % \
542+ (ime, i,
543+ " ".join([ "%3d" % 0 ] * nexternal)))
544+ color_flow_list = []
545+ nflow = 1
546+
547+ else:
548+ # in this case the last particle (-21) has two color indices
549+ # and it has to be emitted by j_fks
550+ # First build a color representation dictionnary
551+ repr_dict = {}
552+ for l in legs[:-1]:
553+ repr_dict[l.get('number')] = \
554+ proc.get('model').get_particle(l.get('id')).get_color()\
555+ * (-1)**(1+l.get('state'))
556+ # Get the list of color flows
557+ color_flow_list = \
558+ matrix_element.get('color_basis').color_flow_decomposition(repr_dict,
559+ ninitial)
560+ # And output them properly
561+ for cf_i, color_flow_dict in enumerate(color_flow_list):
562+ # we have to add the extra leg (-21), linked to the j_fks leg
563+ # first, find the maximum color label
564+ maxicol = max(sum(color_flow_dict.values(), []))
565+ #then, replace the color labels
566+ if color_flow_dict[fks_j][0] == 0:
567+ anti = True
568+ icol_j = color_flow_dict[fks_j][1]
569+ else:
570+ anti = False
571+ icol_j = color_flow_dict[fks_j][0]
572+
573+ if anti:
574+ color_flow_dict[nexternal] = (maxicol + 1, color_flow_dict[fks_j][1])
575+ color_flow_dict[fks_j][1] = maxicol + 1
576+ else:
577+ color_flow_dict[nexternal] = (color_flow_dict[fks_j][0], maxicol + 1)
578+ color_flow_dict[fks_j][0] = maxicol + 1
579+
580+ for i in [0, 1]:
581+ lines.append("C %4d %4d %4d %s" % \
582+ (ime, i + 1, cf_i + 1,
583+ " ".join(["%3d" % color_flow_dict[l.get('number')][i] \
584+ for l in legs])))
585+
586+ nflow = len(color_flow_list)
587+
588+ nproc = len(matrix_element.get('processes'))
589+
590+ return lines, nproc, nflow
591+
592+
593 #===============================================================================
594 # get_den_factor_lines
595 #===============================================================================
596
597=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%configs_and_props_decl.inc'
598--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%configs_and_props_decl.inc 2016-02-27 14:33:01 +0000
599+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%configs_and_props_decl.inc 2017-11-30 23:06:43 +0000
600@@ -1,12 +1,12 @@
601 INTEGER IFR,LMAXCONFIGS_USED,MAX_BRANCH_USED
602- PARAMETER (LMAXCONFIGS_USED= 0)
603- PARAMETER (MAX_BRANCH_USED = 0)
604- INTEGER MAPCONFIG_D( 0,0:LMAXCONFIGS_USED)
605- INTEGER IFOREST_D( 0,2,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
606- INTEGER SPROP_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
607- INTEGER TPRID_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
608- DOUBLE PRECISION PMASS_D( 0,-MAX_BRANCH_USED:-1
609- $ ,LMAXCONFIGS_USED)
610- DOUBLE PRECISION PWIDTH_D( 0,-MAX_BRANCH_USED:-1
611- $ ,LMAXCONFIGS_USED)
612- INTEGER POW_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
613+ PARAMETER (LMAXCONFIGS_USED= 3)
614+ PARAMETER (MAX_BRANCH_USED = 3)
615+ INTEGER MAPCONFIG_D( 1,0:LMAXCONFIGS_USED)
616+ INTEGER IFOREST_D( 1,2,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
617+ INTEGER SPROP_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
618+ INTEGER TPRID_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
619+ DOUBLE PRECISION PMASS_D( 1,-MAX_BRANCH_USED:-1
620+ $ ,LMAXCONFIGS_USED)
621+ DOUBLE PRECISION PWIDTH_D( 1,-MAX_BRANCH_USED:-1
622+ $ ,LMAXCONFIGS_USED)
623+ INTEGER POW_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
624
625=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%configs_and_props_info.dat'
626--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%configs_and_props_info.dat 2017-05-15 10:39:31 +0000
627+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%configs_and_props_info.dat 2017-11-30 23:06:43 +0000
628@@ -3,4 +3,57 @@
629 # S -> SPROP_D
630 # T -> TPRID_D
631 # M -> PMASS_D/PWIDTH_D
632-# P -> POW_D
633\ No newline at end of file
634+# P -> POW_D
635+#
636+# nFKSprocess 1
637+# Diagram 1 for nFKSprocess 1
638+C 1 1 1
639+F 1 -1 1 2
640+D 5
641+D 4
642+S 1 -1 1 -6
643+F 1 -2 1 2
644+D -1
645+D 3
646+S 1 -2 1 21
647+# Diagram 2 for nFKSprocess 1
648+C 1 2 2
649+F 1 -1 2 2
650+D 5
651+D 4
652+S 1 -1 2 -6
653+F 1 -2 2 2
654+D 1
655+D 3
656+T 1 -2 2 6
657+F 1 -3 2 2
658+D -2
659+D -1
660+# Diagram 3 for nFKSprocess 1
661+C 1 3 3
662+F 1 -1 3 2
663+D 5
664+D 4
665+S 1 -1 3 -6
666+F 1 -2 3 2
667+D 1
668+D -1
669+T 1 -2 3 6
670+F 1 -3 3 2
671+D -2
672+D 3
673+# Number of configs for nFKSprocess 1
674+C 1 0 3
675+#
676+M 1 -1 1 -6
677+P 1 -1 1 1
678+M 1 -2 1 21
679+P 1 -2 1 2
680+M 1 -1 2 -6
681+P 1 -1 2 1
682+M 1 -2 2 6
683+P 1 -2 2 1
684+M 1 -1 3 -6
685+P 1 -1 3 1
686+M 1 -2 3 -6
687+P 1 -2 3 1
688\ No newline at end of file
689
690=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%leshouche_info.dat'
691--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%leshouche_info.dat 2017-05-15 10:39:31 +0000
692+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%leshouche_info.dat 2017-11-30 23:06:43 +0000
693@@ -1,3 +1,10 @@
694 # I -> IDUP_D
695 # M -> MOTHUP_D
696-# C -> ICOLUP_D
697\ No newline at end of file
698+# C -> ICOLUP_D
699+I 1 1 21 21 6 -6 -21
700+M 1 1 1 0 0 1 1 1
701+M 1 2 1 0 0 2 2 2
702+C 1 1 1 501 502 501 0 504
703+C 1 2 1 502 503 0 504 503
704+C 1 1 2 503 501 501 0 504
705+C 1 2 2 502 503 0 504 502
706\ No newline at end of file
707
708=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%ngraphs.inc'
709--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%ngraphs.inc 2015-03-10 08:54:03 +0000
710+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%ngraphs.inc 2017-11-30 23:06:43 +0000
711@@ -1,2 +1,2 @@
712 INTEGER N_MAX_CG
713- PARAMETER (N_MAX_CG=0)
714+ PARAMETER (N_MAX_CG=3)
715
716=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%real_from_born_configs.inc'
717--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%real_from_born_configs.inc 2015-03-10 08:54:03 +0000
718+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%real_from_born_configs.inc 2017-11-30 23:06:43 +0000
719@@ -1,2 +1,3 @@
720 INTEGER IRFBC
721- INTEGER REAL_FROM_BORN_CONF(0,0)
722+ INTEGER REAL_FROM_BORN_CONF(3,1)
723+ DATA (REAL_FROM_BORN_CONF(IRFBC,1),IRFBC=1,3) /1, 2, 3/
724
725=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%configs_and_props_decl.inc'
726--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%configs_and_props_decl.inc 2016-02-27 14:33:01 +0000
727+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%configs_and_props_decl.inc 2017-11-30 23:06:43 +0000
728@@ -1,12 +1,12 @@
729 INTEGER IFR,LMAXCONFIGS_USED,MAX_BRANCH_USED
730- PARAMETER (LMAXCONFIGS_USED= 0)
731- PARAMETER (MAX_BRANCH_USED = 0)
732- INTEGER MAPCONFIG_D( 0,0:LMAXCONFIGS_USED)
733- INTEGER IFOREST_D( 0,2,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
734- INTEGER SPROP_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
735- INTEGER TPRID_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
736- DOUBLE PRECISION PMASS_D( 0,-MAX_BRANCH_USED:-1
737- $ ,LMAXCONFIGS_USED)
738- DOUBLE PRECISION PWIDTH_D( 0,-MAX_BRANCH_USED:-1
739- $ ,LMAXCONFIGS_USED)
740- INTEGER POW_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
741+ PARAMETER (LMAXCONFIGS_USED= 1)
742+ PARAMETER (MAX_BRANCH_USED = 2)
743+ INTEGER MAPCONFIG_D( 1,0:LMAXCONFIGS_USED)
744+ INTEGER IFOREST_D( 1,2,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
745+ INTEGER SPROP_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
746+ INTEGER TPRID_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
747+ DOUBLE PRECISION PMASS_D( 1,-MAX_BRANCH_USED:-1
748+ $ ,LMAXCONFIGS_USED)
749+ DOUBLE PRECISION PWIDTH_D( 1,-MAX_BRANCH_USED:-1
750+ $ ,LMAXCONFIGS_USED)
751+ INTEGER POW_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
752
753=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%configs_and_props_info.dat'
754--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%configs_and_props_info.dat 2017-05-15 10:39:31 +0000
755+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%configs_and_props_info.dat 2017-11-30 23:06:43 +0000
756@@ -3,4 +3,23 @@
757 # S -> SPROP_D
758 # T -> TPRID_D
759 # M -> PMASS_D/PWIDTH_D
760-# P -> POW_D
761\ No newline at end of file
762+# P -> POW_D
763+#
764+# nFKSprocess 1
765+# Diagram 1 for nFKSprocess 1
766+C 1 1 1
767+F 1 -1 1 2
768+D 5
769+D 4
770+S 1 -1 1 -6
771+F 1 -2 1 2
772+D -1
773+D 3
774+S 1 -2 1 21
775+# Number of configs for nFKSprocess 1
776+C 1 0 1
777+#
778+M 1 -1 1 -6
779+P 1 -1 1 1
780+M 1 -2 1 21
781+P 1 -2 1 2
782\ No newline at end of file
783
784=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%leshouche_info.dat'
785--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%leshouche_info.dat 2017-05-15 10:39:31 +0000
786+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%leshouche_info.dat 2017-11-30 23:06:43 +0000
787@@ -1,3 +1,19 @@
788 # I -> IDUP_D
789 # M -> MOTHUP_D
790-# C -> ICOLUP_D
791\ No newline at end of file
792+# C -> ICOLUP_D
793+I 1 1 2 -2 6 -6 -21
794+M 1 1 1 0 0 1 1 1
795+M 1 2 1 0 0 2 2 2
796+C 1 1 1 501 0 502 0 503
797+C 1 2 1 0 501 0 503 502
798+C 1 1 2 502 0 502 0 503
799+C 1 2 2 0 501 0 503 501
800+I 1 2 4 -4 6 -6 -21
801+M 1 1 2 0 0 1 1 1
802+M 1 2 2 0 0 2 2 2
803+I 1 3 1 -1 6 -6 -21
804+M 1 1 3 0 0 1 1 1
805+M 1 2 3 0 0 2 2 2
806+I 1 4 3 -3 6 -6 -21
807+M 1 1 4 0 0 1 1 1
808+M 1 2 4 0 0 2 2 2
809\ No newline at end of file
810
811=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%ngraphs.inc'
812--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%ngraphs.inc 2015-03-10 08:54:03 +0000
813+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%ngraphs.inc 2017-11-30 23:06:43 +0000
814@@ -1,2 +1,2 @@
815 INTEGER N_MAX_CG
816- PARAMETER (N_MAX_CG=0)
817+ PARAMETER (N_MAX_CG=1)
818
819=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%real_from_born_configs.inc'
820--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%real_from_born_configs.inc 2015-03-10 08:54:03 +0000
821+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%real_from_born_configs.inc 2017-11-30 23:06:43 +0000
822@@ -1,2 +1,3 @@
823 INTEGER IRFBC
824- INTEGER REAL_FROM_BORN_CONF(0,0)
825+ INTEGER REAL_FROM_BORN_CONF(1,1)
826+ DATA (REAL_FROM_BORN_CONF(IRFBC,1),IRFBC=1,1) /1/
827
828=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%configs_and_props_decl.inc'
829--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%configs_and_props_decl.inc 2016-02-27 14:33:01 +0000
830+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%configs_and_props_decl.inc 2017-11-30 23:06:43 +0000
831@@ -1,12 +1,12 @@
832 INTEGER IFR,LMAXCONFIGS_USED,MAX_BRANCH_USED
833- PARAMETER (LMAXCONFIGS_USED= 0)
834- PARAMETER (MAX_BRANCH_USED = 0)
835- INTEGER MAPCONFIG_D( 0,0:LMAXCONFIGS_USED)
836- INTEGER IFOREST_D( 0,2,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
837- INTEGER SPROP_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
838- INTEGER TPRID_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
839- DOUBLE PRECISION PMASS_D( 0,-MAX_BRANCH_USED:-1
840- $ ,LMAXCONFIGS_USED)
841- DOUBLE PRECISION PWIDTH_D( 0,-MAX_BRANCH_USED:-1
842- $ ,LMAXCONFIGS_USED)
843- INTEGER POW_D( 0,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
844+ PARAMETER (LMAXCONFIGS_USED= 1)
845+ PARAMETER (MAX_BRANCH_USED = 2)
846+ INTEGER MAPCONFIG_D( 1,0:LMAXCONFIGS_USED)
847+ INTEGER IFOREST_D( 1,2,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
848+ INTEGER SPROP_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
849+ INTEGER TPRID_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
850+ DOUBLE PRECISION PMASS_D( 1,-MAX_BRANCH_USED:-1
851+ $ ,LMAXCONFIGS_USED)
852+ DOUBLE PRECISION PWIDTH_D( 1,-MAX_BRANCH_USED:-1
853+ $ ,LMAXCONFIGS_USED)
854+ INTEGER POW_D( 1,-MAX_BRANCH_USED:-1,LMAXCONFIGS_USED)
855
856=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%configs_and_props_info.dat'
857--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%configs_and_props_info.dat 2017-05-15 10:39:31 +0000
858+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%configs_and_props_info.dat 2017-11-30 23:06:43 +0000
859@@ -3,4 +3,23 @@
860 # S -> SPROP_D
861 # T -> TPRID_D
862 # M -> PMASS_D/PWIDTH_D
863-# P -> POW_D
864\ No newline at end of file
865+# P -> POW_D
866+#
867+# nFKSprocess 1
868+# Diagram 1 for nFKSprocess 1
869+C 1 1 1
870+F 1 -1 1 2
871+D 5
872+D 4
873+S 1 -1 1 -6
874+F 1 -2 1 2
875+D -1
876+D 3
877+S 1 -2 1 21
878+# Number of configs for nFKSprocess 1
879+C 1 0 1
880+#
881+M 1 -1 1 -6
882+P 1 -1 1 1
883+M 1 -2 1 21
884+P 1 -2 1 2
885\ No newline at end of file
886
887=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%leshouche_info.dat'
888--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%leshouche_info.dat 2017-05-15 10:39:31 +0000
889+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%leshouche_info.dat 2017-11-30 23:06:43 +0000
890@@ -1,3 +1,19 @@
891 # I -> IDUP_D
892 # M -> MOTHUP_D
893-# C -> ICOLUP_D
894\ No newline at end of file
895+# C -> ICOLUP_D
896+I 1 1 -2 2 6 -6 -21
897+M 1 1 1 0 0 1 1 1
898+M 1 2 1 0 0 2 2 2
899+C 1 1 1 0 501 502 0 503
900+C 1 2 1 501 0 0 503 502
901+C 1 1 2 0 502 502 0 503
902+C 1 2 2 501 0 0 503 501
903+I 1 2 -4 4 6 -6 -21
904+M 1 1 2 0 0 1 1 1
905+M 1 2 2 0 0 2 2 2
906+I 1 3 -1 1 6 -6 -21
907+M 1 1 3 0 0 1 1 1
908+M 1 2 3 0 0 2 2 2
909+I 1 4 -3 3 6 -6 -21
910+M 1 1 4 0 0 1 1 1
911+M 1 2 4 0 0 2 2 2
912\ No newline at end of file
913
914=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%ngraphs.inc'
915--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%ngraphs.inc 2015-03-10 08:54:03 +0000
916+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%ngraphs.inc 2017-11-30 23:06:43 +0000
917@@ -1,2 +1,2 @@
918 INTEGER N_MAX_CG
919- PARAMETER (N_MAX_CG=0)
920+ PARAMETER (N_MAX_CG=1)
921
922=== modified file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%real_from_born_configs.inc'
923--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%real_from_born_configs.inc 2015-03-10 08:54:03 +0000
924+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%real_from_born_configs.inc 2017-11-30 23:06:43 +0000
925@@ -1,2 +1,3 @@
926 INTEGER IRFBC
927- INTEGER REAL_FROM_BORN_CONF(0,0)
928+ INTEGER REAL_FROM_BORN_CONF(1,1)
929+ DATA (REAL_FROM_BORN_CONF(IRFBC,1),IRFBC=1,1) /1/
930
931=== added file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%genps.inc.moved'
932--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%genps.inc.moved 1970-01-01 00:00:00 +0000
933+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%genps.inc.moved 2017-11-30 23:06:43 +0000
934@@ -0,0 +1,4 @@
935+ INCLUDE 'maxparticles.inc'
936+ INCLUDE 'maxconfigs.inc'
937+ INTEGER MAXPROC,NGRAPHS,NCOLOR,MAXFLOW
938+ PARAMETER (MAXPROC=4,NGRAPHS=3,NCOLOR=2,MAXFLOW=6)
939
940=== added file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%genps.inc.moved'
941--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%genps.inc.moved 1970-01-01 00:00:00 +0000
942+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%genps.inc.moved 2017-11-30 23:06:43 +0000
943@@ -0,0 +1,4 @@
944+ INCLUDE 'maxparticles.inc'
945+ INCLUDE 'maxconfigs.inc'
946+ INTEGER MAXPROC,NGRAPHS,NCOLOR,MAXFLOW
947+ PARAMETER (MAXPROC=4,NGRAPHS=1,NCOLOR=2,MAXFLOW=4)
948
949=== added file 'tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%genps.inc.moved'
950--- tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%genps.inc.moved 1970-01-01 00:00:00 +0000
951+++ tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%genps.inc.moved 2017-11-30 23:06:43 +0000
952@@ -0,0 +1,4 @@
953+ INCLUDE 'maxparticles.inc'
954+ INCLUDE 'maxconfigs.inc'
955+ INTEGER MAXPROC,NGRAPHS,NCOLOR,MAXFLOW
956+ PARAMETER (MAXPROC=4,NGRAPHS=1,NCOLOR=2,MAXFLOW=4)
957
958=== modified file 'tests/unit_tests/iolibs/test_export_fks.py'
959--- tests/unit_tests/iolibs/test_export_fks.py 2016-08-31 20:35:13 +0000
960+++ tests/unit_tests/iolibs/test_export_fks.py 2017-11-30 23:06:43 +0000
961@@ -92,6 +92,53 @@
962 self.assertEqual(old_l, new_l)
963
964
965+ def test_wj_loonly_gen(self):
966+ """check that the new (memory and cpu efficient) and old generation
967+ mode at NLO give the same results for p p > w j [LOonly=QCD]
968+ """
969+ path = tempfile.mkdtemp('', 'TMPWTest', None)
970+
971+ def run_cmd(cmd):
972+ interface.exec_cmd(cmd, errorhandling=False, printcmd=False,
973+ precmd=True, postcmd=True)
974+
975+ interface = MGCmd.MasterCmd()
976+
977+ run_cmd('generate p p > w+ j [LOonly=QCD]')
978+ run_cmd('output %s' % os.path.join(path, 'W-oldway'))
979+ run_cmd('set low_mem_multicore_nlo_generation True')
980+ run_cmd('generate p p > w+ j [LOonly=QCD]')
981+ run_cmd('output %s' % os.path.join(path, 'W-newway'))
982+ run_cmd('set low_mem_multicore_nlo_generation False')
983+
984+ # the P0 dirs
985+ for oldf in \
986+ (glob.glob(os.path.join(path, 'W-oldway', 'SubProcesses', 'P0*', '*.inc')) + \
987+ glob.glob(os.path.join(path, 'W-oldway', 'SubProcesses', 'P0*', '*.f')) + \
988+ [os.path.join(path, 'W-oldway', 'SubProcesses', 'proc_characteristics')]):
989+
990+ if os.path.islink(oldf):
991+ continue
992+
993+ newf = oldf.replace('oldway', 'newway')
994+
995+ for old_l, new_l in zip(open(oldf), open(newf)):
996+ self.assertEqual(old_l, new_l)
997+
998+ # the V0 dirs
999+ for oldf in \
1000+ (glob.glob(os.path.join(path, 'W-oldway', 'SubProcesses', 'P0*', 'V0*', '*.inc')) + \
1001+ glob.glob(os.path.join(path, 'W-oldway', 'SubProcesses', 'P0*', 'V0*', '*.f'))):
1002+
1003+ if os.path.islink(oldf):
1004+ continue
1005+
1006+ newf = oldf.replace('oldway', 'newway')
1007+
1008+ for old_l, new_l in zip(open(oldf), open(newf)):
1009+ self.assertEqual(old_l, new_l)
1010+
1011+
1012 def test_w_nlo_gen_gosam(self):
1013 """check that the new generation mode works when gosam is set
1014 for p p > w [QCD]

Subscribers

People subscribed via source and target branches

to all changes: