1 #include "isajet/pilot.h"
4 C Decay particle IP from /PARTCL/ using /DKYTAB/ branching
5 C ratios and add decay products to /PARTCL/ with IORIG=IP.
6 C Forced decay modes are flagged by LOOK<0.
9 C DECPS1: generate masses for phase space
10 C DECPS2: generate 2-body decays and boosts for phase space
11 C DECVA: V-A matrix elements
12 C DECTAU: tau decay matrix elements with polarization
13 C DECSS3: 3-body SUSY matrix element using /DKYSS3/
14 C DECJET: Hadronize partons from decay.
16 C Matrix element for Dalitz decays and W mass for TP -> W BT
17 C are generated explicitly. W width is included.
19 C Requirements for decay modes:
20 C (1) For Dalitz decays, particle 1 must be GM.
21 C (2) For V-A quark or lepton decays, particles 1 and 2 must
22 C be from (virtual) W.
23 C (3) For any decay into quarks, they must appear last.
25 #if defined(CERNLIB_IMPNONE)
28 #include "isajet/itapes.inc"
29 #include "isajet/wcon.inc"
30 #include "isajet/partcl.inc"
31 #include "isajet/dkytab.inc"
32 #include "isajet/jetset.inc"
33 #include "isajet/jwork.inc"
34 #include "isajet/const.inc"
35 #include "isajet/primar.inc"
36 #include "isajet/idrun.inc"
37 #include "isajet/force.inc"
38 #include "isajet/sstype.inc"
39 #include "isajet/dkyss3.inc"
41 REAL PGEN(5,5),BETA(3),REDUCE(5),WPROP,Z,TRY,RANF,AMASS,TWOME
42 REAL PSUM(5),SUM,PREST(4,6),DOT,PCM
43 REAL AMEE,REE,WTEE,SWAP,WT,A,B,C,GAMMA
44 REAL SMAX,SMIN,SVAL,TANMAX,TANMIN,TANVAL
45 LOGICAL WDECAY,DECVA,DECTAU,DECJET
46 INTEGER IDLV1,IFL1,IFL2,IFL3,JSPIN,INDEX,IPOINT,ID1,I1,I2
47 INTEGER NADD,NSTART,NEW,NADD1,J,IP,I,IDABS(5)
48 INTEGER K,JETIP,IDANTI,NPASS,MEIP,MEA
49 REAL DBLPCM,DECSS3,VAL
51 DATA REDUCE/1.,1.,2.,5.,15./
53 DATA TWOME/1.022006E-3/
56 C Function definitions.
57 C Use double precision for PCM on 32-bit machines
59 #if defined(CERNLIB_SINGLE)
60 PCM(A,B,C)=SQRT((A**2-B**2-C**2)**2-(2.*B*C)**2)/(2.*A)
62 #if defined(CERNLIB_DOUBLE)
63 PCM(A,B,C)=DBLPCM(A,B,C)
65 DOT(I1,I2)=PREST(4,I1)*PREST(4,I2)-PREST(1,I1)*PREST(1,I2)
66 $-PREST(2,I1)*PREST(2,I2)-PREST(3,I1)*PREST(3,I2)
67 C Charged W propagator.
68 WPROP(Z)=(Z-WMASS(2)**2)**2+(WMASS(2)*WGAM(2))**2
69 C----------------------------------------------------------------------
70 C Select decay mode. Note IDENT(NPTCL+1)...IDENT(NPTCL+5)
71 C are always defined even if zero.
72 C----------------------------------------------------------------------
73 IF(IDCAY(IP).NE.0) RETURN
75 CALL FLAVOR(IDLV1,IFL1,IFL2,IFL3,JSPIN,INDEX)
76 C FLAVOR returns 0 for quark, but want IFL3=6 for top
77 IF(IABS(IDLV1).LT.10) IFL3=IDLV1
82 IF(NPASS.GT.NTRIES) GO TO 9998
84 IF(IPOINT.EQ.0) RETURN
85 C IPOINT<0 flags a forced decay.
88 IF(IDENT(IP).LT.0) I=2
89 IPOINT=LOOK2(I,IABS(IPOINT))
97 IF(TRY.GT.CBR(IPOINT)) GO TO 100
101 IF(NPTCL+5.GT.MXPTCL) GO TO 9999
103 C Set up masses and IDENT codes.
108 IDENT(NEW)=MODE(I,IPOINT)
109 IDABS(I)=IABS(IDENT(NEW))
110 IF(MODE(I,IPOINT).EQ.0) GO TO 110
113 PPTCL(5,NEW)=AMASS(IDLV1)
118 PGEN(J,1)=PPTCL(J,IP)
120 PGEN(5,NADD)=PPTCL(5,NPTCL+NADD)
121 C----------------------------------------------------------------------
122 C Carry out appropriate decay
123 C----------------------------------------------------------------------
129 PPTCL(J,NPTCL+1)=PPTCL(J,IP)
134 C 2-body phase space decays
136 IF(NADD.EQ.2.AND.MEIP.EQ.0) THEN
137 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
141 C N-body phase space decays
143 IF(NADD.GT.2.AND.MEIP.EQ.0) THEN
144 CALL DECPS1(IP,NADD,PGEN)
145 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
151 IF(NADD.EQ.3.AND.MEIP.EQ.1) THEN
152 210 AMEE=TWOME*(PPTCL(5,IP)/TWOME)**RANF()
154 WTEE=(1.-(AMEE/PPTCL(5,IP))**2)**3*SQRT(1.-REE)*(1.+.5*REE)
155 IF(WTEE.LT.RANF()) GO TO 210
157 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
161 C omega/phi decays (for reasons lost in history...)
163 IF(NADD.EQ.3.AND.MEIP.EQ.2) THEN
164 220 CALL DECPS1(IP,NADD,PGEN)
165 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
166 WT=(PPTCL(5,NPTCL+1)*PPTCL(5,NPTCL+2)*PPTCL(5,NPTCL+3))**2
167 $ -(PPTCL(5,NPTCL+1)*DOT(2,3))**2
168 $ -(PPTCL(5,NPTCL+2)*DOT(1,3))**2
169 $ -(PPTCL(5,NPTCL+3)*DOT(1,2))**2
170 $ +2.*DOT(1,2)*DOT(2,3)*DOT(1,3)
171 IF(WT.LT.RANF()*PPTCL(5,IP)**6/108.) GO TO 220
177 IF(NADD.EQ.3.AND.MEIP.EQ.3) THEN
178 230 CALL DECPS1(IP,NADD,PGEN)
179 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
180 IF(.NOT.DECVA(IP,NADD,IDABS,PREST)) GO TO 230
185 C Generate mass for TP -> W BT with Breit-Wigner.
186 C W couples to 1+2 so swap 1<->3. Then m2+m3 < m < m0-m1.
188 IF(NADD.EQ.3.AND.MEIP.EQ.4) THEN
190 SWAP=PPTCL(5,NPTCL+1)
191 PPTCL(5,NPTCL+1)=PPTCL(5,NPTCL+3)
192 PPTCL(5,NPTCL+3)=SWAP
193 SMAX=(PPTCL(5,IP)-PPTCL(5,NPTCL+1))**2
194 SMIN=(PPTCL(5,NPTCL+2)+PPTCL(5,NPTCL+3))**2
195 TANMAX=ATAN((SMAX-WMASS(2)**2)/(WMASS(2)*WGAM(2)))
196 TANMIN=ATAN((SMIN-WMASS(2)**2)/(WMASS(2)*WGAM(2)))
197 240 TANVAL=RANF()*(TANMAX-TANMIN)+TANMIN
198 SVAL=WMASS(2)**2+WMASS(2)*WGAM(2)*TAN(TANVAL)
199 IF(SVAL.LT.SMIN.OR.SVAL.GT.SMAX) GO TO 240
201 PGEN(5,3)=PPTCL(5,NPTCL+3)
202 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
203 IF(.NOT.DECVA(IP,NADD,IDABS,PREST)) GO TO 240
205 SWAP=PPTCL(K,NPTCL+1)
206 PPTCL(K,NPTCL+1)=PPTCL(K,NPTCL+3)
207 PPTCL(K,NPTCL+3)=SWAP
209 PGEN(5,3)=PPTCL(5,NPTCL+3)
212 PREST(K,1)=PREST(K,3)
218 C TAU decays. These are special because they take polarization
221 IF(MEIP.EQ.5.OR.MEIP.EQ.6.OR.MEIP.EQ.7) THEN
222 250 CALL DECPS1(IP,NADD,PGEN)
223 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
224 IF(.NOT.DECTAU(IP,NADD,MEIP,IDABS,PREST)) GO TO 250
230 IF(MEIP.LT.0.AND.NADD.EQ.3) THEN
232 IF(WTSS3(MEA).LE.0) THEN
234 CALL DECPS1(IP,NADD,PGEN)
235 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
237 WTSS3(MEA)=MAX(WTSS3(MEA),VAL)
239 IF(WTSS3(MEA).LE.0) GO TO 9998
241 261 CALL DECPS1(IP,NADD,PGEN)
242 CALL DECPS2(IP,NADD,PGEN,PREST,BETA,GAMMA)
244 WTSS3(MEA)=MAX(WTSS3(MEA),VAL)
245 IF(VAL.LT.WTSS3(MEA)*RANF()) GO TO 261
249 C Should never fall through
252 C----------------------------------------------------------------------
253 C Swap particles and antiparticles if IDENT(IP)<0
254 C Note forced modes for antiparticles are conjugated in table.
255 C----------------------------------------------------------------------
257 IF(IDENT(IP).LT.0.AND.IDENT(IP).NE.-20) THEN
260 IDENT(NPTCL+I)=IDANTI(ID1)
264 C Set IORIG and IDCAY.
267 IDCAY(IP)=IPACK*NSTART+NPTCL
268 JETIP=IABS(IORIG(IP))/IPACK
269 DO 320 I=NSTART,NPTCL
274 C Evolve and hadronize partons. If it fails, start over.
276 IF(IDABS(NADD).LT.10.OR.MOD(IDENT(NPTCL),100).EQ.0) THEN
277 IF(.NOT.DECJET(IP,NADD,IDABS,PREST,WDECAY,BETA,GAMMA))
282 C----------------------------------------------------------------------
284 C----------------------------------------------------------------------
286 WRITE(ITLIS,99990) NPTCL
287 99990 FORMAT(//5X,'ERROR IN DECAY...NPTCL > ',I6)
290 WRITE(ITLIS,99980) IP
291 99980 FORMAT(//5X,'ERROR IN DECAY...NO DECAY FOUND FOR PARTICLE',I6)