2
c Example analysis for "p p > t j [QCD]" process.
3
c Example analysis for "p p > t j $$ w+ w- [QCD]" process.
4
c Example analysis for "p p > w+ > t j [QCD]" process.
6
C----------------------------------------------------------------------
8
C DUMMY IF HBOOK IS USED
9
C----------------------------------------------------------------------
13
C----------------------------------------------------------------------
15
C USER'S ROUTINE FOR INITIALIZATION
16
C----------------------------------------------------------------------
17
INCLUDE 'HERWIG65.INC'
18
include 'reweight0.inc'
22
integer nwgt,max_weight,nwgt_analysis
24
common/c_analysis/nwgt_analysis
25
parameter (max_weight=maxscales*maxscales+maxpdfs+1)
26
character*15 weights_info(max_weight)
27
common/cwgtsinfo/weights_info
33
call mbook(l+ 1,'t pt '//weights_info(kk)//cc(j)
35
call mbook(l+ 2,'t log pt '//weights_info(kk)//cc(j)
37
call mbook(l+ 3,'t y '//weights_info(kk)//cc(j)
39
call mbook(l+ 4,'t eta '//weights_info(kk)//cc(j)
42
call mbook(l+ 5,'j1 pt '//weights_info(kk)//cc(j)
44
call mbook(l+ 6,'j1 log pt '//weights_info(kk)//cc(j)
46
call mbook(l+ 7,'j1 y '//weights_info(kk)//cc(j)
48
call mbook(l+ 8,'j1 eta '//weights_info(kk)//cc(j)
51
call mbook(l+ 9,'j2 pt '//weights_info(kk)//cc(j)
53
call mbook(l+10,'j2 log pt '//weights_info(kk)//cc(j)
55
call mbook(l+11,'j2 y '//weights_info(kk)//cc(j)
57
call mbook(l+12,'j2 eta '//weights_info(kk)//cc(j)
60
call mbook(l+13,'bj1 pt '//weights_info(kk)//cc(j)
62
call mbook(l+14,'bj1 log pt '//weights_info(kk)//cc(j)
64
call mbook(l+15,'bj1 y '//weights_info(kk)//cc(j)
66
call mbook(l+16,'bj1 eta '//weights_info(kk)//cc(j)
69
call mbook(l+17,'bj2 pt '//weights_info(kk)//cc(j)
71
call mbook(l+18,'bj2 log pt '//weights_info(kk)//cc(j)
73
call mbook(l+19,'bj2 y '//weights_info(kk)//cc(j)
75
call mbook(l+20,'bj2 eta '//weights_info(kk)//cc(j)
78
call mbook(l+21,'syst pt '//weights_info(kk)//cc(j)
80
call mbook(l+22,'syst log pt '//weights_info(kk)//cc(j)
82
call mbook(l+23,'syst y '//weights_info(kk)//cc(j)
84
call mbook(l+24,'syst eta '//weights_info(kk)//cc(j)
92
C----------------------------------------------------------------------
94
C USER'S ROUTINE FOR TERMINAL CALCULATIONS, HISTOGRAM OUTPUT, ETC
95
C----------------------------------------------------------------------
96
INCLUDE 'HERWIG65.INC'
98
INTEGER I,J,KK,l,nwgt_analysis
101
common/c_analysis/nwgt_analysis
102
OPEN(UNIT=99,FILE='HERST.top',STATUS='UNKNOWN')
103
C XNORM IS SUCH THAT THE CROSS SECTION PER BIN IS IN PB, SINCE THE HERWIG
104
C WEIGHT IS IN NB, AND CORRESPONDS TO THE AVERAGE CROSS SECTION
105
XNORM=1.D3/DFLOAT(NEVHEP)
109
CALL MOPERA(I+NPL,'F',I+NPL,I+NPL,(XNORM),0.D0)
113
do kk=1,nwgt_analysis
115
call multitop(NPL+l+ 1,NPL-1,2,3,'t pt',' ','LOG')
116
call multitop(NPL+l+ 2,NPL-1,2,3,'t log pt',' ','LOG')
117
call multitop(NPL+l+ 3,NPL-1,2,3,'t y',' ','LOG')
118
call multitop(NPL+l+ 4,NPL-1,2,3,'t eta',' ','LOG')
120
call multitop(NPL+l+ 5,NPL-1,2,3,'j1 pt',' ','LOG')
121
call multitop(NPL+l+ 6,NPL-1,2,3,'j1 log pt',' ','LOG')
122
call multitop(NPL+l+ 7,NPL-1,2,3,'j1 y',' ','LOG')
123
call multitop(NPL+l+ 8,NPL-1,2,3,'j1 eta',' ','LOG')
125
call multitop(NPL+l+ 9,NPL-1,2,3,'j2 pt',' ','LOG')
126
call multitop(NPL+l+10,NPL-1,2,3,'j2 log pt',' ','LOG')
127
call multitop(NPL+l+11,NPL-1,2,3,'j2 y',' ','LOG')
128
call multitop(NPL+l+12,NPL-1,2,3,'j2 eta',' ','LOG')
130
call multitop(NPL+l+13,NPL-1,2,3,'bj1 pt',' ','LOG')
131
call multitop(NPL+l+14,NPL-1,2,3,'bj1 log pt',' ','LOG')
132
call multitop(NPL+l+15,NPL-1,2,3,'bj1 y',' ','LOG')
133
call multitop(NPL+l+16,NPL-1,2,3,'bj1 eta',' ','LOG')
135
call multitop(NPL+l+17,NPL-1,2,3,'bj2 pt',' ','LOG')
136
call multitop(NPL+l+18,NPL-1,2,3,'bj2 log pt',' ','LOG')
137
call multitop(NPL+l+19,NPL-1,2,3,'bj2 y',' ','LOG')
138
call multitop(NPL+l+20,NPL-1,2,3,'bj2 eta',' ','LOG')
140
call multitop(NPL+l+21,NPL-1,2,3,'syst pt',' ','LOG')
141
call multitop(NPL+l+22,NPL-1,2,3,'syst log pt',' ','LOG')
142
call multitop(NPL+l+23,NPL-1,2,3,'syst y',' ','LOG')
143
call multitop(NPL+l+24,NPL-1,2,3,'syst eta',' ','LOG')
151
C----------------------------------------------------------------------
153
C USER'S ROUTINE TO ANALYSE DATA FROM EVENT
154
C BASED ON AN ANALYSIS FILE WRITTEN BY E.RE
155
C----------------------------------------------------------------------
156
INCLUDE 'HERWIG65.INC'
157
include 'reweight0.inc'
158
DOUBLE PRECISION HWVDOT,PSUM(4)
160
PARAMETER (PI=3.14159265358979312D0)
162
INTEGER kk,mu,jpart,i,j,ihep,ichsum,nt,nb,nbjet,ist,id,
163
&njet,id1,i1,i2,ibmatch,ichini,k,ihadr,count_j,count_bj
164
integer maxtrack,maxjet,maxnum,l
165
parameter (maxtrack=2048,maxjet=2048,maxnum=30)
166
integer ntracks,jetvec(maxtrack),ib1
167
double precision pttop,etatop,ytop,ptj1,etaj1,yj1,ptbj1,etabj1,
168
&ybj1,ptbj2,etabj2,ybj2,jet_ktradius,jet_ktptmin,palg,pttemp_spec,
169
&pttemp_bjet,pttemp,tmp,getrapidity,getpseudorap,getpt,
170
&pjet(4,maxtrack),ptrack(4,maxtrack),p_top(4,maxnum),p_b(4,maxnum),
171
&p_bjet(4,maxnum),psyst(4),ptsyst,ysyst,etasyst,ptj2,yj2,etaj2
172
logical is_b_jet(maxnum)
173
integer btrack(maxnum),ib(maxnum)
174
integer nwgt_analysis,max_weight
175
common/c_analysis/nwgt_analysis
176
parameter (max_weight=maxscales*maxscales+maxpdfs+1)
177
double precision ww(max_weight),www(max_weight)
180
IF (IERROR.NE.0) RETURN
181
IF (WW(1).EQ.0D0) THEN
182
WRITE(*,*)'WW(1) = 0. Stopping'
185
C INCOMING PARTONS MAY TRAVEL IN THE SAME DIRECTION: IT'S A POWER-SUPPRESSED
186
C EFFECT, SO THROW THE EVENT AWAY
187
IF(SIGN(1.D0,PHEP(3,4)).EQ.SIGN(1.D0,PHEP(3,5)))THEN
188
CALL HWWARN('HWANAL',111)
192
WWW(I)=EVWGT*ww(i)/ww(1)
194
CALL HWVSUM(4,PHEP(1,1),PHEP(1,2),PSUM)
195
CALL HWVSCA(4,-1D0,PSUM,PSUM)
197
ICHINI=ICHRG(IDHW(1))+ICHRG(IDHW(2))
207
IF (ISTHEP(IHEP).EQ.1) THEN
208
CALL HWVSUM(4,PHEP(1,IHEP),PSUM,PSUM)
209
ICHSUM=ICHSUM+ICHRG(IDHW(IHEP))
213
ID1=IHADR(ID) ! equal to the PDG of the massive quark in hadron
215
IF(IST.EQ.155.AND.ABS(ID).EQ.6) THEN
217
P_TOP(MU,1)=PHEP(MU,IHEP)
220
c Define particles that go into jet.
221
IF (IST.EQ.1.AND.ABS(ID).GE.100)THEN
223
if (abs(id1).eq.5) THEN
224
c FOUND A stable B-FLAVOURED HADRON.
228
P_B(MU,NB)=PHEP(MU,IHEP)
233
PTRACK(MU,NTRACKS)=PHEP(MU,IHEP)
235
IF(NTRACKS.EQ.MAXTRACK) THEN
236
WRITE(*,*)'HWANAL: TOO MANY PARTICLES, INCREASE MAXTRACK'
241
C END OF LOOP OVER IHEP
243
C CHECK MOMENTUM AND CHARGE CONSERVATION
244
IF (HWVDOT(3,PSUM,PSUM).GT.1.E-4*PHEP(4,1)**2) THEN
246
CALL HWWARN('HWANAL',112)
249
IF (ICHSUM.NE.ICHINI) THEN
251
CALL HWWARN('HWANAL',113)
255
IF (NTRACKS.EQ.0) THEN
256
WRITE(*,*) 'NO TRACKS FOUND, DROP ANALYSIS OF THIS EVENT'
260
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
261
C KT ALGORITHM, FASTJET IMPLEMENTATION
262
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
267
CALL fastjetppgenkt(PTRACK,NTRACKS,JET_KTRADIUS,JET_KTPTMIN,PALG,
270
c Check that jets are ordered in pt
272
if (getpt(pjet(1,i)).lt.getpt(pjet(1,i+1)) ) then
273
write (*,*) 'ERROR jets not ordered'
282
if (JETVEC(BTRACK(j)).eq.i) then
289
pttop = getpt(p_top(1,1))
290
ytop = getrapidity(p_top(1,1))
291
etatop= getpseudorap(p_top(1,1))
296
if(.not.is_b_jet(i))then
299
ptj1 = getpt(pjet(1,i))
300
yj1 = getrapidity(pjet(1,i))
301
etaj1= getpseudorap(pjet(1,i))
303
psyst(mu)=p_top(mu,1)+pjet(mu,i)
305
ptsyst = getpt(psyst)
306
ysyst = getrapidity(psyst)
307
etasyst= getpseudorap(psyst)
308
elseif(count_j.eq.2)then
309
ptj2 = getpt(pjet(1,i))
310
yj2 = getrapidity(pjet(1,i))
311
etaj2= getpseudorap(pjet(1,i))
313
elseif(is_b_jet(i))then
315
if (count_bj.eq.1) then
316
ptbj1 = getpt(pjet(1,i))
317
ybj1 = getrapidity(pjet(1,i))
318
etabj1= getpseudorap(pjet(1,i))
319
elseif (count_bj.eq.2) then
320
ptbj2 = getpt(pjet(1,i))
321
ybj2 = getrapidity(pjet(1,i))
322
etabj2= getpseudorap(pjet(1,i))
327
c fill the histograms
329
do kk=1,nwgt_analysis
331
call mfill(l+1,pttop,www(kk))
332
if(pttop.gt.0d0) call mfill(l+2,log10(pttop),www(kk))
333
call mfill(l+3,ytop,www(kk))
334
call mfill(l+4,etatop,www(kk))
336
call mfill(l+5,ptj1,www(kk))
337
if (ptj1.gt.0d0) call mfill(l+6,log10(ptj1),www(kk))
338
call mfill(l+7,yj1,www(kk))
339
call mfill(l+8,etaj1,www(kk))
340
call mfill(l+21,ptsyst,www(kk))
341
if(ptsyst.gt.0d0) call mfill(l+22,log10(ptsyst),www(kk))
342
call mfill(l+23,ysyst,www(kk))
343
call mfill(l+24,etasyst,www(kk))
346
call mfill(l+9,ptj2,www(kk))
347
if(ptj2.gt.0d0) call mfill(l+10,log10(ptj2),www(kk))
348
call mfill(l+11,yj2,www(kk))
349
call mfill(l+12,etaj2,www(kk))
352
call mfill(l+13,ptbj1,www(kk))
353
if (ptbj1.gt.0d0) call mfill(l+14,log10(ptbj1),www(kk))
354
call mfill(l+15,ybj1,www(kk))
355
call mfill(l+16,etabj1,www(kk))
358
call mfill(l+17,ptbj2,www(kk))
359
if (ptbj2.gt.0d0) call mfill(l+18,log10(ptbj2),www(kk))
360
call mfill(l+19,ybj2,www(kk))
361
call mfill(l+20,etabj2,www(kk))
370
function getrapidity(p)
372
real*8 getrapidity,en,pl,tiny,xplus,xminus,y,p(4)
373
parameter (tiny=1.d-5)
379
if(xplus.gt.tiny.and.xminus.gt.tiny)then
380
if( (xplus/xminus).gt.tiny )then
381
y=0.5d0*log( xplus/xminus )
393
function getpseudorap(p)
395
real*8 getpseudorap,en,ptx,pty,pl,tiny,pt,eta,th,p(4)
396
parameter (tiny=1.d-5)
402
pt=sqrt(ptx**2+pty**2)
403
if(pt.lt.tiny.and.abs(pl).lt.tiny)then
404
eta=sign(1.d0,pl)*1.d8
407
eta=-log(tan(th/2.d0))
416
getpt=dsqrt(p(1)**2+p(2)**2)
420
function getinvm(en,ptx,pty,pl)
422
real*8 getinvm,en,ptx,pty,pl,tiny,tmp
423
parameter (tiny=1.d-5)
425
tmp=en**2-ptx**2-pty**2-pl**2
428
elseif(tmp.gt.-tiny)then
431
write(*,*)'Attempt to compute a negative mass'
439
function getdelphi(ptx1,pty1,ptx2,pty2)
441
real*8 getdelphi,ptx1,pty1,ptx2,pty2,tiny,pt1,pt2,tmp
442
parameter (tiny=1.d-5)
444
pt1=sqrt(ptx1**2+pty1**2)
445
pt2=sqrt(ptx2**2+pty2**2)
446
if(pt1.ne.0.d0.and.pt2.ne.0.d0)then
447
tmp=ptx1*ptx2+pty1*pty2
449
if(abs(tmp).gt.1.d0+tiny)then
450
write(*,*)'Cosine larger than 1'
452
elseif(abs(tmp).ge.1.d0)then
465
c Returns the PDG code of the heavier quark in the hadron of PDG code ID
471
IF(ID1.GT.10000)ID1=ID1-1000*INT(ID1/1000)
472
IHADR=ID1/(10**INT(LOG10(DFLOAT(ID1))))