3 C*********************************************************************
5 SUBROUTINE LUSTRF_HIJING(IP)
6 C...Purpose: to handle the fragmentation of an arbitrary colour singlet
7 C...jet system according to the Lund string fragmentation model.
8 IMPLICIT DOUBLE PRECISION(D)
9 #include "lujets_hijing.inc"
10 #include "ludat1_hijing.inc"
11 #include "ludat2_hijing.inc"
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)
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.
32 IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
34 $ ,'(LUSTRF_HIJING:) failed to reconstruct jet system')
35 IF(MSTU(21).GE.1) RETURN
37 IF(K(I,1).NE.1.AND.K(I,1).NE.2.AND.K(I,1).NE.41) GOTO 110
38 KC=LUCOMP_HIJING(K(I,2))
40 KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
42 IF(N+5*NP+11.GT.MSTU(4)-MSTU(32)-5) THEN
44 $ ,'(LUSTRF_HIJING:) no more memory left in LUJETS_HIJING')
45 IF(MSTU(21).GE.1) RETURN
48 C...Take copy of partons to be considered. Check flavour sum.
53 120 DPS(J)=DPS(J)+P(I,J)
55 IF(P(N+NP,4)**2.LT.P(N+NP,1)**2+P(N+NP,2)**2+P(N+NP,3)**2) THEN
56 P(N+NP,4)=SQRT(P(N+NP,1)**2+P(N+NP,2)**2+P(N+NP,3)**2+
58 DPS(4)=DPS(4)+MAX(0.,P(N+NP,4)-P(I,4))
60 IF(KQ.NE.2) KQSUM=KQSUM+KQ
63 IF(KQSUM.EQ.KQ) MJU(1)=N+NP
64 IF(KQSUM.NE.KQ) MJU(2)=N+NP
66 IF(K(I,1).EQ.2.OR.K(I,1).EQ.41) GOTO 110
69 $ ,'(LUSTRF_HIJING:) unphysical flavour combination')
70 IF(MSTU(21).GE.1) RETURN
73 C...Boost copied system to CM frame (for better numerical precision).
74 CALL LUDBRB_HIJING(N+1,N+NP,0.,0.,-DPS(1)/DPS(4),-DPS(2)/DPS(4),
77 C...Search for very nearby partons that may be recombined.
87 IF(I.EQ.N+NR.AND.IABS(K(N+1,2)).NE.21) GOTO 140
90 IF(K(I,1).EQ.41.OR.K(I1,1).EQ.41) GOTO 140
91 IF(MJU(1).NE.0.AND.I1.LT.MJU(1).AND.IABS(K(I1,2)).NE.21)
93 IF(MJU(2).NE.0.AND.I.GT.MJU(2).AND.IABS(K(I,2)).NE.21) GOTO 140
94 PAP=SQRT((P(I,1)**2+P(I,2)**2+P(I,3)**2)*(P(I1,1)**2+
95 & P(I1,2)**2+P(I1,3)**2))
96 PVP=P(I,1)*P(I1,1)+P(I,2)*P(I1,2)+P(I,3)*P(I1,3)
97 PDR=4.*(PAP-PVP)**2/(PARU13**2*PAP+2.*(PAP-PVP))
98 IF(PDR.LT.PDRMIN) THEN
104 C...Recombine very nearby partons to avoid machine precision problems.
105 IF(PDRMIN.LT.PARU12.AND.IR.EQ.N+NR) THEN
107 150 P(N+1,J)=P(N+1,J)+P(N+NR,J)
108 P(N+1,5)=SQRT(MAX(0.,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
112 ELSEIF(PDRMIN.LT.PARU12) THEN
114 160 P(IR,J)=P(IR,J)+P(IR+1,J)
115 P(IR,5)=SQRT(MAX(0.,P(IR,4)**2-P(IR,1)**2-P(IR,2)**2-
121 IF(IR.EQ.N+NR-1) K(IR,2)=K(N+NR,2)
123 IF(MJU(1).GT.IR) MJU(1)=MJU(1)-1
124 IF(MJU(2).GT.IR) MJU(2)=MJU(2)-1
130 C...Reset particle counter. Skip ahead if no junctions are present;
131 C...this is usually the case!
135 IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
139 ELSEIF(NTRY.GT.100) THEN
140 CALL LUERRM_HIJING(14
141 $ ,'(LUSTRF_HIJING:) caught in infinite loop')
142 IF(MSTU(21).GE.1) RETURN
145 IF(MJU(1).EQ.0.AND.MJU(2).EQ.0) GOTO 500
148 IF(MJU(JT).EQ.0) GOTO 490
151 C...Find and sum up momentum on three sides of junction. Check flavours.
157 DO 200 I1=N+1+(JT-1)*(NR-1),N+NR+(JT-1)*(1-NR),JS
158 IF(K(I1,2).NE.21.AND.IU.LE.2) THEN
163 200 PJU(IU,J)=PJU(IU,J)+P(I1,J)
165 210 PJU(IU,5)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+PJU(IU,3)**2)
166 IF(K(IJU(3),2)/100.NE.10*K(IJU(1),2)+K(IJU(2),2).AND.
167 &K(IJU(3),2)/100.NE.10*K(IJU(2),2)+K(IJU(1),2)) THEN
168 CALL LUERRM_HIJING(12
169 $ ,'(LUSTRF_HIJING:) unphysical flavour combination')
170 IF(MSTU(21).GE.1) RETURN
173 C...Calculate (approximate) boost to rest frame of junction.
174 T12=(PJU(1,1)*PJU(2,1)+PJU(1,2)*PJU(2,2)+PJU(1,3)*PJU(2,3))/
176 T13=(PJU(1,1)*PJU(3,1)+PJU(1,2)*PJU(3,2)+PJU(1,3)*PJU(3,3))/
178 T23=(PJU(2,1)*PJU(3,1)+PJU(2,2)*PJU(3,2)+PJU(2,3)*PJU(3,3))/
180 T11=SQRT((2./3.)*(1.-T12)*(1.-T13)/(1.-T23))
181 T22=SQRT((2./3.)*(1.-T12)*(1.-T23)/(1.-T13))
182 TSQ=SQRT((2.*T11*T22+T12-1.)*(1.+T12))
183 T1F=(TSQ-T22*(1.+T12))/(1.-T12**2)
184 T2F=(TSQ-T11*(1.+T12))/(1.-T12**2)
186 220 TJU(J)=-(T1F*PJU(1,J)/PJU(1,5)+T2F*PJU(2,J)/PJU(2,5))
187 TJU(4)=SQRT(1.+TJU(1)**2+TJU(2)**2+TJU(3)**2)
189 230 PJU(IU,5)=TJU(4)*PJU(IU,4)-TJU(1)*PJU(IU,1)-TJU(2)*PJU(IU,2)-
192 C...Put junction at rest if motion could give inconsistencies.
193 IF(PJU(1,5)+PJU(2,5).GT.PJU(1,4)+PJU(2,4)) THEN
202 C...Start preparing for fragmentation of two strings from junction.
207 C...Junction strings: find longitudinal string directions.
213 IF(IS.EQ.1) DP(1,J)=P(IS1,J)
215 250 IF(IS.EQ.NS) DP(2,J)=-PJU(IU,J)
216 IF(IS.EQ.NS) DP(2,4)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+PJU(IU,3)**2)
217 IF(IS.EQ.NS) DP(2,5)=0.
221 IF(DP(3,5)+2.*DHKC+DP(4,5).LE.0.) THEN
222 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
223 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
228 DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
229 DHK1=0.5*((DP(4,5)+DHKC)/DHKS-1.)
230 DHK2=0.5*((DP(3,5)+DHKC)/DHKS-1.)
232 P(IN1,5)=SQRT(DP(3,5)+2.*DHKC+DP(4,5))
234 P(IN1,J)=(1.+DHK1)*DP(1,J)-DHK2*DP(2,J)
235 260 P(IN1+1,J)=(1.+DHK2)*DP(2,J)-DHK1*DP(1,J)
237 C...Junction strings: initialize flavour, momentum and starting pos.
240 IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
244 ELSEIF(NTRY.GT.100) THEN
245 CALL LUERRM_HIJING(14
246 $ ,'(LUSTRF_HIJING:) caught in infinite loop')
247 IF(MSTU(21).GE.1) RETURN
251 IE(1)=K(N+1+(JT/2)*(NP-1),3)
256 DO 280 IN1=N+NR+2+JQ,N+NR+4*NS-2+JQ,4
267 C...Junction strings: find initial transverse directions.
273 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
274 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
275 DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
276 DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
277 DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
278 IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1.
279 IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1.
280 IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1.
281 IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1.
283 DHCX1=DFOUR(3,1)/DHC12
284 DHCX2=DFOUR(3,2)/DHC12
285 DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
286 DHCY1=DFOUR(4,1)/DHC12
287 DHCY2=DFOUR(4,2)/DHC12
288 DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
289 DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
291 DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
293 310 P(IN(6)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
296 C...Junction strings: produce new particle, origin.
298 IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
299 CALL LUERRM_HIJING(11
300 $ ,'(LUSTRF_HIJING:) no more memory left in LUJETS_HIJING')
301 IF(MSTU(21).GE.1) RETURN
309 C...Junction strings: generate flavour, hadron, pT, z and Gamma.
310 330 CALL LUKFDI_HIJING(KFL(1),0,KFL(3),K(I,2))
311 IF(K(I,2).EQ.0) GOTO 270
312 IF(MSTJ(12).GE.3.AND.IRANKJ.EQ.1.AND.IABS(KFL(1)).LE.10.AND.
313 &IABS(KFL(3)).GT.10) THEN
314 IF(RLU_HIJING(0).GT.PARJ(19)) GOTO 330
316 P(I,5)=ULMASS_HIJING(K(I,2))
317 CALL LUPTDI_HIJING(KFL(1),PX(3),PY(3))
318 PR(1)=P(I,5)**2+(PX(1)+PX(3))**2+(PY(1)+PY(3))**2
319 CALL LUZDIS_HIJING(KFL(1),KFL(3),PR(1),Z)
320 GAM(3)=(1.-Z)*(GAM(1)+PR(1)/Z)
324 C...Junction strings: stepping within or from 'low' string region easy.
325 IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
326 &P(IN(1),5)**2.GE.PR(1)) THEN
327 P(IN(1)+2,4)=Z*P(IN(1)+2,3)
328 P(IN(2)+2,4)=PR(1)/(P(IN(1)+2,4)*P(IN(1),5)**2)
330 350 P(I,J)=(PX(1)+PX(3))*P(IN(3),J)+(PY(1)+PY(3))*P(IN(3)+1,J)
332 ELSEIF(IN(1)+1.EQ.IN(2)) THEN
333 P(IN(2)+2,4)=P(IN(2)+2,3)
336 IF(IN(2).GT.N+NR+4*NS) GOTO 270
337 IF(FOUR(IN(1),IN(2)).LE.1E-2) THEN
338 P(IN(1)+2,4)=P(IN(1)+2,3)
344 C...Junction strings: find new transverse directions.
345 360 IF(IN(1).GT.N+NR+4*NS.OR.IN(2).GT.N+NR+4*NS.OR.
346 &IN(1).GT.IN(2)) GOTO 270
347 IF(IN(1).NE.IN(4).OR.IN(2).NE.IN(5)) THEN
353 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
354 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
356 IF(DHC12.LE.1E-2) THEN
357 P(IN(1)+2,4)=P(IN(1)+2,3)
363 DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
364 DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
365 DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
366 IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1.
367 IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1.
368 IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1.
369 IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1.
370 DHCX1=DFOUR(3,1)/DHC12
371 DHCX2=DFOUR(3,2)/DHC12
372 DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
373 DHCY1=DFOUR(4,1)/DHC12
374 DHCY2=DFOUR(4,2)/DHC12
375 DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
376 DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
378 DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
380 380 P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
382 C...Express pT with respect to new axes, if sensible.
383 PXP=-(PX(3)*FOUR(IN(6),IN(3))+PY(3)*FOUR(IN(6)+1,IN(3)))
384 PYP=-(PX(3)*FOUR(IN(6),IN(3)+1)+PY(3)*FOUR(IN(6)+1,IN(3)+1))
385 IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01) THEN
391 C...Junction strings: sum up known four-momentum, coefficients for m2.
394 P(I,J)=PX(1)*P(IN(6),J)+PY(1)*P(IN(6)+1,J)+PX(3)*P(IN(3),J)+
396 DO 390 IN1=IN(4),IN(1)-4,4
397 390 P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
398 DO 400 IN2=IN(5),IN(2)-4,4
399 400 P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
401 DHM(2)=2.*FOUR(I,IN(1))
402 DHM(3)=2.*FOUR(I,IN(2))
403 DHM(4)=2.*FOUR(IN(1),IN(2))
405 C...Junction strings: find coefficients for Gamma expression.
406 DO 410 IN2=IN(1)+1,IN(2),4
407 DO 410 IN1=IN(1),IN2-1,4
409 DHG(1)=DHG(1)+P(IN1+2,1)*P(IN2+2,1)*DHC
410 IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-P(IN2+2,1)*DHC
411 IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+P(IN1+2,1)*DHC
412 410 IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
414 C...Junction strings: solve (m2, Gamma) equation system for energies.
415 DHS1=DHM(3)*DHG(4)-DHM(4)*DHG(3)
416 IF(ABS(DHS1).LT.1E-4) GOTO 270
417 DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(2)*DHG(3)-DHG(4)*
418 &(P(I,5)**2-DHM(1))+DHG(2)*DHM(3)
419 DHS3=DHM(2)*(GAM(3)-DHG(1))-DHG(2)*(P(I,5)**2-DHM(1))
420 P(IN(2)+2,4)=0.5*(SQRT(MAX(0D0,DHS2**2-4.*DHS1*DHS3))/ABS(DHS1)-
422 IF(DHM(2)+DHM(4)*P(IN(2)+2,4).LE.0.) GOTO 270
423 P(IN(1)+2,4)=(P(I,5)**2-DHM(1)-DHM(3)*P(IN(2)+2,4))/
424 &(DHM(2)+DHM(4)*P(IN(2)+2,4))
426 C...Junction strings: step to new region if necessary.
427 IF(P(IN(2)+2,4).GT.P(IN(2)+2,3)) THEN
428 P(IN(2)+2,4)=P(IN(2)+2,3)
431 IF(IN(2).GT.N+NR+4*NS) GOTO 270
432 IF(FOUR(IN(1),IN(2)).LE.1E-2) THEN
433 P(IN(1)+2,4)=P(IN(1)+2,3)
438 ELSEIF(P(IN(1)+2,4).GT.P(IN(1)+2,3)) THEN
439 P(IN(1)+2,4)=P(IN(1)+2,3)
445 C...Junction strings: particle four-momentum, remainder, loop back.
447 P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+P(IN(2)+2,4)*P(IN(2),J)
448 430 PJU(IU+3,J)=PJU(IU+3,J)+P(I,J)
449 IF(P(I,4).LE.0.) GOTO 270
450 PJU(IU+3,5)=TJU(4)*PJU(IU+3,4)-TJU(1)*PJU(IU+3,1)-
451 &TJU(2)*PJU(IU+3,2)-TJU(3)*PJU(IU+3,3)
452 IF(PJU(IU+3,5).LT.PJU(IU,5)) THEN
457 IF(IN(3).NE.IN(6)) THEN
459 P(IN(6),J)=P(IN(3),J)
460 440 P(IN(6)+1,J)=P(IN(3)+1,J)
464 P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
465 450 P(IN(JQ)+2,1)=P(IN(JQ)+2,1)-(3-2*JQ)*P(IN(JQ)+2,4)
469 C...Junction strings: save quantities left after each string.
470 IF(IABS(KFL(1)).GT.10) GOTO 270
474 460 PJU(IU+3,J)=PJU(IU+3,J)-P(I+1,J)
477 C...Junction strings: put together to new effective string endpoint.
479 KFJS(JT)=K(K(MJU(JT+2),3),2)
480 KFLS=2*INT(RLU_HIJING(0)+3.*PARJ(4)/(1.+3.*PARJ(4)))+1
481 IF(KFJH(1).EQ.KFJH(2)) KFLS=3
482 IF(ISTA.NE.I) KFJS(JT)=ISIGN(1000*MAX(IABS(KFJH(1)),
483 &IABS(KFJH(2)))+100*MIN(IABS(KFJH(1)),IABS(KFJH(2)))+
486 PJS(JT,J)=PJU(1,J)+PJU(2,J)+P(MJU(JT),J)
487 480 PJS(JT+2,J)=PJU(4,J)+PJU(5,J)
488 PJS(JT,5)=SQRT(MAX(0.,PJS(JT,4)**2-PJS(JT,1)**2-PJS(JT,2)**2-
492 C...Open versus closed strings. Choose breakup region for latter.
493 500 IF(MJU(1).NE.0.AND.MJU(2).NE.0) THEN
496 ELSEIF(MJU(1).NE.0) THEN
499 ELSEIF(MJU(2).NE.0) THEN
502 ELSEIF(IABS(K(N+1,2)).NE.21) THEN
509 P(N+NR+IS,1)=0.5*FOUR(N+IS,N+IS+1-NR*(IS/NR))
510 510 W2SUM=W2SUM+P(N+NR+IS,1)
511 W2RAN=RLU_HIJING(0)*W2SUM
514 W2SUM=W2SUM-P(N+NR+NB,1)
515 IF(W2SUM.GT.W2RAN.AND.NB.LT.NR) GOTO 520
518 C...Find longitudinal string directions (i.e. lightlike four-vectors).
520 IS1=N+IS+NB-1-NR*((IS+NB-2)/NR)
521 IS2=N+IS+NB-NR*((IS+NB-1)/NR)
524 IF(IABS(K(IS1,2)).EQ.21) DP(1,J)=0.5*DP(1,J)
525 IF(IS1.EQ.MJU(1)) DP(1,J)=PJS(1,J)-PJS(3,J)
527 IF(IABS(K(IS2,2)).EQ.21) DP(2,J)=0.5*DP(2,J)
528 530 IF(IS2.EQ.MJU(2)) DP(2,J)=PJS(2,J)-PJS(4,J)
532 IF(DP(3,5)+2.*DHKC+DP(4,5).LE.0.) THEN
535 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2+DP(1,5)**2)
536 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2+DP(2,5)**2)
539 DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
540 DHK1=0.5*((DP(4,5)+DHKC)/DHKS-1.)
541 DHK2=0.5*((DP(3,5)+DHKC)/DHKS-1.)
543 P(IN1,5)=SQRT(DP(3,5)+2.*DHKC+DP(4,5))
545 P(IN1,J)=(1.+DHK1)*DP(1,J)-DHK2*DP(2,J)
546 540 P(IN1+1,J)=(1.+DHK2)*DP(2,J)-DHK1*DP(1,J)
548 C...Begin initialization: sum up energy, set starting position.
551 IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
555 ELSEIF(NTRY.GT.100) THEN
556 CALL LUERRM_HIJING(14
557 $ ,'(LUSTRF_HIJING:) caught in infinite loop')
558 IF(MSTU(21).GE.1) RETURN
564 560 P(N+NRS,J)=P(N+NRS,J)+P(N+IS,J)
567 IF(MJU(JT).NE.0) IRANK(JT)=NJS(JT)
568 IF(NS.GT.NR) IRANK(JT)=1
569 IE(JT)=K(N+1+(JT/2)*(NP-1),3)
570 IN(3*JT+1)=N+NR+1+4*(JT/2)*(NS-1)
571 IN(3*JT+2)=IN(3*JT+1)+1
572 IN(3*JT+3)=N+NR+4*NS+2*JT-1
573 DO 570 IN1=N+NR+2+JT,N+NR+4*NS-2+JT,4
578 C...Initialize flavour and pT variables for open string.
582 IF(NS.EQ.1.AND.MJU(1)+MJU(2).EQ.0) CALL LUPTDI_HIJING(0,PX(1)
588 IF(MJU(JT).NE.0) KFL(JT)=KFJS(JT)
590 PMQ(JT)=ULMASS_HIJING(KFL(JT))
593 C...Closed string: random initial breakup flavour, pT and vertex.
595 KFL(3)=INT(1.+(2.+PARJ(2))*RLU_HIJING(0))*(-1)
596 $ **INT(RLU_HIJING(0)+0.5)
597 CALL LUKFDI_HIJING(KFL(3),0,KFL(1),KDUMP)
599 IF(IABS(KFL(1)).GT.10.AND.RLU_HIJING(0).GT.0.5) THEN
600 KFL(2)=-(KFL(1)+ISIGN(10000,KFL(1)))
601 ELSEIF(IABS(KFL(1)).GT.10) THEN
602 KFL(1)=-(KFL(2)+ISIGN(10000,KFL(2)))
604 CALL LUPTDI_HIJING(KFL(1),PX(1),PY(1))
607 PR3=MIN(25.,0.1*P(N+NR+1,5)**2)
608 590 CALL LUZDIS_HIJING(KFL(1),KFL(2),PR3,Z)
609 ZR=PR3/(Z*P(N+NR+1,5)**2)
610 IF(ZR.GE.1.) GOTO 590
613 PMQ(JT)=ULMASS_HIJING(KFL(JT))
615 IN1=N+NR+3+4*(JT/2)*(NS-1)
618 P(IN1,3)=(2-JT)*(1.-Z)+(JT-1)*Z
621 600 P(IN1+1,3)=(2-JT)*(1.-ZR)+(JT-1)*ZR
624 C...Find initial transverse directions (i.e. spacelike four-vectors).
626 IF(JT.EQ.1.OR.NS.EQ.NR-1) THEN
634 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
635 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
636 DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
637 DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
638 DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
639 IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1.
640 IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1.
641 IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1.
642 IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1.
644 DHCX1=DFOUR(3,1)/DHC12
645 DHCX2=DFOUR(3,2)/DHC12
646 DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
647 DHCY1=DFOUR(4,1)/DHC12
648 DHCY2=DFOUR(4,2)/DHC12
649 DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
650 DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
652 DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
654 620 P(IN3+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
659 630 P(IN3+3,J)=P(IN3+1,J)
663 C...Remove energy used up in junction string fragmentation.
664 IF(MJU(1)+MJU(2).GT.0) THEN
666 IF(NJS(JT).EQ.0) GOTO 660
668 650 P(N+NRS,J)=P(N+NRS,J)-PJS(JT+2,J)
672 C...Produce new particle: side, origin.
674 IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
675 CALL LUERRM_HIJING(11
676 $ ,'(LUSTRF_HIJING:) no more memory left in LUJETS_HIJING')
677 IF(MSTU(21).GE.1) RETURN
680 IF(IABS(KFL(3-JT)).GT.10) JT=3-JT
683 IRANK(JT)=IRANK(JT)+1
689 C...Generate flavour, hadron and pT.
690 680 CALL LUKFDI_HIJING(KFL(JT),0,KFL(3),K(I,2))
691 IF(K(I,2).EQ.0) GOTO 550
692 IF(MSTJ(12).GE.3.AND.IRANK(JT).EQ.1.AND.IABS(KFL(JT)).LE.10.AND.
693 &IABS(KFL(3)).GT.10) THEN
694 IF(RLU_HIJING(0).GT.PARJ(19)) GOTO 680
696 P(I,5)=ULMASS_HIJING(K(I,2))
697 CALL LUPTDI_HIJING(KFL(JT),PX(3),PY(3))
698 PR(JT)=P(I,5)**2+(PX(JT)+PX(3))**2+(PY(JT)+PY(3))**2
700 C...Final hadrons for small invariant mass.
702 PMQ(3)=ULMASS_HIJING(KFL(3))
703 WMIN=PARJ(32+MSTJ(11))+PMQ(1)+PMQ(2)+PARJ(36)*PMQ(3)
704 IF(IABS(KFL(JT)).GT.10.AND.IABS(KFL(3)).GT.10) WMIN=
705 &WMIN-0.5*PARJ(36)*PMQ(3)
706 WREM2=FOUR(N+NRS,N+NRS)
707 IF(WREM2.LT.0.10) GOTO 550
708 IF(WREM2.LT.MAX(WMIN*(1.+(2.*RLU_HIJING(0)-1.)*PARJ(37)),
709 &PARJ(32)+PMQ(1)+PMQ(2))**2) GOTO 810
711 C...Choose z, which gives Gamma. Shift z for heavy flavours.
712 CALL LUZDIS_HIJING(KFL(JT),KFL(3),PR(JT),Z)
715 IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
716 &MOD(KFL2A/1000,10)).GE.4) THEN
717 PR(JR)=(PMQ(JR)+PMQ(3))**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
718 PW12=SQRT(MAX(0.,(WREM2-PR(1)-PR(2))**2-4.*PR(1)*PR(2)))
719 Z=(WREM2+PR(JT)-PR(JR)+PW12*(2.*Z-1.))/(2.*WREM2)
720 PR(JR)=(PMQ(JR)+PARJ(32+MSTJ(11)))**2+(PX(JR)-PX(3))**2+
722 IF((1.-Z)*(WREM2-PR(JT)/Z).LT.PR(JR)) GOTO 810
724 GAM(3)=(1.-Z)*(GAM(JT)+PR(JT)/Z)
728 C...Stepping within or from 'low' string region easy.
729 IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
730 &P(IN(1),5)**2.GE.PR(JT)) THEN
731 P(IN(JT)+2,4)=Z*P(IN(JT)+2,3)
732 P(IN(JR)+2,4)=PR(JT)/(P(IN(JT)+2,4)*P(IN(1),5)**2)
734 700 P(I,J)=(PX(JT)+PX(3))*P(IN(3),J)+(PY(JT)+PY(3))*P(IN(3)+1,J)
736 ELSEIF(IN(1)+1.EQ.IN(2)) THEN
737 P(IN(JR)+2,4)=P(IN(JR)+2,3)
740 IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 550
741 IF(FOUR(IN(1),IN(2)).LE.1E-2) THEN
742 P(IN(JT)+2,4)=P(IN(JT)+2,3)
748 C...Find new transverse directions (i.e. spacelike string vectors).
749 710 IF(JS*IN(1).GT.JS*IN(3*JR+1).OR.JS*IN(2).GT.JS*IN(3*JR+2).OR.
750 &IN(1).GT.IN(2)) GOTO 550
751 IF(IN(1).NE.IN(3*JT+1).OR.IN(2).NE.IN(3*JT+2)) THEN
757 DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
758 DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
760 IF(DHC12.LE.1E-2) THEN
761 P(IN(JT)+2,4)=P(IN(JT)+2,3)
767 DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
768 DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
769 DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
770 IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1.
771 IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1.
772 IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1.
773 IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1.
774 DHCX1=DFOUR(3,1)/DHC12
775 DHCX2=DFOUR(3,2)/DHC12
776 DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
777 DHCY1=DFOUR(4,1)/DHC12
778 DHCY2=DFOUR(4,2)/DHC12
779 DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
780 DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
782 DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
784 730 P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
786 C...Express pT with respect to new axes, if sensible.
787 PXP=-(PX(3)*FOUR(IN(3*JT+3),IN(3))+PY(3)*
788 & FOUR(IN(3*JT+3)+1,IN(3)))
789 PYP=-(PX(3)*FOUR(IN(3*JT+3),IN(3)+1)+PY(3)*
790 & FOUR(IN(3*JT+3)+1,IN(3)+1))
791 IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01) THEN
797 C...Sum up known four-momentum. Gives coefficients for m2 expression.
800 P(I,J)=PX(JT)*P(IN(3*JT+3),J)+PY(JT)*P(IN(3*JT+3)+1,J)+
801 &PX(3)*P(IN(3),J)+PY(3)*P(IN(3)+1,J)
802 DO 740 IN1=IN(3*JT+1),IN(1)-4*JS,4*JS
803 740 P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
804 DO 750 IN2=IN(3*JT+2),IN(2)-4*JS,4*JS
805 750 P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
807 DHM(2)=2.*FOUR(I,IN(1))
808 DHM(3)=2.*FOUR(I,IN(2))
809 DHM(4)=2.*FOUR(IN(1),IN(2))
811 C...Find coefficients for Gamma expression.
812 DO 760 IN2=IN(1)+1,IN(2),4
813 DO 760 IN1=IN(1),IN2-1,4
815 DHG(1)=DHG(1)+P(IN1+2,JT)*P(IN2+2,JT)*DHC
816 IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-JS*P(IN2+2,JT)*DHC
817 IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+JS*P(IN1+2,JT)*DHC
818 760 IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
820 C...Solve (m2, Gamma) equation system for energies taken.
821 DHS1=DHM(JR+1)*DHG(4)-DHM(4)*DHG(JR+1)
822 IF(ABS(DHS1).LT.1E-4) GOTO 550
823 DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(JT+1)*DHG(JR+1)-DHG(4)*
824 &(P(I,5)**2-DHM(1))+DHG(JT+1)*DHM(JR+1)
825 DHS3=DHM(JT+1)*(GAM(3)-DHG(1))-DHG(JT+1)*(P(I,5)**2-DHM(1))
826 P(IN(JR)+2,4)=0.5*(SQRT(MAX(0D0,DHS2**2-4.*DHS1*DHS3))/ABS(DHS1)-
828 IF(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4).LE.0.) GOTO 550
829 P(IN(JT)+2,4)=(P(I,5)**2-DHM(1)-DHM(JR+1)*P(IN(JR)+2,4))/
830 &(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4))
832 C...Step to new region if necessary.
833 IF(P(IN(JR)+2,4).GT.P(IN(JR)+2,3)) THEN
834 P(IN(JR)+2,4)=P(IN(JR)+2,3)
837 IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 550
838 IF(FOUR(IN(1),IN(2)).LE.1E-2) THEN
839 P(IN(JT)+2,4)=P(IN(JT)+2,3)
844 ELSEIF(P(IN(JT)+2,4).GT.P(IN(JT)+2,3)) THEN
845 P(IN(JT)+2,4)=P(IN(JT)+2,3)
851 C...Four-momentum of particle. Remaining quantities. Loop back.
853 P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+P(IN(2)+2,4)*P(IN(2),J)
854 780 P(N+NRS,J)=P(N+NRS,J)-P(I,J)
855 IF(P(I,4).LE.0.) GOTO 550
861 IF(IN(3).NE.IN(3*JT+3)) THEN
863 P(IN(3*JT+3),J)=P(IN(3),J)
864 790 P(IN(3*JT+3)+1,J)=P(IN(3)+1,J)
868 P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
869 800 P(IN(JQ)+2,JT)=P(IN(JQ)+2,JT)-JS*(3-2*JQ)*P(IN(JQ)+2,4)
872 C...Final hadron: side, flavour, hadron, mass.
878 CALL LUKFDI_HIJING(KFL(JR),-KFL(3),KFLDMP,K(I,2))
879 IF(K(I,2).EQ.0) GOTO 550
880 P(I,5)=ULMASS_HIJING(K(I,2))
881 PR(JR)=P(I,5)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
883 C...Final two hadrons: find common setup of four-vectors.
885 IF(P(IN(4)+2,3)*P(IN(5)+2,3)*FOUR(IN(4),IN(5)).LT.P(IN(7),3)*
886 &P(IN(8),3)*FOUR(IN(7),IN(8))) JQ=2
887 DHC12=FOUR(IN(3*JQ+1),IN(3*JQ+2))
888 DHR1=FOUR(N+NRS,IN(3*JQ+2))/DHC12
889 DHR2=FOUR(N+NRS,IN(3*JQ+1))/DHC12
890 IF(IN(4).NE.IN(7).OR.IN(5).NE.IN(8)) THEN
891 PX(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3))-PX(JQ)
892 PY(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3)+1)-PY(JQ)
893 PR(3-JQ)=P(I+(JT+JQ-3)**2-1,5)**2+(PX(3-JQ)+(2*JQ-3)*JS*
894 & PX(3))**2+(PY(3-JQ)+(2*JQ-3)*JS*PY(3))**2
897 C...Solve kinematics for final two hadrons, if possible.
898 WREM2=WREM2+(PX(1)+PX(2))**2+(PY(1)+PY(2))**2
899 FD=(SQRT(PR(1))+SQRT(PR(2)))/SQRT(WREM2)
900 IF(MJU(1)+MJU(2).NE.0.AND.I.EQ.ISAV+2.AND.FD.GE.1.) GOTO 180
901 IF(FD.GE.1.) GOTO 550
902 FA=WREM2+PR(JT)-PR(JR)
903 IF(MSTJ(11).EQ.2) PREV=0.5*FD**PARJ(37+MSTJ(11))
904 IF(MSTJ(11).NE.2) PREV=0.5*EXP(MAX(-100.,LOG(FD)*
905 &PARJ(37+MSTJ(11))*(PR(1)+PR(2))**2))
906 FB=SIGN(SQRT(MAX(0.,FA**2-4.*WREM2*PR(JT))),JS*(RLU_HIJING(0)-PREV
910 IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
911 &MOD(KFL2A/1000,10)).GE.6) FB=SIGN(SQRT(MAX(0.,FA**2-
912 &4.*WREM2*PR(JT))),FLOAT(JS))
914 P(I-1,J)=(PX(JT)+PX(3))*P(IN(3*JQ+3),J)+(PY(JT)+PY(3))*
915 &P(IN(3*JQ+3)+1,J)+0.5*(DHR1*(FA+FB)*P(IN(3*JQ+1),J)+
916 &DHR2*(FA-FB)*P(IN(3*JQ+2),J))/WREM2
917 820 P(I,J)=P(N+NRS,J)-P(I-1,J)
919 C...Mark jets as fragmented and give daughter pointers.
921 DO 830 I=NSAV+1,NSAV+NP
924 IF(MSTU(16).NE.2) THEN
933 C...Document string system. Move up particles.
942 840 V(NSAV,J)=V(IP,J)
943 P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
951 C...Order particles in rank along the chain. Update mother pointer.
955 860 P(I-NSAV+N,J)=P(I,J)
957 DO 880 I=N+1,2*N-NSAV
958 IF(K(I,3).NE.IE(1)) GOTO 880
963 IF(MSTU(16).NE.2) K(I1,3)=NSAV
965 DO 900 I=2*N-NSAV,N+1,-1
966 IF(K(I,3).EQ.IE(1)) GOTO 900
971 IF(MSTU(16).NE.2) K(I1,3)=NSAV
974 C...Boost back particle system. Set production vertices.
975 CALL LUDBRB_HIJING(NSAV+1,N,0.,0.,DPS(1)/DPS(4),DPS(2)/DPS(4),