]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA/pythia/pyevnt.F
Forgot to check in this the last time. Some changes in AliL3MemHandler as
[u/mrichter/AliRoot.git] / PYTHIA / pythia / pyevnt.F
1  
2 C*********************************************************************
3  
4       SUBROUTINE PYEVNT
5  
6 C...Administers the generation of a high-pT event via calls to
7 C...a number of subroutines.
8       COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5)
9       COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
10       COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
11       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
12       COMMON/PYINT1/MINT(400),VINT(400)
13       COMMON/PYINT2/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
14       COMMON/PYINT5/NGEN(0:200,3),XSEC(0:200,3)
15       COMMON/PYUPPR/NUP,KUP(20,7),PUP(20,5),NFUP,IFUP(10,2),Q2UP(0:10)
16       SAVE /LUJETS/,/LUDAT1/,/LUDAT2/
17       SAVE /PYPARS/,/PYINT1/,/PYINT2/,/PYINT5/,/PYUPPR/
18       DIMENSION VTX(4)
19  
20 C...Initial values for some counters.
21       N=0
22       MINT(5)=MINT(5)+1
23       MINT(7)=0
24       MINT(8)=0
25       MINT(83)=0
26       MINT(84)=MSTP(126)
27       MSTU(24)=0
28       MSTU70=0
29       MSTJ14=MSTJ(14)
30  
31 C...If variable energies: redo incoming kinematics and cross-section.
32       MSTI(61)=0
33       IF(MSTP(171).EQ.1) THEN
34         CALL PYINKI(1)
35         IF(MSTI(61).EQ.1) THEN
36           MINT(5)=MINT(5)-1
37           RETURN
38         ENDIF
39         IF(MINT(121).GT.1) CALL PYSAVE(3,1)
40         CALL PYXTOT
41       ENDIF
42  
43 C...Loop over number of pileup events; check space left.
44       IF(MSTP(131).LE.0) THEN
45         NPILE=1
46       ELSE
47         CALL PYPILE(2)
48         NPILE=MINT(81)
49       ENDIF
50       DO 250 IPILE=1,NPILE
51       IF(MINT(84)+100.GE.MSTU(4)) THEN
52         CALL LUERRM(11,
53      &  '(PYEVNT:) no more space in LUJETS for pileup events')
54         IF(MSTU(21).GE.1) GOTO 260
55       ENDIF
56       MINT(82)=IPILE
57  
58 C...Generate variables of hard scattering.
59       MINT(51)=0
60       MSTI(52)=0
61   100 CONTINUE
62       IF(MINT(51).NE.0.OR.MSTU(24).NE.0) MSTI(52)=MSTI(52)+1
63       MINT(31)=0
64       MINT(51)=0
65       MINT(57)=0
66       CALL PYRAND
67       IF(MSTI(61).EQ.1) THEN
68         MINT(5)=MINT(5)-1
69         RETURN
70       ENDIF
71       IF(MINT(51).EQ.2) RETURN
72       ISUB=MINT(1)
73       IF(MSTP(111).EQ.-1) GOTO 240
74  
75       IF(ISUB.LE.90.OR.ISUB.GE.95) THEN
76 C...Hard scattering (including low-pT):
77 C...reconstruct kinematics and colour flow of hard scattering.
78   110   MINT(51)=0
79         CALL PYSCAT
80         IF(MINT(51).EQ.1) GOTO 100
81         IPU1=MINT(84)+1
82         IPU2=MINT(84)+2
83         IF(ISUB.EQ.95) GOTO 130
84  
85 C...Showering of initial state partons (optional).
86         ALAMSV=PARJ(81)
87         PARJ(81)=PARP(72)
88         IF(MSTP(61).GE.1.AND.MINT(47).GE.2) CALL PYSSPA(IPU1,IPU2)
89         PARJ(81)=ALAMSV
90         IF(MINT(51).EQ.1) GOTO 100
91  
92 C...Showering of final state partons (optional).
93         ALAMSV=PARJ(81)
94         PARJ(81)=PARP(72)
95         IF(MSTP(71).GE.1.AND.ISET(ISUB).GE.2.AND.ISET(ISUB).LE.10) THEN
96           IPU3=MINT(84)+3
97           IPU4=MINT(84)+4
98           IF(ISET(ISUB).EQ.5.OR.ISET(ISUB).EQ.6) IPU4=-3
99           QMAX=VINT(55)
100           IF(ISET(ISUB).EQ.2) QMAX=SQRT(PARP(71))*VINT(55)
101           CALL LUSHOW(IPU3,IPU4,QMAX)
102         ELSEIF(MSTP(71).GE.1.AND.ISET(ISUB).EQ.11.AND.NFUP.GE.1) THEN
103           DO 120 IUP=1,NFUP
104           IPU3=IFUP(IUP,1)+MINT(84)
105           IPU4=IFUP(IUP,2)+MINT(84)
106           QMAX=SQRT(MAX(0.,Q2UP(IUP)))
107           CALL LUSHOW(IPU3,IPU4,QMAX)
108   120     CONTINUE
109         ENDIF
110         PARJ(81)=ALAMSV
111  
112 C...Decay of final state resonances.
113         IF(MSTP(41).GE.1.AND.ISET(ISUB).LE.10) CALL PYRESD
114         IF(MINT(51).EQ.1) GOTO 100
115         MINT(52)=N
116  
117 C...Multiple interactions.
118         IF(MSTP(81).GE.1.AND.MINT(50).EQ.1) CALL PYMULT(6)
119         MINT(53)=N
120  
121 C...Hadron remnants and primordial kT.
122   130   CALL PYREMN(IPU1,IPU2)
123         IF(MINT(51).EQ.1.AND.MINT(57).GE.1.AND.MINT(57).LE.5) GOTO 110
124         IF(MINT(51).EQ.1) GOTO 100
125  
126       ELSE
127 C...Diffractive and elastic scattering.
128         CALL PYDIFF
129       ENDIF
130  
131 C...Recalculate energies from momenta and masses (if desired).
132       IF(MSTP(113).GE.1) THEN
133         DO 140 I=MINT(83)+1,N
134         IF(K(I,1).GT.0.AND.K(I,1).LE.10) P(I,4)=SQRT(P(I,1)**2+
135      &  P(I,2)**2+P(I,3)**2+P(I,5)**2)
136   140   CONTINUE
137         NRECAL=N
138       ENDIF
139  
140 C...Rearrange partons along strings, check invariant mass cuts.
141       MSTU(28)=0
142       IF(MSTP(111).LE.0) MSTJ(14)=-1
143       CALL LUPREP(MINT(84)+1)
144       MSTJ(14)=MSTJ14
145       IF(MSTP(112).EQ.1.AND.MSTU(28).EQ.3) GOTO 100
146       IF(MSTP(125).EQ.0.OR.MSTP(125).EQ.1) THEN
147         DO 170 I=MINT(84)+1,N
148         IF(K(I,2).EQ.94) THEN
149           DO 160 I1=I+1,MIN(N,I+3)
150           IF(K(I1,3).EQ.I) THEN
151             K(I1,3)=MOD(K(I1,4)/MSTU(5),MSTU(5))
152             IF(K(I1,3).EQ.0) THEN
153               DO 150 II=MINT(84)+1,I-1
154               IF(K(II,2).EQ.K(I1,2)) THEN
155                 IF(MOD(K(II,4),MSTU(5)).EQ.I1.OR.
156      &          MOD(K(II,5),MSTU(5)).EQ.I1) K(I1,3)=II
157               ENDIF
158   150         CONTINUE
159               IF(K(I+1,3).EQ.0) K(I+1,3)=K(I,3)
160             ENDIF
161           ENDIF
162   160     CONTINUE
163         ENDIF
164   170   CONTINUE
165         CALL LUEDIT(12)
166         CALL LUEDIT(14)
167         IF(MSTP(125).EQ.0) CALL LUEDIT(15)
168         IF(MSTP(125).EQ.0) MINT(4)=0
169         DO 190 I=MINT(83)+1,N
170         IF(K(I,1).EQ.11.AND.K(I,4).EQ.0.AND.K(I,5).EQ.0) THEN
171           DO 180 I1=I+1,N
172           IF(K(I1,3).EQ.I.AND.K(I,4).EQ.0) K(I,4)=I1
173           IF(K(I1,3).EQ.I) K(I,5)=I1
174   180     CONTINUE
175         ENDIF
176   190   CONTINUE
177       ENDIF
178  
179 C...Introduce separators between sections in LULIST event listing.
180       IF(IPILE.EQ.1.AND.MSTP(125).LE.0) THEN
181         MSTU70=1
182         MSTU(71)=N
183       ELSEIF(IPILE.EQ.1) THEN
184         MSTU70=3
185         MSTU(71)=2
186         MSTU(72)=MINT(4)
187         MSTU(73)=N
188       ENDIF
189  
190 C...Go back to lab frame (needed for vertices, also in fragmentation).
191       CALL PYFRAM(1)
192  
193 C...Set nonvanishing production vertex (optional).
194       IF(MSTP(151).EQ.1) THEN
195         DO 200 J=1,4
196         VTX(J)=PARP(150+J)*SQRT(-2.*LOG(MAX(1E-10,RLU(0))))*
197      &  SIN(PARU(2)*RLU(0))
198   200   CONTINUE
199         DO 220 I=MINT(83)+1,N
200         DO 210 J=1,4
201         V(I,J)=V(I,J)+VTX(J)
202   210   CONTINUE
203   220   CONTINUE
204       ENDIF
205  
206 C...Perform hadronization (if desired).
207       IF(MSTP(111).GE.1) THEN
208         CALL LUEXEC
209         IF(MSTU(24).NE.0) GOTO 100
210       ENDIF
211       IF(MSTP(113).GE.1) THEN
212         DO 230 I=NRECAL,N
213         IF(P(I,5).GT.0.) P(I,4)=SQRT(P(I,1)**2+
214      &  P(I,2)**2+P(I,3)**2+P(I,5)**2)
215   230   CONTINUE
216       ENDIF
217       IF(MSTP(125).EQ.0.OR.MSTP(125).EQ.1) CALL LUEDIT(14)
218  
219 C...Store event information and calculate Monte Carlo estimates of
220 C...subprocess cross-sections.
221   240 IF(IPILE.EQ.1) CALL PYDOCU
222  
223 C...Set counters for current pileup event and loop to next one.
224       MSTI(41)=IPILE
225       IF(IPILE.GE.2.AND.IPILE.LE.10) MSTI(40+IPILE)=ISUB
226       IF(MSTU70.LT.10) THEN
227         MSTU70=MSTU70+1
228         MSTU(70+MSTU70)=N
229       ENDIF
230       MINT(83)=N
231       MINT(84)=N+MSTP(126)
232       IF(IPILE.LT.NPILE) CALL PYFRAM(2)
233   250 CONTINUE
234  
235 C...Generic information on pileup events. Reconstruct missing history.
236       IF(MSTP(131).EQ.1.AND.MSTP(133).GE.1) THEN
237         PARI(91)=VINT(132)
238         PARI(92)=VINT(133)
239         PARI(93)=VINT(134)
240         IF(MSTP(133).GE.2) PARI(93)=PARI(93)*XSEC(0,3)/VINT(131)
241       ENDIF
242       CALL LUEDIT(16)
243  
244 C...Transform to the desired coordinate frame.
245   260 CALL PYFRAM(MSTP(124))
246       MSTU(70)=MSTU70
247       PARU(21)=VINT(1)
248  
249       RETURN
250       END