1 #include "isajet/pilot.h"
2 SUBROUTINE SETDKY(LPRINT)
4 C Read in decay table from tape ITDKY and set up /DKYTAB/.
5 C Then append forced decay modes and set LOOK to negative
6 C number pointing to LOOK2, which points to table.
7 C Forced decays for antiparticles are stored in conjugated
8 C form so that DECAY can always conjugate them.
10 C Logical flag LPRINT controls printing of table.
12 C Ver 7.41: Check version of decay table. Also read matrix
13 C element flags and save in MELEM:
14 C MELEM=0: Phase space
15 C MELEM=1: Dalitz decay
16 C MELEM=2: omega/phi decay
18 C MELEM=4: V-A plus W propagator (for top)
19 C MELEM=5: tau -> ell nu nu
20 C MELEM=6: tau -> nu pi/K
21 C MELEM=7: tau -> nu rho/a1
23 #if defined(CERNLIB_IMPNONE)
26 #include "isajet/itapes.inc"
27 #include "isajet/force.inc"
28 #include "isajet/dkytab.inc"
29 #include "isajet/nodcay.inc"
30 #include "isajet/ssmode.inc"
31 #include "isajet/sstype.inc"
32 #include "isajet/xmssm.inc"
33 #include "isajet/keys.inc"
35 INTEGER IMODE(6),LOOP,IOLD,I,IRES,ITYPE,K,J,IPOINT
36 INTEGER IFL1,IFL2,IFL3,JSPIN,INDEX,ID1,IDANTI,KTYPE,IRES2
38 CHARACTER*8 LABEL,LMODE(6),LRES
39 CHARACTER*8 IBLANK,LREAD(10),IQUIT
44 INTEGER IDOUT(NOUT),ITHAD(NTHAD),IDUMMY(5),MEOUT
45 REAL SUMBR,SUMBR2,SUMGAM
46 CHARACTER*40,V,VOLD,VISAJE
49 $IDTP,ISGL,ISUPL,ISDNL,ISSTL,ISCHL,ISBT1,ISTP1,ISUPR,ISDNR,
50 $ISSTR,ISCHR,ISBT2,ISTP2,ISEL,ISMUL,ISTAU1,ISNEL,ISNML,ISNTL,
51 $ISER,ISMUR,ISTAU2,ISZ1,ISZ2,ISZ3,ISZ4,ISW1,ISW2,
53 DATA IQUIT/'////'/,IBLANK/' '/
54 DATA ITHAD/-160,-260,-360,
55 $ 1160,1260,2260,2160,1360,2360,3160,3260,3360/
57 C Print header for table.
59 IF(LPRINT) WRITE(ITLIS,10)
60 10 FORMAT('1',30('*')/' *',28X,'*'/
61 1' *',5X,'ISAJET DECAY TABLE',5X,'*'/
62 2' *',28X,'*'/' ',30('*')//
63 33X,'PART',16X,'DECAY MODE',16X,'CUM BR',10X,'IDENT',18X,
66 C Initialize. LOOP is the decay mode counter.
78 C Read in table, checking for valid version.
80 IF(NODCAY.OR.ITDKY.EQ.0) RETURN
86 WRITE(ITLIS,2000) V,VOLD
88 $ ' ***WARNING: DECAY TABLE DOES NOT MATCH ISAJET VERSION'/
89 $ ' ***DECAY VERSION : ',A40/
90 $ ' ***PROGRAM VERSION: ',A40)
94 IF(LOOP.GT.MXDKY) GO TO 9999
99 READ(ITDKY,*) IRES,ITYPE,BR,IMODE
102 IF(NOPI0.AND.IRES.EQ.110) GO TO 220
103 IF(NOETA.AND.IRES.EQ.220) GO TO 220
104 IF(IRES.NE.IOLD) THEN
105 CALL FLAVOR(IRES,IFL1,IFL2,IFL3,JSPIN,INDEX)
112 MODE(I,LOOP)=IMODE(I)
113 IF(IMODE(I).NE.0) LMODE(I)=LABEL(IMODE(I))
116 IF(LPRINT) WRITE(ITLIS,20) LRES,(LMODE(K),K=1,5),
117 1 BR,IRES,(IMODE(K),K=1,5)
118 20 FORMAT(3X,A5,4X,5(A5,2X),F8.5,10X,I5,4X,5(I7,2X))
122 C Add HIGGS FOR WHIGGS
124 IF(KEYS(10).AND..NOT.GOMSSM) THEN
128 IF(ISSMOD(J).EQ.81.AND.GSSMOD(J).GT.0) THEN
129 SUMGAM=SUMGAM+GSSMOD(J)
133 IF(ISSMOD(J).EQ.81.AND.GSSMOD(J).GT.0) THEN
134 BSSMOD(J)=GSSMOD(J)/SUMGAM
138 IF(ISSMOD(J).EQ.81.AND.BSSMOD(J).GT.0) THEN
139 SUMBR=SUMBR+BSSMOD(J)
142 C If modes exist, add them
143 IF(SUMBR.LE.0) GO TO 249
146 CALL FLAVOR(IRES,IFL1,IFL2,IFL3,JSPIN,INDEX)
150 IF(ISSMOD(J).EQ.81.AND.BSSMOD(J).GT.0) THEN
152 SUMBR2=SUMBR2+BSSMOD(J)
157 MODE(K,LOOP)=JSSMOD(K,J)
158 LMODE(K)=LABEL(MODE(K,LOOP))
160 IF(LPRINT) WRITE(ITLIS,20) LRES,(LMODE(K),K=1,5),
161 $ BR,IRES,(MODE(K,LOOP),K=1,5)
167 C Add MSSM decay modes if applicable, OR H_SM FOR WHIGGS
174 IF(ISSMOD(J).EQ.IDOUT(I).AND.BSSMOD(J).GT.0) THEN
175 SUMBR=SUMBR+BSSMOD(J)
178 C If modes exist, add them
179 IF(SUMBR.LE.0) GO TO 250
182 CALL FLAVOR(IRES,IFL1,IFL2,IFL3,JSPIN,INDEX)
186 IF(ISSMOD(J).EQ.IDOUT(I).AND.BSSMOD(J).GT.0) THEN
188 SUMBR2=SUMBR2+BSSMOD(J)
191 MELEM(LOOP)=MSSMOD(J)
193 MODE(K,LOOP)=JSSMOD(K,J)
194 LMODE(K)=LABEL(MODE(K,LOOP))
196 IF(LPRINT) WRITE(ITLIS,20) LRES,(LMODE(K),K=1,5),
197 $ BR,IRES,(MODE(K,LOOP),K=1,5)
208 IF(ISSMOD(J).EQ.6.AND.BSSMOD(J).GT.0) THEN
209 SUMBR=SUMBR+BSSMOD(J)
212 C If modes exist, add them -- conjugate for antimesons
213 IF(SUMBR.LE.0) GO TO 260
216 CALL FLAVOR(IRES,IFL1,IFL2,IFL3,JSPIN,INDEX)
220 IF(ISSMOD(J).EQ.6.AND.BSSMOD(J).GT.0) THEN
222 SUMBR2=SUMBR2+BSSMOD(J)
225 IF(IABS(JSSMOD(1,J)).LT.20.AND.IABS(JSSMOD(2,J)).LT.20
226 $ .AND.IABS(JSSMOD(3,J)).LT.20.AND.IABS(JSSMOD(4,J)).LT.20
227 $ .AND.IABS(JSSMOD(5,J)).LT.20) THEN
233 IF(ITHAD(I).GT.0) THEN
234 MODE(K,LOOP)=JSSMOD(K,J)
236 MODE(K,LOOP)=IDANTI(JSSMOD(K,J))
238 LMODE(K)=LABEL(MODE(K,LOOP))
240 IF(LPRINT) WRITE(ITLIS,20) LRES,(LMODE(K),K=1,5),
241 $ BR,IRES,(MODE(K,LOOP),K=1,5)
247 C Set forced decay modes.
248 C LOOK(INDEX) = -IRES, where LOOK2(K,IRES) points to entries in
249 C decay table for IDENT>0 and IDENT<0.
250 C LOOKST(IRES) = standard LOOK value.
252 IF(NFORCE.EQ.0) GO TO 400
253 C Append each forced decay to table
256 IF(IFORCE(I).EQ.0) GO TO 310
258 IF(LOOP.GT.MXDKY) GO TO 9999
259 CALL FLAVOR(IFORCE(I),IFL1,IFL2,IFL3,JSPIN,INDEX)
260 IF(IFORCE(I).GT.0) THEN
266 IF(LOOK(INDEX).GE.0) THEN
268 IF(IRES.GT.MXFORC) GO TO 9998
269 LOOKST(IRES)=LOOK(INDEX)
270 LOOK2(KTYPE,IRES)=LOOP
271 LOOK2(3-KTYPE,IRES)=LOOKST(IRES)
275 IF(IRES2.GT.MXFORC) GO TO 9998
276 LOOK2(KTYPE,IRES2)=LOOP
278 C Set forced decay mode - conjugate if necessary
281 320 MODE(K,LOOP)=MFORCE(K,I)
284 330 MODE(K,LOOP)=IDANTI(MFORCE(K,I))
287 C Set matrix element flag
288 CALL ORDER(IFORCE(I),MFORCE(1,I),IDUMMY,MEOUT)
297 9999 WRITE(ITLIS,3001) LOOP
298 3001 FORMAT(//' ***** ERROR IN SETDKY ... DECAY COUNTER LOOP = ',
301 9998 WRITE(ITLIS,3002) IRES
302 3002 FORMAT(//' ***** ERROR IN SETDKY ... FORCE COUNTER IRES = ',