]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ISAJET/code/setdky.F
Bug in V0A fixed (Guillermo)
[u/mrichter/AliRoot.git] / ISAJET / code / setdky.F
1 #include "isajet/pilot.h"
2       SUBROUTINE SETDKY(LPRINT)
3 C
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.
9 C
10 C          Logical flag LPRINT controls printing of table.
11 C
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
17 C          MELEM=3: V-A
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
22 C
23 #if defined(CERNLIB_IMPNONE)
24       IMPLICIT NONE
25 #endif
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"
34 C
35       INTEGER IMODE(6),LOOP,IOLD,I,IRES,ITYPE,K,J,IPOINT
36       INTEGER IFL1,IFL2,IFL3,JSPIN,INDEX,ID1,IDANTI,KTYPE,IRES2
37       REAL    BR
38       CHARACTER*8 LABEL,LMODE(6),LRES
39       CHARACTER*8 IBLANK,LREAD(10),IQUIT
40       LOGICAL LPRINT
41       INTEGER NOUT,NTHAD
42       PARAMETER (NOUT=33)
43       PARAMETER (NTHAD=12)
44       INTEGER IDOUT(NOUT),ITHAD(NTHAD),IDUMMY(5),MEOUT
45       REAL SUMBR,SUMBR2,SUMGAM
46       CHARACTER*40,V,VOLD,VISAJE
47 C
48       DATA IDOUT/
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,
52      $ISHL,ISHH,ISHA,ISHC/
53       DATA IQUIT/'////'/,IBLANK/' '/
54       DATA ITHAD/-160,-260,-360,
55      $  1160,1260,2260,2160,1360,2360,3160,3260,3360/
56 C
57 C          Print header for table.
58 C
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,
64      4'DECAY IDENT'/)
65 C
66 C          Initialize. LOOP is the decay mode counter.
67 C
68       LOOP=0
69       IOLD=0
70       DO 100 I=1,MXLOOK
71         LOOK(I)=0
72 100   CONTINUE
73       DO 110 I=1,MXFORC
74         LOOK2(1,I)=0
75         LOOK2(2,I)=0
76 110   CONTINUE
77 C
78 C          Read in table, checking for valid version.
79 C
80       IF(NODCAY.OR.ITDKY.EQ.0) RETURN
81       REWIND ITDKY
82 C
83       VOLD=VISAJE()
84       READ(ITDKY,*) V
85       IF(V.NE.VOLD) THEN
86         WRITE(ITLIS,2000) V,VOLD
87 2000    FORMAT(//
88      $  '  ***WARNING: DECAY TABLE DOES NOT MATCH ISAJET VERSION'/
89      $  '  ***DECAY VERSION  : ',A40/
90      $  '  ***PROGRAM VERSION: ',A40)
91       ENDIF
92 C
93 200   LOOP=LOOP+1
94       IF(LOOP.GT.MXDKY) GO TO 9999
95 220   DO 210 I=1,5
96         IMODE(I)=0
97         LMODE(I)=IBLANK
98 210   CONTINUE
99       READ(ITDKY,*) IRES,ITYPE,BR,IMODE
100 C
101       IF(IRES.NE.0) THEN
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)
106           LOOK(INDEX)=LOOP
107         ENDIF
108         IOLD=IRES
109         CBR(LOOP)=BR
110         MELEM(LOOP)=ITYPE
111         DO 240 I=1,5
112           MODE(I,LOOP)=IMODE(I)
113           IF(IMODE(I).NE.0) LMODE(I)=LABEL(IMODE(I))
114 240     CONTINUE
115         LRES=LABEL(IRES)
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))
119         GO TO 200
120       ENDIF
121 C
122 C          Add HIGGS FOR WHIGGS
123 C
124       IF(KEYS(10).AND..NOT.GOMSSM) THEN
125           SUMGAM=0
126           SUMBR=0
127           DO 244 J=1,NSSMOD
128             IF(ISSMOD(J).EQ.81.AND.GSSMOD(J).GT.0) THEN
129               SUMGAM=SUMGAM+GSSMOD(J)
130             ENDIF
131 244       CONTINUE
132           DO 245 J=1,NSSMOD
133             IF(ISSMOD(J).EQ.81.AND.GSSMOD(J).GT.0) THEN
134               BSSMOD(J)=GSSMOD(J)/SUMGAM
135             ENDIF
136 245       CONTINUE
137           DO 246 J=1,NSSMOD
138             IF(ISSMOD(J).EQ.81.AND.BSSMOD(J).GT.0) THEN
139               SUMBR=SUMBR+BSSMOD(J)
140             ENDIF
141 246       CONTINUE
142 C          If modes exist, add them
143           IF(SUMBR.LE.0) GO TO 249
144           IRES=81
145           LRES=LABEL(IRES)
146           CALL FLAVOR(IRES,IFL1,IFL2,IFL3,JSPIN,INDEX)
147           LOOK(INDEX)=LOOP+1
148           SUMBR2=0
149           DO 247 J=1,NSSMOD
150             IF(ISSMOD(J).EQ.81.AND.BSSMOD(J).GT.0) THEN
151               LOOP=LOOP+1
152               SUMBR2=SUMBR2+BSSMOD(J)
153               BR=SUMBR2/SUMBR
154               CBR(LOOP)=BR
155               MELEM(LOOP)=0
156               DO 248 K=1,5
157                 MODE(K,LOOP)=JSSMOD(K,J)
158                 LMODE(K)=LABEL(MODE(K,LOOP))
159 248           CONTINUE
160               IF(LPRINT) WRITE(ITLIS,20) LRES,(LMODE(K),K=1,5),
161      $        BR,IRES,(MODE(K,LOOP),K=1,5)
162             ENDIF
163 247       CONTINUE
164 249     CONTINUE
165       END IF
166 C
167 C          Add MSSM decay modes if applicable, OR H_SM FOR WHIGGS
168 C
169       IF(GOMSSM) THEN
170         DO 250 I=1,NOUT
171 C          Check for modes
172           SUMBR=0
173           DO 251 J=1,NSSMOD
174             IF(ISSMOD(J).EQ.IDOUT(I).AND.BSSMOD(J).GT.0) THEN
175               SUMBR=SUMBR+BSSMOD(J)
176             ENDIF
177 251       CONTINUE
178 C          If modes exist, add them
179           IF(SUMBR.LE.0) GO TO 250
180           IRES=IDOUT(I)
181           LRES=LABEL(IRES)
182           CALL FLAVOR(IRES,IFL1,IFL2,IFL3,JSPIN,INDEX)
183           LOOK(INDEX)=LOOP+1
184           SUMBR2=0
185           DO 252 J=1,NSSMOD
186             IF(ISSMOD(J).EQ.IDOUT(I).AND.BSSMOD(J).GT.0) THEN
187               LOOP=LOOP+1
188               SUMBR2=SUMBR2+BSSMOD(J)
189               BR=SUMBR2/SUMBR
190               CBR(LOOP)=BR
191               MELEM(LOOP)=MSSMOD(J)
192               DO 253 K=1,5
193                 MODE(K,LOOP)=JSSMOD(K,J)
194                 LMODE(K)=LABEL(MODE(K,LOOP))
195 253           CONTINUE
196               IF(LPRINT) WRITE(ITLIS,20) LRES,(LMODE(K),K=1,5),
197      $        BR,IRES,(MODE(K,LOOP),K=1,5)
198             ENDIF
199 252       CONTINUE
200 250     CONTINUE
201 C
202 C          Top hadron decays
203 C
204         DO 260 I=1,NTHAD
205 C          Check for modes
206           SUMBR=0
207           DO 261 J=1,NSSMOD
208             IF(ISSMOD(J).EQ.6.AND.BSSMOD(J).GT.0) THEN
209               SUMBR=SUMBR+BSSMOD(J)
210             ENDIF
211 261       CONTINUE
212 C          If modes exist, add them -- conjugate for antimesons
213           IF(SUMBR.LE.0) GO TO 260
214           IRES=IABS(ITHAD(I))
215           LRES=LABEL(IRES)
216           CALL FLAVOR(IRES,IFL1,IFL2,IFL3,JSPIN,INDEX)
217           LOOK(INDEX)=LOOP+1
218           SUMBR2=0
219           DO 262 J=1,NSSMOD
220             IF(ISSMOD(J).EQ.6.AND.BSSMOD(J).GT.0) THEN
221               LOOP=LOOP+1
222               SUMBR2=SUMBR2+BSSMOD(J)
223               BR=SUMBR2/SUMBR
224               CBR(LOOP)=BR
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
228                 MELEM(LOOP)=4
229               ELSE
230                 MELEM(LOOP)=0
231               ENDIF
232               DO 263 K=1,5
233                 IF(ITHAD(I).GT.0) THEN
234                   MODE(K,LOOP)=JSSMOD(K,J)
235                 ELSE
236                   MODE(K,LOOP)=IDANTI(JSSMOD(K,J))
237                 ENDIF
238                 LMODE(K)=LABEL(MODE(K,LOOP))
239 263           CONTINUE
240               IF(LPRINT) WRITE(ITLIS,20) LRES,(LMODE(K),K=1,5),
241      $        BR,IRES,(MODE(K,LOOP),K=1,5)
242             ENDIF
243 262       CONTINUE
244 260     CONTINUE
245       ENDIF
246 C
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.
251 C
252       IF(NFORCE.EQ.0) GO TO 400
253 C          Append each forced decay to table
254       IRES=0
255       DO 310 I=1,NFORCE
256         IF(IFORCE(I).EQ.0) GO TO 310
257         LOOP=LOOP+1
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
261           KTYPE=1
262         ELSE
263           KTYPE=2
264         ENDIF
265 C
266         IF(LOOK(INDEX).GE.0) THEN
267           IRES=IRES+1
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)
272           LOOK(INDEX)=-IRES
273         ELSE
274           IRES2=-LOOK(INDEX)
275           IF(IRES2.GT.MXFORC) GO TO 9998
276           LOOK2(KTYPE,IRES2)=LOOP
277         ENDIF
278 C          Set forced decay mode - conjugate if necessary
279         IF(KTYPE.EQ.1) THEN
280           DO 320 K=1,5
281 320       MODE(K,LOOP)=MFORCE(K,I)
282         ELSE
283           DO 330 K=1,5
284 330       MODE(K,LOOP)=IDANTI(MFORCE(K,I))
285         ENDIF
286         CBR(LOOP)=1.
287 C          Set matrix element flag
288         CALL ORDER(IFORCE(I),MFORCE(1,I),IDUMMY,MEOUT)
289         MELEM(LOOP)=MEOUT
290         MEFORC(I)=MEOUT
291 310   CONTINUE
292 C
293 400   RETURN
294 C
295 C          Errors
296 C
297 9999  WRITE(ITLIS,3001) LOOP
298 3001  FORMAT(//' ***** ERROR IN SETDKY ... DECAY COUNTER LOOP = ',
299      $I6,' *****')
300       STOP 99
301 9998  WRITE(ITLIS,3002) IRES
302 3002  FORMAT(//' ***** ERROR IN SETDKY ... FORCE COUNTER IRES = ',
303      $I6,' *****')
304       STOP 99
305       END