]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ISAJET/code/mbias.F
Extracting PHOS and EMCAL trackers from the correspondig reconstructors (Yu.Belikov)
[u/mrichter/AliRoot.git] / ISAJET / code / mbias.F
CommitLineData
0795afa3 1#include "isajet/pilot.h"
2 SUBROUTINE MBIAS
3C
4C Generate minbias event or beam jets for high-pt event using
5C parameters set in MBSET:
6C
7C (1) Select number NPOM of cut pomerons -- cf cut Reggeon
8C field theory of Abramovskii, Kanchelli, and Gribov.
9C (2) Generate xf for leading baryons including 1/(1-xf)
10C diffractive term and guessed NPOM dependence,
11C F(XF)=(1-XF)**(A+B/NPOM)
12C (3) Select xf for each half of each Pomeron. then fragment
13C each half Pomeron into mesons and baryons independently
14C in the Pomeron-Pomeron center of mass. This avoids
15C making xf=0 a singular point.
16C
17C Note that multiple cut Pomerons give approximate KNO scaling.
18C The only short-range correlations are from resonances.
19C
20C Ver. 7.09: Add traps on free loops and IMPLICIT NONE.
21C
22#if defined(CERNLIB_IMPNONE)
23 IMPLICIT NONE
24#endif
25#include "isajet/itapes.inc"
26#include "isajet/keys.inc"
27#include "isajet/mbgen.inc"
28#include "isajet/primar.inc"
29#include "isajet/jetpar.inc"
30#include "isajet/const.inc"
31#include "isajet/partcl.inc"
32#include "isajet/mbpar.inc"
33C
34 DIMENSION IFL(3),IFLEXC(2),PXEXC(2),PYEXC(2),SIGN(2)
35 DIMENSION PSUM(5)
36 DIMENSION LDIFFR(2)
37 LOGICAL LDIFFR
38 REAL RANF,AMASS
39 REAL RND,XX,XSUM,P0,PPOM,PXEXC,PSUM,SIGN,PYEXC,GAM,BETA,X,
40 $AM,PPLUS,EPSDIF,PEND0,TRY,PX,PY,PX2,PY2,QMINUS,PZ,QPLUS,PT1,
41 $PHI1,XBGEN,PT2,PHI2,PX1,PY1,AMT2
42 INTEGER ID1,ID2,IFL1,IFL2,IMOD1,IMOD2,ITWIST,IPOM,LOOP,NFIRST,
43 $ID3,IFLEXC,IFL,I,NP2,IP,NP1,IFAIL,NPTLV1,IDHAD,IB,NEW,JSPIN,
44 $INDEX,NBEGIN,IPASS,MXPASS,N,IDIFF,IPASSB,IFLNEW,ISWAP
45 DATA SIGN/1.,-1./,PEND0/.14/
46 DATA PSUM/5*0./
47 DATA MXPASS/200/
48C
49C Start
50 NBEGIN=NPTCL+1
51 IPASS=1
52 IPASSB=1
53C
54C Select number of cut Pomerons.
55C
561 CONTINUE
57 TRY=RANF()
58 DO 10 N=MNPOM,MXPOM
59 NPOM=N
60 IF(POMGEN(N).GT.TRY) GO TO 20
6110 CONTINUE
6220 CONTINUE
63C
64C Decide if diffractive event
65 IF(RANF().LT.PDIFFR) THEN
66 IDIFF=INT(1.99999*RANF())+1
67 LDIFFR(IDIFF)=.TRUE.
68 LDIFFR(3-IDIFF)=.FALSE.
69 ELSE
70 LDIFFR(1)=.FALSE.
71 LDIFFR(2)=.FALSE.
72 ENDIF
73C
74C Generate leading baryons.
75C
76 DO 100 IB=1,2
77 PPLUS=2.*PBEAM(IB)
78C
79C Special treatment for diffractive beam.
80 IF(LDIFFR(IB)) THEN
81 IDHAD=IDIN(IB)
82 AM=AMASS(IDHAD)
83 CALL FLAVOR(IDIN(IB),IFL(1),IFL(2),IFL(3),JSPIN,INDEX)
84 NEW=INT(3.*RANF())+1
85 IFLEXC(1)=+IFL(NEW)
86 IFLEXC(2)=-IFL(NEW)
87 EPSDIF=2./SCM
88 DXBARY(IB)=EPSDIF**RANF()
89 XBARY(IB)=1.-DXBARY(IB)
90 GO TO 115
91 ENDIF
92C
93C If not diffractive, construct IDENT of leading baryon
94 CALL FLAVOR(IDIN(IB),IFL(1),IFL(2),IFL(3),JSPIN,INDEX)
95 NEW=INT(3.*RANF())+1
96 IFLNEW=ISIGN(INT(RANF()/PUD0)+1,IDIN(IB))
97 IFLEXC(1)=IFL(NEW)
98 IFLEXC(2)=-IFLNEW
99 IFL(NEW)=IFLNEW
100 IF(IABS(IFL(1)).GT.IABS(IFL(2))) THEN
101 ISWAP=IFL(1)
102 IFL(1)=IFL(2)
103 IFL(2)=ISWAP
104 ENDIF
105 IF(IABS(IFL(2)).GT.IABS(IFL(3))) THEN
106 ISWAP=IFL(2)
107 IFL(2)=IFL(3)
108 IFL(3)=ISWAP
109 ENDIF
110 IF(IABS(IFL(1)).GT.IABS(IFL(2))) THEN
111 ISWAP=IFL(1)
112 IFL(1)=IFL(2)
113 IFL(2)=ISWAP
114 ENDIF
115 JSPIN=1
116 IF(IFL(1).EQ.IFL(2).AND.IFL(2).EQ.IFL(3)) THEN
117 JSPIN=1
118 ELSE
119 JSPIN=INT(RANF()+PJSPN)
120 ENDIF
121 IF(JSPIN.EQ.0.AND.IFL(1).NE.IFL(2).AND.IFL(2).NE.IFL(3)) THEN
122 IF(RANF().GT.PISPN) THEN
123 ISWAP=IFL(1)
124 IFL(1)=IFL(2)
125 IFL(2)=ISWAP
126 ENDIF
127 ENDIF
128 IDHAD=1000*IABS(IFL(1))+100*IABS(IFL(2))+10*IABS(IFL(3))+JSPIN
129 IDHAD=ISIGN(IDHAD,IDIN(IB))
130 AM=AMASS(IDHAD)
131C
132C Select xf for nondiffractive baryon, flat for NPOM=1 and
133C like mesons for NPOM=infinity.
134110 XBGEN=XGEN0(2)*(1.-1./NPOM)
135 DXBARY(IB)=RANF()**(1./(XBGEN+1.))
136 XBARY(IB)=1.-DXBARY(IB)
137C
138C Select transverse momentum of baryon
139115 CALL GETPT(PT1,SIGQT0)
140 PHI1=2.*PI*RANF()
141 PX1=PT1*COS(PHI1)
142 PY1=PT1*SIN(PHI1)
143 PXEXC(1)=PX1
144 PYEXC(1)=PY1
145 CALL GETPT(PT2,SIGQT0)
146 PHI2=2.*PI*RANF()
147 PX2=PT2*COS(PHI2)
148 PY2=PT2*SIN(PHI2)
149 PXEXC(2)=PX2
150 PYEXC(2)=PY2
151 PX=-PX1-PX2
152 PY=-PY1-PY2
153 AMT2=PX**2+PY**2+AM**2
154C
155 QPLUS=XBARY(IB)*PPLUS
156 QPLUS=AMAX1(QPLUS,1.E-6)
157 QMINUS=AMT2/QPLUS
158 PZ=.5*(QPLUS-QMINUS)
159 P0=.5*(QPLUS+QMINUS)
160C
161C Add baryon to /PARTCL/ if PZ>0.
162 IF(NPTCL.GE.MXPTCL) GO TO 9999
163 IF(PZ.GE.0.) THEN
164 NPTCL=NPTCL+1
165 PPTCL(1,NPTCL)=PX
166 PPTCL(2,NPTCL)=PY
167 PPTCL(3,NPTCL)=PZ*SIGN(IB)
168 PPTCL(4,NPTCL)=P0
169 PPTCL(5,NPTCL)=AM
170 IORIG(NPTCL)=0
171 IDCAY(NPTCL)=0
172 IDENT(NPTCL)=IDHAD
173 ELSE
174 IPASSB=IPASSB+1
175 IF(IPASSB.LT.MXPASS) GO TO 110
176C Just give up if it fails MXPASS times
177 WRITE(ITLIS,998)
178998 FORMAT(//5X,'ERROR IN MBIAS ... COULD NOT MAKE BARYON')
179 XBARY(IB)=0.
180 DXBARY(IB)=1.
181 ENDIF
182C
183C Having accepted baryon, set up XPOM array for cut Pomerons,
184C rescaling to 1.-XBARY(IB).
185 XSUM=0.
186 DO 120 N=1,NPOM
187 XX=RANF()
188 XPOM(N,IB)=XX
189 XSUM=XSUM+XX
190120 CONTINUE
191 XSUM=1./XSUM
192 DO 130 N=1,NPOM
193 XPOM(N,IB)=XSUM*XPOM(N,IB)*DXBARY(IB)
194130 CONTINUE
195100 CONTINUE
196C
197C Fragment each Pomeron into mesons and baryon pairs in the
198C Pomeron-Pomeron center of mass.
199C
200 DO 1000 IB=1,2
201 DO 2000 IPOM=1,NPOM
202 PPOM=SQRT(PBEAM(1)*XPOM(IPOM,1)*PBEAM(2)*XPOM(IPOM,2))
203 PPLUS=2.*PPOM
204 NFIRST=NPTCL+1
205 LOOP=0
206C
207200 CONTINUE
208 ITWIST=INT(1.99999*RANF())+1
209 LOOP=LOOP+1
210C
211C Select new quark or diquark. Old diquark implies new quark.
212C Old quark implies new diquark with probability PBARY0.
213 IFL1=IFLEXC(ITWIST)
214 IF(MOD(IFL1,100).EQ.0) THEN
215 IFL2=ISIGN(INT(RANF()/PUD0)+1,+IFL1)
216 ELSEIF(RANF().GT.PBARY0) THEN
217 IFL2=ISIGN(INT(RANF()/PUD0)+1,-IFL1)
218 ELSE
219 ID1=INT(RANF()/PUD0)+1
220 ID2=INT(RANF()/PUD0)+1
221 IF(IABS(ID1).GT.IABS(ID2)) THEN
222 ISWAP=ID1
223 ID1=ID2
224 ID2=ISWAP
225 ENDIF
226 IFL2=ISIGN(1000*ID1+100*ID2,IFL1)
227 ENDIF
228 IFLEXC(ITWIST)=-IFL2
229C Construct meson from quark+antiquark. Else, construct baryon
230C IDENT from quark+diquark.
231 IMOD1=MOD(IFL1,100)
232 IMOD2=MOD(IFL2,100)
233 IF(IMOD1.NE.0.AND.IMOD2.NE.0) THEN
234 JSPIN=INT(RANF()+PJSPN)
235 ID1=IFL1
236 ID2=IFL2
237 IF(ID1+ID2.EQ.0) THEN
238 RND=RANF()
239 ID1=IABS(ID1)
240 ID1=INT(PMIX01(ID1,JSPIN+1)+RND)
241 $ +INT(PMIX02(ID1,JSPIN+1)+RND)+1
242 ID2=-ID1
243 ELSEIF(IABS(ID1).GT.IABS(ID2)) THEN
244 ISWAP=ID1
245 ID1=ID2
246 ID2=ISWAP
247 ENDIF
248 IDHAD=ISIGN(100*IABS(ID1)+10*IABS(ID2)+JSPIN,ID1)
249 ELSE
250 IF(IMOD1.EQ.0) THEN
251 ID3=MOD(IFL1/100,10)
252 ID2=IFL1/1000
253 ID1=IFL2
254 ELSE
255 ID3=MOD(IFL2/100,10)
256 ID2=IFL2/1000
257 ID1=IFL1
258 ENDIF
259 IF(IABS(ID1).GT.IABS(ID2)) THEN
260 ISWAP=ID1
261 ID1=ID2
262 ID2=ISWAP
263 ENDIF
264 IF(IABS(ID2).GT.IABS(ID3)) THEN
265 ISWAP=ID2
266 ID2=ID3
267 ID3=ISWAP
268 ENDIF
269 IF(IABS(ID1).GT.IABS(ID2)) THEN
270 ISWAP=ID1
271 ID1=ID2
272 ID2=ISWAP
273 ENDIF
274 IF(ID1.EQ.ID2.AND.ID2.EQ.ID3) THEN
275 JSPIN=1
276 ELSE
277 JSPIN=INT(RANF()+PJSPN)
278 ENDIF
279 IF(JSPIN.EQ.0.AND.ID1.NE.ID2.AND.ID2.NE.ID3) THEN
280 IF(RANF().LT.PISPN) THEN
281 ISWAP=ID1
282 ID1=ID2
283 ID2=ISWAP
284 ENDIF
285 ENDIF
286 IDHAD=1000*IABS(ID1)+100*IABS(ID2)+10*IABS(ID3)+JSPIN
287 IDHAD=ISIGN(IDHAD,IFL1)
288 ENDIF
289C
290 AM=AMASS(IDHAD)
291 PX1=PXEXC(ITWIST)
292 PY1=PYEXC(ITWIST)
293 CALL GETPT(PT2,SIGQT0)
294 PHI2=2.*PI*RANF()
295 PX2=PT2*COS(PHI2)
296 PY2=PT2*SIN(PHI2)
297 PXEXC(ITWIST)=PX2
298 PYEXC(ITWIST)=PY2
299 PX=PX1-PX2
300 PY=PY1-PY2
301 AMT2=PX**2+PY**2+AM**2
302C
303C Select x -- same distribution for all particles.
304 X=RANF()
305 IF(RANF().LT.XGEN0(1)) X=1.-X**(1./(XGEN0(2)+1.))
306 QPLUS=X*PPLUS
307 QPLUS=AMAX1(QPLUS,1.E-6)
308 QMINUS=AMT2/QPLUS
309 P0=.5*(QPLUS+QMINUS)
310 PZ=.5*(QPLUS-QMINUS)
311C
312C Add particle to /PARTCL/ if PZ>0.
313 IF(NPTCL.GE.MXPTCL) GO TO 9999
314 IF(PZ.GE.0.) THEN
315 NPTCL=NPTCL+1
316 PPTCL(1,NPTCL)=PX
317 PPTCL(2,NPTCL)=PY
318 PPTCL(3,NPTCL)=PZ*SIGN(IB)
319 PPTCL(4,NPTCL)=P0
320 PPTCL(5,NPTCL)=AM
321 IORIG(NPTCL)=0
322 IDCAY(NPTCL)=0
323 IDENT(NPTCL)=IDHAD
324 ENDIF
325C
326C Continue if sufficient pplus
327 PPLUS=(1.-X)*PPLUS
328 IF(PPLUS.GT.PEND0.AND.LOOP.LT.MXPTCL) GO TO 200
329C
330C Boost hadrons to lab frame.
331 IF(NPTCL.LT.NFIRST) GO TO 2000
332 BETA=(XPOM(IPOM,1)*PBEAM(1)-XPOM(IPOM,2)*PBEAM(2))/(2.*PPOM)
333 GAM=(XPOM(IPOM,1)*PBEAM(1)+XPOM(IPOM,2)*PBEAM(2))/(2.*PPOM)
334 DO 400 IP=NFIRST,NPTCL
335 P0=GAM*PPTCL(4,IP)+BETA*PPTCL(3,IP)
336 PZ=BETA*PPTCL(4,IP)+GAM*PPTCL(3,IP)
337 PPTCL(3,IP)=PZ
338 PPTCL(4,IP)=P0
339400 CONTINUE
340C
3412000 CONTINUE
3421000 CONTINUE
343C
344C Rescale hadron momenta for correct four-momentum.
345C
346 NPTLV1=NPTCL
347 IF(KEYS(4)) THEN
348 PSUM(4)=ECM
349 PSUM(5)=ECM
350 CALL RESCAL(NBEGIN,NPTLV1,PSUM,IFAIL)
351 ELSE
352 CALL RESCAL(NBEGIN,NPTLV1,PBEAMS,IFAIL)
353 ENDIF
354 IF(IFAIL.NE.0.AND.IPASS.LT.MXPASS) THEN
355 IPASS=IPASS+1
356 NPTCL=NBEGIN-1
357 GO TO 1
358 ENDIF
359C
360C Decay hadrons
361C
362 NP1=NBEGIN
363500 NP2=NPTCL
364 DO 510 I=NP1,NP2
365 CALL DECAY(I)
366510 CONTINUE
367 NP1=NP2+1
368 IF(NP1.LE.NPTCL) GO TO 500
369 RETURN
370C
3719999 CALL PRTEVT(0)
372 WRITE(ITLIS,999) NPTCL
373999 FORMAT(//5X,'ERROR IN MBIAS...NPTCL >',I5)
374 RETURN
375 END