2 C*********************************************************************
4 SUBROUTINE PYMULT(MMUL)
6 C...Initializes treatment of multiple interactions, selects kinematics
7 C...of hardest interaction if low-pT physics included in run, and
8 C...generates all non-hardest interactions.
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/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
13 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
14 COMMON/PYINT1/MINT(400),VINT(400)
15 COMMON/PYINT2/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
16 COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
17 COMMON/PYINT5/NGEN(0:200,3),XSEC(0:200,3)
18 COMMON/PYINT7/SIGT(0:6,0:6,0:5)
19 SAVE /LUJETS/,/LUDAT1/,/LUDAT2/
20 SAVE /PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT5/,
22 DIMENSION NMUL(20),SIGM(20),KSTR(500,2),VINTSV(80)
23 SAVE XT2,XT2FAC,XC2,XTS,IRBIN,RBIN,NMUL,SIGM
25 C...Initialization of multiple interaction treatment.
27 IF(MSTP(122).GE.1) WRITE(MSTU(11),5000) MSTP(82)
35 C...Loop over phase space points: xT2 choice in 20 bins.
40 DO 110 ITRY=1,MSTP(83)
41 RSCA=0.05*((21-IXT2)-RLU(0))
42 XT2=VINT(149)*(1.+VINT(149))/(VINT(149)+RSCA)-VINT(149)
43 XT2=MAX(0.01*VINT(149),XT2)
46 C...Choose tau and y*. Calculate cos(theta-hat).
47 IF(RLU(0).LE.COEF(ISUB,1)) THEN
48 TAUT=(2.*(1.+SQRT(1.-XT2))/XT2-1.)**RLU(0)
49 TAU=XT2*(1.+TAUT)**2/(4.*TAUT)
51 TAU=XT2*(1.+TAN(RLU(0)*ATAN(SQRT(1./XT2-1.)))**2)
57 IF(RYST.GT.COEF(ISUB,8)) MYST=2
58 IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
59 CALL PYKMAP(2,MYST,RLU(0))
60 VINT(23)=SQRT(MAX(0.,1.-XT2/TAU))*(-1)**INT(1.5+RLU(0))
62 C...Calculate differential cross-section.
63 VINT(71)=0.5*VINT(1)*SQRT(XT2)
64 CALL PYSIGH(NCHN,SIGS)
65 SIGM(IXT2)=SIGM(IXT2)+SIGS
67 SIGSUM=SIGSUM+SIGM(IXT2)
69 SIGSUM=SIGSUM/(20.*MSTP(83))
71 C...Reject result if sigma(parton-parton) is smaller than hadronic one.
72 IF(SIGSUM.LT.1.1*SIGT(0,0,5)) THEN
73 IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) PARP(82),SIGSUM
75 VINT(149)=4.*PARP(82)**2/VINT(2)
78 IF(MSTP(122).GE.1) WRITE(MSTU(11),5200) PARP(82), SIGSUM
80 C...Start iteration to find k factor.
81 YKE=SIGSUM/SIGT(0,0,5)
94 XK=XI+(YKE-YI)*(XF-XI)/(YF-YI)
97 C...Evaluate overlap integrals.
98 IF(MSTP(82).EQ.2) THEN
99 SP=0.5*PARU(1)*(1.-EXP(-XK))
102 IF(MSTP(82).EQ.3) DELTAB=0.02
103 IF(MSTP(82).EQ.4) DELTAB=MIN(0.01,0.05*PARP(84))
108 IF(MSTP(82).EQ.3) THEN
109 OV=EXP(-B**2)/PARU(2)
112 OV=((1.-PARP(83))**2*EXP(-MIN(50.,B**2))+2.*PARP(83)*
113 & (1.-PARP(83))*2./(1.+CQ2)*EXP(-MIN(50.,B**2*2./(1.+CQ2)))+
114 & PARP(83)**2/CQ2*EXP(-MIN(50.,B**2/CQ2)))/PARU(2)
116 PACC=1.-EXP(-MIN(50.,PARU(1)*XK*OV))
117 SP=SP+PARU(2)*B*DELTAB*PACC
118 SOP=SOP+PARU(2)*B*DELTAB*OV*PACC
119 IF(B.LT.1..OR.B*PACC.GT.1E-6) GOTO 140
123 C...Continue iteration until convergence.
133 IF(ABS(YK-YKE).GE.1E-5*YKE) GOTO 130
135 C...Store some results for subsequent use.
140 C...Initialize iteration in xT2 for hardest interaction.
141 ELSEIF(MMUL.EQ.2) THEN
142 IF(MSTP(82).LE.0) THEN
143 ELSEIF(MSTP(82).EQ.1) THEN
145 XT2FAC=XSEC(96,1)/SIGT(0,0,5)*VINT(149)/(1.-VINT(149))
146 ELSEIF(MSTP(82).EQ.2) THEN
148 XT2FAC=VINT(146)*XSEC(96,1)/SIGT(0,0,5)*VINT(149)*
151 XC2=4.*CKIN(3)**2/VINT(2)
152 IF(CKIN(3).LE.CKIN(5).OR.MINT(82).GE.2) XC2=0.
155 ELSEIF(MMUL.EQ.3) THEN
156 C...Low-pT or multiple interactions (first semihard interaction):
157 C...choose xT2 according to dpT2/pT2**2*exp(-(sigma above pT2)/norm)
158 C...or (MSTP(82)>=2) dpT2/(pT2+pT0**2)**2*exp(-....).
160 IF(MSTP(82).LE.0) THEN
162 ELSEIF(MSTP(82).EQ.1) THEN
163 XT2=XT2FAC*XT2/(XT2FAC-XT2*LOG(RLU(0)))
164 ELSEIF(MSTP(82).EQ.2) THEN
165 IF(XT2.LT.1..AND.EXP(-XT2FAC*XT2/(VINT(149)*(XT2+
166 & VINT(149)))).GT.RLU(0)) XT2=1.
168 XT2=(1.+VINT(149))*XT2FAC/(XT2FAC-(1.+VINT(149))*LOG(1.-
169 & RLU(0)*(1.-EXP(-XT2FAC/(VINT(149)*(1.+VINT(149)))))))-
172 XT2=-XT2FAC/LOG(EXP(-XT2FAC/(XT2+VINT(149)))+RLU(0)*
173 & (EXP(-XT2FAC/VINT(149))-EXP(-XT2FAC/(XT2+VINT(149)))))-
176 XT2=MAX(0.01*VINT(149),XT2)
178 XT2=(XC2+VINT(149))*(1.+VINT(149))/(1.+VINT(149)-
179 & RLU(0)*(1.-XC2))-VINT(149)
180 XT2=MAX(0.01*VINT(149),XT2)
184 C...Low-pT: choose xT2, tau, y* and cos(theta-hat) fixed.
185 IF(MSTP(82).LE.1.AND.XT2.LT.VINT(149)) THEN
186 IF(MINT(82).EQ.1) NGEN(0,1)=NGEN(0,1)-1
187 IF(MINT(82).EQ.1) NGEN(ISUB,1)=NGEN(ISUB,1)-1
190 VINT(21)=0.01*VINT(149)
193 VINT(25)=0.01*VINT(149)
196 C...Multiple interactions (first semihard interaction).
197 C...Choose tau and y*. Calculate cos(theta-hat).
198 IF(RLU(0).LE.COEF(ISUB,1)) THEN
199 TAUT=(2.*(1.+SQRT(1.-XT2))/XT2-1.)**RLU(0)
200 TAU=XT2*(1.+TAUT)**2/(4.*TAUT)
202 TAU=XT2*(1.+TAN(RLU(0)*ATAN(SQRT(1./XT2-1.)))**2)
208 IF(RYST.GT.COEF(ISUB,8)) MYST=2
209 IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
210 CALL PYKMAP(2,MYST,RLU(0))
211 VINT(23)=SQRT(MAX(0.,1.-XT2/TAU))*(-1)**INT(1.5+RLU(0))
213 VINT(71)=0.5*VINT(1)*SQRT(VINT(25))
215 C...Store results of cross-section calculation.
216 ELSEIF(MMUL.EQ.4) THEN
219 IF(ISET(ISUB).EQ.1) XTS=VINT(21)
220 IF(ISET(ISUB).EQ.2.OR.ISET(ISUB).EQ.6)
221 & XTS=(4.*VINT(48)+2.*VINT(63)+2.*VINT(64))/VINT(2)
222 IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) XTS=VINT(26)
223 RBIN=MAX(0.000001,MIN(0.999999,XTS*(1.+VINT(149))/
225 IRBIN=INT(1.+20.*RBIN)
226 IF(ISUB.EQ.96.AND.MSTP(171).EQ.0) THEN
227 NMUL(IRBIN)=NMUL(IRBIN)+1
228 SIGM(IRBIN)=SIGM(IRBIN)+VINT(153)
231 C...Choose impact parameter.
232 ELSEIF(MMUL.EQ.5) THEN
233 IF(MSTP(82).EQ.3) THEN
234 VINT(148)=RLU(0)/(PARU(2)*VINT(147))
238 IF(RTYPE.LT.(1.-PARP(83))**2) THEN
240 ELSEIF(RTYPE.LT.1.-PARP(83)**2) THEN
241 B2=-0.5*(1.+CQ2)*LOG(RLU(0))
245 VINT(148)=((1.-PARP(83))**2*EXP(-MIN(50.,B2))+2.*PARP(83)*
246 & (1.-PARP(83))*2./(1.+CQ2)*EXP(-MIN(50.,B2*2./(1.+CQ2)))+
247 & PARP(83)**2/CQ2*EXP(-MIN(50.,B2/CQ2)))/(PARU(2)*VINT(147))
250 C...Multiple interactions (variable impact parameter) : reject with
251 C...probability exp(-overlap*cross-section above pT/normalization).
252 RNCOR=(IRBIN-20.*RBIN)*NMUL(IRBIN)
253 SIGCOR=(IRBIN-20.*RBIN)*SIGM(IRBIN)
254 DO 150 IBIN=IRBIN+1,20
255 RNCOR=RNCOR+NMUL(IBIN)
256 SIGCOR=SIGCOR+SIGM(IBIN)
258 SIGABV=(SIGCOR/RNCOR)*VINT(149)*(1.-XTS)/(XTS+VINT(149))
259 IF(MSTP(171).EQ.1) SIGABV=SIGABV*VINT(2)/VINT(289)
260 VINT(150)=EXP(-MIN(50.,VINT(146)*VINT(148)*
261 & SIGABV/SIGT(0,0,5)))
263 C...Generate additional multiple semihard interactions.
264 ELSEIF(MMUL.EQ.6) THEN
272 C...Reconstruct strings in hard scattering.
274 IF(ISET(ISUBSV).EQ.1) NMAX=MINT(84)+2
275 IF(ISET(ISUBSV).EQ.11) NMAX=MINT(84)+2+MINT(3)
277 DO 180 I=MINT(84)+1,NMAX
278 KCS=KCHG(LUCOMP(K(I,2)),2)*ISIGN(1,K(I,2))
279 IF(KCS.EQ.0) GOTO 180
282 IF(KCS.EQ.1.AND.(J.EQ.2.OR.J.EQ.4)) GOTO 170
283 IF(KCS.EQ.-1.AND.(J.EQ.1.OR.J.EQ.3)) GOTO 170
285 IST=MOD(K(I,J+3)/MSTU(5),MSTU(5))
287 IST=MOD(K(I,J+1),MSTU(5))
289 IF(IST.LT.MINT(84).OR.IST.GT.I) GOTO 170
290 IF(KCHG(LUCOMP(K(IST,2)),2).EQ.0) GOTO 170
292 IF(J.EQ.1.OR.J.EQ.4) THEN
302 C...Set up starting values for iteration in xT2.
304 IF(ISET(ISUBSV).EQ.1) XT2=VINT(21)
305 IF(ISET(ISUBSV).EQ.2.OR.ISET(ISUBSV).EQ.6)
306 & XT2=(4.*VINT(48)+2.*VINT(63)+2.*VINT(64))/VINT(2)
307 IF(ISET(ISUBSV).GE.3.AND.ISET(ISUBSV).LE.5) XT2=VINT(26)
308 IF(MSTP(82).LE.1) THEN
309 XT2FAC=XSEC(ISUB,1)*VINT(149)/((1.-VINT(149))*SIGT(0,0,5))
311 XT2FAC=VINT(146)*VINT(148)*XSEC(ISUB,1)/SIGT(0,0,5)*
312 & VINT(149)*(1.+VINT(149))
316 VINT(143)=1.-VINT(141)
317 VINT(144)=1.-VINT(142)
319 C...Iterate downwards in xT2.
320 190 IF(MSTP(82).LE.1) THEN
321 XT2=XT2FAC*XT2/(XT2FAC-XT2*LOG(RLU(0)))
322 IF(XT2.LT.VINT(149)) GOTO 240
324 IF(XT2.LE.0.01*VINT(149)) GOTO 240
325 XT2=XT2FAC*(XT2+VINT(149))/(XT2FAC-(XT2+VINT(149))*
326 & LOG(RLU(0)))-VINT(149)
327 IF(XT2.LE.0.) GOTO 240
328 XT2=MAX(0.01*VINT(149),XT2)
332 C...Choose tau and y*. Calculate cos(theta-hat).
333 IF(RLU(0).LE.COEF(ISUB,1)) THEN
334 TAUT=(2.*(1.+SQRT(1.-XT2))/XT2-1.)**RLU(0)
335 TAU=XT2*(1.+TAUT)**2/(4.*TAUT)
337 TAU=XT2*(1.+TAN(RLU(0)*ATAN(SQRT(1./XT2-1.)))**2)
343 IF(RYST.GT.COEF(ISUB,8)) MYST=2
344 IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
345 CALL PYKMAP(2,MYST,RLU(0))
346 VINT(23)=SQRT(MAX(0.,1.-XT2/TAU))*(-1)**INT(1.5+RLU(0))
348 C...Check that x not used up. Accept or reject kinematical variables.
349 X1M=SQRT(TAU)*EXP(VINT(22))
350 X2M=SQRT(TAU)*EXP(-VINT(22))
351 IF(VINT(143)-X1M.LT.0.01.OR.VINT(144)-X2M.LT.0.01) GOTO 190
352 VINT(71)=0.5*VINT(1)*SQRT(XT2)
353 CALL PYSIGH(NCHN,SIGS)
354 IF(SIGS.LT.XSEC(ISUB,1)*RLU(0)) GOTO 190
356 C...Reset K, P and V vectors. Select some variables.
365 PT=0.5*VINT(1)*SQRT(XT2)
369 C...Add first parton to event record.
372 IF(RFLAV.GE.MAX(PARP(85),PARP(86))) K(N+1,2)=
373 & 1+INT((2.+PARJ(2))*RLU(0))
376 P(N+1,3)=0.25*VINT(1)*(VINT(41)*(1.+CTH)-VINT(42)*(1.-CTH))
377 P(N+1,4)=0.25*VINT(1)*(VINT(41)*(1.+CTH)+VINT(42)*(1.-CTH))
380 C...Add second parton to event record.
383 IF(K(N+1,2).NE.21) K(N+2,2)=-K(N+1,2)
386 P(N+2,3)=0.25*VINT(1)*(VINT(41)*(1.-CTH)-VINT(42)*(1.+CTH))
387 P(N+2,4)=0.25*VINT(1)*(VINT(41)*(1.-CTH)+VINT(42)*(1.+CTH))
390 IF(RFLAV.LT.PARP(85).AND.NSTR.GE.1) THEN
391 C....Choose relevant string pieces to place gluons on.
397 DIST=(P(I,4)*P(I1,4)-P(I,1)*P(I1,1)-P(I,2)*P(I1,2)-
398 & P(I,3)*P(I1,3))*(P(I,4)*P(I2,4)-P(I,1)*P(I2,1)-
399 & P(I,2)*P(I2,2)-P(I,3)*P(I2,3))/MAX(1.,P(I1,4)*P(I2,4)-
400 & P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-P(I1,3)*P(I2,3))
401 IF(ISTR.EQ.1.OR.DIST.LT.DMIN) THEN
409 C....Colour flow adjustments, new string pieces.
410 IF(K(IST1,4)/MSTU(5).EQ.IST2) K(IST1,4)=MSTU(5)*I+
411 & MOD(K(IST1,4),MSTU(5))
412 IF(MOD(K(IST1,5),MSTU(5)).EQ.IST2) K(IST1,5)=
413 & MSTU(5)*(K(IST1,5)/MSTU(5))+I
416 IF(K(IST2,5)/MSTU(5).EQ.IST1) K(IST2,5)=MSTU(5)*I+
417 & MOD(K(IST2,5),MSTU(5))
418 IF(MOD(K(IST2,4),MSTU(5)).EQ.IST1) K(IST2,4)=
419 & MSTU(5)*(K(IST2,4)/MSTU(5))+I
426 C...String drawing and colour flow for gluon loop.
427 ELSEIF(K(N+1,2).EQ.21) THEN
428 K(N+1,4)=MSTU(5)*(N+2)
429 K(N+1,5)=MSTU(5)*(N+2)
430 K(N+2,4)=MSTU(5)*(N+1)
431 K(N+2,5)=MSTU(5)*(N+1)
438 C...String drawing and colour flow for qq~ pair.
440 K(N+1,4)=MSTU(5)*(N+2)
441 K(N+2,5)=MSTU(5)*(N+1)
447 C...Update remaining energy; iterate.
449 IF(N.GT.MSTU(4)-MSTU(32)-10) THEN
450 CALL LUERRM(11,'(PYMULT:) no more memory left in LUJETS')
451 IF(MSTU(21).GE.1) RETURN
454 VINT(151)=VINT(151)+VINT(41)
455 VINT(152)=VINT(152)+VINT(42)
456 VINT(143)=VINT(143)-VINT(41)
457 VINT(144)=VINT(144)-VINT(42)
458 IF(MINT(31).LT.240) GOTO 190
466 C...Format statements for printout.
467 5000 FORMAT(/1X,'****** PYMULT: initialization of multiple inter',
468 &'actions for MSTP(82) =',I2,' ******')
469 5100 FORMAT(8X,'pT0 =',F5.2,' GeV gives sigma(parton-parton) =',1P,
470 &E9.2,' mb: rejected')
471 5200 FORMAT(8X,'pT0 =',F5.2,' GeV gives sigma(parton-parton) =',1P,
472 &E9.2,' mb: accepted')