]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PYTHIA/jetset/luprep.F
Some additional changes related to the previous changes. AliL3Transform
[u/mrichter/AliRoot.git] / PYTHIA / jetset / luprep.F
CommitLineData
fe4da5cc 1
2C*********************************************************************
3
4 SUBROUTINE LUPREP(IP)
5
6C...Purpose: to rearrange partons along strings, to allow small systems
7C...to collapse into one or two particles and to check flavours.
8 IMPLICIT DOUBLE PRECISION(D)
9 COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5)
10 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
11 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
12 COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
13 SAVE /LUJETS/,/LUDAT1/,/LUDAT2/,/LUDAT3/
14 DIMENSION DPS(5),DPC(5),UE(3)
15
16C...Rearrange parton shower product listing along strings: begin loop.
17 I1=N
18 DO 130 MQGST=1,2
19 DO 120 I=MAX(1,IP),N
20 IF(K(I,1).NE.3) GOTO 120
21 KC=LUCOMP(K(I,2))
22 IF(KC.EQ.0) GOTO 120
23 KQ=KCHG(KC,2)
24 IF(KQ.EQ.0.OR.(MQGST.EQ.1.AND.KQ.EQ.2)) GOTO 120
25
26C...Pick up loose string end.
27 KCS=4
28 IF(KQ*ISIGN(1,K(I,2)).LT.0) KCS=5
29 IA=I
30 NSTP=0
31 100 NSTP=NSTP+1
32 IF(NSTP.GT.4*N) THEN
33 CALL LUERRM(14,'(LUPREP:) caught in infinite loop')
34 RETURN
35 ENDIF
36
37C...Copy undecayed parton.
38 IF(K(IA,1).EQ.3) THEN
39 IF(I1.GE.MSTU(4)-MSTU(32)-5) THEN
40 CALL LUERRM(11,'(LUPREP:) no more memory left in LUJETS')
41 RETURN
42 ENDIF
43 I1=I1+1
44 K(I1,1)=2
45 IF(NSTP.GE.2.AND.IABS(K(IA,2)).NE.21) K(I1,1)=1
46 K(I1,2)=K(IA,2)
47 K(I1,3)=IA
48 K(I1,4)=0
49 K(I1,5)=0
50 DO 110 J=1,5
51 P(I1,J)=P(IA,J)
52 V(I1,J)=V(IA,J)
53 110 CONTINUE
54 K(IA,1)=K(IA,1)+10
55 IF(K(I1,1).EQ.1) GOTO 120
56 ENDIF
57
58C...Go to next parton in colour space.
59 IB=IA
60 IF(MOD(K(IB,KCS)/MSTU(5)**2,2).EQ.0.AND.MOD(K(IB,KCS),MSTU(5))
61 &.NE.0) THEN
62 IA=MOD(K(IB,KCS),MSTU(5))
63 K(IB,KCS)=K(IB,KCS)+MSTU(5)**2
64 MREV=0
65 ELSE
66 IF(K(IB,KCS).GE.2*MSTU(5)**2.OR.MOD(K(IB,KCS)/MSTU(5),MSTU(5))
67 & .EQ.0) KCS=9-KCS
68 IA=MOD(K(IB,KCS)/MSTU(5),MSTU(5))
69 K(IB,KCS)=K(IB,KCS)+2*MSTU(5)**2
70 MREV=1
71 ENDIF
72 IF(IA.LE.0.OR.IA.GT.N) THEN
73 CALL LUERRM(12,'(LUPREP:) colour rearrangement failed')
74 RETURN
75 ENDIF
76 IF(MOD(K(IA,4)/MSTU(5),MSTU(5)).EQ.IB.OR.MOD(K(IA,5)/MSTU(5),
77 &MSTU(5)).EQ.IB) THEN
78 IF(MREV.EQ.1) KCS=9-KCS
79 IF(MOD(K(IA,KCS)/MSTU(5),MSTU(5)).NE.IB) KCS=9-KCS
80 K(IA,KCS)=K(IA,KCS)+2*MSTU(5)**2
81 ELSE
82 IF(MREV.EQ.0) KCS=9-KCS
83 IF(MOD(K(IA,KCS),MSTU(5)).NE.IB) KCS=9-KCS
84 K(IA,KCS)=K(IA,KCS)+MSTU(5)**2
85 ENDIF
86 IF(IA.NE.I) GOTO 100
87 K(I1,1)=1
88 120 CONTINUE
89 130 CONTINUE
90 N=I1
91 IF(MSTJ(14).LT.0) RETURN
92
93C...Find lowest-mass colour singlet jet system, OK if above threshold.
94 IF(MSTJ(14).EQ.0) GOTO 320
95 NS=N
96 140 NSIN=N-NS
97 PDM=1.+PARJ(32)
98 IC=0
99 DO 190 I=MAX(1,IP),NS
100 IF(K(I,1).NE.1.AND.K(I,1).NE.2) THEN
101 ELSEIF(K(I,1).EQ.2.AND.IC.EQ.0) THEN
102 NSIN=NSIN+1
103 IC=I
104 DO 150 J=1,4
105 DPS(J)=P(I,J)
106 150 CONTINUE
107 MSTJ(93)=1
108 DPS(5)=ULMASS(K(I,2))
109 ELSEIF(K(I,1).EQ.2) THEN
110 DO 160 J=1,4
111 DPS(J)=DPS(J)+P(I,J)
112 160 CONTINUE
113 ELSEIF(IC.NE.0.AND.KCHG(LUCOMP(K(I,2)),2).NE.0) THEN
114 DO 170 J=1,4
115 DPS(J)=DPS(J)+P(I,J)
116 170 CONTINUE
117 MSTJ(93)=1
118 DPS(5)=DPS(5)+ULMASS(K(I,2))
119 PD=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))-DPS(5)
120 IF(PD.LT.PDM) THEN
121 PDM=PD
122 DO 180 J=1,5
123 DPC(J)=DPS(J)
124 180 CONTINUE
125 IC1=IC
126 IC2=I
127 ENDIF
128 IC=0
129 ELSE
130 NSIN=NSIN+1
131 ENDIF
132 190 CONTINUE
133 IF(PDM.GE.PARJ(32)) GOTO 320
134
135C...Fill small-mass system as cluster.
136 NSAV=N
137 PECM=SQRT(MAX(0D0,DPC(4)**2-DPC(1)**2-DPC(2)**2-DPC(3)**2))
138 K(N+1,1)=11
139 K(N+1,2)=91
140 K(N+1,3)=IC1
141 K(N+1,4)=N+2
142 K(N+1,5)=N+3
143 P(N+1,1)=DPC(1)
144 P(N+1,2)=DPC(2)
145 P(N+1,3)=DPC(3)
146 P(N+1,4)=DPC(4)
147 P(N+1,5)=PECM
148
149C...Form two particles from flavours of lowest-mass system, if feasible.
150 K(N+2,1)=1
151 K(N+3,1)=1
152 IF(MSTU(16).NE.2) THEN
153 K(N+2,3)=N+1
154 K(N+3,3)=N+1
155 ELSE
156 K(N+2,3)=IC1
157 K(N+3,3)=IC2
158 ENDIF
159 K(N+2,4)=0
160 K(N+3,4)=0
161 K(N+2,5)=0
162 K(N+3,5)=0
163 IF(IABS(K(IC1,2)).NE.21) THEN
164 KC1=LUCOMP(K(IC1,2))
165 KC2=LUCOMP(K(IC2,2))
166 IF(KC1.EQ.0.OR.KC2.EQ.0) GOTO 320
167 KQ1=KCHG(KC1,2)*ISIGN(1,K(IC1,2))
168 KQ2=KCHG(KC2,2)*ISIGN(1,K(IC2,2))
169 IF(KQ1+KQ2.NE.0) GOTO 320
170 200 CALL LUKFDI(K(IC1,2),0,KFLN,K(N+2,2))
171 CALL LUKFDI(K(IC2,2),-KFLN,KFLDMP,K(N+3,2))
172 IF(K(N+2,2).EQ.0.OR.K(N+3,2).EQ.0) GOTO 200
173 ELSE
174 IF(IABS(K(IC2,2)).NE.21) GOTO 320
175 210 CALL LUKFDI(1+INT((2.+PARJ(2))*RLU(0)),0,KFLN,KFDMP)
176 CALL LUKFDI(KFLN,0,KFLM,K(N+2,2))
177 CALL LUKFDI(-KFLN,-KFLM,KFLDMP,K(N+3,2))
178 IF(K(N+2,2).EQ.0.OR.K(N+3,2).EQ.0) GOTO 210
179 ENDIF
180 P(N+2,5)=ULMASS(K(N+2,2))
181 P(N+3,5)=ULMASS(K(N+3,2))
182 IF(P(N+2,5)+P(N+3,5)+PARJ(64).GE.PECM.AND.NSIN.EQ.1) GOTO 320
183 IF(P(N+2,5)+P(N+3,5)+PARJ(64).GE.PECM) GOTO 260
184
185C...Perform two-particle decay of jet system, if possible.
186 IF(PECM.GE.0.02*DPC(4)) THEN
187 PA=SQRT((PECM**2-(P(N+2,5)+P(N+3,5))**2)*(PECM**2-
188 & (P(N+2,5)-P(N+3,5))**2))/(2.*PECM)
189 UE(3)=2.*RLU(0)-1.
190 PHI=PARU(2)*RLU(0)
191 UE(1)=SQRT(1.-UE(3)**2)*COS(PHI)
192 UE(2)=SQRT(1.-UE(3)**2)*SIN(PHI)
193 DO 220 J=1,3
194 P(N+2,J)=PA*UE(J)
195 P(N+3,J)=-PA*UE(J)
196 220 CONTINUE
197 P(N+2,4)=SQRT(PA**2+P(N+2,5)**2)
198 P(N+3,4)=SQRT(PA**2+P(N+3,5)**2)
199 MSTU(33)=1
200 CALL LUDBRB(N+2,N+3,0.,0.,DPC(1)/DPC(4),DPC(2)/DPC(4),
201 & DPC(3)/DPC(4))
202 ELSE
203 NP=0
204 DO 230 I=IC1,IC2
205 IF(K(I,1).EQ.1.OR.K(I,1).EQ.2) NP=NP+1
206 230 CONTINUE
207 HA=P(IC1,4)*P(IC2,4)-P(IC1,1)*P(IC2,1)-P(IC1,2)*P(IC2,2)-
208 & P(IC1,3)*P(IC2,3)
209 IF(NP.GE.3.OR.HA.LE.1.25*P(IC1,5)*P(IC2,5)) GOTO 260
210 HD1=0.5*(P(N+2,5)**2-P(IC1,5)**2)
211 HD2=0.5*(P(N+3,5)**2-P(IC2,5)**2)
212 HR=SQRT(MAX(0.,((HA-HD1-HD2)**2-(P(N+2,5)*P(N+3,5))**2)/
213 & (HA**2-(P(IC1,5)*P(IC2,5))**2)))-1.
214 HC=P(IC1,5)**2+2.*HA+P(IC2,5)**2
215 HK1=((P(IC2,5)**2+HA)*HR+HD1-HD2)/HC
216 HK2=((P(IC1,5)**2+HA)*HR+HD2-HD1)/HC
217 DO 240 J=1,4
218 P(N+2,J)=(1.+HK1)*P(IC1,J)-HK2*P(IC2,J)
219 P(N+3,J)=(1.+HK2)*P(IC2,J)-HK1*P(IC1,J)
220 240 CONTINUE
221 ENDIF
222 DO 250 J=1,4
223 V(N+1,J)=V(IC1,J)
224 V(N+2,J)=V(IC1,J)
225 V(N+3,J)=V(IC2,J)
226 250 CONTINUE
227 V(N+1,5)=0.
228 V(N+2,5)=0.
229 V(N+3,5)=0.
230 N=N+3
231 GOTO 300
232
233C...Else form one particle from the flavours available, if possible.
234 260 K(N+1,5)=N+2
235 IF(IABS(K(IC1,2)).GT.100.AND.IABS(K(IC2,2)).GT.100) THEN
236 GOTO 320
237 ELSEIF(IABS(K(IC1,2)).NE.21) THEN
238 CALL LUKFDI(K(IC1,2),K(IC2,2),KFLDMP,K(N+2,2))
239 ELSE
240 KFLN=1+INT((2.+PARJ(2))*RLU(0))
241 CALL LUKFDI(KFLN,-KFLN,KFLDMP,K(N+2,2))
242 ENDIF
243 IF(K(N+2,2).EQ.0) GOTO 260
244 P(N+2,5)=ULMASS(K(N+2,2))
245
246C...Find parton/particle which combines to largest extra mass.
247 IR=0
248 HA=0.
249 HSM=0.
250 DO 280 MCOMB=1,3
251 IF(IR.NE.0) GOTO 280
252 DO 270 I=MAX(1,IP),N
253 IF(K(I,1).LE.0.OR.K(I,1).GT.10.OR.(I.GE.IC1.AND.I.LE.IC2
254 &.AND.K(I,1).GE.1.AND.K(I,1).LE.2)) GOTO 270
255 IF(MCOMB.EQ.1) KCI=LUCOMP(K(I,2))
256 IF(MCOMB.EQ.1.AND.KCI.EQ.0) GOTO 270
257 IF(MCOMB.EQ.1.AND.KCHG(KCI,2).EQ.0.AND.I.LE.NS) GOTO 270
258 IF(MCOMB.EQ.2.AND.IABS(K(I,2)).GT.10.AND.IABS(K(I,2)).LE.100)
259 &GOTO 270
260 HCR=DPC(4)*P(I,4)-DPC(1)*P(I,1)-DPC(2)*P(I,2)-DPC(3)*P(I,3)
261 HSR=2.*HCR+PECM**2-P(N+2,5)**2-2.*P(N+2,5)*P(I,5)
262 IF(HSR.GT.HSM) THEN
263 IR=I
264 HA=HCR
265 HSM=HSR
266 ENDIF
267 270 CONTINUE
268 280 CONTINUE
269
270C...Shuffle energy and momentum to put new particle on mass shell.
271 IF(IR.NE.0) THEN
272 HB=PECM**2+HA
273 HC=P(N+2,5)**2+HA
274 HD=P(IR,5)**2+HA
275 HK2=0.5*(HB*SQRT(MAX(0.,((HB+HC)**2-4.*(HB+HD)*P(N+2,5)**2)/
276 & (HA**2-(PECM*P(IR,5))**2)))-(HB+HC))/(HB+HD)
277 HK1=(0.5*(P(N+2,5)**2-PECM**2)+HD*HK2)/HB
278 DO 290 J=1,4
279 P(N+2,J)=(1.+HK1)*DPC(J)-HK2*P(IR,J)
280 P(IR,J)=(1.+HK2)*P(IR,J)-HK1*DPC(J)
281 V(N+1,J)=V(IC1,J)
282 V(N+2,J)=V(IC1,J)
283 290 CONTINUE
284 V(N+1,5)=0.
285 V(N+2,5)=0.
286 N=N+2
287 ELSE
288 CALL LUERRM(3,'(LUPREP:) no match for collapsing cluster')
289 RETURN
290 ENDIF
291
292C...Mark collapsed system and store daughter pointers. Iterate.
293 300 DO 310 I=IC1,IC2
294 IF((K(I,1).EQ.1.OR.K(I,1).EQ.2).AND.KCHG(LUCOMP(K(I,2)),2).NE.0)
295 &THEN
296 K(I,1)=K(I,1)+10
297 IF(MSTU(16).NE.2) THEN
298 K(I,4)=NSAV+1
299 K(I,5)=NSAV+1
300 ELSE
301 K(I,4)=NSAV+2
302 K(I,5)=N
303 ENDIF
304 ENDIF
305 310 CONTINUE
306 IF(N.LT.MSTU(4)-MSTU(32)-5) GOTO 140
307
308C...Check flavours and invariant masses in parton systems.
309 320 NP=0
310 KFN=0
311 KQS=0
312 DO 330 J=1,5
313 DPS(J)=0.
314 330 CONTINUE
315 DO 360 I=MAX(1,IP),N
316 IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 360
317 KC=LUCOMP(K(I,2))
318 IF(KC.EQ.0) GOTO 360
319 KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
320 IF(KQ.EQ.0) GOTO 360
321 NP=NP+1
322 IF(KQ.NE.2) THEN
323 KFN=KFN+1
324 KQS=KQS+KQ
325 MSTJ(93)=1
326 DPS(5)=DPS(5)+ULMASS(K(I,2))
327 ENDIF
328 DO 340 J=1,4
329 DPS(J)=DPS(J)+P(I,J)
330 340 CONTINUE
331 IF(K(I,1).EQ.1) THEN
332 IF(NP.NE.1.AND.(KFN.EQ.1.OR.KFN.GE.3.OR.KQS.NE.0)) CALL
333 & LUERRM(2,'(LUPREP:) unphysical flavour combination')
334 IF(NP.NE.1.AND.DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2.LT.
335 & (0.9*PARJ(32)+DPS(5))**2) CALL LUERRM(3,
336 & '(LUPREP:) too small mass in jet system')
337 NP=0
338 KFN=0
339 KQS=0
340 DO 350 J=1,5
341 DPS(J)=0.
342 350 CONTINUE
343 ENDIF
344 360 CONTINUE
345
346 RETURN
347 END