File indexing completed on 2025-08-05 08:21:08
0001
0002
0003
0004
0005
0006
0007
0008 SUBROUTINE PY4FRM(ATOTSQ,A1SQ,A2SQ,ISTRAT,IRAD,ITAU,ICOM)
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 COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0017 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0018 COMMON/PYINT1/MINT(400),VINT(400)
0019 SAVE /PYJETS/,/PYDAT1/,/PYPARS/,/PYINT1/
0020
0021 DIMENSION IJOIN(2),INTAU(4)
0022
0023
0024 IF(ICOM.EQ.0) THEN
0025 MSTU(28)=0
0026 CALL PYHEPC(2)
0027 ENDIF
0028
0029
0030 I1=0
0031 I2=0
0032 I3=0
0033 I4=0
0034 DO 100 I=1,N
0035 IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
0036 KFA=IABS(K(I,2))
0037 IF((KFA.GE.1.AND.KFA.LE.6).OR.(KFA.GE.11.AND.KFA.LE.16)) THEN
0038 IF(K(I,2).GT.0) THEN
0039 IF(I1.EQ.0) THEN
0040 I1=I
0041 ELSEIF(I3.EQ.0) THEN
0042 I3=I
0043 ELSE
0044 CALL PYERRM(16,'(PY4FRM:) more than two fermions')
0045 ENDIF
0046 ELSE
0047 IF(I2.EQ.0) THEN
0048 I2=I
0049 ELSEIF(I4.EQ.0) THEN
0050 I4=I
0051 ELSE
0052 CALL PYERRM(16,'(PY4FRM:) more than two antifermions')
0053 ENDIF
0054 ENDIF
0055 ENDIF
0056 100 CONTINUE
0057
0058
0059 IF(I3.EQ.0.OR.I4.EQ.0) THEN
0060 CALL PYERRM(16,'(PY4FRM:) event contains too few fermions')
0061 ENDIF
0062 IF(I2.LT.I1.OR.I3.LT.I2.OR.I4.LT.I3) THEN
0063 CALL PYERRM(6,'(PY4FRM:) fermions arranged in wrong order')
0064 ENDIF
0065
0066
0067 IF(IABS(K(I1,2)).LT.10.AND.IABS(K(I2,2)).LT.10) THEN
0068 IQL12=1
0069 ELSEIF(IABS(K(I1,2)).GT.10.AND.IABS(K(I2,2)).GT.10) THEN
0070 IQL12=2
0071 ELSE
0072 CALL PYERRM(16,'(PY4FRM:) first fermion pair inconsistent')
0073 ENDIF
0074 IF(IABS(K(I3,2)).LT.10.AND.IABS(K(I4,2)).LT.10) THEN
0075 IQL34=1
0076 ELSEIF(IABS(K(I3,2)).GT.10.AND.IABS(K(I4,2)).GT.10) THEN
0077 IQL34=2
0078 ELSE
0079 CALL PYERRM(16,'(PY4FRM:) second fermion pair inconsistent')
0080 ENDIF
0081
0082
0083 MSTJ(41)=2
0084 IF(IRAD.EQ.0) MSTJ(41)=1
0085
0086
0087 IP1=I1
0088 IP2=I2
0089 IP3=I3
0090 IP4=I4
0091 IF(IQL12.EQ.IQL34) THEN
0092 R1SQ=A1SQ
0093 R2SQ=A2SQ
0094 DELTA=ATOTSQ-A1SQ-A2SQ
0095 IF(ISTRAT.EQ.1) THEN
0096 IF(DELTA.GT.0D0) R1SQ=R1SQ+DELTA
0097 IF(DELTA.LT.0D0) R2SQ=MAX(0D0,R2SQ+DELTA)
0098 ELSEIF(ISTRAT.EQ.2) THEN
0099 IF(DELTA.GT.0D0) R2SQ=R2SQ+DELTA
0100 IF(DELTA.LT.0D0) R1SQ=MAX(0D0,R1SQ+DELTA)
0101 ENDIF
0102 IF(R2SQ.GT.PYR(0)*(R1SQ+R2SQ)) THEN
0103 IP2=I4
0104 IP4=I2
0105 ENDIF
0106 ENDIF
0107
0108
0109
0110 IF(MSTP(115).GE.1.AND.IQL12.EQ.1.AND.IQL34.EQ.1) THEN
0111 K(N+1,1)=11
0112 K(N+1,3)=IP1
0113 K(N+1,4)=N+3
0114 K(N+1,5)=N+4
0115 K(N+2,1)=11
0116 K(N+2,3)=IP3
0117 K(N+2,4)=N+5
0118 K(N+2,5)=N+6
0119 IF(K(IP1,2)+K(IP2,2).EQ.0) THEN
0120 K(N+1,2)=23
0121 K(N+2,2)=23
0122 MINT(1)=22
0123 ELSEIF(PYCHGE(K(IP1,2)).GT.0) THEN
0124 K(N+1,2)=24
0125 K(N+2,2)=-24
0126 MINT(1)=25
0127 ELSE
0128 K(N+1,2)=-24
0129 K(N+2,2)=24
0130 MINT(1)=25
0131 ENDIF
0132 DO 110 J=1,5
0133 K(N+3,J)=K(IP1,J)
0134 K(N+4,J)=K(IP2,J)
0135 K(N+5,J)=K(IP3,J)
0136 K(N+6,J)=K(IP4,J)
0137 P(N+1,J)=P(IP1,J)+P(IP2,J)
0138 P(N+2,J)=P(IP3,J)+P(IP4,J)
0139 P(N+3,J)=P(IP1,J)
0140 P(N+4,J)=P(IP2,J)
0141 P(N+5,J)=P(IP3,J)
0142 P(N+6,J)=P(IP4,J)
0143 V(N+1,J)=V(IP1,J)
0144 V(N+2,J)=V(IP3,J)
0145 V(N+3,J)=V(IP1,J)
0146 V(N+4,J)=V(IP2,J)
0147 V(N+5,J)=V(IP3,J)
0148 V(N+6,J)=V(IP4,J)
0149 110 CONTINUE
0150 P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
0151 & P(N+1,3)**2))
0152 P(N+2,5)=SQRT(MAX(0D0,P(N+2,4)**2-P(N+2,1)**2-P(N+2,2)**2-
0153 & P(N+2,3)**2))
0154 K(N+3,3)=N+1
0155 K(N+4,3)=N+1
0156 K(N+5,3)=N+2
0157 K(N+6,3)=N+2
0158
0159 K(IP1,1)=K(IP1,1)+10
0160 K(IP2,1)=K(IP2,1)+10
0161 K(IP3,1)=K(IP3,1)+10
0162 K(IP4,1)=K(IP4,1)+10
0163 IW1=N+1
0164 IW2=N+2
0165 NSD1=N+2
0166 IP1=N+3
0167 IP2=N+4
0168 IP3=N+5
0169 IP4=N+6
0170 N=N+6
0171 ENDIF
0172
0173
0174 IF(IQL12.EQ.1) THEN
0175 IJOIN(1)=IP1
0176 IJOIN(2)=IP2
0177 CALL PYJOIN(2,IJOIN)
0178 ENDIF
0179 IF(IQL12.EQ.1.OR.IRAD.EQ.1) THEN
0180 PM12S=(P(IP1,4)+P(IP2,4))**2-(P(IP1,1)+P(IP2,1))**2-
0181 & (P(IP1,2)+P(IP2,2))**2-(P(IP1,3)+P(IP2,3))**2
0182 CALL PYSHOW(IP1,IP2,SQRT(MAX(0D0,PM12S)))
0183 ENDIF
0184 NAFT1=N
0185 IF(IQL34.EQ.1) THEN
0186 IJOIN(1)=IP3
0187 IJOIN(2)=IP4
0188 CALL PYJOIN(2,IJOIN)
0189 ENDIF
0190 IF(IQL34.EQ.1.OR.IRAD.EQ.1) THEN
0191 PM34S=(P(IP3,4)+P(IP4,4))**2-(P(IP3,1)+P(IP4,1))**2-
0192 & (P(IP3,2)+P(IP4,2))**2-(P(IP3,3)+P(IP4,3))**2
0193 CALL PYSHOW(IP3,IP4,SQRT(MAX(0D0,PM34S)))
0194 ENDIF
0195
0196
0197 MINT(32)=0
0198 MSTI(32)=0
0199 IF(MSTP(115).GE.1.AND.IQL12.EQ.1.AND.IQL34.EQ.1) THEN
0200 CALL PYRECO(IW1,IW2,NSD1,NAFT1)
0201 MSTI(32)=MINT(32)
0202 ENDIF
0203
0204
0205 IF(ITAU.EQ.0) THEN
0206 NTAU=0
0207 DO 120 I=1,N
0208 IF(IABS(K(I,2)).EQ.15.AND.K(I,1).EQ.1) THEN
0209 NTAU=NTAU+1
0210 INTAU(NTAU)=I
0211 K(I,1)=11
0212 ENDIF
0213 120 CONTINUE
0214 ENDIF
0215 CALL PYEXEC
0216 IF(ITAU.EQ.0) THEN
0217 DO 130 I=1,NTAU
0218 K(INTAU(I),1)=1
0219 130 CONTINUE
0220 ENDIF
0221
0222
0223 IF(ICOM.EQ.0) THEN
0224 MSTU(28)=0
0225 CALL PYHEPC(1)
0226 ENDIF
0227
0228 END