File indexing completed on 2025-08-05 08:21:13
0001
0002
0003
0004
0005
0006
0007
0008 SUBROUTINE PYMIHK
0009
0010
0011 IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0012 IMPLICIT INTEGER(I-N)
0013 INTEGER PYK,PYCHGE,PYCOMP
0014
0015 COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
0016
0017 COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0018 COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
0019 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0020 COMMON/PYINT1/MINT(400),VINT(400)
0021
0022 COMMON/PYINTM/KFIVAL(2,3),NMI(2),IMI(2,800,2),NVC(2,-6:6),
0023 & XASSOC(2,-6:6,240),XPSVC(-6:6,-1:240),PVCTOT(2,-1:1),
0024 & XMI(2,240),PT2MI(240),IMISEP(0:240)
0025 SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINTM/
0026
0027 PARAMETER (NERSIZ=4000)
0028 COMMON /PYCBLS/MCO(NERSIZ,2),NCC,JCCO(NERSIZ,2),JCCN(NERSIZ,2)
0029 & ,MACCPT
0030 COMMON /PYCTAG/NCT,MCT(NERSIZ,2)
0031 SAVE /PYCBLS/,/PYCTAG/
0032 DIMENSION JST(2,3),IV(2,3),IDQ(3),NVSUM(2),NBRTOT(2),NG(2)
0033 & ,ITJUNC(2),MOUT(2),INSR(1000,3),ISTR(6),YMI(240)
0034 DATA NERRPR/0/
0035 SAVE NERRPR
0036 FOUR(I,J)=P(I,4)*P(J,4)-P(I,3)*P(J,3)-P(I,2)*P(J,2)-P(I,1)*P(J,1)
0037
0038
0039 IBOOST=0
0040
0041
0042 DO 110 I=MINT(84)+1,NERSIZ
0043 DO 100 JC=1,2
0044 MCT(I,JC)=0
0045 MCO(I,JC)=0
0046 100 CONTINUE
0047
0048 IF (I.LE.N) THEN
0049 K(I,4)=MOD(K(I,4),MSTU(5)**2)
0050 K(I,5)=MOD(K(I,5),MSTU(5)**2)
0051 ENDIF
0052 110 CONTINUE
0053
0054
0055
0056 DO 130 MG=MINT(84)+1,NERSIZ
0057 DO 120 JC=1,2
0058 JCCO(MG,JC)=0
0059 JCCN(MG,JC)=0
0060 120 CONTINUE
0061 130 CONTINUE
0062
0063
0064 DO 150 IM=1,1000
0065 DO 140 J=1,3
0066 INSR(IM,J)=0
0067 140 CONTINUE
0068 150 CONTINUE
0069
0070
0071 IF (MSTP(89).EQ.1) THEN
0072 DO 160 IM=1,240
0073 IF (IM.LE.MINT(31)) THEN
0074 YMI(IM)=LOG(XMI(1,IM)/XMI(2,IM))
0075 ELSE
0076
0077 YMI(IM)=100D0
0078 ENDIF
0079 160 CONTINUE
0080 ENDIF
0081
0082
0083 DO 290 JS=1,2
0084
0085
0086 NG(JS)=0
0087 JV=0
0088 KFS=ISIGN(1,MINT(10+JS))
0089
0090
0091 IF(KFIVAL(JS,1).EQ.0) THEN
0092 IF(MINT(10+JS).EQ.111) THEN
0093 KFIVAL(JS,1)=INT(1.5D0+PYR(0))
0094 KFIVAL(JS,2)=-KFIVAL(JS,1)
0095 ELSEIF(MINT(10+JS).EQ.22) THEN
0096 PYRKF=PYR(0)
0097 KFIVAL(JS,1)=1
0098 IF(PYRKF.GT.0.1D0) KFIVAL(JS,1)=2
0099 IF(PYRKF.GT.0.5D0) KFIVAL(JS,1)=3
0100 IF(PYRKF.GT.0.6D0) KFIVAL(JS,1)=4
0101 KFIVAL(JS,2)=-KFIVAL(JS,1)
0102 ELSEIF(MINT(10+JS).EQ.130.OR.MINT(10+JS).EQ.310) THEN
0103 IF(PYR(0).GT.0.5D0) THEN
0104 KFIVAL(JS,1)=1
0105 KFIVAL(JS,2)=-3
0106 ELSE
0107 KFIVAL(JS,1)=3
0108 KFIVAL(JS,2)=-1
0109 ENDIF
0110 ENDIF
0111 ENDIF
0112
0113
0114 NVSUM(JS)=0
0115 NBRTOT(JS)=0
0116 DO 210 JFA=1,6
0117
0118 NVALQ=0
0119 NVALQB=0
0120 NSEA=0
0121 DO 170 J=1,3
0122 IF(KFIVAL(JS,J).EQ.JFA) NVALQ=NVALQ+1
0123 IF(KFIVAL(JS,J).EQ.-JFA) NVALQB=NVALQB+1
0124 170 CONTINUE
0125 NVSUM(JS)=NVSUM(JS)+NVALQ+NVALQB
0126
0127 DO 180 IM=1,NMI(JS)
0128 IFL = K(IMI(JS,IM,1),2)
0129 IFA = IABS(IFL)
0130 IFS = ISIGN(1,IFL)
0131 IF (IFL.EQ.JFA.AND.IMI(JS,IM,2).EQ.0) THEN
0132
0133 NVALQ=NVALQ-1
0134 JV=NVSUM(JS)-NVALQ-NVALQB
0135 IV(JS,JV)=IMI(JS,IM,1)
0136 ELSEIF (IFL.EQ.-JFA.AND.IMI(JS,IM,2).EQ.0) THEN
0137
0138 NVALQB=NVALQB-1
0139 JV=NVSUM(JS)-NVALQ-NVALQB
0140 IV(JS,JV)=IMI(JS,IM,1)
0141 ELSEIF (IFA.EQ.JFA) THEN
0142
0143 IF (IMI(JS,IM,2).LT.0) NSEA=NSEA-IFS
0144 ENDIF
0145 180 CONTINUE
0146
0147 NFLSUM=IABS(NSEA)+NVALQ+NVALQB
0148 NBRTOT(JS)=NBRTOT(JS)+NFLSUM
0149 IF (N+NFLSUM+1.GT.MSTU(4)) THEN
0150 CALL PYERRM(11,'(PYMIHK:) no more memory left in PYJETS')
0151 MINT(51)=1
0152 RETURN
0153 ENDIF
0154
0155 IF (NFLSUM.GT.0) THEN
0156 DO 200 IA=1,NFLSUM
0157
0158 N=N+1
0159 DO 190 IX=1,5
0160 K(N,IX)=0
0161 P(N,IX)=0D0
0162 V(N,IX)=0D0
0163 190 CONTINUE
0164 K(N,1)=3
0165 K(N,2)=ISIGN(JFA,NSEA)
0166 IF (IA.LE.NVALQ) K(N,2)=JFA
0167 IF (IA.GT.NVALQ.AND.IA.LE.NVALQ+NVALQB) K(N,2)=-JFA
0168 K(N,3)=MINT(83)+JS
0169
0170 NMI(JS)=NMI(JS)+1
0171 IMI(JS,NMI(JS),1)=N
0172 IMI(JS,NMI(JS),2)=-1
0173 IF (IA.LE.NVALQ+NVALQB) THEN
0174 IMI(JS,NMI(JS),2)=0
0175 JV=JV+1
0176 IV(JS,JV)=IMI(JS,NMI(JS),1)
0177 ENDIF
0178 200 CONTINUE
0179 ENDIF
0180 210 CONTINUE
0181
0182 IM=0
0183 220 IM=IM+1
0184 IF (IM.LE.NMI(JS)) THEN
0185 IF (K(IMI(JS,IM,1),2).EQ.21) THEN
0186 NG(JS)=NG(JS)+1
0187
0188 ELSEIF (IMI(JS,IM,2).NE.0.AND.K(IMI(JS,IM,1),2).GT.0) THEN
0189
0190 IF (IMI(JS,IM,2).LT.0) THEN
0191 IMC=PYR(0)*NMI(JS)
0192 230 IMC=MOD(IMC,NMI(JS))+1
0193 IF (K(IMI(JS,IMC,1),2).NE.-K(IMI(JS,IM,1),2)) GOTO 230
0194 IF (IMI(JS,IMC,2).GE.0) GOTO 230
0195 IMI(JS, IM,2) = IMI(JS,IMC,1)
0196 IMI(JS,IMC,2) = IMI(JS, IM,1)
0197 ENDIF
0198
0199 N=N+1
0200 DO 240 IX=1,5
0201 K(N,IX)=0
0202 P(N,IX)=0D0
0203 V(N,IX)=0D0
0204 240 CONTINUE
0205 K(N,1)=14
0206 K(N,2)=21
0207 K(N,3)=MINT(83)+JS
0208
0209 K(N,4)=IMI(JS, IM,1)
0210 K(N,5)=IMI(JS, IM,2)
0211
0212 K(IMI(JS, IM,2),5)=K(IMI(JS, IM,2),5)+MSTU(5)*N
0213 K(IMI(JS, IM,1),4)=K(IMI(JS, IM,1),4)+MSTU(5)*N
0214
0215 NMI(JS)=NMI(JS)+1
0216 IMI(JS,NMI(JS),1)=N
0217 IMI(JS,NMI(JS),2)=0
0218 ENDIF
0219 GOTO 220
0220 ENDIF
0221
0222
0223
0224
0225 IF (IABS(MINT(10+JS)).GT.1000) THEN
0226
0227 ITJUNC(JS) = (3-KFS)/2
0228
0229 N=N+1
0230 DO 250 IX=1,5
0231 K(N,IX)=0
0232 P(N,IX)=0D0
0233 V(N,IX)=0D0
0234 250 CONTINUE
0235
0236 K(N,1)=42
0237 K(N,2)=88
0238
0239 K(N,3)=MINT(83)+JS
0240 K(N,4)=ITJUNC(JS)*MSTU(5)
0241 K(N,5)=0
0242
0243 MOUT(JS)=0
0244 MANTI=ITJUNC(JS)-1
0245
0246 DO 260 JV=1,3
0247 K(IV(JS,JV),4+MANTI)=MOD(K(IV(JS,JV),4+MANTI),MSTU(5))
0248 & +MSTU(5)*N
0249
0250 JST(JS,JV)=IV(JS,JV)
0251 260 CONTINUE
0252 ELSE
0253
0254 ITJUNC(JS)=0
0255 IF (K(IV(JS,1),2).GT.0) THEN
0256 IQ=IV(JS,1)
0257 IQBAR=IV(JS,2)
0258 ELSE
0259 IQ=IV(JS,2)
0260 IQBAR=IV(JS,1)
0261 ENDIF
0262 IV(JS,3)=0
0263 JST(JS,1)=IQ
0264 JST(JS,2)=IQBAR
0265 JST(JS,3)=0
0266 K(IQ,4)=MOD(K(IQ,4),MSTU(5))+MSTU(5)*IQBAR
0267 K(IQBAR,5)=MOD(K(IQBAR,5),MSTU(5))+MSTU(5)*IQ
0268
0269 IF (NBRTOT(JS).EQ.0) THEN
0270 N=N+1
0271 DO 270 IX=1,5
0272 K(N,IX)=0
0273 P(N,IX)=0D0
0274 V(N,IX)=0D0
0275 270 CONTINUE
0276 K(N,1)=3
0277 K(N,2)=21
0278 K(N,3)=MINT(83)+JS
0279 K(N,4)=0
0280 K(N,5)=0
0281 NBRTOT(JS)=1
0282 NG(JS)=NG(JS)+1
0283
0284 NMI(JS)=NMI(JS)+1
0285 IMI(JS,NMI(JS),1)=N
0286 IMI(JS,NMI(JS),2)=0
0287 ENDIF
0288 MOUT(JS)=0
0289 ENDIF
0290
0291
0292 DO 280 JV=1,3
0293 IF (JST(JS,JV).LE.MINT(53).AND.JST(JS,JV).GT.0)
0294 & MOUT(JS)=MOUT(JS)+1
0295 280 CONTINUE
0296
0297 290 CONTINUE
0298
0299
0300
0301
0302
0303 NCT=0
0304 DO 320 IM=1,MINT(31)
0305
0306 DO 310 JS=1,2
0307 I1=IMI(JS,IM,1)
0308 I2=IMI(3-JS,IM,1)
0309 DO 300 JCS=4,5
0310 IF (K(I1,2).NE.21.AND.(9-2*JCS).NE.ISIGN(1,K(I1,2)))
0311 & GOTO 300
0312 IF (K(I1,JCS)/MSTU(5)**2.NE.0) GOTO 300
0313
0314 KCS=JCS
0315 CALL PYCTTR(I1,KCS,I2)
0316 IF(MINT(51).NE.0) RETURN
0317
0318 300 CONTINUE
0319 310 CONTINUE
0320 320 CONTINUE
0321
0322 DO 340 JS=1,2
0323
0324 DO 330 IM=MINT(31)+1,NMI(JS)
0325 IP=IMI(JS,IM,1)
0326 IF (K(IP,2).NE.21) THEN
0327 JC=(3-ISIGN(1,K(IP,2)))/2
0328 IF (MCT(IP,JC).EQ.0) THEN
0329 NCT=NCT+1
0330 MCT(IP,JC)=NCT
0331 ENDIF
0332 ELSE
0333
0334 ICD=K(IP,4)
0335 IAD=K(IP,5)
0336 IF (ICD.NE.0) THEN
0337
0338 ICC=MCT(ICD,1)
0339 IAC=MCT(IAD,2)
0340 ELSE
0341
0342 ICC=NCT+1
0343 IAC=NCT+2
0344 NCT=NCT+2
0345 ENDIF
0346 MCT(IP,1)=ICC
0347 MCT(IP,2)=IAC
0348 ENDIF
0349 330 CONTINUE
0350 340 CONTINUE
0351
0352
0353
0354
0355 DO 360 MQGST=1,2
0356 DO 350 I=MINT(84)+1,N
0357
0358
0359 IF (K(I,1).NE.3) GOTO 350
0360 KC=PYCOMP(K(I,2))
0361 IF(KC.EQ.0) GOTO 350
0362 KQ=KCHG(KC,2)
0363 IF(KQ.EQ.0.OR.(MQGST.EQ.1.AND.KQ.EQ.2)) GOTO 350
0364
0365
0366 KCS=4
0367 IF(KQ*ISIGN(1,K(I,2)).LT.0) KCS=5
0368 IF(MCT(I,KCS-3).NE.0) GOTO 350
0369
0370 CALL PYCTTR(I,KCS,I)
0371 IF(MINT(51).NE.0) RETURN
0372
0373 350 CONTINUE
0374 360 CONTINUE
0375
0376
0377 DO 370 I=MINT(84)+1,N
0378 MCO(I,1)=MCT(I,1)
0379 MCO(I,2)=MCT(I,2)
0380 370 CONTINUE
0381
0382
0383
0384
0385
0386 RM0=1.5D0
0387 MRETRY=0
0388 PARP80=PARP(80)
0389
0390
0391
0392 IBOOST=IBOOST+1
0393 DO 380 IM=1,MINT(31)
0394 BETA=(XMI(1,IM)-XMI(2,IM))/(XMI(1,IM)+XMI(2,IM))
0395 CALL PYROBO(IMISEP(IM-1)+1,IMISEP(IM),0D0,0D0,0D0,0D0,BETA)
0396 380 CONTINUE
0397
0398 DO 390 I=MINT(53)+1,N
0399 JS=K(I,3)
0400 P(I,1)=0D0
0401 P(I,2)=0D0
0402 IF (K(I,2).NE.88) THEN
0403 P(I,4)=0.5D0*VINT(142+JS)*VINT(1)/MAX(1,NMI(JS)-MINT(31))
0404 P(I,3)=P(I,4)
0405 IF (JS.EQ.2) P(I,3)=-P(I,3)
0406 ELSE
0407
0408 P(I,4)=0D0
0409 P(I,3)=0D0
0410 ENDIF
0411 390 CONTINUE
0412
0413
0414 400 DO 410 I=MINT(84)+1,N
0415 K(I,4)=MOD(K(I,4),MSTU(5)**2)
0416 K(I,5)=MOD(K(I,5),MSTU(5)**2)
0417 410 CONTINUE
0418
0419 NCC=0
0420 DO 430 JS=1,2
0421
0422 IF (ITJUNC(JS).EQ.0) THEN
0423 JC1=MCT(JST(JS,1),1)
0424 JC2=MCT(JST(JS,2),2)
0425 NCC=NCC+1
0426 JCCO(NCC,1)=MAX(JC1,JC2)
0427 JCCO(NCC,2)=MIN(JC1,JC2)
0428
0429 DO 420 I=MINT(84)+1,N
0430 IF (MCT(I,1).EQ.JCCO(NCC,1)) MCT(I,1)=JCCO(NCC,2)
0431 IF (MCT(I,2).EQ.JCCO(NCC,1)) MCT(I,2)=JCCO(NCC,2)
0432 420 CONTINUE
0433 ENDIF
0434 430 CONTINUE
0435
0436 440 JS=1
0437 IF (PYR(0).GT.0.5D0.OR.NG(1).EQ.0) JS=2
0438 IF (NG(JS).GT.0) THEN
0439 NOPT=0
0440 RLOPT=1D9
0441
0442 NMGL=0
0443 IMGL=PYR(0)*NMI(JS)+1
0444 450 IMGL=MOD(IMGL,NMI(JS))+1
0445 NMGL=NMGL+1
0446
0447 IF (NMGL.LE.NMI(JS).AND.NOPT.LE.3) THEN
0448 IGL = IMI(JS,IMGL,1)
0449
0450 IF (K(IGL,2).NE.21.OR.K(IGL,4)/MSTU(5).NE.0
0451 & .OR.K(IGL,5)/MSTU(5).NE.0) GOTO 450
0452
0453 NMP1=0
0454 IMP1=PYR(0)*NMI(JS)+1
0455 460 IMP1=MOD(IMP1,NMI(JS))+1
0456 NMP1=NMP1+1
0457 IF (IMP1.EQ.IMGL) GOTO 460
0458
0459 IF (NMP1.LE.NMI(JS).AND.NOPT.LE.3) THEN
0460 IP1 = IMI(JS,IMP1,1)
0461
0462
0463 NANTI=0
0464 MANTI=PYR(0)*2
0465 470 MANTI=MOD(MANTI+1,2)
0466 NANTI=NANTI+1
0467 IF (NANTI.LE.2) THEN
0468 IP2 =MOD(K(IP1,4+MANTI)/MSTU(5),MSTU(5))
0469
0470
0471 IF (IP2.LE.0) GOTO 470
0472 IF (K(IP2,2).EQ.21.AND.IP2.GT.MINT(53)) GOTO 470
0473
0474 IF (K(IP1,4+MANTI)/MSTU(5)**2.EQ.2) GOTO 470
0475 IF (K(IP2,5-MANTI)/MSTU(5)**2.EQ.2) GOTO 470
0476
0477
0478 K(IP1,4+MANTI)=K(IP1,4+MANTI)+2*MSTU(5)**2
0479 IF (K(IP2,2).NE.88) THEN
0480 K(IP2,5-MANTI)=K(IP2,5-MANTI)+2*MSTU(5)**2
0481 ENDIF
0482
0483
0484
0485
0486
0487 JCG1=MCO(IGL,2-MANTI)
0488 JCG2=MCO(IGL,1+MANTI)
0489 JCP1=MCO(IP1,1+MANTI)
0490 JCP2=MCO(IP2,2-MANTI)
0491
0492 CALL PYMIHG(JCP1,JCG1,JCP2,JCG2)
0493
0494 IF (MACCPT.EQ.0) GOTO 470
0495
0496
0497 JCG1=MCT(IGL,2-MANTI)
0498 JCG2=MCT(IGL,1+MANTI)
0499 JCP1=MCT(IP1,1+MANTI)
0500 JCP2=MCT(IP2,2-MANTI)
0501
0502
0503 IF (MSTP(89).EQ.0) THEN
0504
0505 RL=1D0
0506
0507
0508 IF (IP1.GT.MINT(53).AND.IP2.GT.MINT(53)
0509 & .AND.MOUT(JS).NE.0.AND.PYR(0).GT.PARP80) THEN
0510 NMP1=0
0511 NMGL=0
0512 GOTO 470
0513 ENDIF
0514 ELSEIF (MSTP(89).EQ.1) THEN
0515
0516
0517 YGL=YMI(IMGL)
0518
0519 IF (YGL.EQ.100D0) THEN
0520 YGL=(3-2*JS)*100D0
0521 IDA1=MOD(K(IGL,4),MSTU(5))
0522 IDA2=MOD(K(IGL,5),MSTU(5))
0523 DO 480 IMT=1,NMI(JS)
0524
0525 IF (IMI(JS,IMT,1).EQ.IDA1.OR.IMI(JS,IMT,1).EQ.IDA2)
0526 & THEN
0527 IF (ABS(YGL).GT.ABS(YMI(IMT))) YGL=YMI(IMT)
0528 ENDIF
0529 480 CONTINUE
0530 ENDIF
0531
0532 YP1=YMI(IMP1)
0533
0534 IF (YP1.EQ.100D0) THEN
0535 YP1=(3-2*JS)*YP1
0536 IDA1=MOD(K(IP1,4),MSTU(5))
0537 IDA2=MOD(K(IP1,5),MSTU(5))
0538 DO 490 IMT=1,NMI(JS)
0539
0540 IF (IMI(JS,IMT,1).EQ.IDA1.OR.IMI(JS,IMT,1).EQ.IDA2)
0541 & THEN
0542 IF (ABS(YP1).GT.ABS(YMI(IMT))) YP1=YMI(IMT)
0543 ENDIF
0544 490 CONTINUE
0545 ENDIF
0546
0547 IF (K(IP2,2).NE.88) THEN
0548 DO 500 IMT=1,NMI(JS)
0549 IF (IMI(JS,IMT,1).EQ.IP2) YP2=YMI(IMT)
0550 500 CONTINUE
0551
0552 IF (YP2.EQ.100D0) THEN
0553 YP2=(3-2*JS)*YP2
0554 IDA1=MOD(K(IP2,4),MSTU(5))
0555 IDA2=MOD(K(IP2,5),MSTU(5))
0556 DO 510 IMT=1,NMI(JS)
0557
0558 IF (IMI(JS,IMT,1).EQ.IDA1.OR.IMI(JS,IMT,1).EQ.IDA2
0559 & ) THEN
0560 IF (ABS(YP2).GT.ABS(YMI(IMT))) YP2=YMI(IMT)
0561 ENDIF
0562 510 CONTINUE
0563 ENDIF
0564
0565 ELSE
0566 YP2=(3-2*JS)*100D0
0567 ENDIF
0568 RL=ABS(YGL-YP1)+ABS(YGL-YP2)
0569 ELSEIF (MSTP(89).EQ.2) THEN
0570
0571
0572 RL=1D0
0573 DO 520 IST=1,6
0574 ISTR(IST)=0
0575 520 CONTINUE
0576
0577 IF (JCP2.EQ.0) THEN
0578 ITJU=MOD(K(IP2,4)/MSTU(5),MSTU(5))
0579
0580 ISTR(5-ITJU)=IP2
0581 ENDIF
0582 DO 530 I=MINT(84)+1,N
0583 IF (K(I,1).LT.10) THEN
0584
0585 IF (MCT(I,1).EQ.JCG1) ISTR(1)=I
0586 IF (MCT(I,2).EQ.JCG1) ISTR(2)=I
0587 IF (MCT(I,1).EQ.JCG2) ISTR(3)=I
0588 IF (MCT(I,2).EQ.JCG2) ISTR(4)=I
0589 ENDIF
0590 530 CONTINUE
0591
0592 DO 540 I=MINT(84)+1,N
0593 ICMO=MOD(K(I,4)/MSTU(5),MSTU(5))
0594 IAMO=MOD(K(I,5)/MSTU(5),MSTU(5))
0595
0596 IF (K(ICMO,1).EQ.42.AND.MCT(I,1).EQ.JCG1.AND.ISTR(2)
0597 & .EQ.0) ISTR(2) = ICMO
0598 IF (K(IAMO,1).EQ.42.AND.MCT(I,2).EQ.JCG1.AND.ISTR(1)
0599 & .EQ.0) ISTR(1) = IAMO
0600 IF (K(ICMO,1).EQ.42.AND.MCT(I,1).EQ.JCG2.AND.ISTR(4)
0601 & .EQ.0) ISTR(4) = ICMO
0602 IF (K(IAMO,1).EQ.42.AND.MCT(I,2).EQ.JCG2.AND.ISTR(3)
0603 & .EQ.0) ISTR(3) = IAMO
0604 540 CONTINUE
0605
0606 ISTR(5)=ISTR(1+2*MANTI)
0607 ISTR(6)=ISTR(4-2*MANTI)
0608 RL=MAX(1D0,FOUR(ISTR(1),ISTR(2)))*MAX(1D0,FOUR(ISTR(3)
0609 & ,ISTR(4)))/MAX(1D0,FOUR(ISTR(5),ISTR(6)))
0610 RL=LOG(RL)
0611 ENDIF
0612
0613 IF (ABS(1D0-RL/RLOPT).LT.0.05D0) THEN
0614 NOPT=NOPT+1
0615 ELSEIF (RL.GT.RLOPT) THEN
0616 GOTO 470
0617 ELSE
0618 NOPT=1
0619 RLOPT=RL
0620 ENDIF
0621
0622
0623
0624 IF (NOPT.GT.1000) GOTO 470
0625 INSR(NOPT,1+2*MANTI)=IP2
0626 INSR(NOPT,2)=IGL
0627 INSR(NOPT,3-2*MANTI)=IP1
0628 IF (MSTP(89).GT.0.OR.NOPT.EQ.0) GOTO 470
0629 ENDIF
0630 IF (MSTP(89).GT.0.OR.NOPT.EQ.0) GOTO 460
0631 ENDIF
0632
0633 DO 550 I=MINT(84)+1,N
0634 K(I,4)=MOD(K(I,4),MSTU(5)**2)
0635 K(I,5)=MOD(K(I,5),MSTU(5)**2)
0636 550 CONTINUE
0637 IF (MSTP(89).GT.0.OR.NOPT.EQ.0) GOTO 450
0638 ENDIF
0639
0640
0641
0642
0643 IF (NOPT.EQ.0) THEN
0644
0645
0646 PARP80=1D0
0647 IF (MRETRY.LE.10.AND.(ITJUNC(1).NE.0.OR.JST(1,3).EQ.0).AND
0648 & .(ITJUNC(2).NE.0.OR.JST(2,3).EQ.0)) THEN
0649 MRETRY=MRETRY+1
0650 DO 590 JS=1,2
0651 IF (ITJUNC(JS).NE.0) THEN
0652 JST(JS,1)=IV(JS,1)
0653 JST(JS,2)=IV(JS,2)
0654 JST(JS,3)=IV(JS,3)
0655
0656 DO 560 I=MINT(53)+1,N
0657 IF (K(I,2).EQ.88.AND.K(I,3).EQ.JS) IJU=I
0658 560 CONTINUE
0659 MANTI=ITJUNC(JS)-1
0660
0661 DO 570 JV=1,3
0662 K(IV(JS,JV),4+MANTI)=MOD(K(IV(JS,JV),4+MANTI),MSTU(5))
0663 & +MSTU(5)*IJU
0664 570 CONTINUE
0665 ELSE
0666
0667 IQ=JST(JS,1)
0668 IQBAR=JST(JS,2)
0669 K(IQ,4)=MOD(K(IQ,4),MSTU(5))+MSTU(5)*IQBAR
0670 K(IQBAR,5)=MOD(K(IQBAR,5),MSTU(5))+MSTU(5)*IQ
0671 ENDIF
0672
0673 NG(JS)=0
0674 DO 580 IM=1,NMI(JS)
0675 I=IMI(JS,IM,1)
0676 IF (K(I,2).EQ.21) THEN
0677 K(I,4)=MOD(K(I,4),MSTU(5))
0678 K(I,5)=MOD(K(I,5),MSTU(5))
0679 NG(JS)=NG(JS)+1
0680 ENDIF
0681 580 CONTINUE
0682 590 CONTINUE
0683
0684 DO 600 I=MINT(84)+1,N
0685 MCT(I,1)=MCO(I,1)
0686 MCT(I,2)=MCO(I,2)
0687 600 CONTINUE
0688 GOTO 400
0689 ELSE
0690 IF(NERRPR.LT.5) THEN
0691 NERRPR=NERRPR+1
0692 CALL PYLIST(4)
0693 CALL PYERRM(19,'(PYMIHK:) No physical colour flow found!')
0694 WRITE(MSTU(11),*) 'NG:', NG,' MOUT:', MOUT(JS)
0695 ENDIF
0696
0697 MINT(51)=1
0698 RETURN
0699 ENDIF
0700 ELSE
0701
0702 IIN=PYR(0)*NOPT+1
0703 610 IIN=MOD(IIN,NOPT)+1
0704 IF (INSR(IIN,1).GT.MINT(53).AND.INSR(IIN,3).GT.MINT(53)
0705 & .AND.MOUT(JS).NE.0.AND.PYR(0).GT.PARP80) GOTO 610
0706 ENDIF
0707
0708
0709
0710
0711
0712 ICM=INSR(IIN,1)
0713 IACM=INSR(IIN,3)
0714 IGL=INSR(IIN,2)
0715
0716
0717
0718
0719 JCG=MCO(IGL,1)
0720 JCM=MCO(ICM,2)
0721 JACG=MCO(IGL,2)
0722 JACM=MCO(IACM,1)
0723
0724 CALL PYMIHG(JACM,JACG,JCM,JCG)
0725 IF (MACCPT.EQ.0) THEN
0726 IF(NERRPR.LT.5) THEN
0727 NERRPR=NERRPR+1
0728 CALL PYLIST(4)
0729 CALL PYERRM(11,'(PYMIHK:) Unphysical colour flow!')
0730 WRITE(MSTU(11),*) 'attaching', IGL,' between', ICM, IACM
0731 ENDIF
0732
0733 MINT(51)=1
0734 RETURN
0735 ELSE
0736
0737 NCC=NCC+1
0738 DO 620 ICC=1,NCC
0739 JCCO(ICC,1)=JCCN(ICC,1)
0740 JCCO(ICC,2)=JCCN(ICC,2)
0741 620 CONTINUE
0742 ENDIF
0743
0744
0745 MOUT(JS)=1
0746
0747 K(IGL,4)=MOD(K(IGL,4),MSTU(5))+MSTU(5)*ICM
0748
0749 IF (K(ICM,2).NE.88) THEN
0750 K(ICM,5)=MOD(K(ICM,5),MSTU(5))+MSTU(5)*IGL
0751 ELSE
0752
0753 DO 630 MSJ=1,3
0754 IF (JST(JS,MSJ).EQ.IACM) JST(JS,MSJ)=IGL
0755 630 CONTINUE
0756 ENDIF
0757
0758 K(IGL,5)=MOD(K(IGL,5),MSTU(5))+MSTU(5)*IACM
0759
0760 IF (K(IACM,2).NE.88) THEN
0761 K(IACM,4)=MOD(K(IACM,4),MSTU(5))+MSTU(5)*IGL
0762 ELSE
0763
0764 DO 640 MSJ=1,3
0765 IF (JST(JS,MSJ).EQ.ICM) JST(JS,MSJ)=IGL
0766 640 CONTINUE
0767 ENDIF
0768
0769 NG(JS)=NG(JS)-1
0770 ENDIF
0771 IF (NG(1).GT.0.OR.NG(2).GT.0) GOTO 440
0772
0773 DO 840 JS=1,2
0774
0775 DO 670 IGL=MINT(53)+1,N
0776 IF (K(IGL,2).EQ.21.AND.K(IGL,3).EQ.MINT(83)+JS.AND.
0777 & K(IGL,1).EQ.14) THEN
0778 ICM=K(IGL,4)/MSTU(5)
0779 IAM=K(IGL,5)/MSTU(5)
0780 ICD=MOD(K(IGL,4),MSTU(5))
0781 IAD=MOD(K(IGL,5),MSTU(5))
0782
0783 K(IAD,5)=MOD(K(IAD,5),MSTU(5))+MSTU(5)*IAM
0784 K(ICD,4)=MOD(K(ICD,4),MSTU(5))+MSTU(5)*ICM
0785
0786 IF (K(ICM,2).NE.88) THEN
0787 K(ICM,5)=MOD(K(ICM,5),MSTU(5))+MSTU(5)*ICD
0788 ELSE
0789
0790 DO 650 MSJ=1,3
0791 IF (JST(JS,MSJ).EQ.IGL) JST(JS,MSJ)=ICD
0792 650 CONTINUE
0793 ENDIF
0794 IF (K(IAM,2).NE.88) THEN
0795 K(IAM,4)=MOD(K(IAM,4),MSTU(5))+MSTU(5)*IAD
0796 ELSE
0797 DO 660 MSJ=1,3
0798 IF (JST(JS,MSJ).EQ.IGL) JST(JS,MSJ)=IAD
0799 660 CONTINUE
0800 ENDIF
0801 ENDIF
0802 670 CONTINUE
0803
0804
0805 IM=NMI(JS)+1
0806 680 IM=IM-1
0807 IF (IM.GT.MINT(31).AND.K(IMI(JS,IM,1),2).NE.21) GOTO 680
0808 IF (IM.GT.MINT(31)) THEN
0809 NMI(JS)=NMI(JS)-1
0810 DO 690 IMR=IM,NMI(JS)
0811 IMI(JS,IMR,1)=IMI(JS,IMR+1,1)
0812 IMI(JS,IMR,2)=IMI(JS,IMR+1,2)
0813 690 CONTINUE
0814 GOTO 680
0815 ENDIF
0816
0817
0818 IF (ITJUNC(JS).NE.0) THEN
0819 DO 700 I=MINT(53)+1,N
0820 IF (K(I,2).EQ.88.AND.K(I,3).EQ.MINT(83)+JS) IJU=I
0821 700 CONTINUE
0822
0823 NBRJQ =0
0824 NBRVQ =0
0825 DO 720 MSJ=1,3
0826 IDQ(MSJ)=0
0827
0828 IF (JST(JS,MSJ).GT.MINT(53).AND.IABS(K(JST(JS,MSJ),2)).LE.5)
0829 & THEN
0830 NBRJQ=NBRJQ+1
0831
0832 IDQ(NBRJQ)=-JST(JS,MSJ)
0833 DO 710 JV=1,3
0834 IF (IV(JS,JV).EQ.JST(JS,MSJ)) THEN
0835 IDQ(NBRJQ)=JST(JS,MSJ)
0836 NBRVQ=NBRVQ+1
0837 ENDIF
0838 710 CONTINUE
0839 ENDIF
0840 I12=MOD(MSJ+1,2)
0841 I45=5
0842 IF (MSJ.EQ.3) I45=4
0843 K(IJU,I45)=K(IJU,I45)+(MSTU(5)**I12)*JST(JS,MSJ)
0844 720 CONTINUE
0845
0846
0847 IF ((MSTP(88).GE.0.AND.NBRVQ.GE.2).OR.(NBRJQ.GE.2.AND.MSTP(88)
0848 & .GE.1)) THEN
0849
0850
0851 IF (NBRVQ.LE.1) THEN
0852 NDIQ=NBRVQ
0853 730 JFLIP=NBRJQ*PYR(0)+1
0854 IF (IDQ(JFLIP).LT.0) THEN
0855 IDQ(JFLIP)=-IDQ(JFLIP)
0856 NDIQ=NDIQ+1
0857 ENDIF
0858 IF (NDIQ.LE.1) GOTO 730
0859 ENDIF
0860
0861 DO 740 JDQ=1,3
0862 IF (IDQ(JDQ).LE.0) THEN
0863 ITEMP1 = IDQ(JDQ)
0864 IDQ(JDQ)= IDQ(3)
0865 IDQ(3) = -ITEMP1
0866 IF (IABS(K(IDQ(1),2)).LT.IABS(K(IDQ(2),2))) THEN
0867 ITEMP1 = IDQ(1)
0868 IDQ(1) = IDQ(2)
0869 IDQ(2) = ITEMP1
0870 ENDIF
0871 ENDIF
0872 740 CONTINUE
0873
0874 IF (NBRVQ.EQ.2) THEN
0875
0876
0877
0878
0879 JKO=6
0880 DO 760 JDQ=1,2
0881 DO 750 JV=1,3
0882 IF (IDQ(JDQ).EQ.IV(JS,JV)) JKO=JKO-JV
0883 750 CONTINUE
0884 760 CONTINUE
0885 IKO=IV(JS,JKO)
0886 CALL PYSPLI(MINT(10+JS),K(IKO,2),KFDUM,KFDQ)
0887 ELSE
0888
0889
0890
0891
0892 KFDQ=1000*K(IDQ(1),2)+100*K(IDQ(2),2)
0893 IS=3
0894 IF (K(IDQ(1),2).NE.K(IDQ(2),2).AND.
0895 & (1D0+3D0*PARJ(4))*PYR(0).LT.1D0) IS=1
0896 KFDQ=KFDQ+ISIGN(IS,KFDQ)
0897 ENDIF
0898
0899
0900
0901
0902 770 IF (IDQ(3).NE.0.AND.MSTP(88).GE.2) THEN
0903 NTRY=0
0904 780 NTRY=NTRY+1
0905 CALL PYKFDI(KFDQ,K(IABS(IDQ(3)),2),KFDUM,KFBAR)
0906 IF (KFBAR.EQ.0.AND.NTRY.LE.100) THEN
0907 GOTO 780
0908 ELSEIF(NTRY.GT.100) THEN
0909
0910 IDQ(3)=0
0911 GOTO 770
0912 ELSE
0913
0914 K(IJU,1)=1
0915 K(IJU,2)=KFBAR
0916 K(IJU,3)=MINT(83)+JS
0917 K(IJU,4)=0
0918 K(IJU,5)=0
0919 P(IJU,5)=PYMASS(KFBAR)
0920 DO 790 MSJ=1,3
0921
0922 K(JST(JS,MSJ),1)=-1
0923 790 CONTINUE
0924 ENDIF
0925 ELSE
0926
0927
0928
0929 MANTI=ITJUNC(JS)-1
0930 K(IJU,1)=3
0931 K(IJU,2)=KFDQ
0932 K(IJU,3)=MINT(83)+JS
0933 K(IJU,4)=0
0934 K(IJU,5)=0
0935 DO 800 MSJ=1,3
0936 IP=JST(JS,MSJ)
0937 IF (IP.NE.IDQ(1).AND.IP.NE.IDQ(2)) THEN
0938 K(IJU,4+MANTI)=0
0939 K(IJU,5-MANTI)=IP*MSTU(5)
0940 K(IP,4+MANTI)=MOD(K(IP,4+MANTI),MSTU(5))+
0941 & MSTU(5)*IJU
0942 MCT(IJU,2-MANTI)=MCT(IP,1+MANTI)
0943 ELSE
0944
0945 K(IP,1)=-1
0946 ENDIF
0947 800 CONTINUE
0948 ENDIF
0949
0950
0951
0952 DO 820 I=MINT(84)+1,N
0953 IF ((K(I,3).EQ.MINT(83)+JS.OR.K(I,3).EQ.MINT(83)+2+JS).AND
0954 & .K(I,1).GT.0) THEN
0955 DO 810 ISID=4,5
0956 IMO=K(I,ISID)/MSTU(5)
0957 IDA=MOD(K(I,ISID),MSTU(5))
0958 IF (IMO.GT.0) THEN
0959 IF (K(IMO,1).EQ.-1) IMO=IJU
0960 ENDIF
0961 IF (IDA.GT.0) THEN
0962 IF (K(IDA,1).EQ.-1) IDA=IJU
0963 ENDIF
0964 K(I,ISID)=IDA+MSTU(5)*IMO
0965 810 CONTINUE
0966 ENDIF
0967 820 CONTINUE
0968 ENDIF
0969 ENDIF
0970
0971
0972
0973
0974 IF (NBRTOT(JS).EQ.0) THEN
0975 N=N+1
0976 DO 830 IX=1,5
0977 K(N,IX)=0
0978 P(N,IX)=0D0
0979 V(N,IX)=0D0
0980 830 CONTINUE
0981 IGL=N
0982 K(IGL,1)=3
0983 K(IGL,2)=21
0984 K(IGL,3)=MINT(83)+JS
0985 IF (ITJUNC(JS).NE.0) THEN
0986
0987 JLEG=PYR(0)*NVSUM(JS)+1
0988 I1=JST(JS,JLEG)
0989 JST(JS,JLEG)=IGL
0990 JCT=MCT(I1,ITJUNC(JS))
0991 MCT(IGL,3-ITJUNC(JS))=JCT
0992 NCT=NCT+1
0993 MCT(IGL,ITJUNC(JS))=NCT
0994 MANTI=ITJUNC(JS)-1
0995 ELSE
0996
0997 CALL PYERRM(19,'(PYMIHK:) Empty meson beam remnant')
0998 IF(NERRPR.LT.5) THEN
0999 WRITE(MSTU(11),*) 'This should not have been possible!'
1000 CALL PYLIST(4)
1001 NERRPR=NERRPR+1
1002 ENDIF
1003 MINT(51)=1
1004 RETURN
1005 ENDIF
1006 I2=MOD(K(I1,4+MANTI)/MSTU(5),MSTU(5))
1007 K(I1,4+MANTI)=MOD(K(I1,4+MANTI),MSTU(5))+MSTU(5)*IGL
1008 K(IGL,5-MANTI)=MOD(K(IGL,5-MANTI),MSTU(5))+MSTU(5)*I1
1009 K(IGL,4+MANTI)=MOD(K(IGL,4+MANTI),MSTU(5))+MSTU(5)*I2
1010 IF (K(I2,2).NE.88) THEN
1011 K(I2,5-MANTI)=MOD(K(I2,5-MANTI),MSTU(5))+MSTU(5)*IGL
1012 ELSE
1013 IF (MOD(K(I2,4),MSTU(5)).EQ.I1) THEN
1014 K(I2,4)=(K(I2,4)/MSTU(5))*MSTU(5)+IGL
1015 ELSEIF(MOD(K(I2,5)/MSTU(5),MSTU(5)).EQ.I1) THEN
1016 K(I2,5)=MOD(K(I2,5),MSTU(5))+MSTU(5)*IGL
1017 ELSE
1018 K(I2,5)=(K(I2,5)/MSTU(5))*MSTU(5)+IGL
1019 ENDIF
1020 ENDIF
1021 ENDIF
1022 840 CONTINUE
1023
1024
1025 CALL PYEDIT(11)
1026
1027
1028 NMI(1)=MINT(31)
1029 NMI(2)=MINT(31)
1030 DO 850 I=MINT(53)+1,N
1031 IF (K(I,1).LE.0) GOTO 850
1032
1033 IF ((K(I,2).NE.21.OR.K(I,1).NE.14).AND.K(I,2).NE.88) THEN
1034 JS=K(I,3)-MINT(83)
1035 NMI(JS)=NMI(JS)+1
1036 IMI(JS,NMI(JS),1)=I
1037 IMI(JS,NMI(JS),2)=0
1038 ENDIF
1039 850 CONTINUE
1040
1041
1042 DO 870 I=MINT(53)+1,N
1043 IF (K(I,2).EQ.21.AND.K(I,1).EQ.14) THEN
1044 JS=K(I,3)-MINT(83)
1045 JCD=MOD(K(I,4),MSTU(5))
1046 JAD=MOD(K(I,5),MSTU(5))
1047 DO 860 IM=1,NMI(JS)
1048 IF (IMI(JS,IM,1).EQ.JCD) IMC=IM
1049 IF (IMI(JS,IM,1).EQ.JAD) IMA=IM
1050 860 CONTINUE
1051 IMI(JS,IMC,2)=IMI(JS,IMA,1)
1052 IMI(JS,IMA,2)=IMI(JS,IMC,1)
1053 ENDIF
1054 870 CONTINUE
1055
1056
1057 JCT=0
1058 JCD=0
1059 880 JCT=JCT+1
1060 MFOUND=0
1061 I=MINT(84)
1062 890 I=I+1
1063 IF (I.EQ.N+1) THEN
1064 IF (MFOUND.EQ.0) JCD=JCD+1
1065 ELSEIF (MCT(I,1).EQ.JCT.AND.K(I,1).GE.1) THEN
1066 MCT(I,1)=JCT-JCD
1067 MFOUND=1
1068 ELSEIF (MCT(I,2).EQ.JCT.AND.K(I,1).GE.1) THEN
1069 MCT(I,2)=JCT-JCD
1070 MFOUND=1
1071 ENDIF
1072 IF (I.LE.N) GOTO 890
1073 IF (JCT.LT.NCT) GOTO 880
1074 NCT=JCT-JCD
1075
1076
1077 IF (IBOOST.EQ.1) THEN
1078 DO 900 IM=1,MINT(31)
1079 BETA=-(XMI(1,IM)-XMI(2,IM))/(XMI(1,IM)+XMI(2,IM))
1080 CALL PYROBO(IMISEP(IM-1)+1,IMISEP(IM),0D0,0D0,0D0,0D0,BETA)
1081 900 CONTINUE
1082
1083 DO 910 I=MINT(53)+1,N
1084 P(I,3)=0D0
1085 P(I,4)=0D0
1086 910 CONTINUE
1087 ELSE
1088 CALL PYERRM(9
1089 & ,'(PYMIHK:) Inconsistent kinematics. Too many boosts.')
1090
1091 MINT(51)=1
1092 RETURN
1093 ENDIF
1094
1095 9999 RETURN
1096 END