1 #include "isajet/pilot.h"
2 SUBROUTINE QCDINI(JIN1,JIN2)
4 C GENERATE INITIAL-STATE QCD CASCADE USING BACKWARDS
5 C EVOLUTION OF GOTTSCHALK AND OF SJOSTRAND.
7 C IF QCDINI FAILS WHEN ATTEMPTING TO FORCE GL-->QK+QB FOR
8 C HEAVY QUARKS, THEN RETURN NJSET=-1.
10 C VER. 6.40: TRAP W1LIM > 0 TO PREVENT ROUNDING ERRORS.
12 #include "isajet/itapes.inc"
13 #include "isajet/idrun.inc"
14 #include "isajet/pinits.inc"
15 #include "isajet/jetpar.inc"
16 #include "isajet/qcdpar.inc"
17 #include "isajet/jetset.inc"
18 #include "isajet/jwork.inc"
19 #include "isajet/jwork2.inc"
20 #include "isajet/const.inc"
21 #include "isajet/primar.inc"
22 #include "isajet/keys.inc"
24 DIMENSION BOOST1(5),BOOST2(5),B2B1(5),DBL1(5),DBL2(5)
25 DIMENSION FXOLD(2),FXNEW(2)
26 DIMENSION PJKEEP(5,12),JINS(2),JLIST(16),PFKEEP(5)
27 #if defined(CERNLIB_DOUBLE)
28 DOUBLE PRECISION DBL1,DBL2,DBLM
31 C CONVERT IDENT+7 TO JETTYP
32 DATA JLIST/13,11,9,7,5,3,0,2,4,6,8,10,12,0,0,1/
33 ALAMF(A,B,C)=SQRT((A-B-C)**2-4.*B*C)
40 97 PFKEEP(K)=PJSET(K,JIN1)+PJSET(K,JIN2)
41 C EXCEPT FOR HIGGS, PFKEEP**2=SHAT
42 IF(KEYS(7).OR.KEYS(9)) THEN
43 S1KEEP=PFKEEP(4)**2-PFKEEP(1)**2-PFKEEP(2)**2-PFKEEP(3)**2
44 PFKEEP(5)=SQRT(S1KEEP)
45 PPKEEP=PFKEEP(4)+PFKEEP(3)
46 PMKEEP=PFKEEP(4)-PFKEEP(3)
49 PFKEEP(5)=SQRT(S1KEEP)
50 IF(PFKEEP(3).GT.0.) THEN
51 PPKEEP=PFKEEP(4)+PFKEEP(3)
52 PMKEEP=(S1KEEP+PFKEEP(1)**2+PFKEEP(2)**2)/PPKEEP
54 PMKEEP=PFKEEP(4)-PFKEEP(3)
55 PPKEEP=(S1KEEP+PFKEEP(1)**2+PFKEEP(2)**2)/PMKEEP
57 PFKEEP(4)=.5*(PPKEEP+PMKEEP)
58 PFKEEP(3)=.5*(PPKEEP-PMKEEP)
62 98 PJKEEP(K,I)=PJSET(K,I)
69 IF(NPASS1.GT.100) GO TO 9999
73 99 PJSET(K,I)=PJKEEP(K,I)
76 100 PFINAL(K)=PFKEEP(K)
83 XOLD=(PJSET(4,JI)+ABS(PJSET(3,JI)))/ECM
85 FXOLD(I)=STRUC(XOLD,QSQ,JT,IDIN(I))
93 ZMIN=(PJSET(4,JI)+ABS(PJSET(3,JI)))/ECM
97 IF(ZMIN.GE.ZMAX) ZMIN=.5*ZMAX
102 C SOLVE INITIAL KINEMATICS
103 AM1SQ=PJSET(5,JVIR(1))**2*SIGN(1.,PJSET(5,JVIR(1)))
104 AM2SQ=PJSET(5,JVIR(2))**2*SIGN(1.,PJSET(5,JVIR(2)))
105 P1PL=(S1+AM1SQ-AM2SQ+ALAMF(S1,AM1SQ,AM2SQ))/(2.*PTOTMN)
107 P2MN=(S1+AM2SQ-AM1SQ+ALAMF(S1,AM1SQ,AM2SQ))/(2.*PTOTPL)
109 PJSET(3,JVIR(1))=.5*(P1PL-P1MN)
110 PJSET(4,JVIR(1))=.5*(P1PL+P1MN)
111 PJSET(3,JVIR(2))=.5*(P2PL-P2MN)
112 PJSET(4,JVIR(2))=.5*(P2PL+P2MN)
114 C TEST WHETHER NEW MASS IS PLAUSIBLE
117 XNEW=(PJSET(4,JI)+ABS(PJSET(3,JI)))/ECM
121 JT=JLIST(JTYPE(JI)+7)
122 FXNEW(I)=STRUC(XNEW,QSQ,JT,IDIN(I))
126 IF(FXNEW(I).LT.FXOLD(I)*RANF()) GO TO 1
129 C FIND JVIR (SPACE-LIKE PARTON) WITH LARGER (-MASS) FOR NEXT
131 10 IF(JDCAY(JVIR(1)).GE.0.AND.JDCAY(JVIR(2)).GE.0) RETURN
133 IF(NPASS.GT.20*NJSET) GO TO 9999
134 IF(-PJSET(5,JVIR(1)).GE.-PJSET(5,JVIR(2))) THEN
147 ZMIN=(PJSET(4,IVIR)+SGN*PJSET(3,IVIR))/ECM
150 IF(ZMIN.GE.ZMAX) GO TO 1
152 C GENERATE Z AND NEW PARTONS.
153 C NEWV=SPACELIKE, NEWF=TIMELIKE.
158 C IF Z FAILS (BECAUSE OF STRUCTURE FUNCTION) SET NEWV=IVIR,
159 C NEWF=NULL AND RE-SOLVE KINEMATICS.
160 15 IF(.NOT.ZGOOD) THEN
163 PP1PL=PJSET(4,IVIR2)+PJSET(3,IVIR2)
164 PP1MN=PJSET(4,IVIR2)-PJSET(3,IVIR2)
165 AMSQ=PJSET(5,IVIR)**2*SIGN(1.,PJSET(5,IVIR))
166 AMPSQ=PJSET(5,IVIR2)**2*SIGN(1.,PJSET(5,IVIR2))
168 P2PL=(S1-AMSQ-AMPSQ+ALAMF(S1,AMSQ,AMPSQ))/(2.*PP1MN)
171 P2MN=(S1-AMSQ-AMPSQ+ALAMF(S1,AMSQ,AMPSQ))/(2.*PP1PL)
174 PJSET(3,IVIR)=.5*(P2PL-P2MN)
175 PJSET(4,IVIR)=.5*(P2PL+P2MN)
183 C EVOLVE NEW SPACELIKE PARTON.
184 PJSET(5,NEWV)=PJSET(5,IVIR)
189 IF(ZMIN.GE.ZMAX) GO TO 1
192 C CALCULATE APPROXIMATE MASS LIMIT AND DO TIMELIKE EVOLUTION.
193 C VER. 6.40: TRAP W1LIM < 0 FROM ROUNDING ERRORS.
194 W1LIM=T1*(1./(ZZC(IVIR)*(1.+T1/S1))-1.)
195 W1LIM=AMIN1(W1LIM,T1)
196 PJSET(5,NEWF)=SQRT(ABS(W1LIM))
200 C SOLVE KINEMATICS USING +(PL) AND -(MN) COMPONENTS FOR
201 C PJSET(K,NEWV)+PJSET(K,IVIR2)-->PJSET(K,NEWF)+PFINAL
202 C STEP 1: SOLVE FOR P2=PJSET(K,NEWV)
203 PP1PL=PJSET(4,IVIR2)+PJSET(3,IVIR2)
204 PP1MN=PJSET(4,IVIR2)-PJSET(3,IVIR2)
205 AMSQ=PJSET(5,NEWV)**2*SIGN(1.,PJSET(5,NEWV))
206 AMPSQ=PJSET(5,IVIR2)**2*SIGN(1.,PJSET(5,IVIR2))
209 P2PL=(S2-AMSQ-AMPSQ+ALAMF(S2,AMSQ,AMPSQ))/(2.*PP1MN)
212 P2MN=(S2-AMSQ-AMPSQ+ALAMF(S2,AMSQ,AMPSQ))/(2.*PP1PL)
216 C STEP 2: SOLVE FOR Q1(K)=PJSET(K,IVIR)
217 DEN=P2PL*PP1MN-P2MN*PP1PL
218 Q1PL=(+P2PL*(S1+T1-AMPSQ)+PP1PL*(W1+T1-AMSQ))/DEN
219 Q1MN=(-P2MN*(S1+T1-AMPSQ)-PP1MN*(W1+T1-AMSQ))/DEN
222 C CALCULATE TRANSVERSE MOMENTUM AND REJECT IF UNPHYSICAL.
225 IF(JDCAY(NEWF).EQ.-1) GO TO 20
230 C DO ONE TIMELIKE BRANCHING TO INSURE CORRECT MASS. MUST FIRST
231 C SHIFT NJSET TO PUT DECAY PRODUCTS IN CORRECT PLACE.
232 IF(JDCAY(NEWF).EQ.-1) THEN
238 P0=SQRT(.25*(WPL-WMN)**2+Q1TR2)
240 ZLIM=AMAX1((WM0/(E0+P0))**2,CUTJET/(E0+P0))
241 IF(Z1.LE.ZLIM.OR.Z1.GE.1.-ZLIM) GO TO 20
244 JDCAY(NEWF)=NEWF1*JPACK+NEWF2
247 JORIG(NEWF1)=JPACK*JET+NEWF
248 JORIG(NEWF2)=JORIG(NEWF1)
251 130 PJSET(K,NEWF2)=0.
263 PJSET(3,IVIR)=.5*(Q1PL-Q1MN)
264 PJSET(4,IVIR)=.5*(Q1PL+Q1MN)
265 JDCAY(IVIR)=JPACK*NEWV+NEWF
269 PJSET(3,NEWV)=.5*(P2PL-P2MN)
270 PJSET(4,NEWV)=.5*(P2PL+P2MN)
271 JORIG(NEWV)=JPACK*JET+IVIR
275 PJSET(3,NEWF)=.5*(WPL-WMN)
276 PJSET(4,NEWF)=.5*(WPL+WMN)
277 JORIG(NEWF)=JPACK*JET+IVIR
279 C BOOST ALL FINAL VECTORS (EXCEPT NEW ONES) AND RECALCULATE
280 C VIRTUAL MOMENTA. BOOST IS DETERMINED BY DIFFERENCE OF
281 C NEW AND OLD TOTAL FINAL MOMENTA, B2B1=BOOST2-BOOST1.
285 201 BOOST1(K)=PFINAL(K)
288 202 BOOST2(K)=PJSET(K,NEWV)+PJSET(K,IVIR2)-PJSET(K,NEWF)
290 C PARAMETERS FOR COMBINED BOOSTS.
291 #if defined(CERNLIB_SINGLE)
292 BDOTB=BOOST1(4)*BOOST2(4)-BOOST1(1)*BOOST2(1)-BOOST1(2)*BOOST2(2)
293 $-BOOST1(3)*BOOST2(3)
295 203 B2B1(K)=BOOST2(K)-BOOST1(K)
297 #if defined(CERNLIB_DOUBLE)
298 C DOUBLE PRECISION FOR 32-BIT MACHINES USING 3-VECTORS AND MASS
302 204 DBL2(K)=BOOST2(K)
304 DBL1(4)=DSQRT(DBL1(1)**2+DBL1(2)**2+DBL1(3)**2+DBLM**2)
305 DBL2(4)=DSQRT(DBL2(1)**2+DBL2(2)**2+DBL2(3)**2+DBLM**2)
306 BDOTB=DBL1(4)*DBL2(4)-DBL1(1)*DBL2(1)-DBL1(2)*DBL2(2)
309 205 B2B1(K)=DBL2(K)-DBL1(K)
313 BI42=(BDOTB-BMASS**2-B2B1(4)*BMASS)/(BMASS**2*(BOOST2(4)+BMASS))
315 B4K2=(BMASS**2-BDOTB-B2B1(4)*BMASS)/(BMASS**2*(BOOST1(4)+BMASS))
316 BIK1=-1./(BMASS*(BOOST1(4)+BMASS))
317 BIK2=1./(BMASS*(BOOST2(4)+BMASS))
318 BIK3=(BMASS**2-BDOTB)/(BMASS**2*(BOOST1(4)+BMASS)
323 IF(J.EQ.IVIR.OR.J.EQ.IVIR2) GO TO 210
324 IF(PJSET(5,J).LT.0.) GO TO 210
325 IF(JDCAY(J).EQ.-1) GO TO 210
329 BP1=BP1+BOOST1(K)*PJSET(K,J)
330 215 BP21=BP21+B2B1(K)*PJSET(K,J)
332 220 PJSET(K,J)=PJSET(K,J)
333 $+(B2B1(K)*BI41+BOOST2(K)*BI42)*PJSET(4,J)
334 $+B2B1(K)*BP1*BIK1+BOOST2(K)*BP21*BIK2+BOOST2(K)*BP1*BIK3
335 PJSET(4,J)=B44*PJSET(4,J)+BP21*B4K1+BP1*B4K2
338 C SET PFINAL TO BOOST2
340 230 PFINAL(K)=BOOST2(K)
343 C RESET REMAINING VECTORS
345 IF(J.EQ.IVIR.OR.J.EQ.IVIR2) GO TO 240
346 IF(PJSET(5,J).GE.0.) GO TO 240
348 JX2=JDCAY(J)-JPACK*JX1
350 PJSET(K,J)=PJSET(K,JX1)-PJSET(K,JX2)
351 250 DBL1(K)=PJSET(K,J)
352 #if defined(CERNLIB_SINGLE)
353 AMJ=SQRT(ABS(DBL1(4)**2-DBL1(1)**2-DBL1(2)**2-DBL1(3)**2))
355 #if defined(CERNLIB_DOUBLE)
356 AMJ=DSQRT(ABS(DBL1(4)**2-DBL1(1)**2-DBL1(2)**2-DBL1(3)**2))
362 #if defined(CERNLIB_SINGLE)
364 300 PFINAL(K)=PFINAL(K)+PJSET(K,NEWF)
365 S1=PFINAL(4)**2-PFINAL(1)**2-PFINAL(2)**2-PFINAL(3)**2
366 IF(S1.LT.0.) GO TO 9999
368 PTOTPL=PJSET(4,NEWV)+PJSET(3,NEWV)+PJSET(4,IVIR2)+PJSET(3,IVIR2)
369 PTOTMN=PJSET(4,NEWV)-PJSET(3,NEWV)+PJSET(4,IVIR2)-PJSET(3,IVIR2)
371 #if defined(CERNLIB_DOUBLE)
372 C NEED DOUBLE PRECISION ON 32-BIT MACHINES
373 CALL DBLVEC(PFINAL,DBL1)
374 CALL DBLVEC(PJSET(1,NEWF),DBL2)
376 DBL1(K)=DBL1(K)+DBL2(K)
377 300 PFINAL(K)=DBL1(K)
378 S1=DBL1(4)**2-DBL1(1)**2-DBL1(2)**2-DBL1(3)**2
380 IF(S1.LT.0.) GO TO 9999
382 PTOTPL=PJSET(4,NEWV)+PJSET(3,NEWV)+PJSET(4,IVIR2)+PJSET(3,IVIR2)
383 PTOTMN=PJSET(4,NEWV)-PJSET(3,NEWV)+PJSET(4,IVIR2)-PJSET(3,IVIR2)
386 C SET NJSET AND POINTERS IF Z WAS GOOD
387 IF(.NOT.ZGOOD) GO TO 10
389 IF(JDCAY(NEWF).GT.0) NJSET=NJSET+2
392 C ERROR -- DISCARD EVENT.
394 WRITE(ITLIS,9998) IEVT
395 9998 FORMAT(/' ***** ERROR IN QCDINI ... EVENT',I8,' DISCARDED *****')