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

Proposed by Johan Alwall
Status: Merged
Merged at revision: 172
Proposed branch: lp:~maddevelopers/mg5amcnlo/fix_4F_matching
Merge into: lp:~madteam/mg5amcnlo/trunk
Diff against target: 24022 lines (+10069/-8966)
28 files modified
Template/Source/setrun.f (+2/-0)
Template/SubProcesses/addmothers.f (+145/-56)
Template/SubProcesses/cluster.f (+106/-60)
Template/SubProcesses/cluster.inc (+6/-4)
Template/SubProcesses/cuts.f (+14/-5)
Template/SubProcesses/initcluster.f (+11/-7)
Template/SubProcesses/makefile (+5/-4)
Template/SubProcesses/myamp.f (+67/-33)
Template/SubProcesses/reweight.f (+435/-251)
Template/SubProcesses/setcuts.f (+2/-2)
Template/SubProcesses/setscales.f (+1/-0)
Template/SubProcesses/status (+0/-1)
Template/SubProcesses/symmetry.f (+4/-4)
Template/SubProcesses/unwgt.f (+4/-1)
Template/bin/survey (+4/-0)
UpdateNotes.txt (+45/-1)
madgraph/VERSION (+2/-2)
madgraph/core/base_objects.py (+11/-2)
madgraph/core/diagram_generation.py (+24/-14)
madgraph/core/helas_objects.py (+35/-23)
madgraph/iolibs/export_v4.py (+64/-4)
madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc (+7/-7)
tests/acceptance_tests/test_cmd.py (+8/-0)
tests/input_files/e+e-_e+e-.pkl (+8427/-8406)
tests/unit_tests/core/test_base_objects.py (+4/-2)
tests/unit_tests/core/test_diagram_generation.py (+127/-13)
tests/unit_tests/core/test_helas_objects.py (+229/-8)
tests/unit_tests/iolibs/test_export_v4.py (+280/-56)
To merge this branch: bzr merge lp:~maddevelopers/mg5amcnlo/fix_4F_matching
Reviewer Review Type Date Requested Status
Olivier Mattelaer Approve
Review via email: mp+75882@code.launchpad.net

Description of the change

JA: Use model information to determine color of particles
                      for reweighting and propagator color info.
                  JA: Enable proper 4-flavor matching (such as gg>hbb~+jets)
                      Note that you need the Pythia/PGS package v. 2.1.9 or
                      later to use with 4F matching.
                      Changes include: alpha_s reweighting also for b vertices,
                      new scale treatment (mu_F for pp>hbb~ is (pT_b^max m_Th)),
                      no clustering of gluons to final-state massive particles
                      in MadEvent.
                  JA: Fixed pdf reweighting for matching, which due to a mistake
                      had never been activated
                  JA: Improved phase space integration presetting further by
                      taking into account special cuts like xpt, ht etc.
    JA: Ensure that factorization scale settings and matching works
                      also in singlet t-channel exchange processes like
                      single top and VBF.
                  JA: Introduce new convention for invariant mass cuts
                      - if max < min, exclude intermediate range
                      (allows to exclude W/Z dijet resonances in VBF processes)

To post a comment you must log in.
180. By Johan Alwall

Fixed abs(particle id) for t-channel particles in get_color

181. By Johan Alwall

Offset Pythia PARP(67)=4 for singlet t-channel exchange processes

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

Hi Johan,

This is very good as usual, this is few points open for discussion.
Even if I would strongly suggest to include some of the remarqs, I already put this as ready for merge. Since I will probably not be online for a week don't wait for me anymore for a second approval.

concerning the get_color, I have few questions:
1) Why define it in each Subprocess directory and not model basis (restricted to those used off course)
2) If this is for speed issue (avoid too long list) then I would avoid to order them. (the one comming from the leg are more probable than those of the propagators and even more than flipped sign).
3) concerning your last modifications, i.e.:
abs_ids = set([abs(i) for i in wf_ids])
1) you should add a comment in the code explaining why you are doing that
2) add a test for checking this specific problem

concerning:
JA: Introduce new convention for invariant mass cuts
                      - if max < min, exclude intermediate range
                      (allows to exclude W/Z dijet resonances in VBF processes)
Did you include a comment on this on the wiki?

concerning:
      write(*,*)'Error:Color combination',da_color(1),da_color(2),
     $ '->',mo_color,' not implemented in addmothers.f'
This might be written a HUGE number of times shouldn't we
1) Put a limit to this number of print (or why not a critical error?)
2) Put a warning at the generation level in case if we have interactions with un-supported color interactions?

concerning the removal of the following lines
c Remove propagator if "decay" to same particle (i.e. radiation of g/gamma/higgs)
...
c Always remove if daughter final-state or already removed for this reason
...
c Else remove either this resonance or daughter, which is closer to mass shell

Why did you remove those lines. I also remark that the lines removing the propagator if he is too-offshell is commented. If this normal?

As I said before, I didn't check carefully the matching modification, but just read the modifications of the code.

Also all the parralel test are not working anymore. This should be fixed. This forbids all basic checks. If you want I can work on this for PyMadEvent. (With maybe a re-definition of the parralel tests suite.

review: Approve
Revision history for this message
Johan Alwall (johan-alwall) wrote :
Download full text (3.2 KiB)

Hi Olivier,

> Even if I would strongly suggest to include some of the remarqs, I already put
> this as ready for merge. Since I will probably not be online for a week don't
> wait for me anymore for a second approval.

Thanks as usual for your excellent points. I'll answer them below, then we can check if we want to include them later.

> concerning the get_color, I have few questions:
> 1) Why define it in each Subprocess directory and not model basis (restricted
> to those used off course)

I was thinking about putting it in the MODEL directory with all particles, but there are two reasons not to: 1) some models might have huge number of particles -> slower execution, 2) I don't want to change the v4 model files (in particular we'd need to modify the makefile if nothing else). We could put it in SubProcesses, but it seemed easier (and slightly more efficient) to just put it in each subprocess directory. I checked that the time to generate the file is truly negligible.

> 2) If this is for speed issue (avoid too long list) then I would avoid to
> order them. (the one comming from the leg are more probable than those of the
> propagators and even more than flipped sign).

Good point - however most processes have a very limited number of particles, so it shouldn't make a big difference. So I preferred to stick to better readability.

> 3) concerning your last modifications, i.e.:
> abs_ids = set([abs(i) for i in wf_ids])
> 1) you should add a comment in the code explaining why you are doing that
> 2) add a test for checking this specific problem

Ok will do.

> concerning:
> JA: Introduce new convention for invariant mass cuts
> - if max < min, exclude intermediate range
> (allows to exclude W/Z dijet resonances in VBF
> processes)
> Did you include a comment on this on the wiki?

Where on the wiki? Point me and I'll be happy to add it.

> concerning:
> write(*,*)'Error:Color combination',da_color(1),da_color(2),
> $ '->',mo_color,' not implemented in addmothers.f'
> This might be written a HUGE number of times shouldn't we
> 1) Put a limit to this number of print (or why not a critical error?)
> 2) Put a warning at the generation level in case if we have interactions with
> un-supported color interactions?

Ok I'll implement that it's written into the error file.

> concerning the removal of the following lines
> c Remove propagator if "decay" to same particle (i.e. radiation of
> g/gamma/higgs)
> ...
> c Always remove if daughter final-state or already removed for this reason
> ...
> c Else remove either this resonance or daughter, which is closer to mass shell
>
> Why did you remove those lines. I also remark that the lines removing the
> propagator if he is too-offshell is commented. If this normal?

This is now all done in myamp.f (where OnBW is defined). So it shouldn't be done again in addmothers.f.

