2 C*********************************************************************
5 C...Purpose: to handle the fragmentation of an arbitrary colour singlet
6 C...jet system according to the Lund string fragmentation model.
7 IMPLICIT DOUBLE PRECISION(D)
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 SAVE /LUJETS/,/LUDAT1/,/LUDAT2/
12 DIMENSION DPS(5),KFL(3),PMQ(3),PX(3),PY(3),GAM(3),IE(2),PR(2),
13 &IN(9),DHM(4),DHG(4),DP(5,5),IRANK(2),MJU(4),IJU(3),PJU(5,5),
14 &TJU(5),KFJH(2),NJS(2),KFJS(2),PJS(4,5),MSTU9T(8),PARU9T(8)
16 C...Function: four-product of two vectors.
17 FOUR(I,J)=P(I,4)*P(J,4)-P(I,1)*P(J,1)-P(I,2)*P(J,2)-P(I,3)*P(J,3)
18 DFOUR(I,J)=DP(I,4)*DP(J,4)-DP(I,1)*DP(J,1)-DP(I,2)*DP(J,2)-
21 C...Reset counters. Identify parton system.
34 IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
35 CALL LUERRM(12,'(LUSTRF:) failed to reconstruct jet system')
36 IF(MSTU(21).GE.1) RETURN
38 IF(K(I,1).NE.1.AND.K(I,1).NE.2.AND.K(I,1).NE.41) GOTO 110
41 KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
43 IF(N+5*NP+11.GT.MSTU(4)-MSTU(32)-5) THEN
44 CALL LUERRM(11,'(LUSTRF:) no more memory left in LUJETS')
45 IF(MSTU(21).GE.1) RETURN
48 C...Take copy of partons to be considered. Check flavour sum.
53 IF(J.NE.4) DPS(J)=DPS(J)+P(I,J)
55 DPS(4)=DPS(4)+SQRT(DBLE(P(I,1))**2+DBLE(P(I,2))**2+
56 &DBLE(P(I,3))**2+DBLE(P(I,5))**2)
58 IF(KQ.NE.2) KQSUM=KQSUM+KQ
61 IF(KQSUM.EQ.KQ) MJU(1)=N+NP
62 IF(KQSUM.NE.KQ) MJU(2)=N+NP
64 IF(K(I,1).EQ.2.OR.K(I,1).EQ.41) GOTO 110
66 CALL LUERRM(12,'(LUSTRF:) unphysical flavour combination')
67 IF(MSTU(21).GE.1) RETURN
70 C...Boost copied system to CM frame (for better numerical precision).
71 IF(ABS(DPS(3)).LT.0.99D0*DPS(4)) THEN
74 CALL LUDBRB(N+1,N+NP,0.,0.,-DPS(1)/DPS(4),-DPS(2)/DPS(4),
78 HHBZ=SQRT(MAX(1D-6,DPS(4)+DPS(3))/MAX(1D-6,DPS(4)-DPS(3)))
80 HHPMT=P(I,1)**2+P(I,2)**2+P(I,5)**2
82 HHPEZ=(P(I,4)+P(I,3))/HHBZ
83 P(I,3)=0.5*(HHPEZ-HHPMT/HHPEZ)
84 P(I,4)=0.5*(HHPEZ+HHPMT/HHPEZ)
86 HHPEZ=(P(I,4)-P(I,3))*HHBZ
87 P(I,3)=-0.5*(HHPEZ-HHPMT/HHPEZ)
88 P(I,4)=0.5*(HHPEZ+HHPMT/HHPEZ)
93 C...Search for very nearby partons that may be recombined.
103 IF(I.EQ.N+NR.AND.IABS(K(N+1,2)).NE.21) GOTO 150
106 IF(K(I,1).EQ.41.OR.K(I1,1).EQ.41) GOTO 150
107 IF(MJU(1).NE.0.AND.I1.LT.MJU(1).AND.IABS(K(I1,2)).NE.21)
109 IF(MJU(2).NE.0.AND.I.GT.MJU(2).AND.IABS(K(I,2)).NE.21) GOTO 150
110 PAP=SQRT((P(I,1)**2+P(I,2)**2+P(I,3)**2)*(P(I1,1)**2+
111 & P(I1,2)**2+P(I1,3)**2))
112 PVP=P(I,1)*P(I1,1)+P(I,2)*P(I1,2)+P(I,3)*P(I1,3)
113 PDR=4.*(PAP-PVP)**2/MAX(1E-6,PARU13**2*PAP+2.*(PAP-PVP))
114 IF(PDR.LT.PDRMIN) THEN
120 C...Recombine very nearby partons to avoid machine precision problems.
121 IF(PDRMIN.LT.PARU12.AND.IR.EQ.N+NR) THEN
123 P(N+1,J)=P(N+1,J)+P(N+NR,J)
125 P(N+1,5)=SQRT(MAX(0.,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
129 ELSEIF(PDRMIN.LT.PARU12) THEN
131 P(IR,J)=P(IR,J)+P(IR+1,J)
133 P(IR,5)=SQRT(MAX(0.,P(IR,4)**2-P(IR,1)**2-P(IR,2)**2-
141 IF(IR.EQ.N+NR-1) K(IR,2)=K(N+NR,2)
143 IF(MJU(1).GT.IR) MJU(1)=MJU(1)-1
144 IF(MJU(2).GT.IR) MJU(2)=MJU(2)-1
150 C...Reset particle counter. Skip ahead if no junctions are present;
151 C...this is usually the case!
155 IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
159 ELSEIF(NTRY.GT.100) THEN
160 CALL LUERRM(14,'(LUSTRF:) caught in infinite loop')
161 IF(MSTU(21).GE.1) RETURN
165 IF(MJU(1).EQ.0.AND.MJU(2).EQ.0) GOTO 580
168 IF(MJU(JT).EQ.0) GOTO 570
171 C...Find and sum up momentum on three sides of junction. Check flavours.
179 DO 240 I1=N+1+(JT-1)*(NR-1),N+NR+(JT-1)*(1-NR),JS
180 IF(K(I1,2).NE.21.AND.IU.LE.2) THEN
185 PJU(IU,J)=PJU(IU,J)+P(I1,J)
189 PJU(IU,5)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+PJU(IU,3)**2)
191 IF(K(IJU(3),2)/100.NE.10*K(IJU(1),2)+K(IJU(2),2).AND.
192 &K(IJU(3),2)/100.NE.10*K(IJU(2),2)+K(IJU(1),2)) THEN
193 CALL LUERRM(12,'(LUSTRF:) unphysical flavour combination')
194 IF(MSTU(21).GE.1) RETURN
197 C...Calculate (approximate) boost to rest frame of junction.
198 T12=(PJU(1,1)*PJU(2,1)+PJU(1,2)*PJU(2,2)+PJU(1,3)*PJU(2,3))/
200 T13=(PJU(1,1)*PJU(3,1)+PJU(1,2)*PJU(3,2)+PJU(1,3)*PJU(3,3))/
202 T23=(PJU(2,1)*PJU(3,1)+PJU(2,2)*PJU(3,2)+PJU(2,3)*PJU(3,3))/
204 T11=SQRT((2./3.)*(1.-T12)*(1.-T13)/(1.-T23))
205 T22=SQRT((2./3.)*(1.-T12)*(1.-T23)/(1.-T13))
206 TSQ=SQRT((2.*T11*T22+T12-1.)*(1.+T12))
207 T1F=(TSQ-T22*(1.+T12))/(1.-T12**2)
208 T2F=(TSQ-T11*(1.+T12))/(1.-T12**2)
210 TJU(J)=-(T1F*PJU(1,J)/PJU(1,5)+T2F*PJU(2,J)/PJU(2,5))
212 TJU(4)=SQRT(1.+TJU(1)**2+TJU(2)**2+TJU(3)**2)
214 PJU(IU,5)=TJU(4)*PJU(IU,4)-TJU(1)*PJU(IU,1)-TJU(2)*PJU(IU,2)-
218 C...Put junction at rest if motion could give inconsistencies.
219 IF(PJU(1,5)+PJU(2,5).GT.PJU(1,4)+PJU(2,4)) THEN
229 C...Start preparing for fragmentation of two strings from junction.
234 C...Junction strings: find longitudinal string directions.
240 IF(IS.EQ.1) DP(1,J)=P(IS1,J)
242 IF(IS.EQ.NS) DP(2,J)=-PJU(IU,J)
244 IF(IS.EQ.NS) DP(2,4)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+PJU(IU,3)**2)
245 IF(IS.EQ.NS) DP(2,5)=0.
249 IF(DP(3,5)+2.*DHKC+DP(4,5).LE.0.) THEN
250 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
251 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
256 DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
257 DHK1=0.5*((DP(4,5)+DHKC)/DHKS-1.)
258 DHK2=0.5*((DP(3,5)+DHKC)/DHKS-1.)
260 P(IN1,5)=SQRT(DP(3,5)+2.*DHKC+DP(4,5))
262 P(IN1,J)=(1.+DHK1)*DP(1,J)-DHK2*DP(2,J)
263 P(IN1+1,J)=(1.+DHK2)*DP(2,J)-DHK1*DP(1,J)
267 C...Junction strings: initialize flavour, momentum and starting pos.
271 IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
275 ELSEIF(NTRY.GT.100) THEN
276 CALL LUERRM(14,'(LUSTRF:) caught in infinite loop')
277 IF(MSTU(21).GE.1) RETURN
282 IE(1)=K(N+1+(JT/2)*(NP-1),3)
287 DO 330 IN1=N+NR+2+JQ,N+NR+4*NS-2+JQ,4
301 C...Junction strings: find initial transverse directions.
308 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
309 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
310 DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
311 DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
312 DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
313 IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1.
314 IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1.
315 IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1.
316 IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1.
318 DHCX1=DFOUR(3,1)/DHC12
319 DHCX2=DFOUR(3,2)/DHC12
320 DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
321 DHCY1=DFOUR(4,1)/DHC12
322 DHCY2=DFOUR(4,2)/DHC12
323 DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
324 DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
326 DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
328 P(IN(6)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
332 C...Junction strings: produce new particle, origin.
334 IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
335 CALL LUERRM(11,'(LUSTRF:) no more memory left in LUJETS')
336 IF(MSTU(21).GE.1) RETURN
344 C...Junction strings: generate flavour, hadron, pT, z and Gamma.
345 390 CALL LUKFDI(KFL(1),0,KFL(3),K(I,2))
346 IF(K(I,2).EQ.0) GOTO 320
347 IF(MSTJ(12).GE.3.AND.IRANKJ.EQ.1.AND.IABS(KFL(1)).LE.10.AND.
348 &IABS(KFL(3)).GT.10) THEN
349 IF(RLU(0).GT.PARJ(19)) GOTO 390
351 P(I,5)=ULMASS(K(I,2))
352 CALL LUPTDI(KFL(1),PX(3),PY(3))
353 PR(1)=P(I,5)**2+(PX(1)+PX(3))**2+(PY(1)+PY(3))**2
354 CALL LUZDIS(KFL(1),KFL(3),PR(1),Z)
355 IF(IABS(KFL(1)).GE.4.AND.IABS(KFL(1)).LE.8.AND.
361 GAM(3)=(1.-Z)*(GAM(1)+PR(1)/Z)
366 C...Junction strings: stepping within or from 'low' string region easy.
367 IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
368 &P(IN(1),5)**2.GE.PR(1)) THEN
369 P(IN(1)+2,4)=Z*P(IN(1)+2,3)
370 P(IN(2)+2,4)=PR(1)/(P(IN(1)+2,4)*P(IN(1),5)**2)
372 P(I,J)=(PX(1)+PX(3))*P(IN(3),J)+(PY(1)+PY(3))*P(IN(3)+1,J)
375 ELSEIF(IN(1)+1.EQ.IN(2)) THEN
376 P(IN(2)+2,4)=P(IN(2)+2,3)
379 IF(IN(2).GT.N+NR+4*NS) GOTO 320
380 IF(FOUR(IN(1),IN(2)).LE.1E-2) THEN
381 P(IN(1)+2,4)=P(IN(1)+2,3)
387 C...Junction strings: find new transverse directions.
388 420 IF(IN(1).GT.N+NR+4*NS.OR.IN(2).GT.N+NR+4*NS.OR.
389 &IN(1).GT.IN(2)) GOTO 320
390 IF(IN(1).NE.IN(4).OR.IN(2).NE.IN(5)) THEN
397 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
398 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
400 IF(DHC12.LE.1E-2) THEN
401 P(IN(1)+2,4)=P(IN(1)+2,3)
407 DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
408 DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
409 DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
410 IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1.
411 IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1.
412 IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1.
413 IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1.
414 DHCX1=DFOUR(3,1)/DHC12
415 DHCX2=DFOUR(3,2)/DHC12
416 DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
417 DHCY1=DFOUR(4,1)/DHC12
418 DHCY2=DFOUR(4,2)/DHC12
419 DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
420 DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
422 DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
424 P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
427 C...Express pT with respect to new axes, if sensible.
428 PXP=-(PX(3)*FOUR(IN(6),IN(3))+PY(3)*FOUR(IN(6)+1,IN(3)))
429 PYP=-(PX(3)*FOUR(IN(6),IN(3)+1)+PY(3)*FOUR(IN(6)+1,IN(3)+1))
430 IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01) THEN
436 C...Junction strings: sum up known four-momentum, coefficients for m2.
439 P(I,J)=PX(1)*P(IN(6),J)+PY(1)*P(IN(6)+1,J)+PX(3)*P(IN(3),J)+
441 DO 450 IN1=IN(4),IN(1)-4,4
442 P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
444 DO 460 IN2=IN(5),IN(2)-4,4
445 P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
449 DHM(2)=2.*FOUR(I,IN(1))
450 DHM(3)=2.*FOUR(I,IN(2))
451 DHM(4)=2.*FOUR(IN(1),IN(2))
453 C...Junction strings: find coefficients for Gamma expression.
454 DO 490 IN2=IN(1)+1,IN(2),4
455 DO 480 IN1=IN(1),IN2-1,4
457 DHG(1)=DHG(1)+P(IN1+2,1)*P(IN2+2,1)*DHC
458 IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-P(IN2+2,1)*DHC
459 IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+P(IN1+2,1)*DHC
460 IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
464 C...Junction strings: solve (m2, Gamma) equation system for energies.
465 DHS1=DHM(3)*DHG(4)-DHM(4)*DHG(3)
466 IF(ABS(DHS1).LT.1E-4) GOTO 320
467 DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(2)*DHG(3)-DHG(4)*
468 &(P(I,5)**2-DHM(1))+DHG(2)*DHM(3)
469 DHS3=DHM(2)*(GAM(3)-DHG(1))-DHG(2)*(P(I,5)**2-DHM(1))
470 P(IN(2)+2,4)=0.5*(SQRT(MAX(0D0,DHS2**2-4.*DHS1*DHS3))/ABS(DHS1)-
472 IF(DHM(2)+DHM(4)*P(IN(2)+2,4).LE.0.) GOTO 320
473 P(IN(1)+2,4)=(P(I,5)**2-DHM(1)-DHM(3)*P(IN(2)+2,4))/
474 &(DHM(2)+DHM(4)*P(IN(2)+2,4))
476 C...Junction strings: step to new region if necessary.
477 IF(P(IN(2)+2,4).GT.P(IN(2)+2,3)) THEN
478 P(IN(2)+2,4)=P(IN(2)+2,3)
481 IF(IN(2).GT.N+NR+4*NS) GOTO 320
482 IF(FOUR(IN(1),IN(2)).LE.1E-2) THEN
483 P(IN(1)+2,4)=P(IN(1)+2,3)
488 ELSEIF(P(IN(1)+2,4).GT.P(IN(1)+2,3)) THEN
489 P(IN(1)+2,4)=P(IN(1)+2,3)
495 C...Junction strings: particle four-momentum, remainder, loop back.
497 P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+P(IN(2)+2,4)*P(IN(2),J)
498 PJU(IU+3,J)=PJU(IU+3,J)+P(I,J)
500 IF(P(I,4).LT.P(I,5)) GOTO 320
501 PJU(IU+3,5)=TJU(4)*PJU(IU+3,4)-TJU(1)*PJU(IU+3,1)-
502 &TJU(2)*PJU(IU+3,2)-TJU(3)*PJU(IU+3,3)
503 IF(PJU(IU+3,5).LT.PJU(IU,5)) THEN
508 IF(IN(3).NE.IN(6)) THEN
510 P(IN(6),J)=P(IN(3),J)
511 P(IN(6)+1,J)=P(IN(3)+1,J)
516 P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
517 P(IN(JQ)+2,1)=P(IN(JQ)+2,1)-(3-2*JQ)*P(IN(JQ)+2,4)
522 C...Junction strings: save quantities left after each string.
523 IF(IABS(KFL(1)).GT.10) GOTO 320
527 PJU(IU+3,J)=PJU(IU+3,J)-P(I+1,J)
531 C...Junction strings: put together to new effective string endpoint.
533 KFJS(JT)=K(K(MJU(JT+2),3),2)
534 KFLS=2*INT(RLU(0)+3.*PARJ(4)/(1.+3.*PARJ(4)))+1
535 IF(KFJH(1).EQ.KFJH(2)) KFLS=3
536 IF(ISTA.NE.I) KFJS(JT)=ISIGN(1000*MAX(IABS(KFJH(1)),
537 &IABS(KFJH(2)))+100*MIN(IABS(KFJH(1)),IABS(KFJH(2)))+
540 PJS(JT,J)=PJU(1,J)+PJU(2,J)+P(MJU(JT),J)
541 PJS(JT+2,J)=PJU(4,J)+PJU(5,J)
543 PJS(JT,5)=SQRT(MAX(0.,PJS(JT,4)**2-PJS(JT,1)**2-PJS(JT,2)**2-
547 C...Open versus closed strings. Choose breakup region for latter.
548 580 IF(MJU(1).NE.0.AND.MJU(2).NE.0) THEN
551 ELSEIF(MJU(1).NE.0) THEN
554 ELSEIF(MJU(2).NE.0) THEN
557 ELSEIF(IABS(K(N+1,2)).NE.21) THEN
564 P(N+NR+IS,1)=0.5*FOUR(N+IS,N+IS+1-NR*(IS/NR))
565 W2SUM=W2SUM+P(N+NR+IS,1)
570 W2SUM=W2SUM-P(N+NR+NB,1)
571 IF(W2SUM.GT.W2RAN.AND.NB.LT.NR) GOTO 600
574 C...Find longitudinal string directions (i.e. lightlike four-vectors).
576 IS1=N+IS+NB-1-NR*((IS+NB-2)/NR)
577 IS2=N+IS+NB-NR*((IS+NB-1)/NR)
580 IF(IABS(K(IS1,2)).EQ.21) DP(1,J)=0.5*DP(1,J)
581 IF(IS1.EQ.MJU(1)) DP(1,J)=PJS(1,J)-PJS(3,J)
583 IF(IABS(K(IS2,2)).EQ.21) DP(2,J)=0.5*DP(2,J)
584 IF(IS2.EQ.MJU(2)) DP(2,J)=PJS(2,J)-PJS(4,J)
589 IF(DP(3,5)+2.*DHKC+DP(4,5).LE.0.) THEN
592 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2+DP(1,5)**2)
593 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2+DP(2,5)**2)
596 DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
597 DHK1=0.5*((DP(4,5)+DHKC)/DHKS-1.)
598 DHK2=0.5*((DP(3,5)+DHKC)/DHKS-1.)
600 P(IN1,5)=SQRT(DP(3,5)+2.*DHKC+DP(4,5))
602 P(IN1,J)=(1.+DHK1)*DP(1,J)-DHK2*DP(2,J)
603 P(IN1+1,J)=(1.+DHK2)*DP(2,J)-DHK1*DP(1,J)
607 C...Begin initialization: sum up energy, set starting position.
611 IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
615 ELSEIF(NTRY.GT.100) THEN
616 CALL LUERRM(14,'(LUSTRF:) caught in infinite loop')
617 IF(MSTU(21).GE.1) RETURN
624 P(N+NRS,J)=P(N+NRS,J)+P(N+IS,J)
629 IF(MJU(JT).NE.0) IRANK(JT)=NJS(JT)
630 IF(NS.GT.NR) IRANK(JT)=1
631 IE(JT)=K(N+1+(JT/2)*(NP-1),3)
632 IN(3*JT+1)=N+NR+1+4*(JT/2)*(NS-1)
633 IN(3*JT+2)=IN(3*JT+1)+1
634 IN(3*JT+3)=N+NR+4*NS+2*JT-1
635 DO 670 IN1=N+NR+2+JT,N+NR+4*NS-2+JT,4
642 C...Initialize flavour and pT variables for open string.
646 IF(NS.EQ.1.AND.MJU(1)+MJU(2).EQ.0) CALL LUPTDI(0,PX(1),PY(1))
651 IF(MJU(JT).NE.0) KFL(JT)=KFJS(JT)
653 PMQ(JT)=ULMASS(KFL(JT))
657 C...Closed string: random initial breakup flavour, pT and vertex.
659 KFL(3)=INT(1.+(2.+PARJ(2))*RLU(0))*(-1)**INT(RLU(0)+0.5)
660 CALL LUKFDI(KFL(3),0,KFL(1),KDUMP)
662 IF(IABS(KFL(1)).GT.10.AND.RLU(0).GT.0.5) THEN
663 KFL(2)=-(KFL(1)+ISIGN(10000,KFL(1)))
664 ELSEIF(IABS(KFL(1)).GT.10) THEN
665 KFL(1)=-(KFL(2)+ISIGN(10000,KFL(2)))
667 CALL LUPTDI(KFL(1),PX(1),PY(1))
670 PR3=MIN(25.,0.1*P(N+NR+1,5)**2)
671 700 CALL LUZDIS(KFL(1),KFL(2),PR3,Z)
672 ZR=PR3/(Z*P(N+NR+1,5)**2)
673 IF(ZR.GE.1.) GOTO 700
676 PMQ(JT)=ULMASS(KFL(JT))
678 IN1=N+NR+3+4*(JT/2)*(NS-1)
681 P(IN1,3)=(2-JT)*(1.-Z)+(JT-1)*Z
684 P(IN1+1,3)=(2-JT)*(1.-ZR)+(JT-1)*ZR
688 C...Find initial transverse directions (i.e. spacelike four-vectors).
690 IF(JT.EQ.1.OR.NS.EQ.NR-1) THEN
699 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
700 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
701 DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
702 DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
703 DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
704 IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1.
705 IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1.
706 IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1.
707 IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1.
709 DHCX1=DFOUR(3,1)/DHC12
710 DHCX2=DFOUR(3,2)/DHC12
711 DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
712 DHCY1=DFOUR(4,1)/DHC12
713 DHCY2=DFOUR(4,2)/DHC12
714 DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
715 DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
717 DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
719 P(IN3+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
725 P(IN3+3,J)=P(IN3+1,J)
730 C...Remove energy used up in junction string fragmentation.
731 IF(MJU(1)+MJU(2).GT.0) THEN
733 IF(NJS(JT).EQ.0) GOTO 770
735 P(N+NRS,J)=P(N+NRS,J)-PJS(JT+2,J)
740 C...Produce new particle: side, origin.
742 IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
743 CALL LUERRM(11,'(LUSTRF:) no more memory left in LUJETS')
744 IF(MSTU(21).GE.1) RETURN
747 IF(IABS(KFL(3-JT)).GT.10) JT=3-JT
748 IF(IABS(KFL(3-JT)).GE.4.AND.IABS(KFL(3-JT)).LE.8) JT=3-JT
751 IRANK(JT)=IRANK(JT)+1
757 C...Generate flavour, hadron and pT.
758 790 CALL LUKFDI(KFL(JT),0,KFL(3),K(I,2))
759 IF(K(I,2).EQ.0) GOTO 640
760 IF(MSTJ(12).GE.3.AND.IRANK(JT).EQ.1.AND.IABS(KFL(JT)).LE.10.AND.
761 &IABS(KFL(3)).GT.10) THEN
762 IF(RLU(0).GT.PARJ(19)) GOTO 790
764 P(I,5)=ULMASS(K(I,2))
765 CALL LUPTDI(KFL(JT),PX(3),PY(3))
766 PR(JT)=P(I,5)**2+(PX(JT)+PX(3))**2+(PY(JT)+PY(3))**2
768 C...Final hadrons for small invariant mass.
770 PMQ(3)=ULMASS(KFL(3))
772 IF(MSTJ(11).EQ.2) PARJST=PARJ(34)
773 WMIN=PARJST+PMQ(1)+PMQ(2)+PARJ(36)*PMQ(3)
774 IF(IABS(KFL(JT)).GT.10.AND.IABS(KFL(3)).GT.10) WMIN=
775 &WMIN-0.5*PARJ(36)*PMQ(3)
776 WREM2=FOUR(N+NRS,N+NRS)
777 IF(WREM2.LT.0.10) GOTO 640
778 IF(WREM2.LT.MAX(WMIN*(1.+(2.*RLU(0)-1.)*PARJ(37)),
779 &PARJ(32)+PMQ(1)+PMQ(2))**2) GOTO 940
781 C...Choose z, which gives Gamma. Shift z for heavy flavours.
782 CALL LUZDIS(KFL(JT),KFL(3),PR(JT),Z)
783 IF(IABS(KFL(JT)).GE.4.AND.IABS(KFL(JT)).LE.8.AND.
791 IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
792 &MOD(KFL2A/1000,10)).GE.4) THEN
793 PR(JR)=(PMQ(JR)+PMQ(3))**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
794 PW12=SQRT(MAX(0.,(WREM2-PR(1)-PR(2))**2-4.*PR(1)*PR(2)))
795 Z=(WREM2+PR(JT)-PR(JR)+PW12*(2.*Z-1.))/(2.*WREM2)
796 PR(JR)=(PMQ(JR)+PARJST)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
797 IF((1.-Z)*(WREM2-PR(JT)/Z).LT.PR(JR)) GOTO 940
799 GAM(3)=(1.-Z)*(GAM(JT)+PR(JT)/Z)
804 C...Stepping within or from 'low' string region easy.
805 IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
806 &P(IN(1),5)**2.GE.PR(JT)) THEN
807 P(IN(JT)+2,4)=Z*P(IN(JT)+2,3)
808 P(IN(JR)+2,4)=PR(JT)/(P(IN(JT)+2,4)*P(IN(1),5)**2)
810 P(I,J)=(PX(JT)+PX(3))*P(IN(3),J)+(PY(JT)+PY(3))*P(IN(3)+1,J)
813 ELSEIF(IN(1)+1.EQ.IN(2)) THEN
814 P(IN(JR)+2,4)=P(IN(JR)+2,3)
817 IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 640
818 IF(FOUR(IN(1),IN(2)).LE.1E-2) THEN
819 P(IN(JT)+2,4)=P(IN(JT)+2,3)
825 C...Find new transverse directions (i.e. spacelike string vectors).
826 820 IF(JS*IN(1).GT.JS*IN(3*JR+1).OR.JS*IN(2).GT.JS*IN(3*JR+2).OR.
827 &IN(1).GT.IN(2)) GOTO 640
828 IF(IN(1).NE.IN(3*JT+1).OR.IN(2).NE.IN(3*JT+2)) THEN
835 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
836 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
838 IF(DHC12.LE.1E-2) THEN
839 P(IN(JT)+2,4)=P(IN(JT)+2,3)
845 DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
846 DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
847 DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
848 IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1.
849 IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1.
850 IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1.
851 IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1.
852 DHCX1=DFOUR(3,1)/DHC12
853 DHCX2=DFOUR(3,2)/DHC12
854 DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
855 DHCY1=DFOUR(4,1)/DHC12
856 DHCY2=DFOUR(4,2)/DHC12
857 DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
858 DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
860 DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
862 P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
865 C...Express pT with respect to new axes, if sensible.
866 PXP=-(PX(3)*FOUR(IN(3*JT+3),IN(3))+PY(3)*
867 & FOUR(IN(3*JT+3)+1,IN(3)))
868 PYP=-(PX(3)*FOUR(IN(3*JT+3),IN(3)+1)+PY(3)*
869 & FOUR(IN(3*JT+3)+1,IN(3)+1))
870 IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01) THEN
876 C...Sum up known four-momentum. Gives coefficients for m2 expression.
879 P(I,J)=PX(JT)*P(IN(3*JT+3),J)+PY(JT)*P(IN(3*JT+3)+1,J)+
880 &PX(3)*P(IN(3),J)+PY(3)*P(IN(3)+1,J)
881 DO 850 IN1=IN(3*JT+1),IN(1)-4*JS,4*JS
882 P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
884 DO 860 IN2=IN(3*JT+2),IN(2)-4*JS,4*JS
885 P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
889 DHM(2)=2.*FOUR(I,IN(1))
890 DHM(3)=2.*FOUR(I,IN(2))
891 DHM(4)=2.*FOUR(IN(1),IN(2))
893 C...Find coefficients for Gamma expression.
894 DO 890 IN2=IN(1)+1,IN(2),4
895 DO 880 IN1=IN(1),IN2-1,4
897 DHG(1)=DHG(1)+P(IN1+2,JT)*P(IN2+2,JT)*DHC
898 IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-JS*P(IN2+2,JT)*DHC
899 IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+JS*P(IN1+2,JT)*DHC
900 IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
904 C...Solve (m2, Gamma) equation system for energies taken.
905 DHS1=DHM(JR+1)*DHG(4)-DHM(4)*DHG(JR+1)
906 IF(ABS(DHS1).LT.1E-4) GOTO 640
907 DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(JT+1)*DHG(JR+1)-DHG(4)*
908 &(P(I,5)**2-DHM(1))+DHG(JT+1)*DHM(JR+1)
909 DHS3=DHM(JT+1)*(GAM(3)-DHG(1))-DHG(JT+1)*(P(I,5)**2-DHM(1))
910 P(IN(JR)+2,4)=0.5*(SQRT(MAX(0D0,DHS2**2-4.*DHS1*DHS3))/ABS(DHS1)-
912 IF(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4).LE.0.) GOTO 640
913 P(IN(JT)+2,4)=(P(I,5)**2-DHM(1)-DHM(JR+1)*P(IN(JR)+2,4))/
914 &(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4))
916 C...Step to new region if necessary.
917 IF(P(IN(JR)+2,4).GT.P(IN(JR)+2,3)) THEN
918 P(IN(JR)+2,4)=P(IN(JR)+2,3)
921 IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 640
922 IF(FOUR(IN(1),IN(2)).LE.1E-2) THEN
923 P(IN(JT)+2,4)=P(IN(JT)+2,3)
928 ELSEIF(P(IN(JT)+2,4).GT.P(IN(JT)+2,3)) THEN
929 P(IN(JT)+2,4)=P(IN(JT)+2,3)
935 C...Four-momentum of particle. Remaining quantities. Loop back.
937 P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+P(IN(2)+2,4)*P(IN(2),J)
938 P(N+NRS,J)=P(N+NRS,J)-P(I,J)
940 IF(P(I,4).LT.P(I,5)) GOTO 640
946 IF(IN(3).NE.IN(3*JT+3)) THEN
948 P(IN(3*JT+3),J)=P(IN(3),J)
949 P(IN(3*JT+3)+1,J)=P(IN(3)+1,J)
954 P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
955 P(IN(JQ)+2,JT)=P(IN(JQ)+2,JT)-JS*(3-2*JQ)*P(IN(JQ)+2,4)
959 C...Final hadron: side, flavour, hadron, mass.
965 CALL LUKFDI(KFL(JR),-KFL(3),KFLDMP,K(I,2))
966 IF(K(I,2).EQ.0) GOTO 640
967 P(I,5)=ULMASS(K(I,2))
968 PR(JR)=P(I,5)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
970 C...Final two hadrons: find common setup of four-vectors.
972 IF(P(IN(4)+2,3)*P(IN(5)+2,3)*FOUR(IN(4),IN(5)).LT.P(IN(7),3)*
973 &P(IN(8),3)*FOUR(IN(7),IN(8))) JQ=2
974 DHC12=FOUR(IN(3*JQ+1),IN(3*JQ+2))
975 DHR1=FOUR(N+NRS,IN(3*JQ+2))/DHC12
976 DHR2=FOUR(N+NRS,IN(3*JQ+1))/DHC12
977 IF(IN(4).NE.IN(7).OR.IN(5).NE.IN(8)) THEN
978 PX(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3))-PX(JQ)
979 PY(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3)+1)-PY(JQ)
980 PR(3-JQ)=P(I+(JT+JQ-3)**2-1,5)**2+(PX(3-JQ)+(2*JQ-3)*JS*
981 & PX(3))**2+(PY(3-JQ)+(2*JQ-3)*JS*PY(3))**2
984 C...Solve kinematics for final two hadrons, if possible.
985 WREM2=WREM2+(PX(1)+PX(2))**2+(PY(1)+PY(2))**2
986 FD=(SQRT(PR(1))+SQRT(PR(2)))/SQRT(WREM2)
987 IF(MJU(1)+MJU(2).NE.0.AND.I.EQ.ISAV+2.AND.FD.GE.1.) GOTO 200
988 IF(FD.GE.1.) GOTO 640
989 FA=WREM2+PR(JT)-PR(JR)
990 IF(MSTJ(11).NE.2) PREV=0.5*EXP(MAX(-50.,LOG(FD)*PARJ(38)*
992 IF(MSTJ(11).EQ.2) PREV=0.5*FD**PARJ(39)
993 FB=SIGN(SQRT(MAX(0.,FA**2-4.*WREM2*PR(JT))),JS*(RLU(0)-PREV))
996 IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
997 &MOD(KFL2A/1000,10)).GE.6) FB=SIGN(SQRT(MAX(0.,FA**2-
998 &4.*WREM2*PR(JT))),FLOAT(JS))
1000 P(I-1,J)=(PX(JT)+PX(3))*P(IN(3*JQ+3),J)+(PY(JT)+PY(3))*
1001 &P(IN(3*JQ+3)+1,J)+0.5*(DHR1*(FA+FB)*P(IN(3*JQ+1),J)+
1002 &DHR2*(FA-FB)*P(IN(3*JQ+2),J))/WREM2
1003 P(I,J)=P(N+NRS,J)-P(I-1,J)
1005 IF(P(I-1,4).LT.P(I-1,5).OR.P(I,4).LT.P(I,5)) GOTO 640
1007 C...Mark jets as fragmented and give daughter pointers.
1009 DO 960 I=NSAV+1,NSAV+NP
1012 IF(MSTU(16).NE.2) THEN
1021 C...Document string system. Move up particles.
1032 P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
1042 DO 1000 IZ=MSTU90+1,MSTU91
1043 MSTU9T(IZ)=MSTU(90+IZ)-NRS+1-NSAV+N
1044 PARU9T(IZ)=PARU(90+IZ)
1048 C...Order particles in rank along the chain. Update mother pointer.
1051 K(I-NSAV+N,J)=K(I,J)
1052 P(I-NSAV+N,J)=P(I,J)
1056 DO 1050 I=N+1,2*N-NSAV
1057 IF(K(I,3).NE.IE(1)) GOTO 1050
1063 IF(MSTU(16).NE.2) K(I1,3)=NSAV
1064 DO 1040 IZ=MSTU90+1,MSTU91
1065 IF(MSTU9T(IZ).EQ.I) THEN
1067 MSTU(90+MSTU(90))=I1
1068 PARU(90+MSTU(90))=PARU9T(IZ)
1072 DO 1080 I=2*N-NSAV,N+1,-1
1073 IF(K(I,3).EQ.IE(1)) GOTO 1080
1079 IF(MSTU(16).NE.2) K(I1,3)=NSAV
1080 DO 1070 IZ=MSTU90+1,MSTU91
1081 IF(MSTU9T(IZ).EQ.I) THEN
1083 MSTU(90+MSTU(90))=I1
1084 PARU(90+MSTU(90))=PARU9T(IZ)
1089 C...Boost back particle system. Set production vertices.
1092 CALL LUDBRB(NSAV+1,N,0.,0.,DPS(1)/DPS(4),DPS(2)/DPS(4),
1096 HHPMT=P(I,1)**2+P(I,2)**2+P(I,5)**2
1097 IF(P(I,3).GT.0.) THEN
1098 HHPEZ=(P(I,4)+P(I,3))*HHBZ
1099 P(I,3)=0.5*(HHPEZ-HHPMT/HHPEZ)
1100 P(I,4)=0.5*(HHPEZ+HHPMT/HHPEZ)
1102 HHPEZ=(P(I,4)-P(I,3))/HHBZ
1103 P(I,3)=-0.5*(HHPEZ-HHPMT/HHPEZ)
1104 P(I,4)=0.5*(HHPEZ+HHPMT/HHPEZ)