]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ISAJET/code/jetgen.F
Link libITSrec.so, not libITSraw.
[u/mrichter/AliRoot.git] / ISAJET / code / jetgen.F
CommitLineData
0795afa3 1#include "isajet/pilot.h"
2 SUBROUTINE JETGEN(J)
3C
4C FRAGMENT JET J IN /JETSET/ INTO PRIMARY HADRONS USING THE
5C ALGORITHM OF FIELD AND FEYNMAN WITH
6C F(X)=1-XGEN(1)+XGEN(1)*(XGEN(2)+1)*(1-X)**XGEN(2)
7C FOR LIGHT QUARKS AND THE PETERSON F(X) WITH
8C EPSILON=XGEN(I)*AMASS(I)**2
9C FOR HEAVY QUARKS.
10C INCLUDE BARYONS USING DIQUARKS WITH PROBABILITY PBARY.
11C PROBABILITY PSPIN1 FOR SPIN 1 DEPENDS ON HEAVIEST FLAVOR.
12C FRAGMENT A GLUON LIKE A RANDOM QUARK.
13C
14C Ver 7.30: Use delta function fragmentation for top quark.
15C
16C
17#include "isajet/itapes.inc"
18#include "isajet/jetset.inc"
19#include "isajet/partcl.inc"
20#include "isajet/frgpar.inc"
21#include "isajet/const.inc"
22#include "isajet/mbpar.inc"
23C
24 LOGICAL HEAVY
25 NBEGIN=NPTCL+1
26 PSUM=0.
27 IFLBEG=JTYPE(J)
28 HEAVY=.FALSE.
29 IF(IABS(IFLBEG).GT.3.AND.IFLBEG.NE.9) HEAVY=.TRUE.
30 PBEG=SQRT(PJSET(1,J)**2+PJSET(2,J)**2+PJSET(3,J)**2)
31C TOP QUARK...
32 IF(IABS(IFLBEG).GE.6.AND.IABS(IFLBEG).LE.8) THEN
33 NPTCL=NPTCL+1
34 PPTCL(1,NPTCL)=0
35 PPTCL(2,NPTCL)=0
36 PPTCL(3,NPTCL)=PBEG
37 PPTCL(4,NPTCL)=PJSET(4,J)
38 PPTCL(5,NPTCL)=PJSET(5,J)
39 IORIG(NPTCL)=-J
40 IDCAY(NPTCL)=0
41 IDENT(NPTCL)=JTYPE(J)
42 RETURN
43 ENDIF
44C EQUIVALENT QUARK FOR GLUON
45 IF(IFLBEG.NE.9) GO TO 200
46 IFLBEG=INT(RANF()/PUD)+1
47 IF(RANF().GT..5) IFLBEG=-IFLBEG
48C CONSTRUCT FIRST QUARK
49200 LOOP=0
50 IFL1=IFLBEG
51 CALL GETPT(PT1,SIGQT)
52 PHI1=2.*PI*RANF()
53 PX1=PT1*COS(PHI1)
54 PY1=PT1*SIN(PHI1)
55 PPLUS=PBEG+PJSET(4,J)
56 PTRUE=PPLUS
57935 CONTINUE
58C CONSTRUCT NEXT QUARK
59300 LOOP=LOOP+1
60 IF(PPLUS.LT.PEND.OR.LOOP.GT.10000) RETURN
61C IFL2 CAN BE DIQUARK ONLY IF IFL1 IS NOT
62 IF(MOD(IFL1,100).EQ.0) GO TO 305
63 IF(RANF().LT.PBARY) GO TO 310
64 IFL2=ISIGN(INT(RANF()/PUD)+1,-IFL1)
65 GO TO 320
66305 IFL2=ISIGN(INT(RANF()/PUD)+1,+IFL1)
67 GO TO 320
68310 IQ1=INT(RANF()/PUD)+1
69 IQ2=INT(RANF()/PUD)+1
70 IF(IQ1.LE.IQ2) GO TO 315
71 ISWAP=IQ1
72 IQ1=IQ2
73 IQ2=ISWAP
74315 IFL2=ISIGN(1000*IQ1+100*IQ2,IFL1)
75320 CONTINUE
76 CALL GETPT(PT2,SIGQT)
77 PHI2=2.*PI*RANF()
78 PX2=PT2*COS(PHI2)
79 PY2=PT2*SIN(PHI2)
80C CONSTRUCT MESON WITH FLAVOR MIXING
81C SPECIAL CASE - SUPERSYM
82 IFLABS=IABS(IFL1)
83 IF(IFLABS.GT.20.AND.IFLABS.LT.30) THEN
84 IDHAD=IFL1
85 GOTO 470
86 ENDIF
87 IF(MOD(IFL1,100).EQ.0) GO TO 420
88 IF(MOD(IFL2,100).EQ.0) GO TO 425
89 IHIGH=MAX0(IABS(IFL1),IABS(IFL2))
90 JSPIN=INT(RANF()+PSPIN1(IHIGH))
91 ID1=IFL1
92 ID2=IFL2
93 IF(ID1+ID2.NE.0) GO TO 400
94 RND=RANF()
95 ID1=IABS(ID1)
96 ID1=INT(PMIX1(ID1,JSPIN+1)+RND)+INT(PMIX2(ID1,JSPIN+1)+RND)+1
97 ID2=-ID1
98400 IF(IABS(ID1).LE.IABS(ID2)) GO TO 410
99 ISAVE=ID1
100 ID1=ID2
101 ID2=ISAVE
102410 IDHAD=ISIGN(100*IABS(ID1)+10*IABS(ID2)+JSPIN,ID1)
103 GO TO 470
104C CONSTRUCT BARYON IDENT.
105420 ID3=MOD(IFL1/100,10)
106 ID2=IFL1/1000
107 ID1=IFL2
108 GO TO 430
109425 ID3=MOD(IFL2/100,10)
110 ID2=IFL2/1000
111 ID1=IFL1
112430 IF(IABS(ID1).LE.IABS(ID2)) GO TO 431
113 ISWAP=ID1
114 ID1=ID2
115 ID2=ISWAP
116431 IF(IABS(ID2).LE.IABS(ID3)) GO TO 432
117 ISWAP=ID2
118 ID2=ID3
119 ID3=ISWAP
120432 IF(IABS(ID1).LE.IABS(ID2)) GO TO 440
121 ISWAP=ID1
122 ID1=ID2
123 ID2=ISWAP
124440 JSPIN=1
125 IF(ID1.EQ.ID2.AND.ID2.EQ.ID3) GO TO 450
126 IHIGH=IABS(ID3)
127 JSPIN=INT(RANF()+PSPIN1(IHIGH))
128450 IF(JSPIN.EQ.1.OR.ID1.EQ.ID2.OR.ID2.EQ.ID3) GO TO 460
129 IF(RANF().GT.PISPN) GO TO 460
130 ISWAP=ID1
131 ID1=ID2
132 ID2=ISWAP
133460 IDHAD=1000*IABS(ID1)+100*IABS(ID2)+10*IABS(ID3)+JSPIN
134 IDHAD=ISIGN(IDHAD,IFL1)
135470 CONTINUE
136 AM=AMASS(IDHAD)
137 PX=PX1+PX2
138 PY=PY1+PY2
139 AMT2=PX**2+PY**2+AM**2
140C IF LEADING PARTICLE, FIND MINIMUM X
141 XMIN=0.
142 IF(LOOP.EQ.1) XMIN=AMIN1(SQRT(AMT2)/PPLUS,1.)
143C SELECT X
144C USE FIELD-FEYNMAN FUNCTION FOR LIGHT QUARKS.
145C USE PETERSON FRAGMENTATION FOR HEAVY QUARKS.
146C USE DISTRIBUTION FOR HEAVIER QUARK FOR DIQUARKS.
147 II1=IABS(IFL1)
148 IF(MOD(II1,100).EQ.0) II1=MOD(II1/100,10)
149 IF(II1.LE.3) THEN
150 X=RANF()
151 IF(RANF().LT.XGEN(1)) X=1.-X**(1./(XGEN(2)+1.))
152 ELSEIF(II1.LE.9) THEN
153 CALL HEAVYX(X,XGEN(II1)/AM**2)
154 ELSEIF(II1.GT.20.AND.II1.LT.30) THEN
155 CALL HEAVYX(X,XGENSS(II1-20)/AM**2)
156 ENDIF
157 X=XMIN+(1.-XMIN)*X
158 QPLUS=X*PPLUS
159 QPLUS=AMAX1(QPLUS,1.E-6)
160 QMINUS=AMT2/QPLUS
161 P0=.5*(QPLUS+QMINUS)
162 PZ=.5*(QPLUS-QMINUS)
163C DISCARD PARTICLE IF PZ<0
164 IF(PZ.LT.0..AND..NOT.(HEAVY.AND.LOOP.EQ.1)) GO TO 500
165C ADD PARTICLE TO /PARTCL/
166 IF(NPTCL.GE.MXPTCL) GO TO 9999
167 NPTCL=NPTCL+1
168 PPTCL(1,NPTCL)=PX
169 PPTCL(2,NPTCL)=PY
170 PPTCL(3,NPTCL)=PZ
171 PPTCL(4,NPTCL)=P0
172 PPTCL(5,NPTCL)=AM
173 IORIG(NPTCL)=-J
174 IDCAY(NPTCL)=0
175 IDENT(NPTCL)=IDHAD
176 PSUM=PSUM+QPLUS
177C SWAP QUARKS AND CONTINUE IF SUFFICIENT PPLUS
178500 CONTINUE
179 PX1=-PX2
180 PY1=-PY2
181 IFL1=-IFL2
182 PPLUS=(1.-X)*PPLUS
183 GO TO 300
184C
1859999 CALL PRTEVT(0)
186 WRITE(ITLIS,10) NPTCL
18710 FORMAT(//5X,'ERROR IN JETGEN...NPTCL >',I5)
188 RETURN
189 END