File indexing completed on 2025-08-05 08:15:43
0001
0002
0003
0004 SUBROUTINE LUINDF(IP)
0005
0006
0007
0008 IMPLICIT DOUBLE PRECISION(D)
0009 COMMON/LUJETS/N,K(9000,5),P(9000,5),V(9000,5)
0010 SAVE /LUJETS/
0011 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0012 SAVE /LUDAT1/
0013 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
0014 SAVE /LUDAT2/
0015 DIMENSION DPS(5),PSI(4),NFI(3),NFL(3),IFET(3),KFLF(3),
0016 &KFLO(2),PXO(2),PYO(2),WO(2)
0017
0018
0019 NSAV=N
0020 NJET=0
0021 KQSUM=0
0022 DO 100 J=1,5
0023 100 DPS(J)=0.
0024 I=IP-1
0025 110 I=I+1
0026 IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
0027 CALL LUERRM(12,'(LUINDF:) failed to reconstruct jet system')
0028 IF(MSTU(21).GE.1) RETURN
0029 ENDIF
0030 IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 110
0031 KC=LUCOMP(K(I,2))
0032 IF(KC.EQ.0) GOTO 110
0033 KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
0034 IF(KQ.EQ.0) GOTO 110
0035 NJET=NJET+1
0036 IF(KQ.NE.2) KQSUM=KQSUM+KQ
0037 DO 120 J=1,5
0038 K(NSAV+NJET,J)=K(I,J)
0039 P(NSAV+NJET,J)=P(I,J)
0040 120 DPS(J)=DPS(J)+P(I,J)
0041 K(NSAV+NJET,3)=I
0042 IF(K(I,1).EQ.2.OR.(MSTJ(3).LE.5.AND.N.GT.I.AND.
0043 &K(I+1,1).EQ.2)) GOTO 110
0044 IF(NJET.NE.1.AND.KQSUM.NE.0) THEN
0045 CALL LUERRM(12,'(LUINDF:) unphysical flavour combination')
0046 IF(MSTU(21).GE.1) RETURN
0047 ENDIF
0048
0049
0050 IF(NJET.NE.1) CALL LUDBRB(NSAV+1,NSAV+NJET,0.,0.,-DPS(1)/DPS(4),
0051 &-DPS(2)/DPS(4),-DPS(3)/DPS(4))
0052 PECM=0.
0053 DO 130 J=1,3
0054 130 NFI(J)=0
0055 DO 140 I=NSAV+1,NSAV+NJET
0056 PECM=PECM+P(I,4)
0057 KFA=IABS(K(I,2))
0058 IF(KFA.LE.3) THEN
0059 NFI(KFA)=NFI(KFA)+ISIGN(1,K(I,2))
0060 ELSEIF(KFA.GT.1000) THEN
0061 KFLA=MOD(KFA/1000,10)
0062 KFLB=MOD(KFA/100,10)
0063 IF(KFLA.LE.3) NFI(KFLA)=NFI(KFLA)+ISIGN(1,K(I,2))
0064 IF(KFLB.LE.3) NFI(KFLB)=NFI(KFLB)+ISIGN(1,K(I,2))
0065 ENDIF
0066 140 CONTINUE
0067
0068
0069 NTRY=0
0070 150 NTRY=NTRY+1
0071 N=NSAV+NJET
0072 IF(NTRY.GT.200) THEN
0073 CALL LUERRM(14,'(LUINDF:) caught in infinite loop')
0074 IF(MSTU(21).GE.1) RETURN
0075 ENDIF
0076 DO 160 J=1,3
0077 NFL(J)=NFI(J)
0078 IFET(J)=0
0079 160 KFLF(J)=0
0080
0081
0082 DO 230 IP1=NSAV+1,NSAV+NJET
0083 MSTJ(91)=0
0084 NSAV1=N
0085
0086
0087 KFLH=IABS(K(IP1,2))
0088 IF(KFLH.GT.10) KFLH=MOD(KFLH/1000,10)
0089 KFLO(2)=0
0090 WF=P(IP1,4)+SQRT(P(IP1,1)**2+P(IP1,2)**2+P(IP1,3)**2)
0091
0092
0093 170 IF(IABS(K(IP1,2)).NE.21) THEN
0094 NSTR=1
0095 KFLO(1)=K(IP1,2)
0096 CALL LUPTDI(0,PXO(1),PYO(1))
0097 WO(1)=WF
0098
0099
0100 ELSEIF(MSTJ(2).LE.2) THEN
0101 NSTR=1
0102 IF(MSTJ(2).EQ.2) MSTJ(91)=1
0103 KFLO(1)=INT(1.+(2.+PARJ(2))*RLU(0))*(-1)**INT(RLU(0)+0.5)
0104 CALL LUPTDI(0,PXO(1),PYO(1))
0105 WO(1)=WF
0106
0107
0108
0109 ELSE
0110 NSTR=2
0111 IF(MSTJ(2).EQ.4) MSTJ(91)=1
0112 KFLO(1)=INT(1.+(2.+PARJ(2))*RLU(0))*(-1)**INT(RLU(0)+0.5)
0113 KFLO(2)=-KFLO(1)
0114 CALL LUPTDI(0,PXO(1),PYO(1))
0115 PXO(2)=-PXO(1)
0116 PYO(2)=-PYO(1)
0117 WO(1)=WF*RLU(0)**(1./3.)
0118 WO(2)=WF-WO(1)
0119 ENDIF
0120
0121
0122 DO 220 ISTR=1,NSTR
0123 180 I=N
0124 IRANK=0
0125 KFL1=KFLO(ISTR)
0126 PX1=PXO(ISTR)
0127 PY1=PYO(ISTR)
0128 W=WO(ISTR)
0129
0130
0131 190 I=I+1
0132 IF(I.GE.MSTU(4)-MSTU(32)-NJET-5) THEN
0133 CALL LUERRM(11,'(LUINDF:) no more memory left in LUJETS')
0134 IF(MSTU(21).GE.1) RETURN
0135 ENDIF
0136 IRANK=IRANK+1
0137 K(I,1)=1
0138 K(I,3)=IP1
0139 K(I,4)=0
0140 K(I,5)=0
0141 200 CALL LUKFDI(KFL1,0,KFL2,K(I,2))
0142 IF(K(I,2).EQ.0) GOTO 180
0143 IF(MSTJ(12).GE.3.AND.IRANK.EQ.1.AND.IABS(KFL1).LE.10.AND.
0144 &IABS(KFL2).GT.10) THEN
0145 IF(RLU(0).GT.PARJ(19)) GOTO 200
0146 ENDIF
0147
0148
0149 P(I,5)=ULMASS(K(I,2))
0150 CALL LUPTDI(KFL1,PX2,PY2)
0151 P(I,1)=PX1+PX2
0152 P(I,2)=PY1+PY2
0153 PR=P(I,5)**2+P(I,1)**2+P(I,2)**2
0154 CALL LUZDIS(KFL1,KFL2,PR,Z)
0155 P(I,3)=0.5*(Z*W-PR/(Z*W))
0156 P(I,4)=0.5*(Z*W+PR/(Z*W))
0157 IF(MSTJ(3).GE.1.AND.IRANK.EQ.1.AND.KFLH.GE.4.AND.
0158 &P(I,3).LE.0.001) THEN
0159 IF(W.GE.P(I,5)+0.5*PARJ(32)) GOTO 180
0160 P(I,3)=0.0001
0161 P(I,4)=SQRT(PR)
0162 Z=P(I,4)/W
0163 ENDIF
0164
0165
0166 KFL1=-KFL2
0167 PX1=-PX2
0168 PY1=-PY2
0169 W=(1.-Z)*W
0170 DO 210 J=1,5
0171 210 V(I,J)=0.
0172
0173
0174 IF(MSTJ(3).GE.0.AND.P(I,3).LT.0.) I=I-1
0175 IF(W.GT.PARJ(31)) GOTO 190
0176 220 N=I
0177 IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) WF=WF+0.1*PARJ(32)
0178 IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) GOTO 170
0179
0180
0181 THE=ULANGL(P(IP1,3),SQRT(P(IP1,1)**2+P(IP1,2)**2))
0182 PHI=ULANGL(P(IP1,1),P(IP1,2))
0183 CALL LUDBRB(NSAV1+1,N,THE,PHI,0D0,0D0,0D0)
0184 K(K(IP1,3),4)=NSAV1+1
0185 K(K(IP1,3),5)=N
0186
0187
0188 230 CONTINUE
0189 IF(NJET.EQ.1.OR.MSTJ(3).LE.0) GOTO 470
0190 IF(MOD(MSTJ(3),5).NE.0.AND.N-NSAV-NJET.LT.2) GOTO 150
0191
0192
0193 DO 240 I=NSAV+NJET+1,N
0194 KFA=IABS(K(I,2))
0195 KFLA=MOD(KFA/1000,10)
0196 KFLB=MOD(KFA/100,10)
0197 KFLC=MOD(KFA/10,10)
0198 IF(KFLA.EQ.0) THEN
0199 IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))*(-1)**KFLB
0200 IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(I,2))*(-1)**KFLB
0201 ELSE
0202 IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)-ISIGN(1,K(I,2))
0203 IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))
0204 IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISIGN(1,K(I,2))
0205 ENDIF
0206 240 CONTINUE
0207 NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
0208 &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
0209 IF(NREQ.EQ.0) GOTO 320
0210
0211
0212 NREM=0
0213 250 IREM=0
0214 P2MIN=PECM**2
0215 DO 260 I=NSAV+NJET+1,N
0216 P2=P(I,1)**2+P(I,2)**2+P(I,3)**2
0217 IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) IREM=I
0218 260 IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) P2MIN=P2
0219 IF(IREM.EQ.0) GOTO 150
0220 K(IREM,1)=7
0221 KFA=IABS(K(IREM,2))
0222 KFLA=MOD(KFA/1000,10)
0223 KFLB=MOD(KFA/100,10)
0224 KFLC=MOD(KFA/10,10)
0225 IF(KFLA.GE.4.OR.KFLB.GE.4) K(IREM,1)=8
0226 IF(K(IREM,1).EQ.8) GOTO 250
0227 IF(KFLA.EQ.0) THEN
0228 ISGN=ISIGN(1,K(IREM,2))*(-1)**KFLB
0229 IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISGN
0230 IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISGN
0231 ELSE
0232 IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)+ISIGN(1,K(IREM,2))
0233 IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISIGN(1,K(IREM,2))
0234 IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(IREM,2))
0235 ENDIF
0236 NREM=NREM+1
0237 NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
0238 &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
0239 IF(NREQ.GT.NREM) GOTO 250
0240 DO 270 I=NSAV+NJET+1,N
0241 270 IF(K(I,1).EQ.8) K(I,1)=1
0242
0243
0244 280 NFET=2
0245 IF(NFL(1)+NFL(2)+NFL(3).NE.0) NFET=3
0246 IF(NREQ.LT.NREM) NFET=1
0247 IF(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)).EQ.0) NFET=0
0248 DO 290 J=1,NFET
0249 IFET(J)=1+(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)))*RLU(0)
0250 KFLF(J)=ISIGN(1,NFL(1))
0251 IF(IFET(J).GT.IABS(NFL(1))) KFLF(J)=ISIGN(2,NFL(2))
0252 290 IF(IFET(J).GT.IABS(NFL(1))+IABS(NFL(2))) KFLF(J)=ISIGN(3,NFL(3))
0253 IF(NFET.EQ.2.AND.(IFET(1).EQ.IFET(2).OR.KFLF(1)*KFLF(2).GT.0))
0254 &GOTO 280
0255 IF(NFET.EQ.3.AND.(IFET(1).EQ.IFET(2).OR.IFET(1).EQ.IFET(3).OR.
0256 &IFET(2).EQ.IFET(3).OR.KFLF(1)*KFLF(2).LT.0.OR.KFLF(1)*KFLF(3).
0257 <.0.OR.KFLF(1)*(NFL(1)+NFL(2)+NFL(3)).LT.0)) GOTO 280
0258 IF(NFET.EQ.0) KFLF(1)=1+INT((2.+PARJ(2))*RLU(0))
0259 IF(NFET.EQ.0) KFLF(2)=-KFLF(1)
0260 IF(NFET.EQ.1) KFLF(2)=ISIGN(1+INT((2.+PARJ(2))*RLU(0)),-KFLF(1))
0261 IF(NFET.LE.2) KFLF(3)=0
0262 IF(KFLF(3).NE.0) THEN
0263 KFLFC=ISIGN(1000*MAX(IABS(KFLF(1)),IABS(KFLF(3)))+
0264 & 100*MIN(IABS(KFLF(1)),IABS(KFLF(3)))+1,KFLF(1))
0265 IF(KFLF(1).EQ.KFLF(3).OR.(1.+3.*PARJ(4))*RLU(0).GT.1.)
0266 & KFLFC=KFLFC+ISIGN(2,KFLFC)
0267 ELSE
0268 KFLFC=KFLF(1)
0269 ENDIF
0270 CALL LUKFDI(KFLFC,KFLF(2),KFLDMP,KF)
0271 IF(KF.EQ.0) GOTO 280
0272 DO 300 J=1,MAX(2,NFET)
0273 300 NFL(IABS(KFLF(J)))=NFL(IABS(KFLF(J)))-ISIGN(1,KFLF(J))
0274
0275
0276 NPOS=MIN(1+INT(RLU(0)*NREM),NREM)
0277 DO 310 I=NSAV+NJET+1,N
0278 IF(K(I,1).EQ.7) NPOS=NPOS-1
0279 IF(K(I,1).EQ.1.OR.NPOS.NE.0) GOTO 310
0280 K(I,1)=1
0281 K(I,2)=KF
0282 P(I,5)=ULMASS(K(I,2))
0283 P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
0284 310 CONTINUE
0285 NREM=NREM-1
0286 NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
0287 &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
0288 IF(NREM.GT.0) GOTO 280
0289
0290
0291 320 IF(MOD(MSTJ(3),5).NE.0.AND.MOD(MSTJ(3),5).NE.4) THEN
0292 DO 330 J=1,3
0293 PSI(J)=0.
0294 DO 330 I=NSAV+NJET+1,N
0295 330 PSI(J)=PSI(J)+P(I,J)
0296 PSI(4)=PSI(1)**2+PSI(2)**2+PSI(3)**2
0297 PWS=0.
0298 DO 340 I=NSAV+NJET+1,N
0299 IF(MOD(MSTJ(3),5).EQ.1) PWS=PWS+P(I,4)
0300 IF(MOD(MSTJ(3),5).EQ.2) PWS=PWS+SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
0301 & PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
0302 340 IF(MOD(MSTJ(3),5).EQ.3) PWS=PWS+1.
0303 DO 360 I=NSAV+NJET+1,N
0304 IF(MOD(MSTJ(3),5).EQ.1) PW=P(I,4)
0305 IF(MOD(MSTJ(3),5).EQ.2) PW=SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
0306 & PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
0307 IF(MOD(MSTJ(3),5).EQ.3) PW=1.
0308 DO 350 J=1,3
0309 350 P(I,J)=P(I,J)-PSI(J)*PW/PWS
0310 360 P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
0311
0312
0313 ELSEIF(MOD(MSTJ(3),5).EQ.4) THEN
0314 DO 370 I=N+1,N+NJET
0315 K(I,1)=0
0316 DO 370 J=1,5
0317 370 P(I,J)=0.
0318 DO 390 I=NSAV+NJET+1,N
0319 IR1=K(I,3)
0320 IR2=N+IR1-NSAV
0321 K(IR2,1)=K(IR2,1)+1
0322 PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
0323 & (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
0324 DO 380 J=1,3
0325 380 P(IR2,J)=P(IR2,J)+P(I,J)-PLS*P(IR1,J)
0326 P(IR2,4)=P(IR2,4)+P(I,4)
0327 390 P(IR2,5)=P(IR2,5)+PLS
0328 PSS=0.
0329 DO 400 I=N+1,N+NJET
0330 400 IF(K(I,1).NE.0) PSS=PSS+P(I,4)/(PECM*(0.8*P(I,5)+0.2))
0331 DO 420 I=NSAV+NJET+1,N
0332 IR1=K(I,3)
0333 IR2=N+IR1-NSAV
0334 PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
0335 & (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
0336 DO 410 J=1,3
0337 410 P(I,J)=P(I,J)-P(IR2,J)/K(IR2,1)+(1./(P(IR2,5)*PSS)-1.)*PLS*
0338 & P(IR1,J)
0339 420 P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
0340 ENDIF
0341
0342
0343 IF(MOD(MSTJ(3),5).NE.0) THEN
0344 PMS=0.
0345 PES=0.
0346 PQS=0.
0347 DO 430 I=NSAV+NJET+1,N
0348 PMS=PMS+P(I,5)
0349 PES=PES+P(I,4)
0350 430 PQS=PQS+P(I,5)**2/P(I,4)
0351 IF(PMS.GE.PECM) GOTO 150
0352 NECO=0
0353 440 NECO=NECO+1
0354 PFAC=(PECM-PQS)/(PES-PQS)
0355 PES=0.
0356 PQS=0.
0357 DO 460 I=NSAV+NJET+1,N
0358 DO 450 J=1,3
0359 450 P(I,J)=PFAC*P(I,J)
0360 P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
0361 PES=PES+P(I,4)
0362 460 PQS=PQS+P(I,5)**2/P(I,4)
0363 IF(NECO.LT.10.AND.ABS(PECM-PES).GT.2E-6*PECM) GOTO 440
0364 ENDIF
0365
0366
0367 470 DO 480 I=NSAV+NJET+1,N
0368 IF(MSTU(16).NE.2) K(I,3)=NSAV+1
0369 480 IF(MSTU(16).EQ.2) K(I,3)=K(K(I,3),3)
0370 DO 490 I=NSAV+1,NSAV+NJET
0371 I1=K(I,3)
0372 K(I1,1)=K(I1,1)+10
0373 IF(MSTU(16).NE.2) THEN
0374 K(I1,4)=NSAV+1
0375 K(I1,5)=NSAV+1
0376 ELSE
0377 K(I1,4)=K(I1,4)-NJET+1
0378 K(I1,5)=K(I1,5)-NJET+1
0379 IF(K(I1,5).LT.K(I1,4)) THEN
0380 K(I1,4)=0
0381 K(I1,5)=0
0382 ENDIF
0383 ENDIF
0384 490 CONTINUE
0385
0386
0387 NSAV=NSAV+1
0388 K(NSAV,1)=11
0389 K(NSAV,2)=93
0390 K(NSAV,3)=IP
0391 K(NSAV,4)=NSAV+1
0392 K(NSAV,5)=N-NJET+1
0393 DO 500 J=1,4
0394 P(NSAV,J)=DPS(J)
0395 500 V(NSAV,J)=V(IP,J)
0396 P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
0397 V(NSAV,5)=0.
0398 DO 510 I=NSAV+NJET,N
0399 DO 510 J=1,5
0400 K(I-NJET+1,J)=K(I,J)
0401 P(I-NJET+1,J)=P(I,J)
0402 510 V(I-NJET+1,J)=V(I,J)
0403 N=N-NJET+1
0404
0405
0406 IF(NJET.NE.1) CALL LUDBRB(NSAV+1,N,0.,0.,DPS(1)/DPS(4),
0407 &DPS(2)/DPS(4),DPS(3)/DPS(4))
0408 DO 520 I=NSAV+1,N
0409 DO 520 J=1,4
0410 520 V(I,J)=V(IP,J)
0411
0412 RETURN
0413 END