1 #include "isajet/pilot.h"
2 SUBROUTINE ISPJET(DRCUT,ETCUT,NPJ,PJPT,PJPHI,PJETA)
3 C----------------------------------------------------------------------
5 C- Purpose and Methods : COMBINES PARTONS INTO PARTON JETS
8 C- DRCUT - dR=sqrt(dETA**2+dPHI**2) cut around Leading Partons.
9 C- ETCUT - Transverse Energy cut (minimum for defining a JET ).
12 C- NPJ = No. of Parton Jets found.
13 C- PJPT(NPJ) = pt of partons
17 C- created 16-APR-1996 Serban D. Protopopescu
18 C- Updated 16-JUN-1998 F. Paige
19 C- Copy of ISAZEB routine ISA_PJETS to be used by IPARTNS
21 C----------------------------------------------------------------------
22 #if defined(CERNLIB_IMPNONE)
25 #include "isajet/pjets.inc"
26 #include "isajet/jetset.inc"
30 REAL PJPHI(*), PJETA(*), PJPT(*)
31 INTEGER NP, JP, J, JO, JOP1, JOP2, JP1, JP2, ISKP, IP
32 REAL X1, Y1, PHI1, PHI2,TH
33 REAL DETA, DPHI, DR, ETCUT
36 INTEGER JIORD(NPMAX), JDORD(NPMAX), JCNN(NPMAX,NPMAX)
39 REAL PJIN(4,NPMAX), PINPHI(NPMAX), PINETA(NPMAX)
40 REAL PINPT(NPMAX),PDMPT(NPMAX)
43 DOUBLE PRECISION PI, TWOPI, HALFPI, RADIAN
45 C last significant (correctly rounded) decimal place on VAX:
48 PARAMETER (PI= 3.1415 92653 58979 32384 6 D0)
49 PARAMETER (TWOPI= 6.2831 85307 17958 64769 3 D0)
50 PARAMETER (HALFPI= 1.5707 96326 79489 66192 3 D0)
51 PARAMETER (RADIAN= 0.0174532 92519 94329 5769237 D0)
53 PARAMETER( EPS = 1.0E-5 )
54 C----------------------------------------------------------------------
58 IF(JDCAY(I).EQ.0.AND.IABS(JTYPE(I)).LT.10) THEN
63 PINPT(NP) = SQRT( PJIN(1,NP)**2+PJIN(2,NP)**2 )
64 PINPHI(NP) = ATAN2 (PJIN(2,NP),PJIN(1,NP)+EPS)
65 IF(PINPHI(NP).LT.0.)PINPHI(NP)=PINPHI(NP)+TWOPI
66 TH = ATAN2 (PINPT(NP),PJIN(3,NP)+EPS)
67 PINETA(NP) = -ALOG ( ABS(TAN(TH/2.)) + EPS )
68 IF(NP.GE.NPMAX) GOTO 35
71 35 CONTINUE ! jump here if more than NPMAX partons
73 C ... Order partons in pt
77 100 PDMPT(JP)=PINPT(JP)
78 CALL ISASRT(PDMPT(1),NP,JIORD)
80 105 JDORD(JP) = JIORD(NP-JP+1)
82 C ... Combine partons close in r space
90 C ... Check if parton already connected to other one
91 IF ( JCNN(JOP1,1).EQ.-1 ) GOTO 120
92 DO 130 JP2 = JP1+1 , NP
94 C ... Check if parton already connected to other one
95 IF ( JCNN(JOP2,1).EQ.-1 ) GOTO 130
96 DETA = PINETA(JOP1) - PINETA(JOP2)
106 DR = SQRT(DETA**2+DPHI**2)
107 C --- Criterion for combining partons
108 IF ( DR.LT.DRCUT ) THEN
109 JCNN(JOP1,1)=JCNN(JOP1,1)+1
111 JCNN(JOP1,JCNN(JOP1,1)+1)=JOP2
112 ISKP=ISKP+JCNN(JOP1,1)
120 C ... Bookkeeping for parton jets
130 C ... Already connected, single parton, or has others to connect to
131 IF ( JCNN(JOP1,1).GE.0 ) THEN
134 PJ(K,NPJ)=PJIN(K,JOP1)
136 PJPHI(NPJ) = PINPHI(JOP1)
137 PJETA(NPJ) = PINETA(JOP1)
138 PJPT(NPJ) = PINPT(JOP1)
139 IF ( JCNN(JOP1,1).EQ.0 ) GOTO 205
140 DO 210 JJ = 1 , JCNN(JOP1,1)
141 PJ(1,NPJ) = PJ(1,NPJ) + PJIN(1,JCNN(JOP1,JJ+1))
142 PJ(2,NPJ) = PJ(2,NPJ) + PJIN(2,JCNN(JOP1,JJ+1))
143 PJ(3,NPJ) = PJ(3,NPJ) + PJIN(3,JCNN(JOP1,JJ+1))
144 PJ(4,NPJ) = PJ(4,NPJ) + PJIN(4,JCNN(JOP1,JJ+1))
146 PJPT(NPJ) = SQRT( PJ(1,NPJ)**2 + PJ(2,NPJ)**2 )
147 PJPHI(NPJ) = ATAN2 (PJ(2,NPJ),PJ(1,NPJ)+EPS)
148 IF(PJPHI(NPJ).LT.0.)PJPHI(NPJ)=PJPHI(NPJ)+TWOPI
149 TH = ATAN2 (PJPT(NPJ),PJ(3,NPJ)+EPS)
150 PJETA(NPJ) = -ALOG ( ABS(TAN(TH/2.)) + EPS )
151 C ... Criterion for dropping a parton jet ( et < etcut )
152 205 IF ( PJPT(NPJ).GT.ETCUT ) GOTO 200
157 C ... Order pjets in pt
161 300 PDMPT(JP)=PJPT(JP)
162 CALL ISASRT(PDMPT(1),NPJ,JIORD)
167 305 JDORD(JP) = JIORD(NPJ-JP+1)
169 PJPT(JP)=PINPT(JDORD(JP))
170 PJETA(JP)=PINETA(JDORD(JP))
171 PJPHI(JP)=PINPHI(JDORD(JP))