4 *CMZ :- -27/07/99 13.33.03 by Mike Seymour
6 *-- Author : Ian Knowles
8 C-----------------------------------------------------------------------
10 SUBROUTINE HWMODK(IDKTMP,BRTMP,IMETMP,
12 & IATMP,IBTMP,ICTMP,IDTMP,IETMP)
14 C-----------------------------------------------------------------------
16 C Takes the decay, IDKTMP -> I-(A+B+C+D+E)-TMP, and simply stores it
18 C if internal pointers not set up (.NOT.DKPSET) else if pre-existing
20 C mode updates branching ratio BRTMP and matrix element code IMETMP,
22 C if -ve leaves as is. If a new mode adds to table and if consistent
24 C adjusts pointers, sets CMMOM (for two-body mode) and resets RSTAB
26 C if necessary. The branching ratios of any other IDKTMP decays are
28 C scaled by (1.-BRTMP)/(1.-BR_OLD)
30 C-----------------------------------------------------------------------
32 INCLUDE 'HERWIG61.INC'
34 DOUBLE PRECISION HWUPCM,BRTMP,SCALE,EPS
36 INTEGER IDKTMP,IMETMP,IATMP,IBTMP,ICTMP,IDTMP,IETMP,IDKY,ITMP(5),
48 C Convert to internal format
50 CALL HWUIDT(1,IDKTMP,IDKY,CDUM)
56 10 FORMAT(1X,'Particle decaying,',I7,', is not recognised')
62 CALL HWUIDT(1,IATMP,ITMP(1),CDUM)
64 CALL HWUIDT(1,IBTMP,ITMP(2),CDUM)
66 CALL HWUIDT(1,ICTMP,ITMP(3),CDUM)
68 CALL HWUIDT(1,IDTMP,ITMP(4),CDUM)
70 CALL HWUIDT(1,IETMP,ITMP(5),CDUM)
72 C If internal pointers not yet set up simply store decay
78 IF (NDKYS.GT.NMXDKS) CALL HWWARN('HWMODK',100,*999)
88 20 IDKPRD(I,NDKYS)=ITMP(I)
92 IF (NMODES(IDKY).GT.0) THEN
94 C First search to see if mode pre-exists
96 IF ((ITMP(2).GE.1.AND.ITMP(2).LE.13).OR.
98 & (ITMP(3).GE.1.AND.ITMP(3).LE.13)) THEN
100 C Partonic respect order
104 DO 30 K=1,NMODES(IDKY)
106 IF (ITMP(1).EQ.IDKPRD(1,L).AND.
108 & ITMP(2).EQ.IDKPRD(2,L).AND.
110 & ITMP(3).EQ.IDKPRD(3,L).AND.
112 & ITMP(4).EQ.IDKPRD(4,L).AND.
114 & ITMP(5).EQ.IDKPRD(5,L)) GOTO 90
120 C Allow for different order in matching
124 DO 70 I=1,NMODES(IDKY)
134 IF (.NOT.MATCH(K).AND.ITMP(K).EQ.IDKPRD(J,L)) THEN
146 IF (MATCH(1).AND.MATCH(2).AND.MATCH(3).AND.
148 & MATCH(4).AND.MATCH(5)) GOTO 90
156 C A new mode put decay products in table
160 IF (NDKYS.GT.NMXDKS) CALL HWWARN('HWMODK',101,*999)
164 80 IDKPRD(I,NDKYS)=ITMP(I)
166 C If decay consistent set up new pointers
168 CALL HWDCHK(IDKY,NDKYS,*980)
170 IF (NMODES(IDKY).EQ.0) THEN
174 IF (RLTIM(IDKY).LT.PLTCUT.AND.RMASS(IDKY).NE.ZERO) THEN
178 DKLTM(IDKY)=RLTIM(IDKY)*RMASS(IDKY)/HBAR
192 NMODES(IDKY)=NMODES(IDKY)+1
198 C Set CMMOM if two body decay
200 IF (NPRODS(L).EQ.2) CMMOM(L)=
202 & HWUPCM(RMASS(IDKY),RMASS(IDKPRD(1,L)),RMASS(IDKPRD(2,L)))
204 C A Pre-existing mode, line L, add/update ME code and BR, scaling all
206 C other branching fractions
208 90 IF (IMETMP.GT.0) NME(L)=IMETMP
210 IF (ABS(BRTMP-1.).LT.EPS) THEN
212 C This modes dominant: eliminate others
222 ELSEIF (ABS(BRTMP).LT.EPS) THEN
224 C This mode insignificant: eliminate it
226 IF (NMODES(IDKY).EQ.1) THEN
242 DO 100 I=2,NMODES(IDKY)
246 IF (J.EQ.L) LNEXT(JPREV)=LNEXT(J)
252 C Rescale other modes
254 SCALE=ONE/(ONE-BRFRAC(L))
258 DO 110 I=1,NMODES(IDKY)-1
260 BRFRAC(J)=SCALE*BRFRAC(J)
266 NMODES(IDKY)=NMODES(IDKY)-1
270 C Rescale all other modes
272 IF (NMODES(IDKY).EQ.1) THEN
284 SCALE=(ONE-BRTMP)/(ONE-BRFRAC(L))
290 DO 120 I=1,NMODES(IDKY)
292 IF (J.NE.L) BRFRAC(J)=SCALE*BRFRAC(J)
308 990 FORMAT(1X,'Decay mode inconsistent, no modifications made')