> As I said before, I didn't check carefully the matching modification, but just
> read the modifications of the code.
>
> Also all the parralel test are not working anymore. This should be fixed. This
> forbids all basic checks. If you want I can work on this for PyMadEvent. (With
...

Read more...

182. By Johan Alwall

Added test for abs() in get_color.f

183. By Johan Alwall

Stop execution if color combination not implemented in addmothers.f

184. By Johan Alwall

Set ptclus for non-matching particles to sqrt(s) (i.e., particles from t-channel color singlet exchange or decays), so Pythia knows not to include them in matching

185. By Johan Alwall

Fix bug for 2->1 processes

186. By Johan Alwall

Fixed some minor issues

187. By Johan Alwall

Change definition for forbidden s-channels to only exclude onshell s-channels at runtime.

188. By Johan Alwall

Updated UpdateNotes.txt

189. By Johan Alwall

It turns out that not only abs(pdg) is needed by get_color but all antipdg codes

190. By Johan Alwall

Updated UpdateNotes. Changed Pythia PS scale to max(scales) instead of average (seems to give better matching both in single top and in Higgs VBF). Also removed factor 1/2 to offset PARP(67) for t-channel singlet exchange, since it doesn't give obviously better results but slightly complicates the code.

191. By Johan Alwall

Merged with the latest version of trunk (v 1.3.17)

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

Hi Johan,

# Use from_group = None to indicate that this s-channel is forbidden
newleg = copy.copy(vert.get('legs').pop(-1))
newleg.set('from_group', None)

I don't really like to re-use from_group. This is in some sense nice because, you limit the use of RAM, but I'm worry about readability of the code (especially in the future)
from_group name is not related at all with forbiden s-channel, so this is quite confusing.
In fact, it will be nicer (but may be harder) to include this in state. Indeed, this variable is nothing else that the fact that the particle is in T or S channel. So it might be natural to modify that variable. Another Solution is to create a new object.

This is off course a point open to discussion. What's your opinion?

Cheers,

Olivier

review: Needs Information
Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hello Olivier,

> I don't really like to re-use from_group. This is in some sense nice because, you limit the use of RAM, but I'm worry about readability of the code (especially in the future)
> from_group name is not related at all with forbiden s-channel, so this is quite confusing.
> In fact, it will be nicer (but may be harder) to include this in state. Indeed, this variable is nothing else that the fact that the particle is in T or S channel. So it might be natural to modify that variable. Another Solution is to create a new object.

The most natural would be to have an "onshell" flag for leg (just as
we have for wavefunctions). I'm just worried about memory, since legs
tend to be the most proliferous objects in the code. But if you really
prefer, I'll do that instead.

Cheers,
Johan

192. By Johan Alwall

Removed the use of from_group in Leg to denote forbidden onshell/decay legs, instead use new flag onshell

193. By Johan Alwall

Included mention in UpdateNotes.txt of the special process p p > t b~ j $ w+ w- t~ + p p > t b~ j j $ w+ w- t~, where MAXJETS=1 must be set in the pythia_card.dat

194. By Johan Alwall

F**k I intruduced stupidity when trying to fix the inevitable problem due to the stupid e+e-_e+e-.pkl file before I realized what the problem was. Fixed.

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hi Olivier,

I have removed the reuse of from_group and instead use a new flag, "onshell" (rev. 192+194). Please let me know what you think. I'm ready to merge this tomorrow.

Cheers,
Johan

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

Perfect,

Just one thing, but this might be done/test later (I'm not 100 percent sure that this is possible) but couldn't we remove completely from_group

I mean something like:
for leg in all_legs:
    del leg['from_group']

With a fast grep it looks like a possible thing to do.
But I propose that for a future release.

Thanksa lot,

Olivier

review: Approve
Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hi Olivier,

> Just one thing, but this might be done/test later (I'm not 100 percent sure that this is possible) but couldn't we remove completely from_group?

It should give an equivalent memory improvement to simply set it to
None after diagram generation, right? That would be less confusing and
less risk for problems later on I think.

Cheers,
Johan

195. By Johan Alwall

Stop execution if clustering fails (since this indicates a critical bug)

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

Hi Johan,

> Hi Olivier,
>
>> Just one thing, but this might be done/test later (I'm not 100
>> percent sure that this is possible) but couldn't we remove
>> completely from_group?
>
> It should give an equivalent memory improvement to simply set it to
> None after diagram generation, right? That would be less confusing and
> less risk for problems later on I think.

This is not clear for me at all, and depend too much of the internal
optimization of python. So we might try to test it in order to be sure.

Cheers,

Olivier
On 04-oct.-11, at 22:14, Johan Alwall wrote:

> Hi Olivier,
>
>> Just one thing, but this might be done/test later (I'm not 100
>> percent sure that this is possible) but couldn't we remove
>> completely from_group?
>
> It should give an equivalent memory improvement to simply set it to
> None after diagram generation, right? That would be less confusing and
> less risk for problems later on I think.
>
> Cheers,
> Johan
>
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/fix_4F_matching/
> +merge/75882
> You are reviewing the proposed merge of lp:~maddevelopers/madgraph5/
> fix_4F_matching into lp:madgraph5.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Template/Source/setrun.f'
2--- Template/Source/setrun.f 2011-06-01 21:40:33 +0000
3+++ Template/Source/setrun.f 2011-10-05 03:29:23 +0000
4@@ -58,6 +58,7 @@
5 integer mothup(2,nexternal)
6 integer icolup(2,nexternal,maxflow,maxsproc)
7 include 'leshouche.inc'
8+ data pdfwgt/.false./
9 c
10 c
11 c
12@@ -312,6 +313,7 @@
13
14 if(ickkw.gt.0)then
15 call get_real (npara,param,value," alpsfact " ,alpsfact , 1d0)
16+ call get_logical (npara,param,value," pdfwgt " ,pdfwgt , .true.)
17 endif
18 if(ickkw.eq.2)then
19 call get_integer(npara,param,value," highestmult " ,nhmult, 0)
20
21=== modified file 'Template/SubProcesses/addmothers.f'
22--- Template/SubProcesses/addmothers.f 2011-09-11 13:02:35 +0000
23+++ Template/SubProcesses/addmothers.f 2011-10-05 03:29:23 +0000
24@@ -6,10 +6,10 @@
25 include 'maxconfigs.inc'
26 include 'nexternal.inc'
27 include 'coupl.inc'
28+ include 'maxamps.inc'
29 include 'cluster.inc'
30 include 'message.inc'
31 include 'run.inc'
32- include 'maxamps.inc'
33
34 integer jpart(7,-nexternal+3:2*nexternal-3),npart,ip,numproc
35 double precision pb(0:4,-nexternal+3:2*nexternal-3)
36@@ -18,6 +18,7 @@
37
38 integer isym(nexternal,99), jsym
39 integer i,j,k,ida(2),ns,nres,ires,icl,ito2,idenpart,nc,ic
40+ integer mo_color,da_color(2),itmp
41 integer ito(-nexternal+3:nexternal),iseed,maxcolor
42 integer icolalt(2,-nexternal+3:2*nexternal-3)
43 double precision qicl(-nexternal+3:2*nexternal-3), factpm
44@@ -66,8 +67,9 @@
45 c common/to_colstats/ncols,ncolflow,ncolalt,icorg
46
47 double precision pt
48+ integer get_color
49 real ran1
50- external pt,ran1
51+ external pt,ran1,get_color
52
53 if (first_time) then
54 include 'props.inc'
55@@ -121,8 +123,8 @@
56 if(ic.gt.0) then
57 icolalt(1,isym(i,jsym))=icolup(1,i,ic,numproc)
58 icolalt(2,isym(i,jsym))=icolup(2,i,ic,numproc)
59- if (icolup(1,i,ic, numproc).gt.maxcolor) maxcolor=icolup(1,i,ic, numproc)
60- if (icolup(2,i,ic, numproc).gt.maxcolor) maxcolor=icolup(2,i,ic, numproc)
61+ if (abs(icolup(1,i,ic, numproc)).gt.maxcolor) maxcolor=icolup(1,i,ic, numproc)
62+ if (abs(icolup(2,i,ic, numproc)).gt.maxcolor) maxcolor=icolup(2,i,ic, numproc)
63 endif
64 enddo
65
66@@ -182,60 +184,133 @@
67 c jpart(6,i)=3
68 c nres=nres-1
69 c endif
70-c Remove propagator if "decay" to same particle (i.e. radiation of g/gamma/higgs)
71- if(jpart(6,i).eq.2 .and. (jpart(1,i).eq.jpart(1,ida(1)).or.
72- $ jpart(1,i).eq.jpart(1,ida(2)))) then
73- if(jpart(1,i).eq.jpart(1,ida(1))) idenpart=ida(1)
74- if(jpart(1,i).eq.jpart(1,ida(2))) idenpart=ida(2)
75-c Always remove if daughter final-state or already removed for this reason
76- if(idenpart.gt.0.or.jpart(6,idenpart).eq.4) then
77- jpart(6,i)=4
78- nres=nres-1
79-c Else remove either this resonance or daughter, which is closer to mass shell
80- elseif(abs(pb(4,i)-pmass(i,iconfig)).gt.
81- $ abs(pb(4,idenpart)-pmass(i,iconfig))) then
82- jpart(6,i)=4
83- nres=nres-1
84- else if(jpart(6,idenpart).eq.2) then
85- jpart(6,idenpart)=4
86- nres=nres-1
87- endif
88- endif
89 c Set color info for all s-channels
90-c Fist set "safe" color info
91- if(icolalt(1,ida(1))+icolalt(1,ida(2))-
92- $ icolalt(2,ida(1))-icolalt(2,ida(2)).eq.0) then ! color singlet
93- icolalt(1,i) = 0
94- icolalt(2,i) = 0
95- elseif(icolalt(1,ida(1))-icolalt(2,ida(2)).eq.0) then ! 3bar 3 -> 8 or 8 8 -> 8
96- icolalt(1,i) = icolalt(1,ida(2))
97- icolalt(2,i) = icolalt(2,ida(1))
98- else if(icolalt(1,ida(2))-icolalt(2,ida(1)).eq.0) then ! 3 3bar -> 8 or 8 8 -> 8
99- icolalt(1,i) = icolalt(1,ida(1))
100- icolalt(2,i) = icolalt(2,ida(2))
101- else if(icolalt(1,ida(1)).eq.0.and.icolalt(2,ida(1)).eq.0) then ! 1 3/8 -> 3/8
102- icolalt(1,i) = icolalt(1,ida(2))
103- icolalt(2,i) = icolalt(2,ida(2))
104- else if(icolalt(1,ida(2)).eq.0.and.icolalt(2,ida(2)).eq.0) then ! 3/8 1 -> 3/8
105- icolalt(1,i) = icolalt(1,ida(1))
106- icolalt(2,i) = icolalt(2,ida(1))
107- else if(icolalt(1,ida(2)).gt.0.and.icolalt(1,ida(1)).gt.0.and.
108- $ icolalt(2,ida(2)).le.0.and.icolalt(2,ida(1)).le.0) then ! sextet
109- maxcolor=maxcolor+1
110- icolalt(1,i) = maxcolor
111- icolalt(2,i) = 0
112- else if(icolalt(2,ida(2)).gt.0.and.icolalt(2,ida(1)).gt.0.and.
113- $ icolalt(1,ida(2)).le.0.and.icolalt(1,ida(1)).le.0) then ! antisextet
114- maxcolor=maxcolor+1
115- icolalt(1,i) = 0
116- icolalt(2,i) = maxcolor
117- else if(jpart(6,i).ge.3) then ! Don't need to match
118- icolalt(1,i) = icolalt(1,ida(1))+icolalt(1,ida(2))
119- icolalt(2,i) = icolalt(2,ida(1))+icolalt(2,ida(2))
120+ mo_color = get_color(jpart(1,i))
121+ da_color(1) = get_color(jpart(1,ida(1)))
122+ da_color(2) = get_color(jpart(1,ida(2)))
123+ if(da_color(2).lt.da_color(1))then
124+c Order daughters according to color
125+ itmp=ida(1)
126+ ida(1)=ida(2)
127+ ida(2)=itmp
128+ itmp=da_color(1)
129+ da_color(1)=da_color(2)
130+ da_color(2)=itmp
131+ endif
132+c print *,'graph: ',iconfig
133+c print *,'Resonance: ',i,' daughters ',ida(1),ida(2),
134+c $ ' ids ',jpart(1,i),jpart(1,ida(1)),jpart(1,ida(2)),
135+c $ ' colors ',mo_color,da_color(1),da_color(2)
136+
137+ if(mo_color.eq.1) then ! color singlet
138+ icolalt(1,i) = 0
139+ icolalt(2,i) = 0
140+ elseif(mo_color.eq.-3) then ! color anti-triplet
141+ icolalt(1,i) = 0
142+ if(da_color(1).eq.-3.and.da_color(2).eq.1)then
143+ icolalt(2,i) = icolalt(2,ida(1))
144+ elseif(da_color(1).eq.-3.and.da_color(2).eq.8)then
145+ icolalt(2,i) = icolalt(2,ida(2))
146+ elseif(da_color(1).eq.-6.and.da_color(2).eq.3)then
147+ if(-icolalt(1,ida(1)).eq.icolalt(1,ida(2)))then
148+ icolalt(2,i) = icolalt(2,ida(1))
149+ else
150+ icolalt(2,i) = -icolalt(1,ida(1))
151+ endif
152+ elseif(da_color(1).eq.3.and.da_color(2).eq.3)then
153+ maxcolor=maxcolor+1
154+ icolalt(2,i) = maxcolor
155+ else
156+ call write_error(da_color(1), da_color(2), mo_color)
157+ endif
158+ elseif(mo_color.eq.3) then ! color triplet
159+ icolalt(2,i) = 0
160+ if(da_color(1).eq.1.and.da_color(2).eq.3)then
161+ icolalt(1,i) = icolalt(1,ida(2))
162+ elseif(da_color(1).eq.3.and.da_color(2).eq.8)then
163+ icolalt(1,i) = icolalt(1,ida(2))
164+ elseif(da_color(1).eq.-3.and.da_color(2).eq.6)then
165+ if(icolalt(2,ida(1)).eq.icolalt(1,ida(2)))then
166+ icolalt(1,i) = -icolalt(2,ida(2))
167+ else
168+ icolalt(1,i) = icolalt(1,ida(2))
169+ endif
170+ elseif(da_color(1).eq.-3.and.da_color(2).eq.-3)then
171+ maxcolor=maxcolor+1
172+ icolalt(1,i) = maxcolor
173+ else
174+ call write_error(da_color(1), da_color(2), mo_color)
175+ endif
176+ elseif(mo_color.eq.-6) then ! color anti-sextet
177+ if(da_color(1).eq.-6.and.da_color(2).eq.1)then
178+ icolalt(1,i) = icolalt(1,ida(1))
179+ icolalt(2,i) = icolalt(2,ida(1))
180+ elseif(da_color(1).eq.-6.and.da_color(2).eq.8)then
181+ if(icolalt(2,ida(1)).eq.icolalt(1,ida(2)))then
182+ icolalt(1,i) = icolalt(1,ida(1))
183+ icolalt(2,i) = icolalt(2,ida(2))
184+ else
185+ icolalt(1,i) = -icolalt(2,ida(2))
186+ icolalt(2,i) = icolalt(2,ida(1))
187+ endif
188+ elseif(da_color(1).eq.-3.and.da_color(2).eq.-3)then
189+ icolalt(1,i) = -icolalt(2,ida(1))
190+ icolalt(2,i) = icolalt(2,ida(2))
191+ else
192+ call write_error(da_color(1), da_color(2), mo_color)
193+ endif
194+ elseif(mo_color.eq.6) then ! color sextet
195+ if(da_color(1).eq.1.and.da_color(2).eq.6)then
196+ icolalt(1,i) = icolalt(1,ida(2))
197+ icolalt(2,i) = icolalt(2,ida(2))
198+ elseif(da_color(1).eq.6.and.da_color(2).eq.8)then
199+ if(icolalt(1,ida(1)).eq.icolalt(2,ida(2)))then
200+ icolalt(1,i) = icolalt(1,ida(2))
201+ icolalt(2,i) = icolalt(2,ida(1))
202+ else
203+ icolalt(1,i) = icolalt(1,ida(1))
204+ icolalt(2,i) = -icolalt(1,ida(2))
205+ endif
206+ elseif(da_color(1).eq.3.and.da_color(2).eq.3)then
207+ icolalt(1,i) = icolalt(1,ida(1))
208+ icolalt(2,i) = -icolalt(1,ida(2))
209+ else
210+ call write_error(da_color(1), da_color(2), mo_color)
211+ endif
212+ elseif(mo_color.eq.8) then ! color octet
213+ if(da_color(1).eq.-3.and.da_color(2).eq.3)then
214+ icolalt(1,i) = icolalt(1,ida(2))
215+ icolalt(2,i) = icolalt(2,ida(1))
216+ elseif(da_color(1).eq.1.and.da_color(2).eq.8)then
217+ icolalt(1,i) = icolalt(1,ida(2))
218+ icolalt(2,i) = icolalt(2,ida(2))
219+ elseif(da_color(1).eq.8.and.da_color(2).eq.8)then
220+ if(icolalt(1,ida(1)).eq.icolalt(2,ida(2)))then
221+ icolalt(1,i) = icolalt(1,ida(2))
222+ icolalt(2,i) = icolalt(2,ida(1))
223+ else
224+ icolalt(1,i) = icolalt(1,ida(1))
225+ icolalt(2,i) = icolalt(2,ida(2))
226+ endif
227+ elseif(da_color(1).eq.-6.and.da_color(2).eq.6)then
228+ if(-icolalt(1,ida(1)).eq.icolalt(1,ida(2)))then
229+ icolalt(1,i) = -icolalt(1,ida(2))
230+ icolalt(2,i) = icolalt(2,ida(1))
231+ elseif(icolalt(1,ida(1)).eq.icolalt(2,ida(2)))then
232+ icolalt(1,i) = icolalt(1,ida(2))
233+ icolalt(2,i) = icolalt(2,ida(1))
234+ elseif(icolalt(2,ida(1)).eq.icolalt(1,ida(2)))then
235+ icolalt(1,i) = -icolalt(2,ida(2))
236+ icolalt(2,i) = -icolalt(1,ida(1))
237+ else
238+ icolalt(1,i) = icolalt(1,ida(2))
239+ icolalt(2,i) = -icolalt(1,ida(1))
240+ endif
241+ else
242+ call write_error(da_color(1), da_color(2), mo_color)
243+ endif
244 else
245-c Erraneous color assignment for propagator - set color to 0
246- icolalt(1,i) = 0
247- icolalt(2,i) = 0
248+ call write_error(da_color(1), da_color(2), mo_color)
249 endif
250 c Set tentative mothers
251 jpart(2,i) = 1
252@@ -295,3 +370,17 @@
253
254 return
255 end
256+
257+ subroutine write_error(ida1,ida2,imo)
258+ implicit none
259+ integer ida1,ida2,imo
260+
261+ open(unit=26,file='../../../error',status='unknown',err=999)
262+ write(26,*) 'Error: Color combination ',ida1,ida2,
263+ $ '->',imo,' not implemented in addmothers.f'
264+ write(*,*) 'Error: Color combination ',ida1,ida2,
265+ $ '->',imo,' not implemented in addmothers.f'
266+ stop
267+
268+ 999 write(*,*) 'error'
269+ end
270
271=== modified file 'Template/SubProcesses/cluster.f'
272--- Template/SubProcesses/cluster.f 2011-08-27 21:03:09 +0000
273+++ Template/SubProcesses/cluster.f 2011-10-05 03:29:23 +0000
274@@ -166,21 +166,22 @@
275 end
276
277
278- subroutine filprp(ignum,idij)
279+ subroutine filprp(iproc,ignum,idij)
280 c**************************************************************************
281 c Include graph ignum in list for propagator idij
282 c**************************************************************************
283 implicit none
284 include 'nexternal.inc'
285+ include 'maxamps.inc'
286 include 'cluster.inc'
287- integer ignum, idij, i
288+ integer ignum, idij, iproc, i
289
290 if(idij.gt.n_max_cl) return
291- do i=1,id_cl(idij,0)
292- if (id_cl(idij,i).eq.ignum) return
293+ do i=1,id_cl(iproc,idij,0)
294+ if (id_cl(iproc,idij,i).eq.ignum) return
295 enddo
296- id_cl(idij,0)=id_cl(idij,0)+1
297- id_cl(idij,id_cl(idij,0))=ignum
298+ id_cl(iproc,idij,0)=id_cl(iproc,idij,0)+1
299+ id_cl(iproc,idij,id_cl(iproc,idij,0))=ignum
300 c print *,'Adding graph ',ignum,' to prop ',idij
301 return
302 end
303@@ -200,9 +201,10 @@
304 include 'genps.inc'
305 include 'maxconfigs.inc'
306 include 'nexternal.inc'
307+ include 'maxamps.inc'
308 include 'cluster.inc'
309 include 'coupl.inc'
310- include 'maxamps.inc'
311+ include 'message.inc'
312 integer ignum, ipnum, ipids(nexternal,4,2:nexternal)
313 C $B$ IFOREST $B$ !this is a tag for MadWeight
314 integer i, iforest(2,-max_branch:-1,lmaxconfigs)
315@@ -214,9 +216,8 @@
316 INTEGER n_max_cl_cg
317 PARAMETER (n_max_cl_cg=n_max_cl*n_max_cg)
318 data resmap/n_max_cl_cg*.false./
319-
320
321- Integer j, k, l, icmp(2)
322+ Integer j, k, l, icmp(2), iproc
323
324 double precision ZERO
325 parameter (ZERO=0d0)
326@@ -228,21 +229,24 @@
327 data first_time /.true./
328
329 integer combid
330- external combid
331+ logical isjet
332+ external combid,isjet
333
334 if (first_time) then
335 include 'props.inc'
336 first_time=.false.
337 endif
338
339-c write(*,*) 'graph,level,iupdown: ',ignum,ipnum,iupdown
340+ if(btest(mlevel,4))
341+ $ write(*,*) 'graph,level: ',ignum,ipnum
342
343 filgrp=.false.
344 C Follow diagram tree down to last clustering
345 do i=1,ipnum
346 do j=i+1,ipnum
347-c write(*,*)'at ids (',ipids(i,1,ipnum),',',ipids(i,2,ipnum),'), (',
348-c & ipids(j,1,ipnum),',',ipids(j,2,ipnum),'), ',i,j
349+ if(btest(mlevel,4))
350+ $ write(*,*)'at ids (',ipids(i,1,ipnum),',',ipids(i,2,ipnum),'), (',
351+ $ ipids(j,1,ipnum),',',ipids(j,2,ipnum),'), ',i,j
352 do k=-nexternal+1,-1
353 if ((iforest(1,k,ignum).eq.ipids(i,2,ipnum).and.
354 & iforest(2,k,ignum).eq.ipids(j,2,ipnum)).or.
355@@ -254,20 +258,39 @@
356 icmp(2)=ishft(1,nexternal)-1-icmp(1)
357 c Set pdg code for propagator
358 do l=1,2
359- ipdgcl(icmp(l),ignum)=sprop(1,k,ignum)
360- if(ipdgcl(icmp(l),ignum).eq.0)
361- $ ipdgcl(icmp(l),ignum)=tprid(k,ignum)
362-c write(*,*) 'add table entry for (',ipids(i,1,ipnum),
363-c & ',',ipids(j,1,ipnum),',',icmp,')','pdg: ',
364-c $ ipdgcl(icmp,ignum)
365- call filprp(ignum,icmp(l))
366-
367+ do iproc=1,maxsproc
368+ if(sprop(iproc,k,ignum).ne.0)then
369+ ipdgcl(icmp(l),ignum,iproc)=sprop(iproc,k,ignum)
370+c If this is radiation off heavy FS particle, set heavyrad to true
371+ if(isjet(ipdgcl(ipids(i,1,ipnum),ignum,iproc)).and.
372+ $ .not.isjet(ipdgcl(ipids(j,1,ipnum),ignum,iproc)).and.
373+ $ ipdgcl(ipids(j,1,ipnum),ignum,iproc).eq.sprop(iproc,k,ignum).or.
374+ $ isjet(ipdgcl(ipids(j,1,ipnum),ignum,iproc)).and.
375+ $ .not.isjet(ipdgcl(ipids(i,1,ipnum),ignum,iproc)).and.
376+ $ ipdgcl(ipids(i,1,ipnum),ignum,iproc).eq.sprop(iproc,k,ignum))then
377+ heavyrad(ignum) = .true.
378+ endif
379+ else if(tprid(k,ignum).ne.0)then
380+ ipdgcl(icmp(l),ignum,iproc)=tprid(k,ignum)
381+ else if(ipnum.eq.3)then
382+ ipdgcl(icmp(l),ignum,iproc)=ipdgcl(2,ignum,iproc)
383+ else
384+ ipdgcl(icmp(l),ignum,iproc)=0
385+ cycle
386+ endif
387+ if(btest(mlevel,4))
388+ $ write(*,*) 'add table entry for (',ipids(i,1,ipnum),
389+ & ',',ipids(j,1,ipnum),',',icmp(l),')',
390+ $ 'proc: ',iproc,
391+ $ ', pdg: ',ipdgcl(icmp(l),ignum,iproc)
392+ call filprp(iproc,ignum,icmp(l))
393 c Insert graph in list of propagators
394 if(pwidth(k,ignum).gt.ZERO) then
395 c write(*,*)'Adding resonance ',ignum,icmp
396 resmap(icmp(l),ignum)=.true.
397 endif
398 enddo
399+ enddo
400 c proceed w/ next table, since there is no possibility,
401 c to combine the same particle in another way in this graph
402 ipids(i,1,ipnum-1)=icmp(1)
403@@ -288,11 +311,6 @@
404 ipids(l,3,ipnum)=l+1
405 ipids(l,4,ipnum)=0
406 enddo
407-c do l=1,ipnum
408-c write(*,*) 'new: ipids(',l,') = (',ipids(l,1,ipnum),
409-c & ',',ipids(l,2,ipnum),',',ipids(l,3,ipnum),',',ipids(l,4,ipnum),')',
410-c $ ' pdg: ', ipdgcl(ipids(l,1,ipnum),ignum)
411-c enddo
412 if(ipnum.eq.2)then
413 c Done with this diagram
414 return
415@@ -317,20 +335,21 @@
416 include 'genps.inc'
417 include 'maxconfigs.inc'
418 include 'nexternal.inc'
419+ include 'maxamps.inc'
420 include 'cluster.inc'
421 include 'run.inc'
422- include 'maxamps.inc'
423+ include 'message.inc'
424 C $B$ IFOREST $B$ !this is a tag for MadWeight
425 integer mapconfig(0:lmaxconfigs), this_config
426 common/to_mconfigs/mapconfig, this_config
427 C $E$ IFOREST $E$ !this is a tag for MadWeight
428- integer i, j, inpids, ipids(nexternal,4,2:nexternal)
429+ integer i, j, inpids, iproc, ipids(nexternal,4,2:nexternal)
430 integer start_config,end_config
431 integer idup(nexternal,maxproc,maxsproc)
432 integer mothup(2,nexternal)
433 integer icolup(2,nexternal,maxflow,maxsproc)
434 include 'leshouche.inc'
435-
436+
437 logical filgrp
438 external filgrp
439
440@@ -341,22 +360,41 @@
441 start_config=1
442 end_config=mapconfig(0)
443 endif
444- do i=1,n_max_cl
445- id_cl(i,0)=0
446+ do iproc=1,maxsproc
447+ do i=1,n_max_cl
448+ id_cl(iproc,i,0)=0
449+ enddo
450 enddo
451 do i=start_config,end_config
452+ heavyrad(i)=.false.
453 c write (*,*) ' at graph ',i
454 do j=1,nexternal
455 ipids(j,1,nexternal)=ishft(1,j-1)
456 ipids(j,2,nexternal)=j
457 ipids(j,3,nexternal)=0
458 ipids(j,4,nexternal)=0
459- ipdgcl(ipids(j,1,nexternal),i)=idup(j,1,1)
460+ do iproc=1,maxsproc
461+ ipdgcl(ipids(j,1,nexternal),i,iproc)=idup(j,1,iproc)
462+ enddo
463 enddo
464 inpids=nexternal
465 c print *,'Inserting graph ',i
466 10 if (filgrp(i,inpids,ipids)) goto 10
467- enddo
468+ if(btest(mlevel,4).and.heavyrad(i)) then
469+ write(*,*)' set heavyrad of ',i,' to T'
470+ endif
471+ enddo
472+c Ensure that there are some allowed clusterings
473+ do i=start_config,end_config
474+ if(.not.heavyrad(i)) goto 20
475+ enddo
476+ if(btest(mlevel,4)) then
477+ write(*,*)' Reset all heavyrad to .false.'
478+ endif
479+ do i=start_config,end_config
480+ heavyrad(i)=.false.
481+ enddo
482+ 20 continue
483 filmap=.true.
484 return
485 end
486@@ -431,28 +469,35 @@
487 c**************************************************************************
488 implicit none
489 include 'nexternal.inc'
490+ include 'maxamps.inc'
491 include 'cluster.inc'
492
493 integer idij,nbw,ibwlist(nexternal),icgs(0:n_max_cg)
494 logical foundbw
495 integer i, ii, j, jj, il, igsbk(0:n_max_cg)
496
497+c IPROC has the present process number
498+ INTEGER IMIRROR,IPROC
499+ COMMON/TO_MIRROR/IMIRROR, IPROC
500+
501 findmt=.false.
502 c if first clustering, set possible graphs
503 if (icgs(0).eq.0) then
504 ii=0
505- do i=1,id_cl(idij,0)
506+ do i=1,id_cl(iproc,idij,0)
507+c check if this diagram has radiation off heavy particle
508+ if(heavyrad(id_cl(iproc,idij,i))) cycle
509 c check if we have constraint from onshell resonances
510 foundbw=.true.
511 do j=1,nbw
512- if(resmap(ibwlist(j),id_cl(idij,i)))then
513+ if(resmap(ibwlist(j),id_cl(iproc,idij,i)))then
514 cycle
515 endif
516 foundbw=.false.
517 10 enddo
518- if(nbw.eq.0.or.foundbw)then
519+ if((nbw.eq.0.or.foundbw))then
520 ii=ii+1
521- icgs(ii)=id_cl(idij,i)
522+ icgs(ii)=id_cl(iproc,idij,i)
523 endif
524 enddo
525 icgs(0)=ii
526@@ -465,17 +510,17 @@
527 j=1
528 ii=0
529 do i=1,icgs(0)
530- if(j.le.id_cl(idij,0).and.icgs(i).eq.id_cl(idij,j))then
531+ if(j.le.id_cl(iproc,idij,0).and.icgs(i).eq.id_cl(iproc,idij,j))then
532 ii=ii+1
533- icgs(ii)=id_cl(idij,j)
534+ icgs(ii)=id_cl(iproc,idij,j)
535 j=j+1
536- else if(j.le.id_cl(idij,0).and.icgs(i).gt.id_cl(idij,j)) then
537- do while(icgs(i).gt.id_cl(idij,j).and.j.le.id_cl(idij,0))
538+ else if(j.le.id_cl(iproc,idij,0).and.icgs(i).gt.id_cl(iproc,idij,j)) then
539+ do while(icgs(i).gt.id_cl(iproc,idij,j).and.j.le.id_cl(iproc,idij,0))
540 j=j+1
541 enddo
542- if(j.le.id_cl(idij,0).and.icgs(i).eq.id_cl(idij,j))then
543+ if(j.le.id_cl(iproc,idij,0).and.icgs(i).eq.id_cl(iproc,idij,j))then
544 ii=ii+1
545- icgs(ii)=id_cl(idij,j)
546+ icgs(ii)=id_cl(iproc,idij,j)
547 endif
548 endif
549 enddo
550@@ -497,9 +542,11 @@
551 include 'run.inc'
552 include 'genps.inc'
553 include 'nexternal.inc'
554+ include 'maxamps.inc'
555 include 'cluster.inc'
556 include 'message.inc'
557 include 'maxconfigs.inc'
558+
559 real*8 p(0:3,nexternal), pcmsp(0:3), p1(0:3)
560 real*8 pi(0:3), nr(0:3), pz(0:3)
561 integer i, j, k, n, idi, idj, idij, icgs(0:n_max_cg)
562@@ -511,7 +558,6 @@
563 common/to_mconfigs/mapconfig, this_config
564
565 integer nbw,ibwlist(nexternal)
566- logical isbw(n_max_cl)
567 data isbw/n_max_cl*.false./
568
569 data (pz(i),i=0,3)/1d0,0d0,0d0,1d0/
570@@ -569,7 +615,7 @@
571 if(isbw(idij))then
572 pt2ij(idij)=SumDot(pcl(0,idi),pcl(0,idj),1d0)
573 if (btest(mlevel,4))
574- $ print *,'Mother ',idij,' has ptij ',
575+ $ write(*,*)'Mother ',idij,' has ptij ',
576 $ sqrt(pt2ij(idij))
577 else
578 if(ktscheme.eq.2)then
579@@ -578,6 +624,7 @@
580 pt2ij(idij)=dj(pcl(0,idi),pcl(0,idj))
581 endif
582 endif
583+ zij(idij)=0d0
584 else
585 c initial state clustering, only if hadronic collision
586 c check whether 2->(n-1) process w/ cms energy > 0 remains
587@@ -585,6 +632,7 @@
588 if(ickkw.eq.2.or.ktscheme.eq.2)then
589 pt2ij(idij)=pyjb(pcl(0,idi),
590 $ pcl(0,idj),pcl(0,iwinp),zij(idij))
591+ zij(idij)=0d0
592 else
593 pt2ij(idij)=djb(pcl(0,idi))
594 zij(idij)=zclus(pcl(0,idi),pcl(0,idj),pcl(0,iwinp))
595@@ -613,11 +661,14 @@
596 c Take care of special 2 -> 1 case
597 if (nexternal.eq.3.and.nincoming.eq.2) then
598 n=1
599- imocl(n)=idij
600- idacl(n,1)=idi
601- idacl(n,2)=idj
602- pt2ijcl(n)=pcl(4,idi)
603+c Make sure that initial-state particles are daughters
604+ idacl(n,1)=imap(1,2)
605+ idacl(n,2)=imap(2,2)
606+ imocl(n)=imap(3,2)
607+ pt2ijcl(n)=pcl(4,imocl(n))
608 zcl(n)=0.
609+ igraphs(0)=1
610+ igraphs(1)=this_config
611 cluster=.true.
612 clustered=.true.
613 return
614@@ -649,7 +700,7 @@
615 c is clustering
616 c Set mt2ij to m^2+pt^2
617 mt2ij(n)=djb(pcl(0,idacl(n,2)))
618- if (btest(mlevel,3)) then
619+ if (btest(mlevel,1)) then
620 write(*,*)'mtij(',n,') for ',idacl(n,2),' is ',sqrt(mt2ij(n)),
621 $ ' (cf ',sqrt(pt2ijcl(n)),')'
622 endif
623@@ -699,7 +750,7 @@
624 if(isbw(imocl(n)))then
625 pcl(4,imocl(n))=pt2ijcl(n)
626 if (btest(mlevel,4))
627- $ print *,'Mother ',imocl(n),' has mass**2 ',
628+ $ write(*,*) 'Mother ',imocl(n),' has mass**2 ',
629 $ pcl(4,imocl(n))
630 endif
631 endif
632@@ -728,15 +779,10 @@
633 call boostx(p1(0),pcmsp(0),pcl(0,imap(3,2)))
634 endif
635 endif
636-c Make sure that final-state particle is always among daughters
637+c Make sure that initial-state particle is always among daughters
638 idacl(n+1,1)=imap(1,2)
639- idacl(n+1,2)=imap(3,2)
640- imocl(n+1)=imap(2,2)
641-c If mother is initial state leg (2nd beam), chose other leg
642- if (imocl(n+1).eq.4)then
643- idacl(n+1,1)=imap(2,2)
644- imocl(n+1)=imap(1,2)
645- endif
646+ idacl(n+1,2)=imap(2,2)
647+ imocl(n+1)=imap(3,2)
648
649 c if(pcl(0,imocl(n)).gt.0d0)then
650 pt2ijcl(n+1)=djb(pcl(0,imap(3,2)))
651@@ -801,7 +847,7 @@
652 if(isbw(idij))then
653 pt2ij(idij)=SumDot(pcl(0,idi),pcl(0,idj),1d0)
654 if (btest(mlevel,4))
655- $ print *,'Mother ',idij,' has ptij ',
656+ $ write(*,*) 'Mother ',idij,' has ptij ',
657 $ sqrt(pt2ij(idij))
658 else
659 if(ktscheme.eq.2)then
660
661=== modified file 'Template/SubProcesses/cluster.inc'
662--- Template/SubProcesses/cluster.inc 2011-03-09 18:29:27 +0000
663+++ Template/SubProcesses/cluster.inc 2011-10-05 03:29:23 +0000
664@@ -5,18 +5,20 @@
665 include 'ngraphs.inc'
666 c parameters for clustering:
667 c id_cl gives diagrams for propagators
668- integer id_cl(n_max_cl,0:n_max_cg)
669- common/cl_map/id_cl
670+ integer id_cl(maxsproc,n_max_cl,0:n_max_cg)
671+ logical heavyrad(n_max_cg)
672+ common/cl_map/id_cl,heavyrad
673 c resmap gives potential resonances for diagrams
674 logical resmap(n_max_cl,n_max_cg)
675 common/res_map/resmap
676 double precision pt2ijcl(nexternal),zcl(nexternal),mt2ij(nexternal),mt2last
677 double precision pcl(0:4,n_max_cl) ! 4 is mass**2
678+ logical isbw(n_max_cl)
679 integer imocl(nexternal), idacl(nexternal,2), igraphs(0:n_max_cg)
680- integer ipdgcl(n_max_cl,n_max_cg)
681+ integer ipdgcl(n_max_cl,n_max_cg,maxsproc)
682 logical clustered
683 common/cl_val/pcl,pt2ijcl,zcl,mt2ij,mt2last,imocl,idacl,igraphs,ipdgcl,
684- & clustered
685+ & isbw,clustered
686 c parameters for qcd jets
687 double precision ptclus(nexternal)
688 common/cl_jets/ptclus
689
690=== modified file 'Template/SubProcesses/cuts.f'
691--- Template/SubProcesses/cuts.f 2011-08-07 19:55:37 +0000
692+++ Template/SubProcesses/cuts.f 2011-10-05 03:29:23 +0000
693@@ -388,11 +388,20 @@
694 if(debug) write (*,*) dsqrt(s_min(j,i)),dsqrt(s_max(j,i))
695 if(s_min(j,i).gt.0.or.s_max(j,i).lt.1d5) then
696 tmp=SumDot(p(0,i),p(0,j),+1d0)
697- notgood=(tmp .lt. s_min(j,i).or.tmp .gt. s_max(j,i))
698- if (notgood) then
699- if(debug) write (*,*) i,j,' -> fails'
700- passcuts=.false.
701- return
702+ if(s_min(j,i).le.s_max(j,i))then
703+ notgood=(tmp .lt. s_min(j,i).or.tmp .gt. s_max(j,i))
704+ if (notgood) then
705+ if(debug) write (*,*) i,j,' -> fails'
706+ passcuts=.false.
707+ return
708+ endif
709+ else
710+ notgood=(tmp .lt. s_min(j,i).and.tmp .gt. s_max(j,i))
711+ if (notgood) then
712+ if(debug) write (*,*) i,j,' -> fails'
713+ passcuts=.false.
714+ return
715+ endif
716 endif
717 endif
718 enddo
719
720=== modified file 'Template/SubProcesses/initcluster.f'
721--- Template/SubProcesses/initcluster.f 2011-03-09 18:29:27 +0000
722+++ Template/SubProcesses/initcluster.f 2011-10-05 03:29:23 +0000
723@@ -5,6 +5,7 @@
724 include 'message.inc'
725 include 'run.inc'
726 include 'nexternal.inc'
727+ include 'maxamps.inc'
728 include 'cluster.inc'
729 C
730 C SPECIAL CUTS
731@@ -13,7 +14,7 @@
732 real*8 xetamin,xqcut,deltaeta
733 common /to_specxpt/xptj,xptb,xpta,xptl,xmtc,xetamin,xqcut,deltaeta
734
735- integer i,j
736+ integer i,j,iproc
737 logical filmap, cluster
738 external filmap, cluster
739
740@@ -46,13 +47,16 @@
741 stop
742 endif
743 if (btest(mlevel,3)) then
744- do i=1,n_max_cl
745- write(*,*) 'prop ',i,' in'
746- do j=1,id_cl(i,0)
747- write(*,*) ' graph ',id_cl(i,j)
748- enddo
749+ do iproc=1,maxsproc
750+ write(*,*)'for proc ',iproc
751+ do i=1,n_max_cl
752+ write(*,*) 'prop ',i,' in'
753+ do j=1,id_cl(iproc,i,0)
754+ write(*,*) ' graph ',id_cl(iproc,i,j)
755+ enddo
756+ enddo
757+ write(*,*)'ok'
758 enddo
759- write(*,*)'ok'
760 endif
761 igraphs(0)=0
762
763
764=== modified file 'Template/SubProcesses/makefile'
765--- Template/SubProcesses/makefile 2011-07-10 22:43:49 +0000
766+++ Template/SubProcesses/makefile 2011-10-05 03:29:23 +0000
767@@ -13,11 +13,12 @@
768
769 # Source files
770
771-PROCESS= driver.o myamp.o genps.o unwgt.o setcuts.o \
772+PROCESS= driver.o myamp.o genps.o unwgt.o setcuts.o get_color.o \
773 cuts.o cluster.o reweight.o initcluster.o addmothers.o setscales.o \
774 $(patsubst %.f,%.o,$(wildcard auto_dsig*.f)) \
775 $(patsubst %.f,%.o,$(wildcard matrix*.f))
776-SYMMETRY = myamp.o genps.o initcluster.o setscales.o reweight.o\
777+SYMMETRY = symmetry.o genps.inc setcuts.o cuts.o cluster.o \
778+ myamp.o genps.o initcluster.o setscales.o reweight.o get_color.o \
779 $(patsubst %.f,%.o,$(wildcard matrix*.f))
780
781 # Binaries
782@@ -25,8 +26,8 @@
783 $(PROG): $(PROCESS) auto_dsig.o $(LIBS)
784 $(FC) $(FFLAGS) -o $(PROG) $(PROCESS) $(LINKLIBS)
785
786-gensym: symmetry.o genps.inc setcuts.o cuts.o cluster.o $(SYMMETRY) configs.inc $(LIBS)
787- $(FC) $(FFLAGS) -o gensym symmetry.o setcuts.o cuts.o cluster.o $(SYMMETRY) $(LINKLIBS)
788+gensym: $(SYMMETRY) configs.inc $(LIBS)
789+ $(FC) $(FFLAGS) -o gensym $(SYMMETRY) $(LINKLIBS)
790
791 # Dependencies
792
793
794=== modified file 'Template/SubProcesses/myamp.f'
795--- Template/SubProcesses/myamp.f 2011-09-05 06:55:55 +0000
796+++ Template/SubProcesses/myamp.f 2011-10-05 03:29:23 +0000
797@@ -110,7 +110,7 @@
798 c
799 double precision xp(0:3,-nexternal:nexternal)
800 double precision mpole(-nexternal:0),shat,tsgn
801- integer i,j,iconfig
802+ integer i,j,iconfig,iproc
803
804 double precision pmass(-nexternal:0,lmaxconfigs)
805 double precision pwidth(-nexternal:0,lmaxconfigs)
806@@ -145,7 +145,7 @@
807 integer icolup(2,nexternal,maxflow,maxsproc)
808 include 'leshouche.inc'
809
810- logical gForceBW(-max_branch:-1,lmaxconfigs) ! Forced BW
811+ integer gForceBW(-max_branch:-1,lmaxconfigs) ! Forced BW
812 include 'decayBW.inc'
813 c
814 c External
815@@ -190,7 +190,15 @@
816 enddo
817 nbw = 0
818 tsgn = +1d0
819- do i=-1,-(nexternal-3),-1 !Loop over propagators
820+c Find non-zero process number
821+ do iproc=1,maxsproc
822+ if(sprop(iproc,-1,iconfig).ne.0) goto 10
823+ enddo
824+ 10 continue
825+c If no non-zero sprop, set iproc to 1
826+ if(iproc.gt.maxsproc) iproc=1
827+c Start loop over propagators
828+ do i=-1,-(nexternal-3),-1
829 onbw(i) = .false.
830 if (iforest(1,i,iconfig) .eq. 1) tsgn=-1d0
831 do j=0,3
832@@ -209,16 +217,21 @@
833 onshell = (abs(xmass - pmass(i,iconfig)) .lt.
834 $ bwcutoff*pwidth(i,iconfig))
835 if(onshell)then
836-c Only allow onshell if no "decay" to identical particle
837+c Remove on-shell forbidden s-channels (gForceBW=2) (JA 2/10/11)
838+ if(gForceBW(i,iconfig).eq.2) then
839+ cut_bw = .true.
840+ return
841+ endif
842+c Only allow OnBW if no "decay" to identical particle
843 OnBW(i) = .true.
844 idenpart=0
845 do j=1,2
846 ida(j)=iforest(j,i,iconfig)
847 if(ida(j).lt.0) then
848- if(sprop(1,i,iconfig).eq.sprop(1,ida(j),iconfig))
849+ if(sprop(iproc,i,iconfig).eq.sprop(iproc,ida(j),iconfig))
850 $ idenpart=ida(j)
851 elseif (ida(j).gt.0) then
852- if(sprop(1,i,iconfig).eq.IDUP(ida(j),1,1))
853+ if(sprop(iproc,i,iconfig).eq.IDUP(ida(j),1,1))
854 $ idenpart=ida(j)
855 endif
856 enddo
857@@ -227,10 +240,10 @@
858 OnBW(i)=.false.
859 c Else remove if daughter forced to be onshell
860 elseif(idenpart.lt.0)then
861- if(gForceBW(idenpart, iconfig)) then
862+ if(gForceBW(idenpart, iconfig).eq.1) then
863 OnBW(i)=.false.
864 c Else remove daughter if forced to be onshell
865- elseif(gForceBW(i, iconfig)) then
866+ elseif(gForceBW(i, iconfig).eq.1) then
867 OnBW(idenpart)=.false.
868 c Else remove either this resonance or daughter, which is closer to mass shell
869 elseif(abs(xmass-pmass(i,iconfig)).gt.
870@@ -242,13 +255,10 @@
871 OnBW(idenpart)=.false.
872 endif
873 endif
874- endif
875-c
876-c Check if we are supposed to cut forced bw (JA 4/8/11)
877-c
878- if (gForceBW(i, iconfig) .and. .not. onshell)then
879- cut_bw = .true.
880- return
881+ else if (gForceBW(i, iconfig).eq.1) then ! .not. onshell
882+c Check if we are supposed to cut forced bw (JA 4/8/11)
883+ cut_bw = .true.
884+ return
885 endif
886 c
887 c Here we set onshell for phase space integration (JA 4/8/11)
888@@ -263,7 +273,6 @@
889 return
890 endif
891 endif
892-
893 enddo
894 end
895
896@@ -293,7 +302,7 @@
897 double precision tsgn, xo, a
898 double precision x1,x2,xk(nexternal)
899 double precision dr,mtot,etot,stot,xqfact
900- integer i, iconfig, l1, l2, j, nt, nbw
901+ integer i, iconfig, l1, l2, j, nt, nbw, iproc
902 integer iden_part(-max_branch:-1)
903
904 double precision pmass(-nexternal:0,lmaxconfigs)
905@@ -305,7 +314,7 @@
906 integer icolup(2,nexternal,maxflow,maxsproc)
907 include 'leshouche.inc'
908
909- logical gForceBW(-max_branch:-1,lmaxconfigs) ! Forced BW
910+ integer gForceBW(-max_branch:-1,lmaxconfigs) ! Forced BW
911 include 'decayBW.inc'
912 c
913 c Global
914@@ -341,7 +350,7 @@
915 common /to_BW/ lbw
916
917 include 'coupl.inc'
918-
919+ include 'cuts.inc'
920 c
921 c External
922 c
923@@ -377,30 +386,39 @@
924 spole(i)=0
925 swidth(i)=0
926 enddo
927- do i=-1,-(nexternal-3),-1 !Find all the propagotors
928+c Find non-zero process number
929+ do iproc=1,maxsproc
930+ if(sprop(iproc,-1,iconfig).gt.0) goto 10
931+ enddo
932+ 10 continue
933+c If no non-zero sprop, set iproc to 1
934+ if(iproc.ge.maxsproc.and.sprop(maxsproc,-1,iconfig).eq.0)
935+ $ iproc=1
936+c Start loop over propagators
937+ do i=-1,-(nexternal-3),-1
938 c JA 3/31/11 Keep track of identical particles (i.e., radiation vertices)
939 c by tracing the particle identity from the external particle.
940 if(iforest(1,i,iconfig).gt.0) then
941- if (sprop(1,i,iconfig).eq.idup(iforest(1,i,iconfig),1,1))
942- $ iden_part(i) = sprop(1,i,iconfig)
943+ if (sprop(iproc,i,iconfig).eq.idup(iforest(1,i,iconfig),1,1))
944+ $ iden_part(i) = sprop(iproc,i,iconfig)
945 endif
946 if(iforest(2,i,iconfig).gt.0) then
947- if(sprop(1,i,iconfig).eq.idup(iforest(2,i,iconfig),1,1))
948- $ iden_part(i) = sprop(1,i,iconfig)
949+ if(sprop(iproc,i,iconfig).eq.idup(iforest(2,i,iconfig),1,1))
950+ $ iden_part(i) = sprop(iproc,i,iconfig)
951 endif
952 if(iforest(1,i,iconfig).lt.0) then
953 if((iden_part(iforest(1,i,iconfig)).ne.0.and.
954- $ sprop(1,i,iconfig).eq.iden_part(iforest(1,i,iconfig)) .or.
955- $ gforcebw(iforest(1,i,iconfig),iconfig).and.
956- $ sprop(1,i,iconfig).eq.sprop(1,iforest(1,i,iconfig),iconfig)))
957- $ iden_part(i) = sprop(1,i,iconfig)
958+ $ sprop(iproc,i,iconfig).eq.iden_part(iforest(1,i,iconfig)) .or.
959+ $ gforcebw(iforest(1,i,iconfig),iconfig).eq.1.and.
960+ $ sprop(iproc,i,iconfig).eq.sprop(iproc,iforest(1,i,iconfig),iconfig)))
961+ $ iden_part(i) = sprop(iproc,i,iconfig)
962 endif
963 if(iforest(2,i,iconfig).lt.0) then
964 if((iden_part(iforest(2,i,iconfig)).ne.0.and.
965- $ sprop(1,i,iconfig).eq.iden_part(iforest(2,i,iconfig)).or.
966- $ gforcebw(iforest(2,i,iconfig),iconfig).and.
967- $ sprop(1,i,iconfig).eq.sprop(1,iforest(2,i,iconfig),iconfig)))
968- $ iden_part(i) = sprop(1,i,iconfig)
969+ $ sprop(iproc,i,iconfig).eq.iden_part(iforest(2,i,iconfig)).or.
970+ $ gforcebw(iforest(2,i,iconfig),iconfig).eq.1.and.
971+ $ sprop(iproc,i,iconfig).eq.sprop(iproc,iforest(2,i,iconfig),iconfig)))
972+ $ iden_part(i) = sprop(iproc,i,iconfig)
973 endif
974 if (iforest(1,i,iconfig) .eq. 1) tsgn=-1d0
975 if (tsgn .eq. 1d0) then !s channel
976@@ -427,7 +445,7 @@
977 c JA 6/8/2011 Set xe(i) for resonances
978 if (lbw(nbw).eq.1) then
979 xm(i) = max(xm(i), pmass(i,iconfig)-5d0*pwidth(i,iconfig))
980- else if (gforcebw(i,iconfig)) then
981+ else if (gforcebw(i,iconfig).eq.1) then
982 xm(i) = max(xm(i), pmass(i,iconfig)-bwcutoff*pwidth(i,iconfig))
983 endif
984 endif
985@@ -529,6 +547,22 @@
986 c Set minimum based on: 1) required energy 2) resonances 3) 1/10000 of sqrt(s)
987 i = 3*(nexternal-2) - 4 + 1
988 xo = max(min(etot**2/stot, 1d0-1d-8),1d0/stot)
989+c Take into account special cuts
990+ xo = max(xo, xptj*dabs(xptj)/stot)
991+ xo = max(xo, xptb*dabs(xptb)/stot)
992+ xo = max(xo, xpta*dabs(xpta)/stot)
993+ xo = max(xo, xptl*dabs(xptl)/stot)
994+ xo = max(xo, xmtc*dabs(xmtc)/stot)
995+ xo = max(xo, htjmin**2/stot)
996+ xo = max(xo, ptj1min**2/stot)
997+ xo = max(xo, ptj2min**2/stot)
998+ xo = max(xo, ptj3min**2/stot)
999+ xo = max(xo, ptj4min**2/stot)
1000+ xo = max(xo, ht2min**2/stot)
1001+ xo = max(xo, ht3min**2/stot)
1002+ xo = max(xo, ht4min**2/stot)
1003+ xo = max(xo, misset**2/stot)
1004+ xo = max(xo, ptllmin**2/stot)
1005 if (swidth(i).eq.0.and.xo.eq.1d0/stot) then
1006 write(*,*) 'Warning: No minimum found for integration'
1007 write(*,*) ' Setting minimum to ',1d0/stot
1008
1009=== modified file 'Template/SubProcesses/reweight.f'
1010--- Template/SubProcesses/reweight.f 2011-08-27 21:03:09 +0000
1011+++ Template/SubProcesses/reweight.f 2011-10-05 03:29:23 +0000
1012@@ -5,6 +5,7 @@
1013 implicit none
1014 include 'nexternal.inc'
1015 include 'message.inc'
1016+ include 'maxamps.inc'
1017 include 'cluster.inc'
1018 include 'sudakov.inc'
1019 include 'run.inc'
1020@@ -76,6 +77,7 @@
1021 implicit none
1022 include 'message.inc'
1023 include 'nexternal.inc'
1024+ include 'maxamps.inc'
1025 include 'cluster.inc'
1026 integer ipdg,imode
1027 double precision q0, Q11
1028@@ -135,14 +137,9 @@
1029 c**************************************************
1030 implicit none
1031 integer ipdg, irfl
1032-
1033- isqcd=.true.
1034-
1035-c Assume that QCD particles have pdg codes that are (multiples of 1M) +
1036-c 1-10 or 21
1037- irfl=mod(abs(ipdg),1000000)
1038- if (irfl.ge.11.and.irfl.ne.21) isqcd=.false.
1039-c write(*,*)'iqcd? pdg = ',ipdg,' -> ',irfl,' -> ',isqcd
1040+ integer get_color
1041+
1042+ isqcd=(iabs(get_color(ipdg)).gt.1)
1043
1044 return
1045 end
1046@@ -200,42 +197,33 @@
1047 integer imo,ida1,ida2,i,idmo,idda1,idda2
1048 integer ipdg(n_max_cl),ipart(2,n_max_cl)
1049
1050- do i=1,2
1051- ipart(i,imo)=0
1052- enddo
1053-
1054 idmo=ipdg(imo)
1055 idda1=ipdg(ida1)
1056 idda2=ipdg(ida2)
1057
1058- if (btest(mlevel,1)) then
1059- write(*,*) ' updating ipart for: ',ida1,ida2,imo
1060+ if (btest(mlevel,4)) then
1061+ write(*,*) ' updating ipart for: ',ida1,ida2,' -> ',imo
1062 endif
1063
1064- if (btest(mlevel,1)) then
1065- write(*,*) ' daughters: ',(ipart(i,ida1),i=1,2),(ipart(i,ida2),i=1,2)
1066- endif
1067+ if (btest(mlevel,4)) then
1068+ write(*,*) ' daughters: ',(ipart(i,ida1),i=1,2),(ipart(i,ida2),i=1,2)
1069+ endif
1070
1071 c IS clustering - just transmit info on incoming line
1072 if((ipart(1,ida1).ge.1.and.ipart(1,ida1).le.2).or.
1073 $ (ipart(1,ida2).ge.1.and.ipart(1,ida2).le.2))then
1074- if(ipart(1,ida2).ge.1.and.ipart(1,ida2).le.2)
1075- $ ipart(1,imo)=ipart(1,ida2)
1076- if(ipart(1,ida1).ge.1.and.ipart(1,ida1).le.2)
1077- $ ipart(1,imo)=ipart(1,ida1)
1078- if (btest(mlevel,1)) then
1079- write(*,*) ' -> ',(ipart(i,imo),i=1,2)
1080-c Set intermediate particle identity
1081- if(iabs(idmo).lt.6)then
1082- if(iabs(idda1).lt.6) ipdg(imo)=-idda1
1083- if(iabs(idda2).lt.6) ipdg(imo)=-idda2
1084- idmo=ipdg(imo)
1085- if (btest(mlevel,1)) then
1086- write(*,*) ' particle identities: ',idda1,idda2,idmo
1087- endif
1088- endif
1089- endif
1090- return
1091+ ipart(2,imo)=0
1092+ if(ipart(1,ida1).le.2.and.ipart(1,ida2).le.2)then
1093+c This is last clustering - keep mother ipart
1094+ ipart(1,imo)=ipart(1,imo)
1095+ elseif(ipart(1,ida2).ge.1.and.ipart(1,ida2).le.2)then
1096+ ipart(1,imo)=ipart(1,ida2)
1097+ elseif(ipart(1,ida1).ge.1.and.ipart(1,ida1).le.2)then
1098+ ipart(1,imo)=ipart(1,ida1)
1099+ endif
1100+ if (btest(mlevel,4))
1101+ $ write(*,*) ' -> ',(ipart(i,imo),i=1,2)
1102+ return
1103 endif
1104
1105 c FS clustering
1106@@ -262,33 +250,25 @@
1107 else if(idmo.eq.idda1.or.idmo.eq.idda1+sign(1,idda2))then
1108 c quark -> quark-gluon or quark-Z or quark-h or quark-W
1109 ipart(1,imo)=ipart(1,ida1)
1110+ ipart(2,imo)=0
1111 else if(idmo.eq.idda2.or.idmo.eq.idda2+sign(1,idda1))then
1112 c quark -> gluon-quark or Z-quark or h-quark or W-quark
1113 ipart(1,imo)=ipart(1,ida2)
1114+ ipart(2,imo)=0
1115 else
1116 c Color singlet
1117 ipart(1,imo)=ipart(1,ida1)
1118 ipart(2,imo)=ipart(1,ida2)
1119 endif
1120
1121- if (btest(mlevel,1)) then
1122+ if (btest(mlevel,4)) then
1123 write(*,*) ' -> ',(ipart(i,imo),i=1,2)
1124 endif
1125
1126-c Set intermediate particle identity
1127- if(iabs(idmo).lt.6)then
1128- if(iabs(idda1).lt.6) ipdg(imo)=idda1
1129- if(iabs(idda2).lt.6) ipdg(imo)=idda2
1130- idmo=ipdg(imo)
1131- if (btest(mlevel,1)) then
1132- write(*,*) ' particle identities: ',idda1,idda2,idmo
1133- endif
1134- endif
1135-
1136 return
1137 end
1138
1139- logical function isjetvx(imo,ida1,ida2,ipdg,ipart)
1140+ logical function isjetvx(imo,ida1,ida2,ipdg,ipart,islast)
1141 c***************************************************
1142 c Checks if a qcd vertex generates a jet
1143 c***************************************************
1144@@ -299,7 +279,7 @@
1145
1146 integer imo,ida1,ida2,idmo,idda1,idda2,i
1147 integer ipdg(n_max_cl),ipart(2,n_max_cl)
1148- logical isqcd,isjet
1149+ logical isqcd,isjet,islast
1150 external isqcd,isjet
1151
1152 idmo=ipdg(imo)
1153@@ -307,7 +287,7 @@
1154 idda2=ipdg(ida2)
1155
1156 c Check QCD vertex
1157- if(.not.isqcd(idmo).or..not.isqcd(idda1).or.
1158+ if(islast.or..not.isqcd(idmo).or..not.isqcd(idda1).or.
1159 & .not.isqcd(idda2)) then
1160 isjetvx = .false.
1161 return
1162@@ -317,7 +297,7 @@
1163 if((ipart(1,ida1).ge.1.and.ipart(1,ida1).le.2).or.
1164 $ (ipart(1,ida2).ge.1.and.ipart(1,ida2).le.2))then
1165 c Check if ida1 is outgoing parton or ida2 is outgoing parton
1166- if(ipart(1,ida2).ge.1.and.ipart(1,ida2).le.2.and.isjet(idda1).or.
1167+ if(ipart(1,ida2).ge.1.and.ipart(1,ida2).le.2.and.isjet(idda1).or.
1168 $ ipart(1,ida1).ge.1.and.ipart(1,ida1).le.2.and.isjet(idda2))then
1169 isjetvx=.true.
1170 else
1171@@ -336,6 +316,54 @@
1172 return
1173 end
1174
1175+ logical function ispartonvx(imo,ida1,ida2,ipdg,ipart,islast)
1176+c***************************************************
1177+c Checks if a qcd vertex generates a jet
1178+c***************************************************
1179+ implicit none
1180+
1181+ include 'ncombs.inc'
1182+ include 'nexternal.inc'
1183+
1184+ integer imo,ida1,ida2,idmo,idda1,idda2,i
1185+ integer ipdg(n_max_cl),ipart(2,n_max_cl)
1186+ logical isqcd,isparton,islast
1187+ external isqcd,isparton
1188+
1189+ idmo=ipdg(imo)
1190+ idda1=ipdg(ida1)
1191+ idda2=ipdg(ida2)
1192+
1193+c Check QCD vertex
1194+ if(.not.isqcd(idmo).or..not.isqcd(idda1).or.
1195+ & .not.isqcd(idda2)) then
1196+ ispartonvx = .false.
1197+ return
1198+ endif
1199+
1200+c IS clustering
1201+ if((ipart(1,ida1).ge.1.and.ipart(1,ida1).le.2).or.
1202+ $ (ipart(1,ida2).ge.1.and.ipart(1,ida2).le.2))then
1203+c Check if ida1 is outgoing parton or ida2 is outgoing parton
1204+ if(.not.islast.and.ipart(1,ida2).ge.1.and.ipart(1,ida2).le.2.and.isparton(idda1).or.
1205+ $ ipart(1,ida1).ge.1.and.ipart(1,ida1).le.2.and.isparton(idda2))then
1206+ ispartonvx=.true.
1207+ else
1208+ ispartonvx=.false.
1209+ endif
1210+ return
1211+ endif
1212+
1213+c FS clustering
1214+ if(isparton(idda1).or.isparton(idda2))then
1215+ ispartonvx=.true.
1216+ else
1217+ ispartonvx=.false.
1218+ endif
1219+
1220+ return
1221+ end
1222+
1223 logical function setclscales(p)
1224 c**************************************************
1225 c reweight the hard me according to ckkw
1226@@ -347,6 +375,7 @@
1227 include 'genps.inc'
1228 include 'maxconfigs.inc'
1229 include 'nexternal.inc'
1230+ include 'maxamps.inc'
1231 include 'cluster.inc'
1232 include 'run.inc'
1233 include 'coupl.inc'
1234@@ -355,6 +384,11 @@
1235 C
1236 DOUBLE PRECISION P(0:3,NEXTERNAL)
1237
1238+C global variables
1239+C Present process number
1240+ INTEGER IMIRROR,IPROC
1241+ COMMON/TO_MIRROR/IMIRROR, IPROC
1242+
1243 C local variables
1244 integer i, j, idi, idj
1245 real*8 PI
1246@@ -365,23 +399,23 @@
1247 real*8 xptj,xptb,xpta,xptl,xmtc
1248 real*8 xetamin,xqcut,deltaeta
1249 common /to_specxpt/xptj,xptb,xpta,xptl,xmtc,xetamin,xqcut,deltaeta
1250+c q2bck holds the central q2fact scales
1251 real*8 q2bck(2)
1252- save q2bck
1253- include 'maxamps.inc'
1254+ common /to_q2bck/q2bck
1255 double precision asref, pt2prev(n_max_cl),pt2min
1256 integer n, ibeam(2), iqcd(0:2)!, ilast(0:nexternal)
1257 integer idfl, idmap(-nexternal:nexternal)
1258 integer ipart(2,n_max_cl)
1259 double precision xnow(2)
1260- integer jlast(2),jfirst(2),nwarning
1261- logical qcdline(2),qcdrad(2)
1262+ integer jlast(2),jfirst(2),jcentral(2),nwarning
1263+ logical qcdline(2),partonline(2)
1264 logical failed,first
1265 data first/.true./
1266 data nwarning/0/
1267
1268- logical isqcd,isjet,isparton,isjetvx,cluster
1269+ logical isqcd,isjet,isparton,cluster
1270 double precision alphas
1271- external isqcd, isjet, isparton, isjetvx, cluster, alphas
1272+ external isqcd, isjet, isparton, cluster, alphas
1273
1274 setclscales=.true.
1275
1276@@ -391,61 +425,50 @@
1277 c Cluster the configuration
1278 c
1279
1280- if (.not.cluster(p(0,1))) then
1281-c if (xqcut.gt.0d0) then
1282-c failed=.false.
1283-cc if(pt2ijcl(1).lt.xqcut**2) failed=.true.
1284-c if(failed) then
1285-c if (btest(mlevel,3)) then
1286-c write(*,*)'q_min = ',pt2ijcl(1),' < ',xqcut**2
1287-c endif
1288-c setclscales=.false.
1289-c return
1290-c endif
1291-c endif
1292-c else
1293- write(*,*)'setclscales: Error. Clustering failed.'
1294- setclscales=.false.
1295- return
1296- endif
1297+c if (.not.clustered) then
1298+ clustered = cluster(p(0,1))
1299+ if(.not.clustered) then
1300+ open(unit=26,file='../../../error',status='unknown',err=999)
1301+ write(26,*) 'Error: Clustering failed in cluster.f.'
1302+ write(*,*) 'Error: Clustering failed in cluster.f.'
1303+ stop
1304+ 999 write(*,*) 'error'
1305+ setclscales=.false.
1306+ clustered = .false.
1307+ return
1308+ endif
1309+c endif
1310
1311 if (btest(mlevel,1)) then
1312 write(*,*)'setclscales: identified tree {'
1313 do i=1,nexternal-2
1314- write(*,*)' ',i,': ',idacl(i,1),'(',ipdgcl(idacl(i,1),igraphs(1)),')',
1315- $ '&',idacl(i,2),'(',ipdgcl(idacl(i,2),igraphs(1)),')',
1316- $ ' -> ',imocl(i),', ptij = ',dsqrt(pt2ijcl(i)),
1317- $ '(',ipdgcl(imocl(i),igraphs(1)),')'
1318+ write(*,*)' ',i,': ',idacl(i,1),'(',ipdgcl(idacl(i,1),igraphs(1),iproc),')',
1319+ $ '&',idacl(i,2),'(',ipdgcl(idacl(i,2),igraphs(1),iproc),')',
1320+ $ ' -> ',imocl(i),'(',ipdgcl(imocl(i),igraphs(1),iproc),')',
1321+ $ ', ptij = ',dsqrt(pt2ijcl(i))
1322 enddo
1323+ write(*,*)' process: ',iproc
1324 write(*,*)' graphs (',igraphs(0),'):',(igraphs(i),i=1,igraphs(0))
1325 write(*,*)'}'
1326 endif
1327
1328-cc
1329-cc Set factorization scale as for the MLM case
1330-cc
1331-c if(xqcut.gt.0) then
1332-cc Using last clustering value
1333-c if(pt2ijcl(nexternal-2).lt.max(4d0,xqcut**2))then
1334-c setclscales=.false.
1335-c return
1336-c endif
1337-
1338 c If last clustering is s-channel QCD (e.g. ttbar) use mt2last instead
1339 c (i.e. geom. average of transverse mass of t and t~)
1340- if(mt2last.gt.4d0 .and. nexternal.gt.3 .and. isqcd(ipdgcl(idacl(nexternal-3,1),igraphs(1)))
1341- $ .and. isqcd(ipdgcl(idacl(nexternal-3,2),igraphs(1)))
1342- $ .and. isqcd(ipdgcl(imocl(nexternal-3),igraphs(1))))then
1343- mt2ij(nexternal-2)=mt2last
1344- mt2ij(nexternal-3)=mt2last
1345- if (btest(mlevel,3)) then
1346- write(*,*)' setclscales: set last vertices to mtlast: ',sqrt(mt2last)
1347+ if(mt2last.gt.4d0 .and. nexternal.gt.3) then
1348+ if(isqcd(ipdgcl(idacl(nexternal-3,1),igraphs(1),iproc))
1349+ $ .and. isqcd(ipdgcl(idacl(nexternal-3,2),igraphs(1),iproc))
1350+ $ .and. isqcd(ipdgcl(imocl(nexternal-3),igraphs(1),iproc)))then
1351+ mt2ij(nexternal-2)=mt2last
1352+ mt2ij(nexternal-3)=mt2last
1353+ if (btest(mlevel,3)) then
1354+ write(*,*)' setclscales: set last vertices to mtlast: ',sqrt(mt2last)
1355+ endif
1356 endif
1357 endif
1358
1359 C If we have fixed factorization scale, for ickkw>0 means central
1360 C scale, i.e. last two scales (ren. scale for these vertices are
1361-C anyway already set by "scale" above
1362+C anyway already set by "scale" above)
1363 if(ickkw.gt.0) then
1364 if(fixed_fac_scale.and.first)then
1365 q2bck(1)=q2fact(1)
1366@@ -461,97 +484,142 @@
1367
1368 ibeam(1)=ishft(1,0)
1369 ibeam(2)=ishft(1,1)
1370- jlast(1)=0
1371- jlast(2)=0
1372- qcdline(1)=.false.
1373- qcdline(2)=.false.
1374- qcdrad(1)=.true.
1375- qcdrad(2)=.true.
1376+ jlast(1)=1
1377+ jlast(2)=1
1378+ jcentral(1)=1
1379+ jcentral(2)=1
1380+ partonline(1)=isjet(ipdgcl(ibeam(1),igraphs(1),iproc))
1381+ partonline(2)=isjet(ipdgcl(ibeam(2),igraphs(1),iproc))
1382+ qcdline(1)=isqcd(ipdgcl(ibeam(1),igraphs(1),iproc))
1383+ qcdline(2)=isqcd(ipdgcl(ibeam(2),igraphs(1),iproc))
1384
1385 c Go through clusterings and set factorization scales for use in dsig
1386+ if (nexternal.eq.3) goto 10
1387 do n=1,nexternal-2
1388 do i=1,2
1389- if (isqcd(ipdgcl(idacl(n,i),igraphs(1)))) then
1390 do j=1,2
1391- if ((isparton(ipdgcl(idacl(n,i),igraphs(1))).and.idacl(n,i).eq.ibeam(j).or.
1392- $ isparton(ipdgcl(imocl(n),igraphs(1))).and.imocl(n).eq.ibeam(j))
1393- $ .and.qcdrad(j)) then
1394+ if (isqcd(ipdgcl(idacl(n,i),igraphs(1),iproc)).and.
1395+ $ idacl(n,i).eq.ibeam(j).and.qcdline(j)) then
1396 c is emission - this is what we want
1397 c Total pdf weight is f1(x1,pt2E)*fj(x1*z,Q)/fj(x1*z,pt2E)
1398 c f1(x1,pt2E) is given by DSIG, just need to set scale.
1399 ibeam(j)=imocl(n)
1400- if(ickkw.eq.0.or.jfirst(j).eq.0) jfirst(j)=n
1401- jlast(j)=n
1402- qcdline(j)=isqcd(ipdgcl(imocl(n),igraphs(1)))
1403- if(n.lt.nexternal-2)then
1404- qcdrad(j)=isqcd(ipdgcl(idacl(n,3-i),igraphs(1)))
1405- endif
1406- else
1407- qcdline(j)=isqcd(ipdgcl(imocl(n),igraphs(1)))
1408+ if(jfirst(j).eq.0)then
1409+ if(isjet(ipdgcl(imocl(n),igraphs(1),iproc))) then
1410+ jfirst(j)=n
1411+ else
1412+ jfirst(j)=-1
1413+ endif
1414+ endif
1415+ if(partonline(j))then
1416+c Stop fact scale where parton line stops
1417+ jlast(j)=n
1418+ partonline(j)=isjet(ipdgcl(imocl(n),igraphs(1),iproc))
1419+ endif
1420+c Trace QCD line through event
1421+ jcentral(j)=n
1422+ qcdline(j)=isqcd(ipdgcl(imocl(n),igraphs(1),iproc))
1423 endif
1424 enddo
1425- endif
1426 enddo
1427 enddo
1428+
1429+ 10 if(jfirst(1).le.0) jfirst(1)=jlast(1)
1430+ if(jfirst(2).le.0) jfirst(2)=jlast(2)
1431
1432 if (btest(mlevel,3))
1433 $ write(*,*) 'jfirst is ',jfirst(1),jfirst(2),
1434- $ ' and jlast is ',jlast(1),jlast(2)
1435+ $ ' jlast is ',jlast(1),jlast(2),
1436+ $ ' and jcentral is ',jcentral(1),jcentral(2)
1437
1438-c Set central scale to mT2 and multiply with scalefact
1439- if(jlast(1).gt.0.and.mt2ij(jlast(1)).gt.0d0)
1440- $ pt2ijcl(jlast(1))=mt2ij(jlast(1))
1441- if(jlast(2).gt.0.and.mt2ij(jlast(2)).gt.0d0)
1442- $ pt2ijcl(jlast(2))=mt2ij(jlast(2))
1443+c Set central scale to mT2
1444+ if(jcentral(1).gt.0.and.mt2ij(jcentral(1)).gt.0d0)
1445+ $ pt2ijcl(jcentral(1))=mt2ij(jcentral(1))
1446+ if(jcentral(2).gt.0.and.mt2ij(jcentral(2)).gt.0d0)
1447+ $ pt2ijcl(jcentral(2))=mt2ij(jcentral(2))
1448 if(btest(mlevel,4))
1449- $ print *,'pt2ijcl is: ',jlast(1), sqrt(pt2ijcl(jlast(1))),
1450- $ jlast(2), sqrt(pt2ijcl(jlast(2)))
1451- if(qcdline(1).and.qcdline(2).and.jlast(1).ne.jlast(2)) then
1452-c If not WBF or similar, set uniform scale to be maximum
1453- pt2ijcl(jlast(1))=max(pt2ijcl(jlast(1)),pt2ijcl(jlast(2)))
1454- pt2ijcl(jlast(2))=pt2ijcl(jlast(1))
1455- endif
1456- if(jlast(1).gt.0) pt2ijcl(jlast(1))=scalefact**2*pt2ijcl(jlast(1))
1457- if(jlast(2).gt.0) pt2ijcl(jlast(2))=scalefact**2*pt2ijcl(jlast(2))
1458- if(lpp(1).eq.0.and.lpp(2).eq.0)then
1459- pt2ijcl(nexternal-2)=scalefact**2*pt2ijcl(nexternal-2)
1460- pt2ijcl(nexternal-3)=pt2ijcl(nexternal-2)
1461- endif
1462+ $ write(*,*)'pt2ijcl is: ',jlast(1), sqrt(pt2ijcl(jlast(1))),
1463+ $ jlast(2), sqrt(pt2ijcl(jlast(2))),
1464+ $ jcentral(1), sqrt(pt2ijcl(jcentral(1))),
1465+ $ jcentral(2), sqrt(pt2ijcl(jcentral(2)))
1466
1467 c Check xqcut for vertices with jet daughters only
1468+ ibeam(1)=ishft(1,0)
1469+ ibeam(2)=ishft(1,1)
1470 if(xqcut.gt.0) then
1471 do n=1,nexternal-2
1472- if (n.lt.nexternal-2.and.n.ne.jlast(1).and.n.ne.jlast(2).and.
1473- $ (isjet(ipdgcl(idacl(n,1),igraphs(1))).or.isjet(ipdgcl(idacl(n,2),igraphs(1)))).and.
1474+ do j=1,2
1475+ if (btest(mlevel,4))
1476+ $ write(*,*) 'ibeam(1,2), daughter, mother:',
1477+ $ ibeam(1),ibeam(2),idacl(n,j),imocl(n)
1478+ if (n.lt.nexternal-2) then
1479+ if(n.ne.jlast(1).and.n.ne.jlast(2).and.
1480+ $ isjet(ipdgcl(idacl(n,j),igraphs(1),iproc)).and.
1481+ $ (idacl(n,3-j).eq.ibeam(1).or.
1482+ $ idacl(n,3-j).eq.ibeam(2)).and.
1483+ $ sqrt(pt2ijcl(n)).lt.xqcut)then
1484+c ISR
1485+ if (btest(mlevel,3))
1486+ $ write(*,*) 'Failed xqcut: ',n, ipdgcl(idacl(n,1),igraphs(1),iproc),
1487+ $ ipdgcl(idacl(n,2),igraphs(1),iproc), xqcut
1488+ setclscales=.false.
1489+ clustered = .false.
1490+ return
1491+ endif
1492+ endif
1493+ if (idacl(n,j).eq.ibeam(1).and.imocl(n).ne.ibeam(2))
1494+ $ ibeam(1)=imocl(n)
1495+ if (idacl(n,j).eq.ibeam(2).and.imocl(n).ne.ibeam(1))
1496+ $ ibeam(2)=imocl(n)
1497+ enddo
1498+ if (n.lt.nexternal-2) then
1499+ if(n.ne.jlast(1).and.n.ne.jlast(2).and.
1500+ $ isjet(ipdgcl(idacl(n,1),igraphs(1),iproc)).and.
1501+ $ isjet(ipdgcl(idacl(n,2),igraphs(1),iproc)).and.
1502+ $ idacl(n,1).ne.ibeam(1).and.idacl(n,1).ne.ibeam(2).and.
1503+ $ idacl(n,2).ne.ibeam(1).and.idacl(n,2).ne.ibeam(2).and.
1504 $ sqrt(pt2ijcl(n)).lt.xqcut)then
1505- setclscales=.false.
1506- return
1507+c FSR
1508+ if (btest(mlevel,3))
1509+ $ write(*,*) 'Failed xqcut: ',n, ipdgcl(idacl(n,1),igraphs(1),iproc),
1510+ $ ipdgcl(idacl(n,2),igraphs(1),iproc), xqcut
1511+ setclscales=.false.
1512+ clustered = .false.
1513+ return
1514+ endif
1515 endif
1516 enddo
1517 endif
1518
1519 c JA: Check xmtc cut for central process
1520- if(pt2ijcl(jlast(1)).lt.xmtc**2.or.pt2ijcl(jlast(2)).lt.xmtc**2)then
1521+ if(pt2ijcl(jcentral(1)).lt.xmtc**2.or.pt2ijcl(jcentral(2)).lt.xmtc**2)then
1522 setclscales=.false.
1523+ clustered = .false.
1524 if(btest(mlevel,3)) write(*,*)'Failed xmtc cut ',
1525- $ sqrt(pt2ijcl(jlast(1))),sqrt(pt2ijcl(jlast(1))),' < ',xmtc
1526+ $ sqrt(pt2ijcl(jcentral(1))),sqrt(pt2ijcl(jcentral(1))),
1527+ $ ' < ',xmtc
1528 return
1529 endif
1530
1531 if(ickkw.eq.0.and.(fixed_fac_scale.or.q2fact(1).gt.0).and.
1532 $ (fixed_ren_scale.or.scale.gt.0)) return
1533
1534-c Set renormalization scale to geom. aver. of factorization scales
1535+c Ensure that last scales are at least as big as first scales
1536+ pt2ijcl(jlast(1))=max(pt2ijcl(jlast(1)),pt2ijcl(jfirst(1)))
1537+ pt2ijcl(jlast(2))=max(pt2ijcl(jlast(2)),pt2ijcl(jfirst(2)))
1538+
1539+c Set renormalization scale to geom. aver. of central scales
1540 if(scale.eq.0d0) then
1541- if(jlast(1).gt.0.and.jlast(2).gt.0) then
1542- scale=(pt2ijcl(jlast(1))*pt2ijcl(jlast(2)))**0.25d0
1543- elseif(jlast(1).gt.0) then
1544- scale=sqrt(pt2ijcl(jlast(1)))
1545- elseif(jlast(2).gt.0) then
1546- scale=sqrt(pt2ijcl(jlast(2)))
1547+ if(jcentral(1).gt.0.and.jcentral(2).gt.0) then
1548+ scale=(pt2ijcl(jcentral(1))*pt2ijcl(jcentral(2)))**0.25d0
1549+ elseif(jcentral(1).gt.0) then
1550+ scale=sqrt(pt2ijcl(jcentral(1)))
1551+ elseif(jcentral(2).gt.0) then
1552+ scale=sqrt(pt2ijcl(jcentral(2)))
1553 elseif(lpp(1).eq.0.and.lpp(2).eq.0) then
1554 scale=sqrt(pt2ijcl(nexternal-2))
1555 endif
1556+ scale = scalefact*scale
1557 if(scale.gt.0)
1558 $ G = SQRT(4d0*PI*ALPHAS(scale))
1559 endif
1560@@ -560,10 +628,35 @@
1561
1562 if(ickkw.gt.0.and.q2fact(1).gt.0) then
1563 c Use the fixed or previously set scale for central scale
1564- if(jlast(1).gt.0) pt2ijcl(jlast(1))=q2fact(1)
1565- if(jlast(2).gt.0) pt2ijcl(jlast(2))=q2fact(2)
1566- endif
1567-
1568+ if(jcentral(1).gt.0) pt2ijcl(jcentral(1))=q2fact(1)
1569+ if(jcentral(2).gt.0.and.jcentral(2).ne.jcentral(1))
1570+ $ pt2ijcl(jcentral(2))=q2fact(2)
1571+ endif
1572+
1573+ if(nexternal.eq.3.and.nincoming.eq.2.and.q2fact(1).eq.0) then
1574+ q2fact(1)=pt2ijcl(nexternal-2)
1575+ q2fact(2)=pt2ijcl(nexternal-2)
1576+ endif
1577+
1578+ if(q2fact(1).eq.0d0) then
1579+c Use the geom. average of central scale and first non-radiation vertex
1580+ if(jlast(1).gt.0) q2fact(1)=sqrt(pt2ijcl(jlast(1))*pt2ijcl(jcentral(1)))
1581+ if(jlast(2).gt.0) q2fact(2)=sqrt(pt2ijcl(jlast(2))*pt2ijcl(jcentral(2)))
1582+ if(jcentral(1).eq.jcentral(2))then
1583+c We have a qcd line going through the whole event, use single scale
1584+ q2fact(1)=max(q2fact(1),q2fact(2))
1585+ q2fact(2)=q2fact(1)
1586+ endif
1587+ endif
1588+ if(.not. fixed_fac_scale) then
1589+ q2fact(1)=scalefact**2*q2fact(1)
1590+ q2fact(2)=scalefact**2*q2fact(2)
1591+ q2bck(1)=q2fact(1)
1592+ q2bck(2)=q2fact(2)
1593+ if (btest(mlevel,3))
1594+ $ write(*,*) 'Set central fact scales to ',sqrt(q2bck(1)),sqrt(q2bck(2))
1595+ endif
1596+
1597 if(lpp(1).eq.0.and.lpp(2).eq.0)then
1598 if(q2fact(1).gt.0)then
1599 pt2ijcl(nexternal-2)=q2fact(1)
1600@@ -574,18 +667,10 @@
1601 endif
1602 elseif(ickkw.eq.2.or.pdfwgt)then
1603 c Use the minimum scale found for fact scale in ME
1604- if(jlast(1).gt.0) q2fact(1)=min(pt2ijcl(jfirst(1)),pt2ijcl(jlast(1)))
1605- if(jlast(2).gt.0) q2fact(2)=min(pt2ijcl(jfirst(2)),pt2ijcl(jlast(2)))
1606- else if(q2fact(1).eq.0d0) then
1607- if(jlast(1).gt.0) q2fact(1)=pt2ijcl(jlast(1))
1608- if(jlast(2).gt.0) q2fact(2)=pt2ijcl(jlast(2))
1609- endif
1610-
1611- if(nexternal.eq.3.and.nincoming.eq.2) then
1612- if(q2fact(1).eq.0)
1613- $ q2fact(1)=pt2ijcl(nexternal-2)
1614- if(q2fact(2).eq.0)
1615- $ q2fact(2)=pt2ijcl(nexternal-2)
1616+ if(jlast(1).gt.0.and.jfirst(1).lt.jlast(1))
1617+ $ q2fact(1)=min(pt2ijcl(jfirst(1)),q2fact(1))
1618+ if(jlast(2).gt.0.and.jfirst(2).lt.jlast(2))
1619+ $ q2fact(2)=min(pt2ijcl(jfirst(2)),q2fact(2))
1620 endif
1621
1622 c Check that factorization scale is >= 2 GeV
1623@@ -601,6 +686,7 @@
1624 write(*,*) 'No more warnings written out this run.'
1625 endif
1626 setclscales=.false.
1627+ clustered = .false.
1628 return
1629 endif
1630
1631@@ -620,19 +706,26 @@
1632 include 'genps.inc'
1633 include 'maxconfigs.inc'
1634 include 'nexternal.inc'
1635+ include 'maxamps.inc'
1636 include 'cluster.inc'
1637 include 'run.inc'
1638 include 'coupl.inc'
1639- include 'maxamps.inc'
1640 C
1641 C ARGUMENTS
1642 C
1643 DOUBLE PRECISION P(0:3,NEXTERNAL)
1644
1645 C global variables
1646- integer IPROC
1647+C global variables
1648+C Present process number
1649+ INTEGER IMIRROR,IPROC
1650+ COMMON/TO_MIRROR/IMIRROR, IPROC
1651+ integer ISPROC
1652 DOUBLE PRECISION PD(0:MAXPROC)
1653- COMMON /SubProc/ PD, IPROC
1654+ COMMON /SubProc/ PD, ISPROC
1655+c q2bck holds the central q2fact scales
1656+ real*8 q2bck(2)
1657+ common /to_q2bck/q2bck
1658
1659 C local variables
1660 integer i, j, idi, idj
1661@@ -653,27 +746,28 @@
1662 c ipart gives external particle number chain
1663 integer ipart(2,n_max_cl)
1664 double precision xnow(2)
1665- double precision xtarget, tmp
1666+ double precision xtarget,tmp,pdfj1,pdfj2,q2now,etot
1667 integer iseed,np
1668 data iseed/0/
1669 logical isvx
1670
1671- logical isqcd,isjet,isparton,isjetvx
1672+ logical isqcd,isjet,isparton,isjetvx,ispartonvx
1673 double precision alphas,getissud,pdg2pdf, sudwgt
1674 real xran1
1675- external isqcd,isjet,isparton
1676+ external isqcd,isjet,isparton,ispartonvx
1677 external alphas, isjetvx, getissud, pdg2pdf, xran1, sudwgt
1678
1679 rewgt=1.0d0
1680
1681- if(ickkw.le.0) return
1682-
1683- if(.not.clustered)then
1684+ if((ickkw.gt.0.or..not.fixed_fac_scale.or..not.fixed_ren_scale)
1685+ $ .and..not.clustered)then
1686 write(*,*)'Error: No clustering done when calling rewgt!'
1687 stop
1688 endif
1689 clustered=.false.
1690
1691+ if(ickkw.le.0) return
1692+
1693 c Set mimimum kt scale, depending on highest mult or not
1694 if(hmult.or.ickkw.eq.1)then
1695 pt2min=0
1696@@ -683,9 +777,12 @@
1697 if (btest(mlevel,3))
1698 $ write(*,*) 'pt2min set to ',pt2min
1699
1700+c Set etot, used for non-radiating partons
1701+ etot=2d0*sqrt(ebeam(1)*ebeam(2))
1702+
1703 c Since we use pdf reweighting, need to know particle identities
1704 iprocset=1
1705- np = iproc
1706+ np = isproc
1707 xtarget=xran1(iseed)*pd(np)
1708 iprocset = 1
1709 do while (pd(iprocset) .lt. xtarget .and. iprocset .lt. np)
1710@@ -699,15 +796,24 @@
1711 c external particle clustering scales)
1712 do i=1,nexternal
1713 c ilast(i)=ishft(1,i)
1714- if(pt2min.gt.0)then
1715- pt2prev(ishft(1,i-1))=max(pt2min,p(0,i)**2-p(1,i)**2-p(2,i)**2-p(3,i)**2)
1716- else
1717- pt2prev(ishft(1,i-1))=0d0
1718+ pt2prev(ishft(1,i-1))=0d0
1719+ if (ickkw.eq.2) then
1720+ if(pt2min.gt.0)then
1721+ pt2prev(ishft(1,i-1))=
1722+ $ max(pt2min,p(0,i)**2-p(1,i)**2-p(2,i)**2-p(3,i)**2)
1723+ endif
1724+ pt2pdf(ishft(1,i-1))=pt2prev(ishft(1,i-1))
1725+ else if(pdfwgt) then
1726+ pt2pdf(ishft(1,i-1))=0d0
1727 endif
1728- pt2pdf(ishft(1,i-1))=pt2prev(ishft(1,i-1))
1729 ptclus(i)=sqrt(pt2prev(ishft(1,i-1)))
1730+ if (btest(mlevel,3))
1731+ $ write(*,*) 'Set ptclus for ',i,' to ', ptclus(i)
1732 ipart(1,ishft(1,i-1))=i
1733 ipart(2,ishft(1,i-1))=0
1734+ if (btest(mlevel,4))
1735+ $ write(*,*) 'Set ipart for ',ishft(1,i-1),' to ',
1736+ $ ipart(1,ishft(1,i-1)),ipart(2,ishft(1,i-1))
1737 enddo
1738 c ilast(0)=nexternal
1739 ibeam(1)=ishft(1,0)
1740@@ -715,8 +821,10 @@
1741 if (btest(mlevel,1)) then
1742 write(*,*)'rewgt: identified tree {'
1743 do i=1,nexternal-2
1744- write(*,*)' ',i,': ',idacl(i,1),'&',idacl(i,2),
1745- & ' -> ',imocl(i),', ptij = ',dsqrt(pt2ijcl(i))
1746+ write(*,*)' ',i,': ',idacl(i,1),'(',ipdgcl(idacl(i,1),igraphs(1),iproc),')',
1747+ $ '&',idacl(i,2),'(',ipdgcl(idacl(i,2),igraphs(1),iproc),')',
1748+ $ ' -> ',imocl(i),'(',ipdgcl(imocl(i),igraphs(1),iproc),')',
1749+ $ ', ptij = ',dsqrt(pt2ijcl(i))
1750 enddo
1751 write(*,*)' graphs (',igraphs(0),'):',(igraphs(i),i=1,igraphs(0))
1752 write(*,*)'}'
1753@@ -730,7 +838,7 @@
1754 endif
1755
1756 c Prepare for resetting q2fact based on PDF reweighting
1757- if(ickkw.eq.2.or.pdfwgt)then
1758+ if(ickkw.eq.2)then
1759 q2fact(1)=0d0
1760 q2fact(2)=0d0
1761 endif
1762@@ -741,102 +849,181 @@
1763
1764 c Perform alpha_s reweighting based on type of vertex
1765 do n=1,nexternal-2
1766+c scale for alpha_s reweighting
1767+ q2now=pt2ijcl(n)
1768+ if(n.eq.nexternal-2) then
1769+ q2now = scale**2
1770+ endif
1771 if (btest(mlevel,3)) then
1772- write(*,*)' ',n,': ',idacl(n,1),'(',ipdgcl(idacl(n,1),igraphs(1)),
1773- & ')&',idacl(n,2),'(',ipdgcl(idacl(n,2),igraphs(1)),') -> ',
1774- & imocl(n),'(',ipdgcl(imocl(n),igraphs(1)),'), ptij = ',
1775- & dsqrt(pt2ijcl(n))
1776+ write(*,*)' ',n,': ',idacl(n,1),'(',ipdgcl(idacl(n,1),igraphs(1),iproc),
1777+ & ')&',idacl(n,2),'(',ipdgcl(idacl(n,2),igraphs(1),iproc),
1778+ & ') -> ',imocl(n),'(',ipdgcl(imocl(n),igraphs(1),iproc),
1779+ & '), ptij = ',dsqrt(q2now)
1780 endif
1781-c perform alpha_s reweighting only for vertices where a jet is produced
1782+c perform alpha_s reweighting only for vertices where a parton is produced
1783 c and not for the last clustering (use non-fixed ren. scale for these)
1784- if (n.lt.nexternal-2.and.
1785- $ isjetvx(imocl(n),idacl(n,1),idacl(n,2),ipdgcl(1,igraphs(1)),ipart)) then
1786+ if (n.lt.nexternal-2)then
1787+ if(ispartonvx(imocl(n),idacl(n,1),idacl(n,2),
1788+ $ ipdgcl(1,igraphs(1),iproc),ipart,.false.)) then
1789 c alpha_s weight
1790- rewgt=rewgt*alphas(alpsfact*sqrt(pt2ijcl(n)))/asref
1791- if (btest(mlevel,3)) then
1792- write(*,*)' reweight vertex: ',ipdgcl(imocl(n),igraphs(1)),ipdgcl(idacl(n,1),igraphs(1)),ipdgcl(idacl(n,2),igraphs(1))
1793- write(*,*)' as: ',alphas(alpsfact*dsqrt(pt2ijcl(n))),
1794- & '/',asref,' -> ',alphas(alpsfact*dsqrt(pt2ijcl(n)))/asref
1795- write(*,*)' and G=',SQRT(4d0*PI*ALPHAS(scale))
1796- endif
1797+ rewgt=rewgt*alphas(alpsfact*sqrt(q2now))/asref
1798+ if (btest(mlevel,3)) then
1799+ write(*,*)' reweight vertex: ',ipdgcl(imocl(n),igraphs(1),iproc),
1800+ $ ipdgcl(idacl(n,1),igraphs(1),iproc),ipdgcl(idacl(n,2),igraphs(1),iproc)
1801+ write(*,*)' as: ',alphas(alpsfact*dsqrt(q2now)),
1802+ & '/',asref,' -> ',alphas(alpsfact*dsqrt(q2now))/asref
1803+ write(*,*)' and G=',SQRT(4d0*PI*ALPHAS(scale))
1804+ endif
1805+ endif
1806 endif
1807 c Update starting values for FS parton showering
1808 do i=1,2
1809 do j=1,2
1810- if(ipart(j,idacl(n,i)).gt.0)then
1811- ptclus(ipart(j,idacl(n,i)))=dsqrt(pt2ijcl(n))
1812+ if(ipart(j,idacl(n,i)).gt.0.and.ipart(j,idacl(n,i)).gt.2)then
1813+ ptclus(ipart(j,idacl(n,i)))=
1814+ $ max(ptclus(ipart(j,idacl(n,i))),dsqrt(pt2ijcl(n)))
1815+ if(ickkw.ne.2.and.
1816+ $ (.not.isqcd(ipdgcl(imocl(n),igraphs(1),iproc)).or.
1817+ $ ipart(1,idacl(n,3-i)).le.2.and.
1818+ $ .not.isqcd(ipdgcl(idacl(n,3-i),igraphs(1),iproc)).or.
1819+ $ isbw(imocl(n))))then
1820+c For particles originating in non-qcd t-channel vertices or decay vertices,
1821+c set origination scale to machine energy since we don't want these
1822+c to be included in matching.
1823+ ptclus(ipart(j,idacl(n,i)))=etot
1824+ endif
1825+ if (btest(mlevel,3))
1826+ $ write(*,*) 'Set ptclus for ',ipart(j,idacl(n,i)),
1827+ $ ' to ', ptclus(ipart(j,idacl(n,i))),
1828+ $ ipdgcl(imocl(n),igraphs(1),iproc),
1829+ $ isqcd(ipdgcl(imocl(n),igraphs(1),iproc)),isbw(imocl(n))
1830 endif
1831 enddo
1832 enddo
1833+c Special case for last 1,2->i vertex
1834+ if(n.eq.nexternal-2)then
1835+ ptclus(ipart(1,imocl(n)))=
1836+ $ max(ptclus(ipart(1,imocl(n))),dsqrt(pt2ijcl(n)))
1837+ if(ickkw.ne.2.and.
1838+ $ (.not.isqcd(ipdgcl(idacl(n,1),igraphs(1),iproc)).or.
1839+ $ .not.isqcd(ipdgcl(idacl(n,2),igraphs(1),iproc))))then
1840+c For particles originating in non-qcd vertices or decay vertices,
1841+c set origination scale to machine energy since we don't want these
1842+c to be included in matching.
1843+ ptclus(ipart(1,imocl(n)))=etot
1844+ endif
1845+ if (btest(mlevel,3))
1846+ $ write(*,*) 'Set ptclus for ',ipart(1,imocl(n)),
1847+ $ ' to ', ptclus(ipart(1,imocl(n))),
1848+ $ ipdgcl(idacl(n,1),igraphs(1),iproc),
1849+ $ ipdgcl(idacl(n,2),igraphs(1),iproc)
1850+ endif
1851 c Update particle tree map
1852- call ipartupdate(p,imocl(n),idacl(n,1),idacl(n,2),ipdgcl(1,igraphs(1)),ipart)
1853+ call ipartupdate(p,imocl(n),idacl(n,1),idacl(n,2),
1854+ $ ipdgcl(1,igraphs(1),iproc),ipart)
1855 if(ickkw.eq.2.or.pdfwgt) then
1856 c Perform PDF and, if ickkw=2, Sudakov reweighting
1857 isvx=.false.
1858 do i=1,2
1859 c write(*,*)'weight ',idacl(n,i),', ptij=',pt2prev(idacl(n,i))
1860- if (isqcd(ipdgcl(idacl(n,i),igraphs(1)))) then
1861- if(pt2min.eq.0d0) then
1862+ if (isqcd(ipdgcl(idacl(n,i),igraphs(1),iproc))) then
1863+ if(ickkw.eq.2.and.pt2min.eq.0d0) then
1864 pt2min=pt2ijcl(n)
1865 if (btest(mlevel,3))
1866 $ write(*,*) 'pt2min set to ',pt2min
1867 endif
1868- if(pt2prev(idacl(n,i)).eq.0d0) pt2prev(idacl(n,i))=
1869+ if(ickkw.eq.2.and.pt2prev(idacl(n,i)).eq.0d0)
1870+ $ pt2prev(idacl(n,i))=
1871 $ max(pt2min,p(0,i)**2-p(1,i)**2-p(2,i)**2-p(3,i)**2)
1872 do j=1,2
1873- if (isparton(ipdgcl(idacl(n,i),igraphs(1))).and
1874+ if (isparton(ipdgcl(idacl(n,i),igraphs(1),iproc)).and
1875 $ .idacl(n,i).eq.ibeam(j)) then
1876 c is sudakov weight - calculate only once for each parton
1877 c line where parton line ends with change of parton id or
1878 c non-radiation vertex
1879 isvx=.true.
1880 ibeam(j)=imocl(n)
1881- if(pt2pdf(idacl(n,i)).eq.0d0) pt2pdf(idacl(n,i))=pt2prev(idacl(n,i))
1882- if(ickkw.eq.2.and.(ipdgcl(idacl(n,i),igraphs(1)).ne.
1883- $ ipdgcl(imocl(n),igraphs(1)).or.
1884+c Perform Sudakov reweighting if ickkw=2
1885+ if(ickkw.eq.2.and.(ipdgcl(idacl(n,i),igraphs(1),iproc).ne.
1886+ $ ipdgcl(imocl(n),igraphs(1),iproc).or.
1887 $ .not.isjetvx(imocl(n),idacl(n,1),idacl(n,2),
1888- $ ipdgcl(1,igraphs(1)),ipart)).and.
1889- $ pt2prev(idacl(n,i)).lt.pt2ijcl(n).and.zcl(n).gt.1d-20)then
1890+ $ ipdgcl(1,igraphs(1),iproc),ipart,n.eq.nexternal-2)).and.
1891+ $ pt2prev(idacl(n,i)).lt.pt2ijcl(n))then
1892 tmp=min(1d0,max(getissud(ibeam(j),ipdgcl(idacl(n,i),
1893- $ igraphs(1)),xnow(j),xnow(3-j),pt2ijcl(n)),1d-20)/
1894+ $ igraphs(1),iproc),xnow(j),xnow(3-j),pt2ijcl(n)),1d-20)/
1895 $ max(getissud(ibeam(j),ipdgcl(idacl(n,i),
1896- $ igraphs(1)),xnow(j),xnow(3-j),pt2prev(idacl(n,i))),1d-20))
1897+ $ igraphs(1),iproc),xnow(j),xnow(3-j),pt2prev(idacl(n,i))),1d-20))
1898 rewgt=rewgt*tmp
1899 pt2prev(imocl(n))=pt2ijcl(n)
1900 if (btest(mlevel,3)) then
1901- write(*,*)' reweight line: ',ipdgcl(idacl(n,i),igraphs(1)), idacl(n,i)
1902+ write(*,*)' reweight line: ',ipdgcl(idacl(n,i),igraphs(1),iproc), idacl(n,i)
1903 write(*,*)' pt2prev, pt2new, x1, x2: ',pt2prev(idacl(n,i)),pt2ijcl(n),xnow(j),xnow(3-j)
1904 write(*,*)' Sud: ',tmp
1905 write(*,*)' -> rewgt: ',rewgt
1906 endif
1907- else
1908+ else if(ickkw.eq.2) then
1909 pt2prev(imocl(n))=pt2prev(idacl(n,i))
1910 endif
1911+c End Sudakov reweighting when we reach a non-radiation vertex
1912+ if(ickkw.eq.2.and..not.
1913+ $ ispartonvx(imocl(n),idacl(n,1),idacl(n,2),
1914+ $ ipdgcl(1,igraphs(1),iproc),ipart,n.eq.nexternal-2)) then
1915+ pt2prev(imocl(n))=1d30
1916+ if (btest(mlevel,3)) then
1917+ write(*,*)' rewgt: ending reweighting for vx ',
1918+ $ idacl(n,1),idacl(n,2),imocl(n),
1919+ $ ' with ids ',ipdgcl(idacl(n,1),igraphs(1),iproc),
1920+ $ ipdgcl(idacl(n,2),igraphs(1),iproc),ipdgcl(imocl(n),igraphs(1),iproc)
1921+ endif
1922+ endif
1923+c PDF reweighting
1924 c Total pdf weight is f1(x1,pt2E)*fj(x1*z,Q)/fj(x1*z,pt2E)
1925 c f1(x1,pt2E) is given by DSIG, already set scale for that
1926- xnow(j)=xnow(j)*zcl(n)
1927+ if (zcl(n).gt.0d0.and.zcl(n).lt.1d0) then
1928+ xnow(j)=xnow(j)*zcl(n)
1929+ endif
1930+c PDF scale
1931+ q2now=min(pt2ijcl(n), q2bck(j))
1932+c Set PDF scale to central factorization scale
1933+c if non-radiating vertex or last 2->2
1934+ if(.not.isjetvx(imocl(n),idacl(n,1),idacl(n,2),
1935+ $ ipdgcl(1,igraphs(1),iproc),ipart,n.eq.nexternal-2)) then
1936+ q2now=q2bck(j)
1937+ endif
1938+ if (btest(mlevel,3))
1939+ $ write(*,*)' set q2now for pdf to ',sqrt(q2now)
1940 if(q2fact(j).eq.0d0.and.ickkw.eq.2)then
1941 q2fact(j)=pt2min ! Starting scale for PS
1942- if (btest(mlevel,3)) then
1943- write(*,*)' reweight: set fact scale ',j,' for PS scale to: ',q2fact(j)
1944+ pt2pdf(imocl(n))=q2now
1945+ if (btest(mlevel,3))
1946+ $ write(*,*)' set fact scale ',j,
1947+ $ ' for PS scale to: ',sqrt(q2fact(j))
1948+ else if(pt2pdf(idacl(n,i)).eq.0d0)then
1949+ pt2pdf(imocl(n))=q2now
1950+ if (btest(mlevel,3))
1951+ $ write(*,*)' set pt2pdf for ',imocl(n),
1952+ $ ' to: ',sqrt(pt2pdf(imocl(n)))
1953+ else if(pt2pdf(idacl(n,i)).lt.q2now
1954+ $ .and.isjet(ipdgcl(idacl(n,i),igraphs(1),iproc))) then
1955+ pdfj1=pdg2pdf(abs(ibeam(j)),ipdgcl(idacl(n,i),
1956+ $ igraphs(1),iproc)*sign(1,ibeam(j)),xnow(j),sqrt(q2now))
1957+ pdfj2=pdg2pdf(abs(ibeam(j)),ipdgcl(idacl(n,i),
1958+ $ igraphs(1),iproc)*sign(1,ibeam(j)),xnow(j),
1959+ $ sqrt(pt2pdf(idacl(n,i))))
1960+ if(pdfj2.lt.1d-10)then
1961+c Scale too low for heavy quark
1962+ rewgt=0d0
1963+ if (btest(mlevel,3))
1964+ $ write(*,*) 'Too low scale for quark pdf: ',
1965+ $ sqrt(pt2pdf(idacl(n,i))),pdfj2,pdfj1
1966+ return
1967 endif
1968- else if(q2fact(j).eq.0d0)then
1969- q2fact(j)=pt2ijcl(n)
1970- else if(pt2pdf(idacl(n,i)).lt.pt2ijcl(n).and.zcl(n).gt.1d-20) then
1971- if(ickkw.eq.1) q2fact(j)=pt2ijcl(n)
1972- rewgt=rewgt*max(pdg2pdf(abs(ibeam(j)),ipdgcl(idacl(n,i),
1973- $ igraphs(1))*sign(1,ibeam(j)),xnow(j),sqrt(pt2ijcl(n))),1d-20)/
1974- $ max(pdg2pdf(abs(ibeam(j)),ipdgcl(idacl(n,i),
1975- $ igraphs(1))*sign(1,ibeam(j)),xnow(j),
1976- $ sqrt(pt2pdf(idacl(n,i)))),1d-20)
1977+ rewgt=rewgt*pdfj1/pdfj2
1978 if (btest(mlevel,3)) then
1979- write(*,*)' reweight ',ipdgcl(idacl(n,i),igraphs(1)),' by pdfs: '
1980- write(*,*)' x, pt2prev, ptnew: ',xnow(j),pt2pdf(idacl(n,i)),pt2ijcl(n)
1981- write(*,*)' PDF: ',
1982- $ pdg2pdf(abs(ibeam(j)),ipdgcl(idacl(n,i),
1983- $ igraphs(1))*sign(1,ibeam(j)),xnow(j),sqrt(pt2ijcl(n))),' / ',
1984- $ pdg2pdf(abs(ibeam(j)),ipdgcl(idacl(n,i),
1985- $ igraphs(1))*sign(1,ibeam(j)),xnow(j),sqrt(pt2pdf(idacl(n,i))))
1986+ write(*,*)' reweight ',n,i,ipdgcl(idacl(n,i),igraphs(1),iproc),' by pdfs: '
1987+ write(*,*)' x, ptprev, ptnew: ',xnow(j),
1988+ $ sqrt(pt2pdf(idacl(n,i))),sqrt(q2now)
1989+ write(*,*)' PDF: ',pdfj1,' / ',pdfj2
1990 write(*,*)' -> rewgt: ',rewgt
1991 c write(*,*)' (compare for glue: ',
1992 c $ pdg2pdf(ibeam(j),21,xbk(j),sqrt(pt2pdf(idacl(n,i)))),' / ',
1993@@ -846,35 +1033,26 @@
1994 c write(*,*)' -> ',pdg2pdf(ibeam(j),21,xbk(j),sqrt(pt2pdf(idacl(n,i))))/
1995 c $ pdg2pdf(ibeam(j),21,xbk(j),sqrt(pt2ijcl(n)))*rewgt,' )'
1996 endif
1997- endif
1998-c End both Sudakov and pdf reweighting when we reach a
1999-c non-radiation vertex
2000- if(isjetvx(imocl(n),idacl(n,1),idacl(n,2),ipdgcl(1,igraphs(1)),ipart)) then
2001- pt2pdf(imocl(n))=pt2ijcl(n)
2002- else
2003- pt2pdf(imocl(n))=1d30
2004- pt2prev(imocl(n))=1d30
2005- if (btest(mlevel,3)) then
2006- write(*,*)' rewgt: for vertex ',idacl(n,1),idacl(n,2),imocl(n),
2007- $ ' with ids ',ipdgcl(idacl(n,1),igraphs(1)),
2008- $ ipdgcl(idacl(n,2),igraphs(1)),ipdgcl(imocl(n),igraphs(1))
2009- write(*,*)' set pt2prev, pt2pdf: ',pt2prev(imocl(n)),pt2pdf(imocl(n))
2010- endif
2011+c Set scale for mother as this scale
2012+ pt2pdf(imocl(n))=q2now
2013+ else if(pt2pdf(idacl(n,i)).ge.q2now) then
2014+c If no reweighting, just copy daughter scale for mother
2015+ pt2pdf(imocl(n))=pt2pdf(idacl(n,i))
2016 endif
2017 goto 10
2018 endif
2019 enddo
2020 c fs sudakov weight
2021 if(ickkw.eq.2.and.pt2prev(idacl(n,i)).lt.pt2ijcl(n).and.
2022- $ (isvx.or.ipdgcl(idacl(n,i),igraphs(1)).ne.ipdgcl(imocl(n),igraphs(1)).or.
2023- $ (ipdgcl(idacl(n,i),igraphs(1)).ne.
2024- $ ipdgcl(idacl(n,3-i),igraphs(1)).and.
2025+ $ (isvx.or.ipdgcl(idacl(n,i),igraphs(1),iproc).ne.ipdgcl(imocl(n),igraphs(1),iproc).or.
2026+ $ (ipdgcl(idacl(n,i),igraphs(1),iproc).ne.
2027+ $ ipdgcl(idacl(n,3-i),igraphs(1),iproc).and.
2028 $ pt2prev(idacl(n,i)).gt.pt2prev(idacl(n,3-i))))) then
2029 tmp=sudwgt(sqrt(pt2min),sqrt(pt2prev(idacl(n,i))),
2030- & dsqrt(pt2ijcl(n)),ipdgcl(idacl(n,i),igraphs(1)),1)
2031+ & dsqrt(pt2ijcl(n)),ipdgcl(idacl(n,i),igraphs(1),iproc),1)
2032 rewgt=rewgt*tmp
2033 if (btest(mlevel,3)) then
2034- write(*,*)' reweight fs line: ',ipdgcl(idacl(n,i),igraphs(1)), idacl(n,i)
2035+ write(*,*)' reweight fs line: ',ipdgcl(idacl(n,i),igraphs(1),iproc), idacl(n,i)
2036 write(*,*)' pt2prev, pt2new: ',pt2prev(idacl(n,i)),pt2ijcl(n)
2037 write(*,*)' Sud: ',tmp
2038 write(*,*)' -> rewgt: ',rewgt
2039@@ -886,13 +1064,13 @@
2040 endif
2041 10 continue
2042 enddo
2043- if (ickkw.eq.2.and.n.eq.nexternal-2.and.isqcd(ipdgcl(imocl(n),igraphs(1))).and.
2044+ if (ickkw.eq.2.and.n.eq.nexternal-2.and.isqcd(ipdgcl(imocl(n),igraphs(1),iproc)).and.
2045 $ pt2prev(imocl(n)).lt.pt2ijcl(n)) then
2046 tmp=sudwgt(sqrt(pt2min),sqrt(pt2prev(imocl(n))),
2047- & dsqrt(pt2ijcl(n)),ipdgcl(imocl(n),igraphs(1)),1)
2048+ & dsqrt(pt2ijcl(n)),ipdgcl(imocl(n),igraphs(1),iproc),1)
2049 rewgt=rewgt*tmp
2050 if (btest(mlevel,3)) then
2051- write(*,*)' reweight last fs line: ',ipdgcl(imocl(n),igraphs(1)), imocl(n)
2052+ write(*,*)' reweight last fs line: ',ipdgcl(imocl(n),igraphs(1),iproc), imocl(n)
2053 write(*,*)' pt2prev, pt2new: ',pt2prev(imocl(n)),pt2ijcl(n)
2054 write(*,*)' Sud: ',tmp
2055 write(*,*)' -> rewgt: ',rewgt
2056@@ -901,9 +1079,15 @@
2057 endif
2058 enddo
2059
2060- if((ickkw.eq.2.or.pdfwgt).and.lpp(1).eq.0.and.lpp(2).eq.0)then
2061+ if(ickkw.eq.2.and.lpp(1).eq.0.and.lpp(2).eq.0)then
2062 q2fact(1)=pt2min
2063 q2fact(2)=q2fact(1)
2064+ else if (ickkw.eq.1.and.pdfwgt) then
2065+ q2fact(1)=q2bck(1)
2066+ q2fact(2)=q2bck(2)
2067+ if (btest(mlevel,3))
2068+ $ write(*,*)' set fact scales for PS to ',
2069+ $ sqrt(q2fact(1)),sqrt(q2fact(2))
2070 endif
2071
2072 if (btest(mlevel,3)) then
2073
2074=== modified file 'Template/SubProcesses/setcuts.f'
2075--- Template/SubProcesses/setcuts.f 2011-09-04 14:11:41 +0000
2076+++ Template/SubProcesses/setcuts.f 2011-10-05 03:29:23 +0000
2077@@ -566,7 +566,7 @@
2078 integer sprop(maxsproc,-max_branch:-1,lmaxconfigs)
2079 integer tprid(-max_branch:-1,lmaxconfigs)
2080 common/to_sprop/sprop,tprid
2081- logical gForceBW(-max_branch:-1,lmaxconfigs) ! Forced BW
2082+ integer gForceBW(-max_branch:-1,lmaxconfigs) ! Forced BW
2083 include 'decayBW.inc'
2084
2085 c
2086@@ -580,7 +580,7 @@
2087
2088 c Set who comes from decay based on forced BW
2089 do i=-(nexternal-3),-1
2090- if(tprid(i,1).eq.0.and.gForceBW(i,1).or.
2091+ if(tprid(i,1).eq.0.and.gForceBW(i,1).eq.1.or.
2092 $ from_decay(i)) then
2093 from_decay(i)=.true.
2094 from_decay(iforest(1,i,1))=.true.
2095
2096=== modified file 'Template/SubProcesses/setscales.f'
2097--- Template/SubProcesses/setscales.f 2010-11-02 20:52:12 +0000
2098+++ Template/SubProcesses/setscales.f 2011-10-05 03:29:23 +0000
2099@@ -132,6 +132,7 @@
2100
2101
2102 q2fact(1)=0d0 !factorization scale**2 for pdf1
2103+ q2fact(2)=0d0 !factorization scale**2 for pdf2
2104
2105 c call set_ren_scale(P,q2fact(1))
2106 c
2107
2108=== removed file 'Template/SubProcesses/status'
2109--- Template/SubProcesses/status 2010-10-30 03:26:37 +0000
2110+++ Template/SubProcesses/status 1970-01-01 00:00:00 +0000
2111@@ -1,1 +0,0 @@
2112- 0 / 1
2113
2114=== modified file 'Template/SubProcesses/symmetry.f'
2115--- Template/SubProcesses/symmetry.f 2011-08-27 21:03:09 +0000
2116+++ Template/SubProcesses/symmetry.f 2011-10-05 03:29:23 +0000
2117@@ -233,7 +233,7 @@
2118 integer iarray(imax)
2119 logical lconflict(-max_branch:nexternal)
2120 logical done
2121- logical gForceBW(-max_branch:-1,lmaxconfigs) ! Forced BW
2122+ integer gForceBW(-max_branch:-1,lmaxconfigs) ! Forced BW
2123 include 'decayBW.inc'
2124
2125 c-----
2126@@ -373,7 +373,7 @@
2127 integer itree(2,-max_branch:-1),iconfig
2128 logical lconflict(-max_branch:nexternal)
2129 integer sprop(maxsproc,-max_branch:-1) ! Propagator id
2130- logical forcebw(-max_branch:-1) ! Forced BW, for identical particle conflicts
2131+ integer forcebw(-max_branch:-1) ! Forced BW, for identical particle conflicts
2132 c
2133 c local
2134 c
2135@@ -428,14 +428,14 @@
2136 if(itree(1,-i).lt.0) then
2137 if(iden_part(itree(1,-i)).ne.0.and.
2138 $ sprop(1,-i).eq.iden_part(itree(1,-i)) .or.
2139- $ forcebw(itree(1,-i)).and.
2140+ $ forcebw(itree(1,-i)).eq.1.and.
2141 $ sprop(1,-i).eq.sprop(1,itree(1,-i)))
2142 $ iden_part(-i) = sprop(1,-i)
2143 endif
2144 if(itree(2,-i).lt.0) then
2145 if(iden_part(itree(2,-i)).ne.0.and.
2146 $ sprop(1,-i).eq.iden_part(itree(2,-i)).or.
2147- $ forcebw(itree(2,-i)).and.
2148+ $ forcebw(itree(2,-i)).eq.1.and.
2149 $ sprop(1,-i).eq.sprop(1,itree(2,-i)))
2150 $ iden_part(-i) = sprop(1,-i)
2151 endif
2152
2153=== modified file 'Template/SubProcesses/unwgt.f'
2154--- Template/SubProcesses/unwgt.f 2011-09-11 13:02:35 +0000
2155+++ Template/SubProcesses/unwgt.f 2011-10-05 03:29:23 +0000
2156@@ -476,6 +476,9 @@
2157 jpart(1,isym(i,jsym)) = idup(i,ip,numproc)
2158 jpart(2,isym(i,jsym)) = mothup(1,i)
2159 jpart(3,isym(i,jsym)) = mothup(2,i)
2160+c Color info is filled in mothup
2161+ jpart(4,isym(i,jsym)) = 0
2162+ jpart(5,isym(i,jsym)) = 0
2163 jpart(6,isym(i,jsym)) = 1
2164 enddo
2165 do i=1,nincoming
2166@@ -550,7 +553,7 @@
2167 c
2168 c write(*,*) 'Writing event'
2169 if(q2fact(1).gt.0.and.q2fact(2).gt.0)then
2170- sscale = (q2fact(1)*q2fact(2))**0.25
2171+ sscale = sqrt(max(q2fact(1),q2fact(2)))
2172 else if(q2fact(1).gt.0)then
2173 sscale = sqrt(q2fact(1))
2174 else if(q2fact(2).gt.0)then
2175
2176=== modified file 'Template/bin/survey'
2177--- Template/bin/survey 2011-08-24 23:38:57 +0000
2178+++ Template/bin/survey 2011-10-05 03:29:23 +0000
2179@@ -122,6 +122,10 @@
2180 time nice ./$job >/dev/null
2181 ../../bin/sum_html >/dev/null
2182 fi
2183+ if [[ -e ../../error ]]; then
2184+ echo "File error present, stop execution"
2185+ exit
2186+ fi
2187 done
2188 cd ..
2189 if [[ $mode == 0 ]]; then
2190
2191=== modified file 'UpdateNotes.txt'
2192--- UpdateNotes.txt 2011-09-30 13:55:43 +0000
2193+++ UpdateNotes.txt 2011-10-05 03:29:23 +0000
2194@@ -1,6 +1,50 @@
2195 Update notes for MadGraph 5 (in reverse time order)
2196
2197-1.3.17 (30/10/11) OM: Fix a crash created by ALOHA when it tries to create the full
2198+1.3.18 (04/10/11) JA: Use model information to determine color of particles
2199+ for reweighting and propagator color info.
2200+ JA: Changed the definition of "forbidden s-channels"
2201+ denoted by "$" to exclude on-shell s-channels while
2202+ keeping all diagrams (i.e., complemetary to the decay
2203+ chain formalism). This reduces the problems with
2204+ gauge invariance compared to previously.
2205+ "Onshell" is as usual defined by the "bwcutoff" flag
2206+ in the run_card.dat.
2207+ JA: Enable proper 4-flavor matching (such as gg>hbb~+jets)
2208+ Note that you need the Pythia/PGS package v. 2.1.9 or
2209+ later to use with 4F matching.
2210+ Changes include: alpha_s reweighting also for b vertices,
2211+ new scale treatment (mu_F for pp>hbb~ is (pT_b^max*m_Th)),
2212+ no clustering of gluons to final-state massive particles
2213+ in MadEvent.
2214+ JA: Ensure that factorization scale settings and matching works
2215+ also in singlet t-channel exchange processes like
2216+ single top and VBF. The dynamic factorization
2217+ scale is given by the pT of the scattered quark
2218+ (on each side of the event).
2219+ Note: You need the Pythia/PGS package v. 2.1.10 or later
2220+ to use with VBF matching, to ensure that both radiated
2221+ and scattered partons are treated correctly
2222+ - scattered partons need to be excluded from the matching,
2223+ since their pT can be below QCUT. An even better
2224+ treatment would require to individually shower and match
2225+ the two sides in Pythia, which is not presently possible.
2226+ Note: In the matched 4-flavor process p p > t b~ j $ w+ w- t~ +
2227+ p p > t b~ j j $ w+ w- t~, there is an admixture
2228+ of t-channel single top (with up to 1 radiated jet)
2229+ and s-channel single top (with up to 2 radiated jets).
2230+ In this case, the automatic determination of maximum
2231+ multiplicity sample doesn't work (since max in the file
2232+ will be 2 jets, but for t-channel max is 1 jet).
2233+ So MAXJETS=1 must be specified in the pythia_card.dat.
2234+ JA: Fixed pdf reweighting for matching, which due to a mistake
2235+ had never been activated.
2236+ JA: Improved phase space integration presetting further by
2237+ taking into account special cuts like xpt, ht etc.
2238+ JA: Introduce new convention for invariant mass cuts
2239+ - if max < min, exclude intermediate range
2240+ (allows to exclude W/Z dijet resonances in VBF processes)
2241+
2242+1.3.17 (30/09/11) OM: Fix a crash created by ALOHA when it tries to create the full
2243 set of ALOHA routines (pythia8 output only).
2244
2245 1.3.16 (11/09/11) JA: Fixed the problem from 1.3.12.
2246
2247=== modified file 'madgraph/VERSION'
2248--- madgraph/VERSION 2011-09-30 13:55:43 +0000
2249+++ madgraph/VERSION 2011-10-05 03:29:23 +0000
2250@@ -1,3 +1,3 @@
2251-version = 1.3.17
2252-date = 2011-09-30
2253+version = 1.3.18
2254+date = 2011-10-04
2255
2256
2257=== modified file 'madgraph/core/base_objects.py'
2258--- madgraph/core/base_objects.py 2011-08-27 02:01:27 +0000
2259+++ madgraph/core/base_objects.py 2011-10-05 03:29:23 +0000
2260@@ -1051,9 +1051,12 @@
2261
2262 self['id'] = 0
2263 self['number'] = 0
2264- # True = final, False = initial (boolean to save memory)
2265+ # state: True = final, False = initial (boolean to save memory)
2266 self['state'] = True
2267+ # from_group: Used in diagram generation
2268 self['from_group'] = True
2269+ # onshell: decaying leg (True), forbidden s-channel (False), none (None)
2270+ self['onshell'] = None
2271
2272 def filter(self, name, value):
2273 """Filter for valid leg property values."""
2274@@ -1075,12 +1078,18 @@
2275 "%s is not a valid boolean for leg flag from_group" % \
2276 str(value)
2277
2278+ if name == 'onshell':
2279+ if not isinstance(value, bool) and value != None:
2280+ raise self.PhysicsObjectError, \
2281+ "%s is not a valid boolean for leg flag onshell" % \
2282+ str(value)
2283+
2284 return True
2285
2286 def get_sorted_keys(self):
2287 """Return particle property names as a nicely sorted list."""
2288
2289- return ['id', 'number', 'state', 'from_group']
2290+ return ['id', 'number', 'state', 'from_group', 'onshell']
2291
2292 def is_fermion(self, model):
2293 """Returns True if the particle corresponding to the leg is a
2294
2295=== modified file 'madgraph/core/diagram_generation.py'
2296--- madgraph/core/diagram_generation.py 2011-07-22 19:48:59 +0000
2297+++ madgraph/core/diagram_generation.py 2011-10-05 03:29:23 +0000
2298@@ -546,14 +546,18 @@
2299 if process.get('forbidden_s_channels'):
2300 ninitial = len(filter(lambda leg: leg.get('state') == False,
2301 process.get('legs')))
2302- res = base_objects.DiagramList(\
2303- filter(lambda diagram: \
2304- not any([vertex.get_s_channel_id(\
2305- process.get('model'), ninitial) \
2306- in process.get('forbidden_s_channels')
2307- for vertex in diagram.get('vertices')[:-1]]),
2308- res))
2309-
2310+ verts = base_objects.VertexList(sum([[vertex for vertex \
2311+ in diagram.get('vertices')[:-1]
2312+ if vertex.get_s_channel_id(\
2313+ process.get('model'), ninitial) \
2314+ in process.get('forbidden_s_channels')] \
2315+ for diagram in res], []))
2316+ for vert in verts:
2317+ # Use onshell = False to indicate that this s-channel is forbidden
2318+ newleg = copy.copy(vert.get('legs').pop(-1))
2319+ newleg.set('onshell', False)
2320+ vert.get('legs').append(newleg)
2321+
2322 # Set diagrams to res
2323 self['diagrams'] = res
2324
2325@@ -577,6 +581,9 @@
2326 ntlnumber = legs[-1].get('number')
2327 lastleg = filter(lambda leg: leg.get('number') != ntlnumber,
2328 lastvx.get('legs'))[0]
2329+ # Reset onshell in case we have forbidden s-channels
2330+ if lastleg.get('onshell') == False:
2331+ lastleg.set('onshell', None)
2332 # Replace the last leg of nexttolastvertex
2333 legs[-1] = lastleg
2334 nexttolastvertex.set('legs', legs)
2335@@ -908,15 +915,17 @@
2336 vertices = []
2337
2338 for diagram in self.get('diagrams'):
2339+ # Keep track of external legs (leg numbers already used)
2340+ leg_external = set()
2341 for ivx, vertex in enumerate(diagram.get('vertices')):
2342 for ileg, leg in enumerate(vertex.get('legs')):
2343- if leg.get('state') and leg.get('id') in decay_ids:
2344- # Use from_group to indicate decaying legs,
2345+ # Ensure that only external legs get decay flag
2346+ if leg.get('state') and leg.get('id') in decay_ids and \
2347+ leg.get('number') not in leg_external:
2348+ # Use onshell to indicate decaying legs,
2349 # i.e. legs that have decay chains
2350 leg = copy.copy(leg)
2351- leg.set('from_group', True)
2352- else:
2353- leg.set('from_group', False)
2354+ leg.set('onshell', True)
2355 try:
2356 index = legs.index(leg)
2357 except ValueError:
2358@@ -924,6 +933,7 @@
2359 legs.append(leg)
2360 else: # Found a leg
2361 vertex.get('legs')[ileg] = legs[index]
2362+ leg_external.add(leg.get('number'))
2363 try:
2364 index = vertices.index(vertex)
2365 diagram.get('vertices')[ivx] = vertices[index]
2366@@ -986,7 +996,7 @@
2367 self['decay_chains'].append(\
2368 DecayChainAmplitude(process, collect_mirror_procs,
2369 ignore_six_quark_processes))
2370- # Flag decaying legs in the core process by from_group = True
2371+ # Flag decaying legs in the core process by onshell = True
2372 decay_ids = sum([[a.get('process').get('legs')[0].get('id') \
2373 for a in dec.get('amplitudes')] for dec in \
2374 self['decay_chains']], [])
2375
2376=== modified file 'madgraph/core/helas_objects.py'
2377--- madgraph/core/helas_objects.py 2011-09-11 13:02:35 +0000
2378+++ madgraph/core/helas_objects.py 2011-10-05 03:29:23 +0000
2379@@ -85,12 +85,13 @@
2380 part = model.get_particle(leg.get('id'))
2381
2382 # For legs with decay chains defined, include leg id (don't combine)
2383- if leg.get('from_group'): id = leg.get('id')
2384+ if leg.get('onshell'): id = leg.get('id')
2385 else: id = 0
2386 # For FS legs, don't care about number (but do for IS legs)
2387 if leg.get('state'): number = 0
2388 else: number = leg.get('number')
2389- return [((number, id, part.get('spin'),
2390+ # Include also onshell, since this specifies forbidden s-channel
2391+ return [((number, id, part.get('spin'), leg.get('onshell'),
2392 part.get('is_part'), part.get('self_antipart'),
2393 part.get('mass'), part.get('width'), part.get('color')),
2394 leg.get('number'))]
2395@@ -191,7 +192,7 @@
2396 # fermionflow = 1 fermions have +-1 for flow (bosons always +1),
2397 # -1 is used only if there is a fermion flow clash
2398 # due to a Majorana particle
2399- self['state'] = 'incoming'
2400+ self['state'] = 'initial'
2401 self['leg_state'] = True
2402 self['mothers'] = HelasWavefunctionList()
2403 self['number_external'] = 0
2404@@ -202,8 +203,9 @@
2405 self['decay'] = False
2406 # The onshell flag is used in processes with defined decay
2407 # chains, to indicate that this wavefunction is decayed and
2408- # should be onshell
2409- self['onshell'] = False
2410+ # should be onshell (True), as well as for forbidden s-channels (False).
2411+ # Default is None
2412+ self['onshell'] = None
2413
2414 # Customized constructor
2415 def __init__(self, *arguments):
2416@@ -227,6 +229,9 @@
2417 self.set('number_external', leg.get('number'))
2418 self.set('number', leg.get('number'))
2419 self.set('state', {False: 'initial', True: 'final'}[leg.get('state')])
2420+ if leg.get('onshell') == False:
2421+ # Denotes forbidden s-channel
2422+ self.set('onshell', leg.get('onshell'))
2423 self.set('leg_state', leg.get('state'))
2424 # Need to set 'decay' to True for particles which will be
2425 # decayed later, in order to not combine such processes
2426@@ -365,11 +370,17 @@
2427 "%s is not a valid list of mothers for wavefunction" % \
2428 str(value)
2429
2430- if name in ['decay', 'onshell']:
2431+ if name in ['decay']:
2432 if not isinstance(value, bool):
2433 raise self.PhysicsObjectError, \
2434 "%s is not a valid bool" % str(value) + \
2435- " for decay or onshell"
2436+ " for decay"
2437+
2438+ if name in ['onshell']:
2439+ if not isinstance(value, bool) and value != None:
2440+ raise self.PhysicsObjectError, \
2441+ "%s is not a valid bool" % str(value) + \
2442+ " for onshell"
2443
2444 return True
2445
2446@@ -933,32 +944,33 @@
2447 # Generate last vertex
2448 legs = base_objects.LegList()
2449
2450- # We use the from_group flag to indicate whether this outgoing
2451- # leg corresponds to a decaying (onshell) particle or not
2452+ # We use the onshell flag to indicate whether this outgoing
2453+ # leg corresponds to a decaying (onshell) particle, forbidden
2454+ # s-channel, or regular
2455 try:
2456- lastleg = wf_dict[self.get('number')]
2457+ lastleg = wf_dict[(self.get('number'),self.get('onshell'))]
2458 except KeyError:
2459 lastleg = base_objects.Leg({
2460 'id': self.get_pdg_code(),
2461 'number': self.get('number_external'),
2462 'state': self.get('leg_state'),
2463- 'from_group': self.get('onshell')
2464+ 'onshell': self.get('onshell')
2465 })
2466 if optimization != 0:
2467- wf_dict[self.get('number')] = lastleg
2468+ wf_dict[(self.get('number'),self.get('onshell'))] = lastleg
2469
2470 for mother in self.get('mothers'):
2471 try:
2472- leg = wf_dict[mother.get('number')]
2473+ leg = wf_dict[(mother.get('number'),False)]
2474 except KeyError:
2475 leg = base_objects.Leg({
2476 'id': mother.get_pdg_code(),
2477 'number': mother.get('number_external'),
2478 'state': mother.get('leg_state'),
2479- 'from_group': mother.get('onshell')
2480+ 'onshell': None
2481 })
2482 if optimization != 0:
2483- wf_dict[mother.get('number')] = leg
2484+ wf_dict[(mother.get('number'),False)] = leg
2485 legs.append(leg)
2486
2487 legs.append(lastleg)
2488@@ -1025,7 +1037,7 @@
2489 'id': mother.get_pdg_code(),
2490 'number': mother.get('number_external'),
2491 'state': mother.get('leg_state'),
2492- 'from_group': False
2493+ 'onshell': mother.get('onshell')
2494 }))
2495
2496 if init_mothers[0].get('number_external') == 1 and \
2497@@ -1091,7 +1103,7 @@
2498 'id': mother.get_pdg_code(),
2499 'number': mother.get('number_external'),
2500 'state': mother.get('leg_state'),
2501- 'from_group': False
2502+ 'onshell': mother.get('onshell')
2503 }))
2504 legs.insert(0, mother_leg)
2505
2506@@ -1729,16 +1741,16 @@
2507 legs = base_objects.LegList()
2508 for mother in self.get('mothers'):
2509 try:
2510- leg = wf_dict[mother.get('number')]
2511+ leg = wf_dict[(mother.get('number'),False)]
2512 except KeyError:
2513 leg = base_objects.Leg({
2514 'id': mother.get_pdg_code(),
2515 'number': mother.get('number_external'),
2516 'state': mother.get('leg_state'),
2517- 'from_group': mother.get('onshell')
2518+ 'onshell': None
2519 })
2520 if optimization != 0:
2521- wf_dict[mother.get('number')] = leg
2522+ wf_dict[(mother.get('number'),False)] = leg
2523 legs.append(leg)
2524
2525 return base_objects.Vertex({
2526@@ -1781,7 +1793,7 @@
2527 'id': mother.get_pdg_code(),
2528 'number': mother.get('number_external'),
2529 'state': mother.get('leg_state'),
2530- 'from_group': False
2531+ 'onshell': mother.get('onshell')
2532 }))
2533
2534 # Renumber resulting leg according to minimum leg number
2535@@ -1815,7 +1827,7 @@
2536 'id': mother.get_pdg_code(),
2537 'number': mother.get('number_external'),
2538 'state': mother.get('leg_state'),
2539- 'from_group': False
2540+ 'onshell': mother.get('onshell')
2541 }))
2542 # Renumber resulting leg according to minimum leg number
2543 legs[-1].set('number', min([l.get('number') for l in legs[:-1]]))
2544@@ -1857,7 +1869,7 @@
2545 popped_legs.append(base_objects.Leg({'id': 21,
2546 'number': min([l.get('number') for l in popped_legs]),
2547 'state': True,
2548- 'from_group': False}))
2549+ 'onshell': None}))
2550
2551 new_vertex = base_objects.Vertex({
2552 'id': vertex.get('id'),
2553
2554=== modified file 'madgraph/iolibs/export_v4.py'
2555--- madgraph/iolibs/export_v4.py 2011-09-11 13:02:35 +0000
2556+++ madgraph/iolibs/export_v4.py 2011-10-05 03:29:23 +0000
2557@@ -621,7 +621,7 @@
2558 if subproc_group:
2559 pdf_lines = pdf_lines + \
2560 ("%s%d=PDG2PDF(ABS(LPP(IB(%d))),%d*LP," + \
2561- "XBK(IB(%d)),DSQRT(Q2FACT(IB(%d))))\n") % \
2562+ "XBK(IB(%d)),DSQRT(Q2FACT(%d)))\n") % \
2563 (pdf_codes[initial_state],
2564 i + 1, i + 1, pdgtopdf[initial_state],
2565 i + 1, i + 1)
2566@@ -1006,6 +1006,10 @@
2567 mapconfigs,
2568 matrix_element)
2569
2570+ filename = 'get_color.f'
2571+ self.write_colors_file(writers.FortranWriter(filename),
2572+ matrix_element)
2573+
2574 filename = 'decayBW.inc'
2575 self.write_decayBW_file(writers.FortranWriter(filename),
2576 s_and_t_channels)
2577@@ -1410,6 +1414,58 @@
2578 return True
2579
2580 #===========================================================================
2581+ # write_coloramps_file
2582+ #===========================================================================
2583+ def write_colors_file(self, writer, matrix_elements):
2584+ """Write the get_color.f file for MadEvent, which returns color
2585+ for all particles used in the matrix element."""
2586+
2587+ if isinstance(matrix_elements, helas_objects.HelasMatrixElement):
2588+ matrix_elements = [matrix_elements]
2589+
2590+ model = matrix_elements[0].get('processes')[0].get('model')
2591+
2592+ # We need the both particle and antiparticle wf_ids, since the identity
2593+ # depends on the direction of the wf.
2594+ wf_ids = set(sum([sum([sum([[wf.get_pdg_code(),wf.get_anti_pdg_code()] \
2595+ for wf in d.get('wavefunctions')],[]) \
2596+ for d in me.get('diagrams')], []) \
2597+ for me in matrix_elements], []))
2598+
2599+ leg_ids = set(sum([sum([[l.get('id') for l in \
2600+ p.get_legs_with_decays()] for p in \
2601+ me.get('processes')], []) for me in
2602+ matrix_elements], []))
2603+ particle_ids = sorted(list(wf_ids.union(leg_ids)))
2604+
2605+ lines = """function get_color(ipdg)
2606+ implicit none
2607+ integer get_color, ipdg
2608+
2609+ if(ipdg.eq.%d)then
2610+ get_color=%d
2611+ return
2612+ """ % (particle_ids[0], model.get_particle(particle_ids[0]).get_color())
2613+
2614+ for part_id in particle_ids[1:]:
2615+ lines += """else if(ipdg.eq.%d)then
2616+ get_color=%d
2617+ return
2618+ """ % (part_id, model.get_particle(part_id).get_color())
2619+ lines += """else
2620+ write(*,*)'Error: No color given for pdg ',ipdg
2621+ get_color=0
2622+ return
2623+ endif
2624+ end
2625+ """
2626+
2627+ # Write the file
2628+ writer.writelines(lines)
2629+
2630+ return True
2631+
2632+ #===========================================================================
2633 # write_maxconfigs_file
2634 #===========================================================================
2635 def write_maxconfigs_file(self, writer, matrix_elements):
2636@@ -1591,17 +1647,17 @@
2637
2638 lines = []
2639
2640- booldict = {False: ".false.", True: ".true."}
2641+ booldict = {None: "0", True: "1", False: "2"}
2642
2643 for iconf, config in enumerate(s_and_t_channels):
2644 schannels = config[0]
2645 for vertex in schannels:
2646 # For the resulting leg, pick out whether it comes from
2647- # decay or not, as given by the from_group flag
2648+ # decay or not, as given by the onshell flag
2649 leg = vertex.get('legs')[-1]
2650 lines.append("data gForceBW(%d,%d)/%s/" % \
2651 (leg.get('number'), iconf + 1,
2652- booldict[leg.get('from_group')]))
2653+ booldict[leg.get('onshell')]))
2654
2655 # Write the file
2656 writer.writelines(lines)
2657@@ -2067,6 +2123,10 @@
2658 maxflows,
2659 matrix_elements)
2660
2661+ filename = 'get_color.f'
2662+ self.write_colors_file(writers.FortranWriter(filename),
2663+ matrix_elements)
2664+
2665 filename = 'config_subproc_map.inc'
2666 self.write_config_subproc_map_file(writers.FortranWriter(filename),
2667 subproc_diagrams_for_config)
2668
2669=== modified file 'madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc'
2670--- madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc 2011-05-18 02:29:29 +0000
2671+++ madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc 2011-10-05 03:29:23 +0000
2672@@ -149,14 +149,14 @@
2673 C Select among the subprocesses based on PDF weight
2674 SUMPROB=0D0
2675 DO J=1,SYMCONF(0)
2676- DO I=1,MAXSPROC
2677- IF(CONFSUB(I,SYMCONF(J)).NE.0) THEN
2678- DO K=1,2
2679- IF(K.EQ.1.OR.MIRRORPROCS(I))THEN
2680+ DO IPROC=1,MAXSPROC
2681+ IF(CONFSUB(IPROC,SYMCONF(J)).NE.0) THEN
2682+ DO IMIRROR=1,2
2683+ IF(IMIRROR.EQ.1.OR.MIRRORPROCS(IPROC))THEN
2684 C Calculate PDF weight for all subprocesses
2685- SELPROC(K,I,J)=DSIGPROC(PP,J,I,K,SYMCONF,CONFSUB,1d0,4)
2686- SUMPROB=SUMPROB+SELPROC(K,I,J)
2687- IF(K.EQ.2)THEN
2688+ SELPROC(IMIRROR,IPROC,J)=DSIGPROC(PP,J,IPROC,IMIRROR,SYMCONF,CONFSUB,1d0,4)
2689+ SUMPROB=SUMPROB+SELPROC(IMIRROR,IPROC,J)
2690+ IF(IMIRROR.EQ.2)THEN
2691 C Need to flip back x values
2692 XDUM=XBK(1)
2693 XBK(1)=XBK(2)
2694
2695=== modified file 'tests/acceptance_tests/test_cmd.py'
2696--- tests/acceptance_tests/test_cmd.py 2011-08-07 19:55:37 +0000
2697+++ tests/acceptance_tests/test_cmd.py 2011-10-05 03:29:23 +0000
2698@@ -182,6 +182,10 @@
2699 'SubProcesses',
2700 'P0_epem_epem',
2701 'maxconfigs.inc')))
2702+ self.assertTrue(os.path.exists(os.path.join(self.out_dir,
2703+ 'SubProcesses',
2704+ 'P0_epem_epem',
2705+ 'get_color.f')))
2706 self.assertFalse(os.path.exists(os.path.join(self.out_dir,
2707 'SubProcesses',
2708 'P0_epem_epem',
2709@@ -613,6 +617,10 @@
2710 'SubProcesses',
2711 'P2_gg_qq',
2712 'maxconfigs.inc')))
2713+ self.assertTrue(os.path.exists(os.path.join(self.out_dir,
2714+ 'SubProcesses',
2715+ 'P2_gg_qq',
2716+ 'get_color.f')))
2717 # Check that the Source directory compiles
2718 status = subprocess.call(['make'],
2719 stdout=devnull,
2720
2721=== modified file 'tests/input_files/e+e-_e+e-.pkl'
2722--- tests/input_files/e+e-_e+e-.pkl 2011-07-21 04:45:53 +0000
2723+++ tests/input_files/e+e-_e+e-.pkl 2011-10-05 03:29:23 +0000
2724@@ -41,11982 +41,12003 @@
2725 p14
2726 g5
2727 (dp15
2728-S'state'
2729+S'onshell'
2730 p16
2731+NsS'state'
2732+p17
2733 I00
2734 sS'id'
2735-p17
2736+p18
2737 I-11
2738 sS'from_group'
2739-p18
2740+p19
2741 I01
2742 sS'number'
2743-p19
2744+p20
2745 I1
2746-stp20
2747-Rp21
2748+stp21
2749+Rp22
2750 ag0
2751 (g14
2752 g5
2753-(dp22
2754+(dp23
2755 g16
2756+Nsg17
2757 I00
2758-sg17
2759+sg18
2760 I11
2761-sg18
2762+sg19
2763 I01
2764-sg19
2765+sg20
2766 I2
2767-stp23
2768-Rp24
2769+stp24
2770+Rp25
2771 ag0
2772 (g14
2773 g5
2774-(dp25
2775+(dp26
2776 g16
2777+Nsg17
2778 I01
2779-sg17
2780+sg18
2781 I-11
2782-sg18
2783+sg19
2784 I01
2785-sg19
2786+sg20
2787 I3
2788-stp26
2789-Rp27
2790+stp27
2791+Rp28
2792 ag0
2793 (g14
2794 g5
2795-(dp28
2796+(dp29
2797 g16
2798+Nsg17
2799 I01
2800-sg17
2801+sg18
2802 I11
2803-sg18
2804-I01
2805 sg19
2806+I01
2807+sg20
2808 I4
2809-stp29
2810-Rp30
2811-atp31
2812-Rp32
2813+stp30
2814+Rp31
2815+atp32
2816+Rp33
2817 sS'uid'
2818-p33
2819+p34
2820 I0
2821 sS'forbidden_particles'
2822-p34
2823-(lp35
2824+p35
2825+(lp36
2826 sS'orders'
2827-p36
2828-(dp37
2829+p37
2830+(dp38
2831 S'WEIGHTED'
2832-p38
2833+p39
2834 I4
2835 ssS'forbidden_s_channels'
2836-p39
2837-(lp40
2838+p40
2839+(lp41
2840 sS'required_s_channels'
2841-p41
2842-(lp42
2843+p42
2844+(lp43
2845 sS'model'
2846-p43
2847+p44
2848 g0
2849 (cmadgraph.core.base_objects
2850 Model
2851-p44
2852+p45
2853 g5
2854-(dp45
2855+(dp46
2856 S'ref_dict_to0'
2857-p46
2858-(dp47
2859+p47
2860+(dp48
2861 (I-4
2862 I4
2863 I21
2864-tp48
2865-(lp49
2866+tp49
2867+(lp50
2868 I4
2869 as(I-24
2870 I24
2871-tp50
2872-(lp51
2873+tp51
2874+(lp52
2875 I0
2876 as(I-1
2877 I1
2878 I23
2879-tp52
2880-(lp53
2881+tp53
2882+(lp54
2883 I18
2884 as(I-5
2885 I5
2886 I23
2887-tp54
2888-(lp55
2889+tp55
2890+(lp56
2891 I22
2892 as(I-15
2893 I15
2894 I25
2895-tp56
2896-(lp57
2897+tp57
2898+(lp58
2899 I42
2900 as(I-24
2901 I-11
2902 I12
2903-tp58
2904-(lp59
2905+tp59
2906+(lp60
2907 I39
2908 as(I-24
2909 I-15
2910 I16
2911-tp60
2912-(lp61
2913+tp61
2914+(lp62
2915 I41
2916 as(I21
2917 I21
2918 I21
2919 I21
2920-tp62
2921-(lp63
2922+tp63
2923+(lp64
2924 I8
2925 as(I11
2926 I-11
2927-tp64
2928-(lp65
2929+tp65
2930+(lp66
2931 I0
2932 as(I-13
2933 I13
2934 I22
2935-tp66
2936-(lp67
2937+tp67
2938+(lp68
2939 I16
2940 as(I-4
2941 I4
2942-tp68
2943-(lp69
2944+tp69
2945+(lp70
2946 I0
2947 as(I-5
2948 I5
2949-tp70
2950-(lp71
2951+tp71
2952+(lp72
2953 I0
2954 as(I-1
2955 I1
2956 I21
2957-tp72
2958-(lp73
2959+tp73
2960+(lp74
2961 I1
2962 as(I-3
2963 I3
2964 I21
2965-tp74
2966-(lp75
2967+tp75
2968+(lp76
2969 I3
2970 as(I-2
2971 I2
2972-tp76
2973-(lp77
2974+tp77
2975+(lp78
2976 I0
2977 as(I5
2978 I-5
2979-tp78
2980-(lp79
2981+tp79
2982+(lp80
2983 I0
2984 as(I-6
2985 I5
2986 I24
2987-tp80
2988-(lp81
2989+tp81
2990+(lp82
2991 I35
2992 as(I-13
2993 I13
2994 I23
2995-tp82
2996-(lp83
2997+tp83
2998+(lp84
2999 I25
3000 as(I1
3001 I-1
3002-tp84
3003-(lp85
3004+tp85
3005+(lp86
3006 I0
3007 as(I-24
3008 I-3
3009 I4
3010-tp86
3011-(lp87
3012+tp87
3013+(lp88
3014 I31
3015 as(I21
3016 I21
3017-tp88
3018-(lp89
3019+tp89
3020+(lp90
3021 I0
3022 as(I-1
3023 I1
3024-tp90
3025-(lp91
3026+tp91
3027+(lp92
3028 I0
3029 as(I16
3030 I-16
3031-tp92
3032-(lp93
3033+tp93
3034+(lp94
3035 I0
3036 as(I-3
3037 I3
3038 I23
3039-tp94
3040-(lp95
3041+tp95
3042+(lp96
3043 I20
3044 as(I-2
3045 I1
3046 I24
3047-tp96
3048-(lp97
3049+tp97
3050+(lp98
3051 I33
3052 as(I12
3053 I-12
3054-tp98
3055-(lp99
3056+tp99
3057+(lp100
3058 I0
3059 as(I-2
3060 I2
3061 I23
3062-tp100
3063-(lp101
3064+tp101
3065+(lp102
3066 I19
3067 as(I4
3068 I-4
3069-tp102
3070-(lp103
3071+tp103
3072+(lp104
3073 I0
3074 as(I-16
3075 I16
3076 I23
3077-tp104
3078-(lp105
3079+tp105
3080+(lp106
3081 I29
3082 as(I-13
3083 I13
3084-tp106
3085-(lp107
3086+tp107
3087+(lp108
3088 I0
3089 as(I23
3090 I23
3091 I25
3092 I25
3093-tp108
3094-(lp109
3095+tp109
3096+(lp110
3097 I55
3098 as(I-2
3099 I2
3100 I22
3101-tp110
3102-(lp111
3103+tp111
3104+(lp112
3105 I10
3106 as(I-24
3107 I23
3108 I24
3109-tp112
3110-(lp113
3111+tp113
3112+(lp114
3113 I46
3114 as(I-24
3115 I23
3116 I23
3117 I24
3118-tp114
3119-(lp115
3120+tp115
3121+(lp116
3122 I52
3123 as(I-24
3124 I24
3125 I25
3126-tp116
3127-(lp117
3128+tp117
3129+(lp118
3130 I47
3131 as(I-15
3132 I15
3133 I23
3134-tp118
3135-(lp119
3136+tp119
3137+(lp120
3138 I26
3139 as(I-11
3140 I11
3141-tp120
3142-(lp121
3143+tp121
3144+(lp122
3145 I0
3146 as(I-2
3147 I2
3148 I21
3149-tp122
3150-(lp123
3151+tp123
3152+(lp124
3153 I2
3154 as(I23
3155 I23
3156-tp124
3157-(lp125
3158+tp125
3159+(lp126
3160 I0
3161 as(I-5
3162 I5
3163 I22
3164-tp126
3165-(lp127
3166+tp127
3167+(lp128
3168 I13
3169 as(I-14
3170 I14
3171-tp128
3172-(lp129
3173+tp129
3174+(lp130
3175 I0
3176 as(I6
3177 I-6
3178-tp130
3179-(lp131
3180+tp131
3181+(lp132
3182 I0
3183 as(I-5
3184 I5
3185 I25
3186-tp132
3187-(lp133
3188+tp133
3189+(lp134
3190 I43
3191 as(I23
3192 I23
3193 I25
3194-tp134
3195-(lp135
3196+tp135
3197+(lp136
3198 I48
3199 as(I14
3200 I-14
3201-tp136
3202-(lp137
3203+tp137
3204+(lp138
3205 I0
3206 as(I-16
3207 I15
3208 I24
3209-tp138
3210-(lp139
3211+tp139
3212+(lp140
3213 I38
3214 as(I-24
3215 I-13
3216 I14
3217-tp140
3218-(lp141
3219+tp141
3220+(lp142
3221 I40
3222 as(I-3
3223 I3
3224-tp142
3225-(lp143
3226+tp143
3227+(lp144
3228 I0
3229 as(I22
3230 I22
3231-tp144
3232-(lp145
3233+tp145
3234+(lp146
3235 I0
3236 as(I24
3237 I-24
3238-tp146
3239-(lp147
3240+tp147
3241+(lp148
3242 I0
3243 as(I2
3244 I-2
3245-tp148
3246-(lp149
3247+tp149
3248+(lp150
3249 I0
3250 as(I-6
3251 I6
3252 I25
3253-tp150
3254-(lp151
3255+tp151
3256+(lp152
3257 I44
3258 as(I25
3259 I25
3260-tp152
3261-(lp153
3262+tp153
3263+(lp154
3264 I0
3265 as(I-3
3266 I3
3267 I22
3268-tp154
3269-(lp155
3270+tp155
3271+(lp156
3272 I11
3273 as(I-12
3274 I12
3275 I23
3276-tp156
3277-(lp157
3278+tp157
3279+(lp158
3280 I27
3281 as(I-16
3282 I16
3283-tp158
3284-(lp159
3285+tp159
3286+(lp160
3287 I0
3288 as(I-5
3289 I5
3290 I21
3291-tp160
3292-(lp161
3293+tp161
3294+(lp162
3295 I5
3296 as(I-12
3297 I12
3298-tp162
3299-(lp163
3300+tp163
3301+(lp164
3302 I0
3303 as(I-6
3304 I6
3305 I23
3306-tp164
3307-(lp165
3308+tp165
3309+(lp166
3310 I23
3311 as(I-24
3312 I22
3313 I24
3314-tp166
3315-(lp167
3316+tp167
3317+(lp168
3318 I45
3319 as(I-12
3320 I11
3321 I24
3322-tp168
3323-(lp169
3324+tp169
3325+(lp170
3326 I36
3327 as(I21
3328 I21
3329 I21
3330-tp170
3331-(lp171
3332+tp171
3333+(lp172
3334 I7
3335 as(I-15
3336 I15
3337-tp172
3338-(lp173
3339+tp173
3340+(lp174
3341 I0
3342 as(I3
3343 I-3
3344-tp174
3345-(lp175
3346+tp175
3347+(lp176
3348 I0
3349 as(I-6
3350 I6
3351 I22
3352-tp176
3353-(lp177
3354+tp177
3355+(lp178
3356 I14
3357 as(I25
3358 I25
3359 I25
3360-tp178
3361-(lp179
3362+tp179
3363+(lp180
3364 I49
3365 as(I-24
3366 I-24
3367 I24
3368 I24
3369-tp180
3370-(lp181
3371+tp181
3372+(lp182
3373 I53
3374 as(I-15
3375 I15
3376 I22
3377-tp182
3378-(lp183
3379+tp183
3380+(lp184
3381 I17
3382 as(I-11
3383 I11
3384 I23
3385-tp184
3386-(lp185
3387+tp185
3388+(lp186
3389 I24
3390 as(I-24
3391 I24
3392 I25
3393 I25
3394-tp186
3395-(lp187
3396+tp187
3397+(lp188
3398 I54
3399 as(I-6
3400 I6
3401 I21
3402-tp188
3403-(lp189
3404+tp189
3405+(lp190
3406 I6
3407 as(I-24
3408 I-1
3409 I2
3410-tp190
3411-(lp191
3412+tp191
3413+(lp192
3414 I30
3415 as(I-11
3416 I11
3417 I22
3418-tp192
3419-(lp193
3420+tp193
3421+(lp194
3422 I15
3423 as(I-14
3424 I13
3425 I24
3426-tp194
3427-(lp195
3428+tp195
3429+(lp196
3430 I37
3431 as(I-4
3432 I4
3433 I23
3434-tp196
3435-(lp197
3436+tp197
3437+(lp198
3438 I21
3439 as(I-24
3440 I22
3441 I22
3442 I24
3443-tp198
3444-(lp199
3445+tp199
3446+(lp200
3447 I50
3448 as(I-24
3449 I22
3450 I23
3451 I24
3452-tp200
3453-(lp201
3454+tp201
3455+(lp202
3456 I51
3457 as(I-24
3458 I-5
3459 I6
3460-tp202
3461-(lp203
3462+tp203
3463+(lp204
3464 I32
3465 as(I13
3466 I-13
3467-tp204
3468-(lp205
3469+tp205
3470+(lp206
3471 I0
3472 as(I-4
3473 I4
3474 I22
3475-tp206
3476-(lp207
3477+tp207
3478+(lp208
3479 I12
3480 as(I-6
3481 I6
3482-tp208
3483-(lp209
3484+tp209
3485+(lp210
3486 I0
3487 as(I-4
3488 I3
3489 I24
3490-tp210
3491-(lp211
3492+tp211
3493+(lp212
3494 I34
3495 as(I-14
3496 I14
3497 I23
3498-tp212
3499-(lp213
3500+tp213
3501+(lp214
3502 I28
3503 as(I-1
3504 I1
3505 I22
3506-tp214
3507-(lp215
3508+tp215
3509+(lp216
3510 I9
3511 as(I15
3512 I-15
3513-tp216
3514-(lp217
3515+tp217
3516+(lp218
3517 I0
3518 assS'interactions'
3519-p218
3520+p219
3521 g0
3522 (cmadgraph.core.base_objects
3523 InteractionList
3524-p219
3525+p220
3526 g2
3527-(lp220
3528+(lp221
3529 g0
3530 (cmadgraph.core.base_objects
3531 Interaction
3532-p221
3533+p222
3534 g5
3535-(dp222
3536+(dp223
3537 S'particles'
3538-p223
3539+p224
3540 g0
3541 (cmadgraph.core.base_objects
3542 ParticleList
3543-p224
3544+p225
3545 g2
3546-(lp225
3547+(lp226
3548 g0
3549 (cmadgraph.core.base_objects
3550 Particle
3551-p226
3552+p227
3553 g5
3554-(dp227
3555+(dp228
3556 S'texname'
3557-p228
3558-S'd'
3559 p229
3560+S'd'
3561+p230
3562 sS'is_part'
3563-p230
3564+p231
3565 I00
3566 sS'name'
3567-p231
3568-S'd'
3569 p232
3570+S'd'
3571+p233
3572 sS'self_antipart'
3573-p233
3574+p234
3575 I00
3576 sS'color'
3577-p234
3578+p235
3579 I3
3580 sS'width'
3581-p235
3582-S'ZERO'
3583 p236
3584+S'ZERO'
3585+p237
3586 sS'charge'
3587-p237
3588+p238
3589 F0.0
3590 sS'mass'
3591-p238
3592-S'ZERO'
3593 p239
3594+S'ZERO'
3595+p240
3596 sS'antiname'
3597-p240
3598+p241
3599 S'd~'
3600-p241
3601+p242
3602 sS'line'
3603-p242
3604+p243
3605 S'straight'
3606-p243
3607+p244
3608 sS'propagating'
3609-p244
3610+p245
3611 I01
3612 sS'spin'
3613-p245
3614+p246
3615 I2
3616 sS'antitexname'
3617-p246
3618-g229
3619+p247
3620+g230
3621 sS'pdg_code'
3622-p247
3623+p248
3624 I1
3625-stp248
3626-Rp249
3627+stp249
3628+Rp250
3629 ag0
3630-(g226
3631+(g227
3632 g5
3633-(dp250
3634-g228
3635+(dp251
3636 g229
3637-sg230
3638-I01
3639+g230
3640 sg231
3641-g232
3642-sg233
3643+I01
3644+sg232
3645+g233
3646+sg234
3647 I00
3648-sg234
3649+sg235
3650 I3
3651-sg235
3652-g236
3653-sg237
3654+sg236
3655+g237
3656+sg238
3657 F0.0
3658-sg238
3659-g239
3660-sg240
3661-g241
3662-sg242
3663-g243
3664-sg244
3665-I01
3666+sg239
3667+g240
3668+sg241
3669+g242
3670+sg243
3671+g244
3672 sg245
3673+I01
3674+sg246
3675 I2
3676-sg246
3677-g229
3678 sg247
3679+g230
3680+sg248
3681 I1
3682-stp251
3683-Rp252
3684+stp252
3685+Rp253
3686 ag0
3687-(g226
3688+(g227
3689 g5
3690-(dp253
3691-g228
3692+(dp254
3693+g229
3694 S'_'
3695-p254
3696-sg230
3697-I01
3698-sg231
3699-S'g'
3700 p255
3701-sg233
3702+sg231
3703 I01
3704-sg234
3705-I8
3706-sg235
3707-S'ZERO'
3708+sg232
3709+S'g'
3710 p256
3711-sg237
3712-F0.0
3713-sg238
3714+sg234
3715+I01
3716+sg235
3717+I8
3718+sg236
3719 S'ZERO'
3720 p257
3721-sg240
3722-S'g'
3723+sg238
3724+F0.0
3725+sg239
3726+S'ZERO'
3727 p258
3728-sg242
3729+sg241
3730+S'g'
3731+p259
3732+sg243
3733 S'curly'
3734-p259
3735-sg244
3736+p260
3737+sg245
3738 I01
3739-sg245
3740+sg246
3741 I3
3742-sg246
3743-g254
3744 sg247
3745+g255
3746+sg248
3747 I21
3748-stp260
3749-Rp261
3750-atp262
3751-Rp263
3752+stp261
3753+Rp262
3754+atp263
3755+Rp264
3756 sS'lorentz'
3757-p264
3758-(lp265
3759+p265
3760+(lp266
3761 S''
3762-p266
3763-asg234
3764-(lp267
3765+p267
3766+asg235
3767+(lp268
3768 g0
3769 (cmadgraph.core.color_algebra
3770 ColorString
3771-p268
3772+p269
3773 g2
3774-(lp269
3775+(lp270
3776 cmadgraph.core.color_algebra
3777 T
3778-p270
3779+p271
3780 (I2
3781 I1
3782 I0
3783-tp271
3784-Rp272
3785-atp273
3786-Rp274
3787-(dp275
3788+tp272
3789+Rp273
3790+atp274
3791+Rp275
3792+(dp276
3793 S'coeff'
3794-p276
3795+p277
3796 cfractions
3797 Fraction
3798-p277
3799+p278
3800 (S'1'
3801-p278
3802-tp279
3803-Rp280
3804+p279
3805+tp280
3806+Rp281
3807 sS'canonical'
3808-p281
3809+p282
3810 (((S'T'
3811-p282
3812+p283
3813 (I1
3814 I2
3815 I3
3816-tp283
3817 tp284
3818 tp285
3819-(dp286
3820+tp286
3821+(dp287
3822 I0
3823 I3
3824 sI1
3825 I2
3826 sI2
3827 I1
3828-stp287
3829+stp288
3830 sS'immutable'
3831-p288
3832-((g282
3833+p289
3834+((g283
3835 (I2
3836 I1
3837 I0
3838-tp289
3839 tp290
3840 tp291
3841+tp292
3842 sS'is_imaginary'
3843-p292
3844+p293
3845 I00
3846 sS'Nc_power'
3847-p293
3848+p294
3849 I0
3850-sbasg17
3851+sbasg18
3852 I1
3853-sg36
3854-(dp294
3855+sg37
3856+(dp295
3857 S'QCD'
3858-p295
3859+p296
3860 I1
3861 ssS'couplings'
3862-p296
3863-(dp297
3864+p297
3865+(dp298
3866 (I0
3867 I0
3868-tp298
3869+tp299
3870 S'GG'
3871-p299
3872-sstp300
3873-Rp301
3874+p300
3875+sstp301
3876+Rp302
3877 ag0
3878-(g221
3879+(g222
3880 g5
3881-(dp302
3882-g223
3883+(dp303
3884+g224
3885 g0
3886-(g224
3887+(g225
3888 g2
3889-(lp303
3890+(lp304
3891 g0
3892-(g226
3893+(g227
3894 g5
3895-(dp304
3896-g228
3897-S'u'
3898-p305
3899-sg230
3900-I00
3901-sg231
3902+(dp305
3903+g229
3904 S'u'
3905 p306
3906-sg233
3907+sg231
3908 I00
3909-sg234
3910-I3
3911-sg235
3912-S'ZERO'
3913+sg232
3914+S'u'
3915 p307
3916-sg237
3917-F0.0
3918-sg238
3919+sg234
3920+I00
3921+sg235
3922+I3
3923+sg236
3924 S'ZERO'
3925 p308
3926-sg240
3927+sg238
3928+F0.0
3929+sg239
3930+S'ZERO'
3931+p309
3932+sg241
3933 S'u~'
3934-p309
3935-sg242
3936-g243
3937-sg244
3938-I01
3939+p310
3940+sg243
3941+g244
3942 sg245
3943-I2
3944+I01
3945 sg246
3946-g305
3947+I2
3948 sg247
3949+g306
3950+sg248
3951 I2
3952-stp310
3953-Rp311
3954+stp311
3955+Rp312
3956 ag0
3957-(g226
3958+(g227
3959 g5
3960-(dp312
3961-g228
3962-g305
3963-sg230
3964-I01
3965+(dp313
3966+g229
3967+g306
3968 sg231
3969-g306
3970-sg233
3971+I01
3972+sg232
3973+g307
3974+sg234
3975 I00
3976-sg234
3977+sg235
3978 I3
3979-sg235
3980-g307
3981-sg237
3982-F0.0
3983-sg238
3984+sg236
3985 g308
3986-sg240
3987+sg238
3988+F0.0
3989+sg239
3990 g309
3991-sg242
3992-g243
3993-sg244
3994-I01
3995+sg241
3996+g310
3997+sg243
3998+g244
3999 sg245
4000-I2
4001+I01
4002 sg246
4003-g305
4004+I2
4005 sg247
4006+g306
4007+sg248
4008 I2
4009-stp313
4010-Rp314
4011+stp314
4012+Rp315
4013 ag0
4014-(g226
4015+(g227
4016 g5
4017-(dp315
4018-g228
4019-g254
4020-sg230
4021-I01
4022+(dp316
4023+g229
4024+g255
4025 sg231
4026-g255
4027-sg233
4028 I01
4029+sg232
4030+g256
4031 sg234
4032+I01
4033+sg235
4034 I8
4035-sg235
4036-g256
4037-sg237
4038-F0.0
4039-sg238
4040+sg236
4041 g257
4042-sg240
4043+sg238
4044+F0.0
4045+sg239
4046 g258
4047-sg242
4048+sg241
4049 g259
4050-sg244
4051+sg243
4052+g260
4053+sg245
4054 I01
4055-sg245
4056+sg246
4057 I3
4058-sg246
4059-g254
4060 sg247
4061+g255
4062+sg248
4063 I21
4064-stp316
4065-Rp317
4066-atp318
4067-Rp319
4068-sg264
4069-(lp320
4070-g266
4071-asg234
4072+stp317
4073+Rp318
4074+atp319
4075+Rp320
4076+sg265
4077 (lp321
4078-g0
4079-(g268
4080-g2
4081+g267
4082+asg235
4083 (lp322
4084-g270
4085+g0
4086+(g269
4087+g2
4088+(lp323
4089+g271
4090 (I2
4091 I1
4092 I0
4093-tp323
4094-Rp324
4095-atp325
4096-Rp326
4097-(dp327
4098-g276
4099-g280
4100-sg281
4101-(((g282
4102+tp324
4103+Rp325
4104+atp326
4105+Rp327
4106+(dp328
4107+g277
4108+g281
4109+sg282
4110+(((g283
4111 (I1
4112 I2
4113 I3
4114-tp328
4115 tp329
4116 tp330
4117-(dp331
4118+tp331
4119+(dp332
4120 I0
4121 I3
4122 sI1
4123 I2
4124 sI2
4125 I1
4126-stp332
4127-sg288
4128-((g282
4129+stp333
4130+sg289
4131+((g283
4132 (I2
4133 I1
4134 I0
4135-tp333
4136 tp334
4137 tp335
4138-sg292
4139-I00
4140+tp336
4141 sg293
4142+I00
4143+sg294
4144 I0
4145-sbasg17
4146+sbasg18
4147 I2
4148-sg36
4149-(dp336
4150+sg37
4151+(dp337
4152 S'QCD'
4153-p337
4154+p338
4155 I1
4156-ssg296
4157-(dp338
4158-g298
4159+ssg297
4160+(dp339
4161+g299
4162 S'GG'
4163-p339
4164-sstp340
4165-Rp341
4166+p340
4167+sstp341
4168+Rp342
4169 ag0
4170-(g221
4171+(g222
4172 g5
4173-(dp342
4174-g223
4175+(dp343
4176+g224
4177 g0
4178-(g224
4179+(g225
4180 g2
4181-(lp343
4182+(lp344
4183 g0
4184-(g226
4185+(g227
4186 g5
4187-(dp344
4188-g228
4189-S's'
4190-p345
4191-sg230
4192-I00
4193-sg231
4194+(dp345
4195+g229
4196 S's'
4197 p346
4198-sg233
4199+sg231
4200 I00
4201-sg234
4202-I3
4203-sg235
4204-S'ZERO'
4205+sg232
4206+S's'
4207 p347
4208-sg237
4209-F0.0
4210-sg238
4211+sg234
4212+I00
4213+sg235
4214+I3
4215+sg236
4216 S'ZERO'
4217 p348
4218-sg240
4219+sg238
4220+F0.0
4221+sg239
4222+S'ZERO'
4223+p349
4224+sg241
4225 S's~'
4226-p349
4227-sg242
4228-g243
4229-sg244
4230-I01
4231+p350
4232+sg243
4233+g244
4234 sg245
4235+I01
4236+sg246
4237 I2
4238-sg246
4239-g345
4240 sg247
4241+g346
4242+sg248
4243 I3
4244-stp350
4245-Rp351
4246+stp351
4247+Rp352
4248 ag0
4249-(g226
4250+(g227
4251 g5
4252-(dp352
4253-g228
4254-g345
4255-sg230
4256-I01
4257+(dp353
4258+g229
4259+g346
4260 sg231
4261-g346
4262-sg233
4263+I01
4264+sg232
4265+g347
4266+sg234
4267 I00
4268-sg234
4269+sg235
4270 I3
4271-sg235
4272-g347
4273-sg237
4274-F0.0
4275-sg238
4276+sg236
4277 g348
4278-sg240
4279+sg238
4280+F0.0
4281+sg239
4282 g349
4283-sg242
4284-g243
4285-sg244
4286-I01
4287+sg241
4288+g350
4289+sg243
4290+g244
4291 sg245
4292+I01
4293+sg246
4294 I2
4295-sg246
4296-g345
4297 sg247
4298+g346
4299+sg248
4300 I3
4301-stp353
4302-Rp354
4303+stp354
4304+Rp355
4305 ag0
4306-(g226
4307+(g227
4308 g5
4309-(dp355
4310-g228
4311-g254
4312-sg230
4313-I01
4314+(dp356
4315+g229
4316+g255
4317 sg231
4318-g255
4319-sg233
4320 I01
4321+sg232
4322+g256
4323 sg234
4324+I01
4325+sg235
4326 I8
4327-sg235
4328-g256
4329-sg237
4330-F0.0
4331-sg238
4332+sg236
4333 g257
4334-sg240
4335+sg238
4336+F0.0
4337+sg239
4338 g258
4339-sg242
4340+sg241
4341 g259
4342-sg244
4343+sg243
4344+g260
4345+sg245
4346 I01
4347-sg245
4348+sg246
4349 I3
4350-sg246
4351-g254
4352 sg247
4353+g255
4354+sg248
4355 I21
4356-stp356
4357-Rp357
4358-atp358
4359-Rp359
4360-sg264
4361-(lp360
4362-g266
4363-asg234
4364+stp357
4365+Rp358
4366+atp359
4367+Rp360
4368+sg265
4369 (lp361
4370-g0
4371-(g268
4372-g2
4373+g267
4374+asg235
4375 (lp362
4376-g270
4377+g0
4378+(g269
4379+g2
4380+(lp363
4381+g271
4382 (I2
4383 I1
4384 I0
4385-tp363
4386-Rp364
4387-atp365
4388-Rp366
4389-(dp367
4390-g276
4391-g280
4392-sg281
4393-(((g282
4394+tp364
4395+Rp365
4396+atp366
4397+Rp367
4398+(dp368
4399+g277
4400+g281
4401+sg282
4402+(((g283
4403 (I1
4404 I2
4405 I3
4406-tp368
4407 tp369
4408 tp370
4409-(dp371
4410+tp371
4411+(dp372
4412 I0
4413 I3
4414 sI1
4415 I2
4416 sI2
4417 I1
4418-stp372
4419-sg288
4420-((g282
4421+stp373
4422+sg289
4423+((g283
4424 (I2
4425 I1
4426 I0
4427-tp373
4428 tp374
4429 tp375
4430-sg292
4431-I00
4432+tp376
4433 sg293
4434+I00
4435+sg294
4436 I0
4437-sbasg17
4438+sbasg18
4439 I3
4440-sg36
4441-(dp376
4442+sg37
4443+(dp377
4444 S'QCD'
4445-p377
4446+p378
4447 I1
4448-ssg296
4449-(dp378
4450-g298
4451+ssg297
4452+(dp379
4453+g299
4454 S'GG'
4455-p379
4456-sstp380
4457-Rp381
4458+p380
4459+sstp381
4460+Rp382
4461 ag0
4462-(g221
4463+(g222
4464 g5
4465-(dp382
4466-g223
4467+(dp383
4468+g224
4469 g0
4470-(g224
4471+(g225
4472 g2
4473-(lp383
4474+(lp384
4475 g0
4476-(g226
4477+(g227
4478 g5
4479-(dp384
4480-g228
4481-S'c'
4482-p385
4483-sg230
4484-I00
4485-sg231
4486+(dp385
4487+g229
4488 S'c'
4489 p386
4490-sg233
4491+sg231
4492 I00
4493-sg234
4494-I3
4495-sg235
4496-S'ZERO'
4497+sg232
4498+S'c'
4499 p387
4500-sg237
4501-F0.0
4502-sg238
4503+sg234
4504+I00
4505+sg235
4506+I3
4507+sg236
4508 S'ZERO'
4509 p388
4510-sg240
4511+sg238
4512+F0.0
4513+sg239
4514+S'ZERO'
4515+p389
4516+sg241
4517 S'c~'
4518-p389
4519-sg242
4520-g243
4521-sg244
4522-I01
4523+p390
4524+sg243
4525+g244
4526 sg245
4527+I01
4528+sg246
4529 I2
4530-sg246
4531-g385
4532 sg247
4533+g386
4534+sg248
4535 I4
4536-stp390
4537-Rp391
4538+stp391
4539+Rp392
4540 ag0
4541-(g226
4542+(g227
4543 g5
4544-(dp392
4545-g228
4546-g385
4547-sg230
4548-I01
4549+(dp393
4550+g229
4551+g386
4552 sg231
4553-g386
4554-sg233
4555+I01
4556+sg232
4557+g387
4558+sg234
4559 I00
4560-sg234
4561+sg235
4562 I3
4563-sg235
4564-g387
4565-sg237
4566-F0.0
4567-sg238
4568+sg236
4569 g388
4570-sg240
4571+sg238
4572+F0.0
4573+sg239
4574 g389
4575-sg242
4576-g243
4577-sg244
4578-I01
4579+sg241
4580+g390
4581+sg243
4582+g244
4583 sg245
4584+I01
4585+sg246
4586 I2
4587-sg246
4588-g385
4589 sg247
4590+g386
4591+sg248
4592 I4
4593-stp393
4594-Rp394
4595+stp394
4596+Rp395
4597 ag0
4598-(g226
4599+(g227
4600 g5
4601-(dp395
4602-g228
4603-g254
4604-sg230
4605-I01
4606+(dp396
4607+g229
4608+g255
4609 sg231
4610-g255
4611-sg233
4612 I01
4613+sg232
4614+g256
4615 sg234
4616+I01
4617+sg235
4618 I8
4619-sg235
4620-g256
4621-sg237
4622-F0.0
4623-sg238
4624+sg236
4625 g257
4626-sg240
4627+sg238
4628+F0.0
4629+sg239
4630 g258
4631-sg242
4632+sg241
4633 g259
4634-sg244
4635+sg243
4636+g260
4637+sg245
4638 I01
4639-sg245
4640+sg246
4641 I3
4642-sg246
4643-g254
4644 sg247
4645+g255
4646+sg248
4647 I21
4648-stp396
4649-Rp397
4650-atp398
4651-Rp399
4652-sg264
4653-(lp400
4654-g266
4655-asg234
4656+stp397
4657+Rp398
4658+atp399
4659+Rp400
4660+sg265
4661 (lp401
4662-g0
4663-(g268
4664-g2
4665+g267
4666+asg235
4667 (lp402
4668-g270
4669+g0
4670+(g269
4671+g2
4672+(lp403
4673+g271
4674 (I2
4675 I1
4676 I0
4677-tp403
4678-Rp404
4679-atp405
4680-Rp406
4681-(dp407
4682-g276
4683-g280
4684-sg281
4685-(((g282
4686+tp404
4687+Rp405
4688+atp406
4689+Rp407
4690+(dp408
4691+g277
4692+g281
4693+sg282
4694+(((g283
4695 (I1
4696 I2
4697 I3
4698-tp408
4699 tp409
4700 tp410
4701-(dp411
4702+tp411
4703+(dp412
4704 I0
4705 I3
4706 sI1
4707 I2
4708 sI2
4709 I1
4710-stp412
4711-sg288
4712-((g282
4713+stp413
4714+sg289
4715+((g283
4716 (I2
4717 I1
4718 I0
4719-tp413
4720 tp414
4721 tp415
4722-sg292
4723-I00
4724+tp416
4725 sg293
4726+I00
4727+sg294
4728 I0
4729-sbasg17
4730+sbasg18
4731 I4
4732-sg36
4733-(dp416
4734+sg37
4735+(dp417
4736 S'QCD'
4737-p417
4738+p418
4739 I1
4740-ssg296
4741-(dp418
4742-g298
4743+ssg297
4744+(dp419
4745+g299
4746 S'GG'
4747-p419
4748-sstp420
4749-Rp421
4750+p420
4751+sstp421
4752+Rp422
4753 ag0
4754-(g221
4755+(g222
4756 g5
4757-(dp422
4758-g223
4759+(dp423
4760+g224
4761 g0
4762-(g224
4763+(g225
4764 g2
4765-(lp423
4766+(lp424
4767 g0
4768-(g226
4769+(g227
4770 g5
4771-(dp424
4772-g228
4773-S'b'
4774-p425
4775-sg230
4776-I00
4777-sg231
4778+(dp425
4779+g229
4780 S'b'
4781 p426
4782-sg233
4783+sg231
4784 I00
4785-sg234
4786-I3
4787-sg235
4788-S'ZERO'
4789+sg232
4790+S'b'
4791 p427
4792-sg237
4793+sg234
4794+I00
4795+sg235
4796+I3
4797+sg236
4798+S'ZERO'
4799+p428
4800+sg238
4801 F0.0
4802-sg238
4803+sg239
4804 S'BMASS'
4805-p428
4806-sg240
4807+p429
4808+sg241
4809 S'b~'
4810-p429
4811-sg242
4812-g243
4813-sg244
4814-I01
4815+p430
4816+sg243
4817+g244
4818 sg245
4819+I01
4820+sg246
4821 I2
4822-sg246
4823-g425
4824 sg247
4825+g426
4826+sg248
4827 I5
4828-stp430
4829-Rp431
4830+stp431
4831+Rp432
4832 ag0
4833-(g226
4834+(g227
4835 g5
4836-(dp432
4837-g228
4838-g425
4839-sg230
4840-I01
4841+(dp433
4842+g229
4843+g426
4844 sg231
4845-g426
4846-sg233
4847+I01
4848+sg232
4849+g427
4850+sg234
4851 I00
4852-sg234
4853+sg235
4854 I3
4855-sg235
4856-g427
4857-sg237
4858-F0.0
4859-sg238
4860+sg236
4861 g428
4862-sg240
4863+sg238
4864+F0.0
4865+sg239
4866 g429
4867-sg242
4868-g243
4869-sg244
4870-I01
4871+sg241
4872+g430
4873+sg243
4874+g244
4875 sg245
4876+I01
4877+sg246
4878 I2
4879-sg246
4880-g425
4881 sg247
4882+g426
4883+sg248
4884 I5
4885-stp433
4886-Rp434
4887+stp434
4888+Rp435
4889 ag0
4890-(g226
4891+(g227
4892 g5
4893-(dp435
4894-g228
4895-g254
4896-sg230
4897-I01
4898+(dp436
4899+g229
4900+g255
4901 sg231
4902-g255
4903-sg233
4904 I01
4905+sg232
4906+g256
4907 sg234
4908+I01
4909+sg235
4910 I8
4911-sg235
4912-g256
4913-sg237
4914-F0.0
4915-sg238
4916+sg236
4917 g257
4918-sg240
4919+sg238
4920+F0.0
4921+sg239
4922 g258
4923-sg242
4924+sg241
4925 g259
4926-sg244
4927+sg243
4928+g260
4929+sg245
4930 I01
4931-sg245
4932+sg246
4933 I3
4934-sg246
4935-g254
4936 sg247
4937+g255
4938+sg248
4939 I21
4940-stp436
4941-Rp437
4942-atp438
4943-Rp439
4944-sg264
4945-(lp440
4946-g266
4947-asg234
4948+stp437
4949+Rp438
4950+atp439
4951+Rp440
4952+sg265
4953 (lp441
4954-g0
4955-(g268
4956-g2
4957+g267
4958+asg235
4959 (lp442
4960-g270
4961+g0
4962+(g269
4963+g2
4964+(lp443
4965+g271
4966 (I2
4967 I1
4968 I0
4969-tp443
4970-Rp444
4971-atp445
4972-Rp446
4973-(dp447
4974-g276
4975-g280
4976-sg281
4977-(((g282
4978+tp444
4979+Rp445
4980+atp446
4981+Rp447
4982+(dp448
4983+g277
4984+g281
4985+sg282
4986+(((g283
4987 (I1
4988 I2
4989 I3
4990-tp448
4991 tp449
4992 tp450
4993-(dp451
4994+tp451
4995+(dp452
4996 I0
4997 I3
4998 sI1
4999 I2
5000 sI2
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches