1 #include "isajet/pilot.h"
4 C Control jet fragmentation. Boost to frames defined in
5 C EVOLVE and call JETGEN.
7 C EVOLVE initializes /PJSET/ as follows--
8 C 1 - 2 = PINITS (except for E+E-)
9 C N0W - N0W = QWJET (for DRELLYAN, NJET=3)
10 C N0JETS - N0JETS+NJET = PJETS
11 C N0PAIR - N0PAIR+NPAIR = PPAIR (for WPAIR)
13 #if defined(CERNLIB_IMPNONE)
16 #include "isajet/itapes.inc"
17 #include "isajet/primar.inc"
18 #include "isajet/jetpar.inc"
19 #include "isajet/pjets.inc"
20 #include "isajet/pinits.inc"
21 #include "isajet/partcl.inc"
22 #include "isajet/const.inc"
23 #include "isajet/jetset.inc"
24 #include "isajet/jwork.inc"
25 #include "isajet/keys.inc"
26 #include "isajet/q1q2.inc"
27 #include "isajet/frame.inc"
29 REAL PSUM(5),PALLJ(5),P12(5),PIN(5,2),PWREST(5),PADD(5)
31 REAL PINPL,PINMN,BP,PT2AVE,PTADD,RANF,PHIADD,PALLPL,PALLMN
33 INTEGER K,J,JJET,NZERO,IB,NPTCL1,NPTCL2,IFAIL,JET,NPJET1,NPLV1
34 INTEGER NPJET3,IP,NP1,NP2,NFIRST,IP1,IFR,NLJ
35 DOUBLE PRECISION DSUM(5),DPASS(5)
41 IF(KEYS(3)) NLJ=NJET+1
44 IF(JJET.EQ.N0W) GOTO 101
45 CALL DBLVEC(PJSET(1,JJET),DPASS)
47 102 DSUM(K)=DSUM(K)+DPASS(K)
49 DSUM(5)=DSQRT(DSUM(4)**2-DSUM(1)**2-DSUM(2)**2-DSUM(3)**2)
55 C Fragment partons from initial state shower
59 IF(JDCAY(J).EQ.JPACK*J+J) THEN
62 120 PIN(K,IB)=PJSET(K,J)
71 IF(NPTCL1.GT.MXPTCL) GO TO 9999
72 PINPL=.5*(PIN(4,1)+PIN(3,1)+PIN(4,2)+PIN(3,2))
73 PINMN=.5*(PIN(4,1)-PIN(3,1)+PIN(4,2)-PIN(3,2))
76 PPTCL(3,NPTCL1)=HALFE-PINPL
77 PPTCL(4,NPTCL1)=HALFE-PINPL
81 PPTCL(3,NPTCL2)=-(HALFE-PINMN)
82 PPTCL(4,NPTCL2)=HALFE-PINMN
87 PSUM(5)=PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2
88 IF(PSUM(5).GE.0.) THEN
90 CALL RESCAL(NZERO,NPTCL2,PSUM,IFAIL)
94 140 PBEAMS(K)=PPTCL(K,NPTCL1)+PPTCL(K,NPTCL2)
95 PBEAMS(5)=SQRT(PBEAMS(4)**2-PBEAMS(1)**2-PBEAMS(2)**2
99 C Boost partons from final jets with -FRAME
106 IF(JET.GT.10) GO TO 210
108 IF(IDJETS(JET).EQ.10) GO TO 210
113 C Do this boost in double precision for 32-bit machines
114 CALL DBOOST(-1,FRAME(1,IFR),PJSET(1,J))
117 C Fragment partons from final jets
123 C Conserve mass of 1+2 for DRELLYAN (automatic for WPAIR)
130 PSUM(K)=PJSET(K,3)+PJSET(K,4)
134 PSUM(K)=PJSET(K,N0W+1)+PJSET(K,N0W+2)
137 PSUM(5)=SQRT(PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2)
139 CALL RESCAL(NPJET1,NPLV1,PSUM,IFAIL)
140 C EXTRADIM has only jet3 + graviton
141 ELSEIF(KEYS(11)) THEN
146 PSUM(K)=PJSET(K,3)+PJSET(K,4)
148 PSUM(5)=SQRT(PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2)
149 CALL RESCAL (NPJET1,NPLV1,PSUM,IFAIL)
151 C All other processes
156 243 PSUM(K)=PSUM(K)+PJSET(K,JJET)
158 PSUM(5)=SQRT(PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2)
160 CALL RESCAL(NPJET1,NPLV1,PSUM,IFAIL)
163 C Add extra jets for DRELLYAN
164 IF(KEYS(3).AND..NOT.STDDY) THEN
169 IF(NPTCL1.GT.MXPTCL) GO TO 9999
171 PPTCL(K,NPTCL1)=PJSET(K,N0W)
172 250 PSUM(K)=PJSET(K,N0W)
173 PPTCL(5,NPTCL1)=PJSET(5,N0W)
177 PSUM(K)=PSUM(K)+PJSET(K,JJET)
179 PSUM(5)=SQRT(PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2)
180 CALL RESCAL(NPJET3,NPTCL1,PSUM,IFAIL)
182 260 PWREST(K)=PPTCL(K,NPTCL1)
185 C Boost partons back to PP COM
192 IF(JET.GT.10) GO TO 300
194 IF(IDJETS(JET).EQ.10) GO TO 300
200 305 BP=BP+FRAME(K,IFR)*PJSET(K,J)
203 310 PJSET(K,J)=PJSET(K,J)+FRAME(K,IFR)*PJSET(4,J)/FRAME(5,IFR)
204 $ +FRAME(K,IFR)*BP/(FRAME(4,IFR)+FRAME(5,IFR))
205 PJSET(4,J)=FRAME(4,IFR)*PJSET(4,J)/FRAME(5,IFR)+BP
208 C Reset FRAME to boost hadrons to PP COM
210 IF(KEYS(1).OR.KEYS(2).OR.(KEYS(3).AND.NJET.EQ.2).OR.KEYS(5)
211 $.OR.(KEYS(7).AND.NPAIR.EQ.0).OR.KEYS(8)) THEN
215 ELSEIF(KEYS(3).AND.NJET.GT.2) THEN
217 420 FRAME(K,1)=PALLJ(K)
220 430 BP=BP+FRAME(K,1)*PWREST(K)
223 FRAME(K,2)=PWREST(K)+FRAME(K,1)*PWREST(4)/FRAME(5,1)
224 $ +FRAME(K,1)*BP/(FRAME(4,1)+FRAME(5,1))
226 FRAME(4,2)=FRAME(4,1)*PWREST(4)/FRAME(5,1)+BP
229 C Boost hadrons back to PP COM
231 DO 500 IP=NZERO,NPTCL
232 JET=IABS(IORIG(IP))/IPACK
233 IF(JET.GT.10) GO TO 500
235 IF(IDJETS(JET).EQ.10) GO TO 500
244 510 BP=BP+FRAME(K,IFR)*PPTCL(K,IP)
247 520 PPTCL(K,IP)=PPTCL(K,IP)+FRAME(K,IFR)*PPTCL(4,IP)/FRAME(5,IFR)
248 $ +FRAME(K,IFR)*BP/(FRAME(4,IFR)+FRAME(5,IFR))
249 PPTCL(4,IP)=FRAME(4,IFR)*PPTCL(4,IP)/FRAME(5,IFR)+BP
254 IF(.NOT.KEYS(2)) THEN
256 PTADD=SQRT(-PT2AVE*ALOG(RANF()))
258 PADD(1)=2.*PTADD*COS(PHIADD)
259 PADD(2)=2.*PTADD*SIN(PHIADD)
260 C Must use large and small components carefully to calculate
261 C mass on 32-bit machines.
266 DO 525 IP=NZERO,NPTCL
267 PALLX=PALLX+PPTCL(1,IP)
268 PALLY=PALLY+PPTCL(2,IP)
269 IF(PPTCL(3,IP).GT.0.) THEN
270 PALLPL=PALLPL+(PPTCL(4,IP)+PPTCL(3,IP))
271 PALLMN=PALLMN+(PPTCL(1,IP)**2+PPTCL(2,IP)**2+PPTCL(5,IP)**2)
272 $ /(PPTCL(4,IP)+PPTCL(3,IP))
274 PALLMN=PALLMN+(PPTCL(4,IP)-PPTCL(3,IP))
275 PALLPL=PALLPL+(PPTCL(1,IP)**2+PPTCL(2,IP)**2+PPTCL(5,IP)**2)
276 $ /(PPTCL(4,IP)-PPTCL(3,IP))
281 POLD(3)=.5*(PALLPL-PALLMN)
282 POLD(4)=.5*(PALLPL+PALLMN)
283 POLD(5)=SQRT(PALLPL*PALLMN-PALLX**2-PALLY**2)
284 PNEW(1)=PADD(1)+POLD(1)
285 PNEW(2)=PADD(2)+POLD(2)
287 PNEW(4)=SQRT(PNEW(1)**2+PNEW(2)**2+PNEW(3)**2+POLD(5)**2)
290 DO 530 IP=NZERO,NPTCL
293 531 BP=BP+POLD(K)*PPTCL(K,IP)
296 532 PPTCL(K,IP)=PPTCL(K,IP)-POLD(K)*PPTCL(4,IP)/POLD(5)
297 $ +POLD(K)*BP/(POLD(4)+POLD(5))
298 PPTCL(4,IP)=PPTCL(4,IP)*POLD(4)/POLD(5)-BP
302 533 BP=BP+PNEW(K)*PPTCL(K,IP)
305 534 PPTCL(K,IP)=PPTCL(K,IP)+PNEW(K)*PPTCL(4,IP)/PNEW(5)
306 $ +PNEW(K)*BP/(PNEW(4)+PNEW(5))
307 PPTCL(4,IP)=PPTCL(4,IP)*PNEW(4)/PNEW(5)+BP
310 C Add opposite PT to beam jets
312 541 PBEAMS(K)=-PNEW(K)
313 PBEAMS(4)=PBEAMS(4)+ECM
314 PBEAMS(5)=PBEAMS(4)**2-PBEAMS(1)**2-PBEAMS(2)**2 -PBEAMS(3)**2
315 IF ( PBEAMS(5).GT.0 ) THEN
316 PBEAMS(5)=SQRT(PBEAMS(5))
318 PBEAMS(4)=SQRT(PBEAMS(4)**2-PBEAMS(5)+4.)
329 JET=IABS(IORIG(IP))/IPACK
331 DO 620 IP1=NFIRST,NPTCL
332 620 IORIG(IP1)=ISIGN(IABS(IORIG(IP1))+IPACK*JET,IORIG(IP1))
335 IF(NP1.LE.NPTCL) GO TO 600
341 WRITE(ITLIS,9998) NPTCL
342 9998 FORMAT(//' ERROR IN FRGMNT ... NPTCL > ',I6)