1
c************************************************************************
2
c THIS FILE CONTAINS THE DEFINITIONS OF USEFUL FUNCTIONS OF MOMENTA:
4
c DOT(p1,p2) : 4-Vector Dot product
5
c R2(p1,p2) : distance in eta,phi between two particles
6
c SumDot(P1,P2,dsign): invariant mass of 2 particles
7
c rap(p) : rapidity of particle in the lab frame (p in CM frame)
8
C RAP2(P) : rapidity of particle in the lab frame (p in lab frame)
9
c DELTA_PHI(P1, P2) : separation in phi of two particles
10
c ET(p) : transverse energy of particle
11
c PT(p) : transverse momentum of particle
12
c DJ(p1,p2) : y*S (Durham) value for two partons
13
c DJB(p1,p2) : mT^2=m^2+pT^2 for one particle
14
c PYJB(p1,p2) : The Pythia ISR pT^2=(1-x)*Q^2
15
c DJ2(p1,p2) : scalar product squared
16
c threedot(p1,p2) : 3-vector Dot product (accept 4 vector in entry)
17
c rho : |p| in lab frame
18
c eta : pseudo-rapidity
20
c four_momentum : (theta,phi,rho,mass)-> 4 vector
21
c four_momentum_set2 : (pt,eta,phi,mass--> 4 vector
23
c************************************************************************
25
DOUBLE PRECISION FUNCTION R2(P1,P2)
26
c************************************************************************
27
c Distance in eta,phi between two particles.
28
c************************************************************************
33
double precision p1(0:3),p2(0:3)
37
double precision rap,DELTA_PHI
38
external rap,delta_phi
42
R2 = (DELTA_PHI(P1,P2))**2+(rap(p1)-rap(p2))**2
46
DOUBLE PRECISION FUNCTION SumDot(P1,P2,dsign)
47
c************************************************************************
48
c Invarient mass of 2 particles
49
c************************************************************************
54
double precision p1(0:3),p2(0:3),dsign
59
double precision ptot(0:3)
70
ptot(i)=p1(i)+dsign*p2(i)
72
SumDot = dot(ptot,ptot)
76
DOUBLE PRECISION FUNCTION rap(p)
77
c************************************************************************
78
c Returns rapidity of particle in the lab frame
79
c************************************************************************
84
double precision p(0:3)
96
c pm=dsqrt(p(1)**2+p(2)**2+p(3)**2)
98
rap = .5d0*dlog((pm+p(3))/(pm-p(3)))+
99
$ .5d0*dlog(xbk(1)*ebeam(1)/(xbk(2)*ebeam(2)))
101
DOUBLE PRECISION FUNCTION rap2(p)
102
c************************************************************************
103
c Returns rapidity of particle in the lab frame
104
c************************************************************************
109
double precision p(0:3)
121
c pm=dsqrt(p(1)**2+p(2)**2+p(3)**2)
123
rap2 = .5d0*dlog((pm+p(3))/(pm-p(3)))
126
DOUBLE PRECISION FUNCTION DELTA_PHI(P1, P2)
127
c************************************************************************
128
c Returns separation in phi of two particles p1,p2
129
c************************************************************************
134
double precision p1(0:3),p2(0:3)
142
DENOM = SQRT(P1(1)**2 + P1(2)**2) * SQRT(P2(1)**2 + P2(2)**2)
143
TEMP = MAX(-0.99999999D0, (P1(1)*P2(1) + P1(2)*P2(2)) / DENOM)
144
TEMP = MIN( 0.99999999D0, TEMP)
145
DELTA_PHI = ACOS(TEMP)
150
double precision function et(p)
151
c************************************************************************
152
c Returns transverse energy of particle
153
c************************************************************************
158
double precision p(0:3)
166
pt = dsqrt(p(1)**2+p(2)**2)
167
if (pt .gt. 0d0) then
168
et = p(0)*pt/dsqrt(pt**2+p(3)**2)
174
double precision function pt(p)
175
c************************************************************************
176
c Returns transverse momentum of particle
177
c************************************************************************
182
double precision p(0:3)
187
pt = dsqrt(p(1)**2+p(2)**2)
192
double precision function DJ(p1,p2)
193
c***************************************************************************
194
c Uses Durham algorythm to calculate the y value for two partons
195
c If collision type is hh, hadronic jet measure is used
196
c y_{ij} = 2min[p_{i,\perp}^2,p_{j,\perp}^2]/S
197
c (cosh(\eta_i-\eta_j)-cos(\phi_1-\phi_2))
198
c***************************************************************************
203
double precision p1(0:4),p2(0:4) ! 4 is mass**2
215
double precision pt1,pt2,ptm1,ptm2,eta1,eta2,phi1,phi2,p1a,p2a,costh,sumdot
220
if ((lpp(1).eq.0).and.(lpp(2).eq.0)) then
221
p1a = dsqrt(p1(1)**2+p1(2)**2+p1(3)**2)
222
p2a = dsqrt(p2(1)**2+p2(2)**2+p2(3)**2)
223
if (p1a*p2a .ne. 0d0) then
224
costh = (p1(1)*p2(1)+p1(2)*p2(2)+p1(3)*p2(3))/(p1a*p2a)
225
dj = 2d0*min(p1(0)**2,p2(0)**2)*(1d0-costh) !Durham
226
c dj = 2d0*p1(0)*p2(0)*(1d0-costh) !JADE
228
print*,'Warning 0 momentum in Durham algorythm'
229
write(*,'(4e15.5)') (p1(j),j=0,3)
230
write(*,'(4e15.5)') (p2(j),j=0,3)
234
pt1 = p1(1)**2+p1(2)**2
235
pt2 = p2(1)**2+p2(2)**2
236
p1a = dsqrt(pt1+p1(3)**2)
237
p2a = dsqrt(pt2+p2(3)**2)
238
eta1 = 0.5d0*log((p1a+p1(3))/(p1a-p1(3)))
239
eta2 = 0.5d0*log((p2a+p2(3))/(p2a-p2(3)))
240
c ptm1 = max((p1(0)-p1(3))*(p1(0)+p1(3)),0d0)
241
c ptm2 = max((p2(0)-p2(3))*(p2(0)+p2(3)),0d0)
242
dj = max(p1(4),p2(4))+min(pt1,pt2)*2d0*(cosh(eta1-eta2)-
243
& (p1(1)*p2(1)+p1(2)*p2(2))/dsqrt(pt1*pt2))/D**2
245
c write(*,'(a,5e16.4)')'Mom(1): ',(p1(j),j=1,3),p1(0),p1(4)
246
c write(*,'(a,5e16.4)')'Mom(2): ',(p2(j),j=1,3),p2(0),p2(4)
247
c print *,'pT1: ',sqrt(pt1),' pT2: ',sqrt(pt2)
248
c print *,'deltaR: ',sqrt(2d0*(cosh(eta1-eta2)-
249
c & (p1(1)*p2(1)+p1(2)*p2(2))/dsqrt(pt1*pt2))/D**2),
250
c $ ' m: ',sqrt(SumDot(p1,p2,1d0))
251
c write(*,*) 'p1 = ',p1(0),',',p1(1),',',p1(2),',',p1(3)
252
c write(*,*) 'pm1 = ',pm1,', p1a = ',p1a,'eta1 = ',eta1
253
c write(*,*) 'p2 = ',p2(0),',',p2(1),',',p2(2),',',p2(3)
254
c write(*,*) 'pm2 = ',pm2,', p2a = ',p2a,'eta2 = ',eta2
255
c write(*,*) 'dj = ',dj
259
double precision function PYDJ(p1,p2)
260
c***************************************************************************
261
c Uses Durham algorythm to calculate the y value for two partons
262
c If collision type is hh, hadronic jet measure is used
263
c y_{ij} = 2min[p_{i,\perp}^2,p_{j,\perp}^2]/S
264
c (cosh(\eta_i-\eta_j)-cos(\phi_1-\phi_2))
265
c***************************************************************************
270
double precision p1(0:4),p2(0:4) ! 4 is mass**2
280
double precision SumDot
286
pydj = p1(0)*p2(0)/(p1(0)+p2(0))**2*SumDot(p1,p2,1d0)
290
double precision function DJ1(p1,p2)
291
c***************************************************************************
292
c Uses single-sided Durham algorythm to calculate the y value for
293
c parton radiated off non-parton
294
c If collision type is hh, hadronic jet measure is used
295
c y_{ij} = 2min[p_{i,\perp}^2,p_{j,\perp}^2]/S
296
c (cosh(\eta_i-\eta_j)-cos(\phi_1-\phi_2))
297
c***************************************************************************
302
double precision p1(0:3),p2(0:3)
309
double precision pt1,pt2,ptm1,eta1,eta2,phi1,phi2,p1a,p2a,costh
314
if ((lpp(1).eq.0).and.(lpp(2).eq.0)) then
315
p1a = dsqrt(p1(1)**2+p1(2)**2+p1(3)**2)
316
p2a = dsqrt(p2(1)**2+p2(2)**2+p2(3)**2)
317
if (p1a*p2a .ne. 0d0) then
318
costh = (p1(1)*p2(1)+p1(2)*p2(2)+p1(3)*p2(3))/(p1a*p2a)
319
dj1 = 2d0*p1(0)**2*(1d0-costh) !Durham
320
c dj = 2d0*p1(0)*p2(0)*(1d0-costh) !JADE
322
print*,'Warning 0 momentum in Durham algorythm'
323
write(*,'(4e15.5)') (p1(j),j=0,3)
324
write(*,'(4e15.5)') (p2(j),j=0,3)
328
pt1 = p1(1)**2+p1(2)**2
329
pt2 = p2(1)**2+p2(2)**2
330
p1a = dsqrt(pt1+p1(3)**2)
331
p2a = dsqrt(pt2+p2(3)**2)
332
eta1 = 0.5d0*log((p1a+p1(3))/(p1a-p1(3)))
333
eta2 = 0.5d0*log((p2a+p2(3))/(p2a-p2(3)))
334
ptm1 = max((p1(0)-p1(3))*(p1(0)+p1(3)),0d0)
335
dj1 = 2d0*ptm1*(cosh(eta1-eta2)-
336
& (p1(1)*p2(1)+p1(2)*p2(2))/dsqrt(pt1*pt2))
337
c write(*,*) 'p1 = ',p1(0),',',p1(1),',',p1(2),',',p1(3)
338
c write(*,*) 'pm1 = ',pm1,', p1a = ',p1a,'eta1 = ',eta1
339
c write(*,*) 'p2 = ',p2(0),',',p2(1),',',p2(2),',',p2(3)
340
c write(*,*) 'pm2 = ',pm2,', p2a = ',p2a,'eta2 = ',eta2
341
c write(*,*) 'dj = ',dj
345
double precision function DJB(p1)
346
c***************************************************************************
347
c Uses kt algorythm to calculate the y value for one parton
348
c y_i = p_{i,\perp}^2/S
349
c***************************************************************************
354
double precision p1(0:4) ! 4 is mass**2
364
c pm1=max(p1(0)**2-p1(1)**2-p1(2)**2-p1(3)**2,0d0)
365
if ((lpp(1).eq.0).and.(lpp(2).eq.0)) then
366
c write(*,*) 'kin_functions.f: Error. No jet measure w.r.t. beam.'
370
djb = (p1(0)-p1(3))*(p1(0)+p1(3)) ! p1(1)**2+p1(2)**2+pm1
371
c djb = p1(1)**2+p1(2)**2+p1(4)
375
double precision function PYJB(p2,p1,ppart,z)
376
c***************************************************************************
377
c Calculate the Pythia ISR evolution pT2
378
c pTE2 = (1-z)(Q2+m2), Q2=-(p1-p2)**2, z=sred/sprev
379
c Note! p1 and p2 must have mass**2 component!
380
c***************************************************************************
385
double precision p1(0:4),p2(0:4),ppart(0:3),z
389
double precision sred,sprev,Q2,pstar(0:3),pm2
391
double precision dot,SumDot,PT
398
if(p1(4).gt.0.or.p2(4).gt.0.and..not.
399
$ (p1(4).gt.0.and.p2(4).gt.0)) pm2=max(p1(4),p2(4))
403
Q2=-dot(pstar,pstar)+pm2
405
c print *,'Error in PYJB: Q2 = ',Q2
409
sprev=SumDot(p1,ppart,1d0)
410
sred=SumDot(pstar,ppart,1d0)
419
if(z.gt.1.or.z.lt.0)then
420
print *,'Error in PYJB: z = ',z,', sprev = ',sprev,
421
$ ', sred = ',sred,', Q2 = ',Q2
427
double precision function zclus(p2,p1,ppart)
428
c***************************************************************************
429
c Calculate the Pythia ISR evolution pT2
431
c***************************************************************************
436
double precision p1(0:3),p2(0:3),ppart(0:3)
440
double precision sred,sprev,pstar(0:3)
443
double precision dot,SumDot
451
sprev=SumDot(p1,ppart,1d0)
452
sred=SumDot(pstar,ppart,1d0)
460
if((zclus.gt.1.or.zclus.lt.0).and.nerr.le.10)then
461
print *,'Error in zclus: zclus = ',zclus,', sprev = ',sprev,
465
$ print *,'No more zclus errors will be printed'
471
double precision function DJ2(p1,p2)
472
c***************************************************************************
474
c***************************************************************************
479
double precision p1(0:3),p2(0:3)
491
dj2 = dot(p1,p1)+2d0*dot(p1,p2)+dot(p2,p2)
495
subroutine switchmom(p1,p,ic,jc,nexternal)
496
c**************************************************************************
497
c Changes stuff for crossings
498
c**************************************************************************
501
integer jc(nexternal),ic(nexternal)
502
real*8 p1(0:3,nexternal),p(0:3,nexternal)
519
double precision function dot(p1,p2)
520
C****************************************************************************
521
C 4-Vector Dot product
522
C****************************************************************************
524
double precision p1(0:3),p2(0:3)
525
dot=p1(0)*p2(0)-p1(1)*p2(1)-p1(2)*p2(2)-p1(3)*p2(3)
527
if(dabs(dot).lt.1d-6)then ! solve numerical problem
532
C*****************************************************************************
533
C*****************************************************************************
535
C*****************************************************************************
536
C*****************************************************************************
538
double precision function threedot(p1,p2)
539
C****************************************************************************
541
C****************************************************************************
543
double precision p1(0:3),p2(0:3)
544
threedot=p1(1)*p2(1)+p1(2)*p2(2)+p1(3)*p2(3)
549
double precision function rho(p1)
550
C****************************************************************************
551
C computes rho(p)=dsqrt (p(1)**2+p(2)**2+p(3)**2)
552
C****************************************************************************
554
double precision p1(0:3)
555
double precision threedot
558
rho=dsqrt(threedot(p1,p1))
562
double precision function theta(p)
563
c************************************************************************
564
c Returns polar angle of particle
565
c************************************************************************
570
double precision p(0:3)
575
theta=dacos(p(3)/dsqrt(p(1)**2+p(2)**2+p(3)**2))
580
double precision function eta(p)
581
c************************************************************************
582
c Returns pseudo rapidity of particle
583
c************************************************************************
588
double precision p(0:3)
592
double precision theta
598
eta=-dlog(dtan(theta(p)/2))
603
subroutine four_momentum(theta,phi,rho,m,p)
604
c****************************************************************************
605
c modif 3/07/07 : this subroutine defines 4-momentum from theta,phi,rho,m
606
c with rho=px**2+py**2+pz**2
607
c****************************************************************************
611
double precision theta,phi,rho,m,p(0:3)
613
P(1)=rho*dsin(theta)*dcos(phi)
614
P(2)=rho*dsin(theta)*dsin(phi)
616
P(0)=dsqrt(rho**2+m**2)
620
subroutine four_momentum_set2(eta,phi,PT,m,p)
621
c****************************************************************************
622
c modif 16/11/06 : this subroutine defines 4-momentum from PT,eta,phi,m
623
c****************************************************************************
627
double precision PT,eta,phi,m,p(0:3)
634
P(0)=dsqrt(p(1)**2+p(2)**2+p(3)**2+m**2)
640
DOUBLE PRECISION FUNCTION phi(p)
641
c************************************************************************
642
c MODIF 16/11/06 : this subroutine defines phi angle
643
c phi is defined from 0 to 2 pi
644
c************************************************************************
649
double precision p(0:3)
654
double precision pi,zero
655
parameter (pi=3.141592654d0,zero=0d0)
660
if(p(1).gt.zero) then
662
else if(p(1).lt.zero) then
663
phi=datan(p(2)/p(1))+pi
664
else if(p(2).GE.zero) then !remind that p(1)=0
666
else if(p(2).lt.zero) then !remind that p(1)=0
669
if(phi.lt.zero) phi=phi+2*pi