File indexing completed on 2025-08-05 08:15:43
0001
0002
0003
0004 SUBROUTINE LUKFDI(KFL1,KFL2,KFL3,KF)
0005
0006
0007 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0008 SAVE /LUDAT1/
0009 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
0010 SAVE /LUDAT2/
0011
0012
0013 KF1A=IABS(KFL1)
0014 KF2A=IABS(KFL2)
0015 KFL3=0
0016 KF=0
0017 IF(KF1A.EQ.0) RETURN
0018 IF(KF2A.NE.0) THEN
0019 IF(KF1A.LE.10.AND.KF2A.LE.10.AND.KFL1*KFL2.GT.0) RETURN
0020 IF(KF1A.GT.10.AND.KF2A.GT.10) RETURN
0021 IF((KF1A.GT.10.OR.KF2A.GT.10).AND.KFL1*KFL2.LT.0) RETURN
0022 ENDIF
0023
0024
0025 IF(MSTJ(15).EQ.1) THEN
0026 KTAB1=-1
0027 IF(KF1A.GE.1.AND.KF1A.LE.6) KTAB1=KF1A
0028 KFL1A=MOD(KF1A/1000,10)
0029 KFL1B=MOD(KF1A/100,10)
0030 KFL1S=MOD(KF1A,10)
0031 IF(KFL1A.GE.1.AND.KFL1A.LE.4.AND.KFL1B.GE.1.AND.KFL1B.LE.4)
0032 & KTAB1=6+KFL1A*(KFL1A-2)+2*KFL1B+(KFL1S-1)/2
0033 IF(KFL1A.GE.1.AND.KFL1A.LE.4.AND.KFL1A.EQ.KFL1B) KTAB1=KTAB1-1
0034 IF(KF1A.GE.1.AND.KF1A.LE.6) KFL1A=KF1A
0035 KTAB2=0
0036 IF(KF2A.NE.0) THEN
0037 KTAB2=-1
0038 IF(KF2A.GE.1.AND.KF2A.LE.6) KTAB2=KF2A
0039 KFL2A=MOD(KF2A/1000,10)
0040 KFL2B=MOD(KF2A/100,10)
0041 KFL2S=MOD(KF2A,10)
0042 IF(KFL2A.GE.1.AND.KFL2A.LE.4.AND.KFL2B.GE.1.AND.KFL2B.LE.4)
0043 & KTAB2=6+KFL2A*(KFL2A-2)+2*KFL2B+(KFL2S-1)/2
0044 IF(KFL2A.GE.1.AND.KFL2A.LE.4.AND.KFL2A.EQ.KFL2B) KTAB2=KTAB2-1
0045 ENDIF
0046 IF(KTAB1.GE.0.AND.KTAB2.GE.0) GOTO 140
0047 ENDIF
0048
0049
0050 100 PAR2=PARJ(2)
0051 PAR3=PARJ(3)
0052 PAR4=3.*PARJ(4)
0053 IF(MSTJ(12).GE.2) THEN
0054 PAR3M=SQRT(PARJ(3))
0055 PAR4M=1./(3.*SQRT(PARJ(4)))
0056 PARDM=PARJ(7)/(PARJ(7)+PAR3M*PARJ(6))
0057 PARS0=PARJ(5)*(2.+(1.+PAR2*PAR3M*PARJ(7))*(1.+PAR4M))
0058 PARS1=PARJ(7)*PARS0/(2.*PAR3M)+PARJ(5)*(PARJ(6)*(1.+PAR4M)+
0059 & PAR2*PAR3M*PARJ(6)*PARJ(7))
0060 PARS2=PARJ(5)*2.*PARJ(6)*PARJ(7)*(PAR2*PARJ(7)+(1.+PAR4M)/PAR3M)
0061 PARSM=MAX(PARS0,PARS1,PARS2)
0062 PAR4=PAR4*(1.+PARSM)/(1.+PARSM/(3.*PAR4M))
0063 ENDIF
0064
0065
0066 MBARY=0
0067 KFDA=0
0068 IF(KF1A.LE.10) THEN
0069 IF(KF2A.EQ.0.AND.MSTJ(12).GE.1.AND.(1.+PARJ(1))*RLU(0).GT.1.)
0070 & MBARY=1
0071 IF(KF2A.GT.10) MBARY=2
0072 IF(KF2A.GT.10.AND.KF2A.LE.10000) KFDA=KF2A
0073 ELSE
0074 MBARY=2
0075 IF(KF1A.LE.10000) KFDA=KF1A
0076 ENDIF
0077
0078
0079 IF(KFDA.NE.0.AND.MSTJ(12).GE.2) THEN
0080 KFLDA=MOD(KFDA/1000,10)
0081 KFLDB=MOD(KFDA/100,10)
0082 KFLDS=MOD(KFDA,10)
0083 WTDQ=PARS0
0084 IF(MAX(KFLDA,KFLDB).EQ.3) WTDQ=PARS1
0085 IF(MIN(KFLDA,KFLDB).EQ.3) WTDQ=PARS2
0086 IF(KFLDS.EQ.1) WTDQ=WTDQ/(3.*PAR4M)
0087 IF((1.+WTDQ)*RLU(0).GT.1.) MBARY=-1
0088 IF(MBARY.EQ.-1.AND.KF2A.NE.0) RETURN
0089 ENDIF
0090
0091
0092 IF(MBARY.LE.0) THEN
0093 KFS=ISIGN(1,KFL1)
0094 IF(MBARY.EQ.0) THEN
0095 IF(KF2A.EQ.0) KFL3=ISIGN(1+INT((2.+PAR2)*RLU(0)),-KFL1)
0096 KFLA=MAX(KF1A,KF2A+IABS(KFL3))
0097 KFLB=MIN(KF1A,KF2A+IABS(KFL3))
0098 IF(KFLA.NE.KF1A) KFS=-KFS
0099
0100
0101 ELSE
0102 KFL1A=MOD(KF1A/1000,10)
0103 KFL1B=MOD(KF1A/100,10)
0104 110 KFL1D=KFL1A+INT(RLU(0)+0.5)*(KFL1B-KFL1A)
0105 KFL1E=KFL1A+KFL1B-KFL1D
0106 IF((KFL1D.EQ.3.AND.RLU(0).GT.PARDM).OR.(KFL1E.EQ.3.AND.
0107 & RLU(0).LT.PARDM)) THEN
0108 KFL1D=KFL1A+KFL1B-KFL1D
0109 KFL1E=KFL1A+KFL1B-KFL1E
0110 ENDIF
0111 KFL3A=1+INT((2.+PAR2*PAR3M*PARJ(7))*RLU(0))
0112 IF((KFL1E.NE.KFL3A.AND.RLU(0).GT.(1.+PAR4M)/MAX(2.,1.+PAR4M)).
0113 & OR.(KFL1E.EQ.KFL3A.AND.RLU(0).GT.2./MAX(2.,1.+PAR4M)))
0114 & GOTO 110
0115 KFLDS=3
0116 IF(KFL1E.NE.KFL3A) KFLDS=2*INT(RLU(0)+1./(1.+PAR4M))+1
0117 KFL3=ISIGN(10000+1000*MAX(KFL1E,KFL3A)+100*MIN(KFL1E,KFL3A)+
0118 & KFLDS,-KFL1)
0119 KFLA=MAX(KFL1D,KFL3A)
0120 KFLB=MIN(KFL1D,KFL3A)
0121 IF(KFLA.NE.KFL1D) KFS=-KFS
0122 ENDIF
0123
0124
0125 IF(KFLA.LE.2) KMUL=INT(PARJ(11)+RLU(0))
0126 IF(KFLA.EQ.3) KMUL=INT(PARJ(12)+RLU(0))
0127 IF(KFLA.GE.4) KMUL=INT(PARJ(13)+RLU(0))
0128 IF(KMUL.EQ.0.AND.PARJ(14).GT.0.) THEN
0129 IF(RLU(0).LT.PARJ(14)) KMUL=2
0130 ELSEIF(KMUL.EQ.1.AND.PARJ(15)+PARJ(16)+PARJ(17).GT.0.) THEN
0131 RMUL=RLU(0)
0132 IF(RMUL.LT.PARJ(15)) KMUL=3
0133 IF(KMUL.EQ.1.AND.RMUL.LT.PARJ(15)+PARJ(16)) KMUL=4
0134 IF(KMUL.EQ.1.AND.RMUL.LT.PARJ(15)+PARJ(16)+PARJ(17)) KMUL=5
0135 ENDIF
0136 KFLS=3
0137 IF(KMUL.EQ.0.OR.KMUL.EQ.3) KFLS=1
0138 IF(KMUL.EQ.5) KFLS=5
0139 IF(KFLA.NE.KFLB) THEN
0140 KF=(100*KFLA+10*KFLB+KFLS)*KFS*(-1)**KFLA
0141 ELSE
0142 RMIX=RLU(0)
0143 IMIX=2*KFLA+10*KMUL
0144 IF(KFLA.LE.3) KF=110*(1+INT(RMIX+PARF(IMIX-1))+
0145 & INT(RMIX+PARF(IMIX)))+KFLS
0146 IF(KFLA.GE.4) KF=110*KFLA+KFLS
0147 ENDIF
0148 IF(KMUL.EQ.2.OR.KMUL.EQ.3) KF=KF+ISIGN(10000,KF)
0149 IF(KMUL.EQ.4) KF=KF+ISIGN(20000,KF)
0150
0151
0152 ELSE
0153 120 IF(KF1A.LE.10.AND.KF2A.EQ.0) THEN
0154 KFLA=KF1A
0155 130 KFLB=1+INT((2.+PAR2*PAR3)*RLU(0))
0156 KFLC=1+INT((2.+PAR2*PAR3)*RLU(0))
0157 KFLDS=1
0158 IF(KFLB.GE.KFLC) KFLDS=3
0159 IF(KFLDS.EQ.1.AND.PAR4*RLU(0).GT.1.) GOTO 130
0160 IF(KFLDS.EQ.3.AND.PAR4.LT.RLU(0)) GOTO 130
0161 KFL3=ISIGN(1000*MAX(KFLB,KFLC)+100*MIN(KFLB,KFLC)+KFLDS,KFL1)
0162
0163
0164 ELSEIF(KF1A.LE.10) THEN
0165 KFLA=KF1A
0166 KFLB=MOD(KF2A/1000,10)
0167 KFLC=MOD(KF2A/100,10)
0168 KFLDS=MOD(KF2A,10)
0169
0170
0171 ELSE
0172 IF(KF2A.EQ.0) KFL3=ISIGN(1+INT((2.+PAR2)*RLU(0)),KFL1)
0173 KFLA=KF2A+IABS(KFL3)
0174 KFLB=MOD(KF1A/1000,10)
0175 KFLC=MOD(KF1A/100,10)
0176 KFLDS=MOD(KF1A,10)
0177 ENDIF
0178
0179
0180 KBARY=KFLDS
0181 IF(KFLDS.EQ.3.AND.KFLB.NE.KFLC) KBARY=5
0182 IF(KFLA.NE.KFLB.AND.KFLA.NE.KFLC) KBARY=KBARY+1
0183 WT=PARF(60+KBARY)+PARJ(18)*PARF(70+KBARY)
0184 IF(MBARY.EQ.1.AND.MSTJ(12).GE.2) THEN
0185 WTDQ=PARS0
0186 IF(MAX(KFLB,KFLC).EQ.3) WTDQ=PARS1
0187 IF(MIN(KFLB,KFLC).EQ.3) WTDQ=PARS2
0188 IF(KFLDS.EQ.1) WTDQ=WTDQ/(3.*PAR4M)
0189 IF(KFLDS.EQ.1) WT=WT*(1.+WTDQ)/(1.+PARSM/(3.*PAR4M))
0190 IF(KFLDS.EQ.3) WT=WT*(1.+WTDQ)/(1.+PARSM)
0191 ENDIF
0192 IF(KF2A.EQ.0.AND.WT.LT.RLU(0)) GOTO 120
0193
0194
0195 KFLD=MAX(KFLA,KFLB,KFLC)
0196 KFLF=MIN(KFLA,KFLB,KFLC)
0197 KFLE=KFLA+KFLB+KFLC-KFLD-KFLF
0198 KFLS=2
0199 IF((PARF(60+KBARY)+PARJ(18)*PARF(70+KBARY))*RLU(0).GT.
0200 & PARF(60+KBARY)) KFLS=4
0201 KFLL=0
0202 IF(KFLS.EQ.2.AND.KFLD.GT.KFLE.AND.KFLE.GT.KFLF) THEN
0203 IF(KFLDS.EQ.1.AND.KFLA.EQ.KFLD) KFLL=1
0204 IF(KFLDS.EQ.1.AND.KFLA.NE.KFLD) KFLL=INT(0.25+RLU(0))
0205 IF(KFLDS.EQ.3.AND.KFLA.NE.KFLD) KFLL=INT(0.75+RLU(0))
0206 ENDIF
0207 IF(KFLL.EQ.0) KF=ISIGN(1000*KFLD+100*KFLE+10*KFLF+KFLS,KFL1)
0208 IF(KFLL.EQ.1) KF=ISIGN(1000*KFLD+100*KFLF+10*KFLE+KFLS,KFL1)
0209 ENDIF
0210 RETURN
0211
0212
0213 140 IF(KTAB2.EQ.0.AND.MSTJ(12).LE.0) THEN
0214 KT3L=1
0215 KT3U=6
0216 ELSEIF(KTAB2.EQ.0.AND.KTAB1.GE.7.AND.MSTJ(12).LE.1) THEN
0217 KT3L=1
0218 KT3U=6
0219 ELSEIF(KTAB2.EQ.0) THEN
0220 KT3L=1
0221 KT3U=22
0222 ELSE
0223 KT3L=KTAB2
0224 KT3U=KTAB2
0225 ENDIF
0226 RFL=0.
0227 DO 150 KTS=0,2
0228 DO 150 KT3=KT3L,KT3U
0229 RFL=RFL+PARF(120+80*KTAB1+25*KTS+KT3)
0230 150 CONTINUE
0231 RFL=RLU(0)*RFL
0232 DO 160 KTS=0,2
0233 KTABS=KTS
0234 DO 160 KT3=KT3L,KT3U
0235 KTAB3=KT3
0236 RFL=RFL-PARF(120+80*KTAB1+25*KTS+KT3)
0237 160 IF(RFL.LE.0.) GOTO 170
0238 170 CONTINUE
0239
0240
0241 IF(KTAB3.LE.6) THEN
0242 KFL3A=KTAB3
0243 KFL3B=0
0244 KFL3=ISIGN(KFL3A,KFL1*(2*KTAB1-13))
0245 ELSE
0246 KFL3A=1
0247 IF(KTAB3.GE.8) KFL3A=2
0248 IF(KTAB3.GE.11) KFL3A=3
0249 IF(KTAB3.GE.16) KFL3A=4
0250 KFL3B=(KTAB3-6-KFL3A*(KFL3A-2))/2
0251 KFL3=1000*KFL3A+100*KFL3B+1
0252 IF(KFL3A.EQ.KFL3B.OR.KTAB3.NE.6+KFL3A*(KFL3A-2)+2*KFL3B) KFL3=
0253 & KFL3+2
0254 KFL3=ISIGN(KFL3,KFL1*(13-2*KTAB1))
0255 ENDIF
0256
0257
0258 IF(KFL3A.EQ.KFL1A.AND.KFL3B.EQ.KFL1B.AND.(KFL3A.LE.3.OR.
0259 &KFL3B.NE.0)) THEN
0260 RFL=RLU(0)*(PARF(143+80*KTAB1+25*KTABS)+PARF(144+80*KTAB1+
0261 & 25*KTABS)+PARF(145+80*KTAB1+25*KTABS))
0262 KF=110+2*KTABS+1
0263 IF(RFL.GT.PARF(143+80*KTAB1+25*KTABS)) KF=220+2*KTABS+1
0264 IF(RFL.GT.PARF(143+80*KTAB1+25*KTABS)+PARF(144+80*KTAB1+
0265 & 25*KTABS)) KF=330+2*KTABS+1
0266 ELSEIF(KTAB1.LE.6.AND.KTAB3.LE.6) THEN
0267 KFLA=MAX(KTAB1,KTAB3)
0268 KFLB=MIN(KTAB1,KTAB3)
0269 KFS=ISIGN(1,KFL1)
0270 IF(KFLA.NE.KF1A) KFS=-KFS
0271 KF=(100*KFLA+10*KFLB+2*KTABS+1)*KFS*(-1)**KFLA
0272 ELSEIF(KTAB1.GE.7.AND.KTAB3.GE.7) THEN
0273 KFS=ISIGN(1,KFL1)
0274 IF(KFL1A.EQ.KFL3A) THEN
0275 KFLA=MAX(KFL1B,KFL3B)
0276 KFLB=MIN(KFL1B,KFL3B)
0277 IF(KFLA.NE.KFL1B) KFS=-KFS
0278 ELSEIF(KFL1A.EQ.KFL3B) THEN
0279 KFLA=KFL3A
0280 KFLB=KFL1B
0281 KFS=-KFS
0282 ELSEIF(KFL1B.EQ.KFL3A) THEN
0283 KFLA=KFL1A
0284 KFLB=KFL3B
0285 ELSEIF(KFL1B.EQ.KFL3B) THEN
0286 KFLA=MAX(KFL1A,KFL3A)
0287 KFLB=MIN(KFL1A,KFL3A)
0288 IF(KFLA.NE.KFL1A) KFS=-KFS
0289 ELSE
0290 CALL LUERRM(2,'(LUKFDI:) no matching flavours for qq -> qq')
0291 GOTO 100
0292 ENDIF
0293 KF=(100*KFLA+10*KFLB+2*KTABS+1)*KFS*(-1)**KFLA
0294
0295
0296 ELSE
0297 IF(KTAB1.GE.7) THEN
0298 KFLA=KFL3A
0299 KFLB=KFL1A
0300 KFLC=KFL1B
0301 ELSE
0302 KFLA=KFL1A
0303 KFLB=KFL3A
0304 KFLC=KFL3B
0305 ENDIF
0306 KFLD=MAX(KFLA,KFLB,KFLC)
0307 KFLF=MIN(KFLA,KFLB,KFLC)
0308 KFLE=KFLA+KFLB+KFLC-KFLD-KFLF
0309 IF(KTABS.EQ.0) KF=ISIGN(1000*KFLD+100*KFLF+10*KFLE+2,KFL1)
0310 IF(KTABS.GE.1) KF=ISIGN(1000*KFLD+100*KFLE+10*KFLF+2*KTABS,KFL1)
0311 ENDIF
0312
0313
0314 IF(KFL2.NE.0) KFL3=0
0315 KC=LUCOMP(KF)
0316 IF(KC.EQ.0) THEN
0317 CALL LUERRM(2,'(LUKFDI:) user-defined flavour probabilities '//
0318 & 'failed')
0319 GOTO 100
0320 ENDIF
0321
0322 RETURN
0323 END