2 C*********************************************************************
6 C...Purpose: to handle the fragmentation of a jet system (or a single
7 C...jet) according to independent fragmentation models.
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 SAVE /LUJETS/,/LUDAT1/,/LUDAT2/
13 DIMENSION DPS(5),PSI(4),NFI(3),NFL(3),IFET(3),KFLF(3),
14 &KFLO(2),PXO(2),PYO(2),WO(2)
16 C...Reset counters. Identify parton system and take copy. Check flavour.
26 IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
27 CALL LUERRM(12,'(LUINDF:) failed to reconstruct jet system')
28 IF(MSTU(21).GE.1) RETURN
30 IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 110
33 KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
36 IF(KQ.NE.2) KQSUM=KQSUM+KQ
43 IF(K(I,1).EQ.2.OR.(MSTJ(3).LE.5.AND.N.GT.I.AND.
44 &K(I+1,1).EQ.2)) GOTO 110
45 IF(NJET.NE.1.AND.KQSUM.NE.0) THEN
46 CALL LUERRM(12,'(LUINDF:) unphysical flavour combination')
47 IF(MSTU(21).GE.1) RETURN
50 C...Boost copied system to CM frame. Find CM energy and sum flavours.
53 CALL LUDBRB(NSAV+1,NSAV+NJET,0.,0.,-DPS(1)/DPS(4),
54 & -DPS(2)/DPS(4),-DPS(3)/DPS(4))
60 DO 140 I=NSAV+1,NSAV+NJET
64 NFI(KFA)=NFI(KFA)+ISIGN(1,K(I,2))
65 ELSEIF(KFA.GT.1000) THEN
68 IF(KFLA.LE.3) NFI(KFLA)=NFI(KFLA)+ISIGN(1,K(I,2))
69 IF(KFLB.LE.3) NFI(KFLB)=NFI(KFLB)+ISIGN(1,K(I,2))
73 C...Loop over attempts made. Reset counters.
77 CALL LUERRM(14,'(LUINDF:) caught in infinite loop')
78 IF(MSTU(21).GE.1) RETURN
88 C...Loop over jets to be fragmented.
89 DO 230 IP1=NSAV+1,NSAV+NJET
94 C...Initial flavour and momentum values. Jet along +z axis.
96 IF(KFLH.GT.10) KFLH=MOD(KFLH/1000,10)
98 WF=P(IP1,4)+SQRT(P(IP1,1)**2+P(IP1,2)**2+P(IP1,3)**2)
100 C...Initial values for quark or diquark jet.
101 170 IF(IABS(K(IP1,2)).NE.21) THEN
104 CALL LUPTDI(0,PXO(1),PYO(1))
107 C...Initial values for gluon treated like random quark jet.
108 ELSEIF(MSTJ(2).LE.2) THEN
110 IF(MSTJ(2).EQ.2) MSTJ(91)=1
111 KFLO(1)=INT(1.+(2.+PARJ(2))*RLU(0))*(-1)**INT(RLU(0)+0.5)
112 CALL LUPTDI(0,PXO(1),PYO(1))
115 C...Initial values for gluon treated like quark-antiquark jet pair,
116 C...sharing energy according to Altarelli-Parisi splitting function.
119 IF(MSTJ(2).EQ.4) MSTJ(91)=1
120 KFLO(1)=INT(1.+(2.+PARJ(2))*RLU(0))*(-1)**INT(RLU(0)+0.5)
122 CALL LUPTDI(0,PXO(1),PYO(1))
125 WO(1)=WF*RLU(0)**(1./3.)
129 C...Initial values for rank, flavour, pT and W+.
139 C...New hadron. Generate flavour and hadron species.
141 IF(I.GE.MSTU(4)-MSTU(32)-NJET-5) THEN
142 CALL LUERRM(11,'(LUINDF:) no more memory left in LUJETS')
143 IF(MSTU(21).GE.1) RETURN
150 200 CALL LUKFDI(KFL1,0,KFL2,K(I,2))
151 IF(K(I,2).EQ.0) GOTO 180
152 IF(MSTJ(12).GE.3.AND.IRANK.EQ.1.AND.IABS(KFL1).LE.10.AND.
153 &IABS(KFL2).GT.10) THEN
154 IF(RLU(0).GT.PARJ(19)) GOTO 200
157 C...Find hadron mass. Generate four-momentum.
158 P(I,5)=ULMASS(K(I,2))
159 CALL LUPTDI(KFL1,PX2,PY2)
162 PR=P(I,5)**2+P(I,1)**2+P(I,2)**2
163 CALL LUZDIS(KFL1,KFL2,PR,Z)
165 IF(IABS(KFL1).GE.4.AND.IABS(KFL1).LE.8.AND.MSTU(90).LT.8) THEN
171 P(I,3)=0.5*(Z*W-PR/MAX(1E-4,Z*W))
172 P(I,4)=0.5*(Z*W+PR/MAX(1E-4,Z*W))
173 IF(MSTJ(3).GE.1.AND.IRANK.EQ.1.AND.KFLH.GE.4.AND.
174 &P(I,3).LE.0.001) THEN
175 IF(W.GE.P(I,5)+0.5*PARJ(32)) GOTO 180
181 C...Remaining flavour and momentum.
190 C...Check if pL acceptable. Go back for new hadron if enough energy.
191 IF(MSTJ(3).GE.0.AND.P(I,3).LT.0.) THEN
193 IF(MZSAV.EQ.1) MSTU(90)=MSTU(90)-1
195 IF(W.GT.PARJ(31)) GOTO 190
198 IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) WF=WF+0.1*PARJ(32)
199 IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) GOTO 170
201 C...Rotate jet to new direction.
202 THE=ULANGL(P(IP1,3),SQRT(P(IP1,1)**2+P(IP1,2)**2))
203 PHI=ULANGL(P(IP1,1),P(IP1,2))
205 CALL LUDBRB(NSAV1+1,N,THE,PHI,0D0,0D0,0D0)
206 K(K(IP1,3),4)=NSAV1+1
209 C...End of jet generation loop. Skip conservation in some cases.
211 IF(NJET.EQ.1.OR.MSTJ(3).LE.0) GOTO 490
212 IF(MOD(MSTJ(3),5).NE.0.AND.N-NSAV-NJET.LT.2) GOTO 150
214 C...Subtract off produced hadron flavours, finished if zero.
215 DO 240 I=NSAV+NJET+1,N
217 KFLA=MOD(KFA/1000,10)
221 IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))*(-1)**KFLB
222 IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(I,2))*(-1)**KFLB
224 IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)-ISIGN(1,K(I,2))
225 IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))
226 IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISIGN(1,K(I,2))
229 NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
230 &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
231 IF(NREQ.EQ.0) GOTO 320
233 C...Take away flavour of low-momentum particles until enough freedom.
237 DO 260 I=NSAV+NJET+1,N
238 P2=P(I,1)**2+P(I,2)**2+P(I,3)**2
239 IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) IREM=I
240 IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) P2MIN=P2
242 IF(IREM.EQ.0) GOTO 150
245 KFLA=MOD(KFA/1000,10)
248 IF(KFLA.GE.4.OR.KFLB.GE.4) K(IREM,1)=8
249 IF(K(IREM,1).EQ.8) GOTO 250
251 ISGN=ISIGN(1,K(IREM,2))*(-1)**KFLB
252 IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISGN
253 IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISGN
255 IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)+ISIGN(1,K(IREM,2))
256 IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISIGN(1,K(IREM,2))
257 IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(IREM,2))
260 NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
261 &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
262 IF(NREQ.GT.NREM) GOTO 250
263 DO 270 I=NSAV+NJET+1,N
264 IF(K(I,1).EQ.8) K(I,1)=1
267 C...Find combination of existing and new flavours for hadron.
269 IF(NFL(1)+NFL(2)+NFL(3).NE.0) NFET=3
270 IF(NREQ.LT.NREM) NFET=1
271 IF(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)).EQ.0) NFET=0
273 IFET(J)=1+(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)))*RLU(0)
274 KFLF(J)=ISIGN(1,NFL(1))
275 IF(IFET(J).GT.IABS(NFL(1))) KFLF(J)=ISIGN(2,NFL(2))
276 IF(IFET(J).GT.IABS(NFL(1))+IABS(NFL(2))) KFLF(J)=ISIGN(3,NFL(3))
278 IF(NFET.EQ.2.AND.(IFET(1).EQ.IFET(2).OR.KFLF(1)*KFLF(2).GT.0))
280 IF(NFET.EQ.3.AND.(IFET(1).EQ.IFET(2).OR.IFET(1).EQ.IFET(3).OR.
281 &IFET(2).EQ.IFET(3).OR.KFLF(1)*KFLF(2).LT.0.OR.KFLF(1)*KFLF(3)
282 &.LT.0.OR.KFLF(1)*(NFL(1)+NFL(2)+NFL(3)).LT.0)) GOTO 280
283 IF(NFET.EQ.0) KFLF(1)=1+INT((2.+PARJ(2))*RLU(0))
284 IF(NFET.EQ.0) KFLF(2)=-KFLF(1)
285 IF(NFET.EQ.1) KFLF(2)=ISIGN(1+INT((2.+PARJ(2))*RLU(0)),-KFLF(1))
286 IF(NFET.LE.2) KFLF(3)=0
287 IF(KFLF(3).NE.0) THEN
288 KFLFC=ISIGN(1000*MAX(IABS(KFLF(1)),IABS(KFLF(3)))+
289 & 100*MIN(IABS(KFLF(1)),IABS(KFLF(3)))+1,KFLF(1))
290 IF(KFLF(1).EQ.KFLF(3).OR.(1.+3.*PARJ(4))*RLU(0).GT.1.)
291 & KFLFC=KFLFC+ISIGN(2,KFLFC)
295 CALL LUKFDI(KFLFC,KFLF(2),KFLDMP,KF)
297 DO 300 J=1,MAX(2,NFET)
298 NFL(IABS(KFLF(J)))=NFL(IABS(KFLF(J)))-ISIGN(1,KFLF(J))
301 C...Store hadron at random among free positions.
302 NPOS=MIN(1+INT(RLU(0)*NREM),NREM)
303 DO 310 I=NSAV+NJET+1,N
304 IF(K(I,1).EQ.7) NPOS=NPOS-1
305 IF(K(I,1).EQ.1.OR.NPOS.NE.0) GOTO 310
308 P(I,5)=ULMASS(K(I,2))
309 P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
312 NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
313 &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
314 IF(NREM.GT.0) GOTO 280
316 C...Compensate for missing momentum in global scheme (3 options).
317 320 IF(MOD(MSTJ(3),5).NE.0.AND.MOD(MSTJ(3),5).NE.4) THEN
320 DO 330 I=NSAV+NJET+1,N
324 PSI(4)=PSI(1)**2+PSI(2)**2+PSI(3)**2
326 DO 350 I=NSAV+NJET+1,N
327 IF(MOD(MSTJ(3),5).EQ.1) PWS=PWS+P(I,4)
328 IF(MOD(MSTJ(3),5).EQ.2) PWS=PWS+SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
329 & PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
330 IF(MOD(MSTJ(3),5).EQ.3) PWS=PWS+1.
332 DO 370 I=NSAV+NJET+1,N
333 IF(MOD(MSTJ(3),5).EQ.1) PW=P(I,4)
334 IF(MOD(MSTJ(3),5).EQ.2) PW=SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
335 & PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
336 IF(MOD(MSTJ(3),5).EQ.3) PW=1.
338 P(I,J)=P(I,J)-PSI(J)*PW/PWS
340 P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
343 C...Compensate for missing momentum withing each jet separately.
344 ELSEIF(MOD(MSTJ(3),5).EQ.4) THEN
351 DO 410 I=NSAV+NJET+1,N
355 PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
356 & (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
358 P(IR2,J)=P(IR2,J)+P(I,J)-PLS*P(IR1,J)
360 P(IR2,4)=P(IR2,4)+P(I,4)
361 P(IR2,5)=P(IR2,5)+PLS
365 IF(K(I,1).NE.0) PSS=PSS+P(I,4)/(PECM*(0.8*P(I,5)+0.2))
367 DO 440 I=NSAV+NJET+1,N
370 PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
371 & (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
373 P(I,J)=P(I,J)-P(IR2,J)/K(IR2,1)+(1./(P(IR2,5)*PSS)-1.)*PLS*
376 P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
380 C...Scale momenta for energy conservation.
381 IF(MOD(MSTJ(3),5).NE.0) THEN
385 DO 450 I=NSAV+NJET+1,N
388 PQS=PQS+P(I,5)**2/P(I,4)
390 IF(PMS.GE.PECM) GOTO 150
393 PFAC=(PECM-PQS)/(PES-PQS)
396 DO 480 I=NSAV+NJET+1,N
400 P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
402 PQS=PQS+P(I,5)**2/P(I,4)
404 IF(NECO.LT.10.AND.ABS(PECM-PES).GT.2E-6*PECM) GOTO 460
407 C...Origin of produced particles and parton daughter pointers.
408 490 DO 500 I=NSAV+NJET+1,N
409 IF(MSTU(16).NE.2) K(I,3)=NSAV+1
410 IF(MSTU(16).EQ.2) K(I,3)=K(K(I,3),3)
412 DO 510 I=NSAV+1,NSAV+NJET
415 IF(MSTU(16).NE.2) THEN
419 K(I1,4)=K(I1,4)-NJET+1
420 K(I1,5)=K(I1,5)-NJET+1
421 IF(K(I1,5).LT.K(I1,4)) THEN
428 C...Document independent fragmentation system. Remove copy of jets.
439 P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
449 DO 550 IZ=MSTU90+1,MSTU(90)
450 MSTU(90+IZ)=MSTU(90+IZ)-NJET+1
453 C...Boost back particle system. Set production vertices.
454 IF(NJET.NE.1) CALL LUDBRB(NSAV+1,N,0.,0.,DPS(1)/DPS(4),
455 &DPS(2)/DPS(4),DPS(3)/DPS(4))