3 C*********************************************************************
5 SUBROUTINE LUUPDA_HIJING(MUPDA,LFN)
7 C...Purpose: to facilitate the updating of particle and decay data.
8 #include "ludat1_hijing.inc"
9 #include "ludat2_hijing.inc"
10 #include "ludat3_hijing.inc"
11 #include "ludat4_hijing.inc"
12 CHARACTER CHINL*80,CHKC*4,CHVAR(19)*9,CHLIN*72,
13 &CHBLK(20)*72,CHOLD*12,CHTMP*12,CHNEW*12,CHCOM*12
14 DATA CHVAR/ 'KCHG(I,1)','KCHG(I,2)','KCHG(I,3)','PMAS(I,1)',
15 &'PMAS(I,2)','PMAS(I,3)','PMAS(I,4)','MDCY(I,1)','MDCY(I,2)',
16 &'MDCY(I,3)','MDME(I,1)','MDME(I,2)','BRAT(I) ','KFDP(I,1)',
17 &'KFDP(I,2)','KFDP(I,3)','KFDP(I,4)','KFDP(I,5)','CHAF(I) '/
19 C...Write information on file for editing.
20 IF(MSTU(12).GE.1) CALL LULIST_HIJING(0)
23 WRITE(LFN,1000) KC,CHAF(KC),(KCHG(KC,J1),J1=1,3),
24 & (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
25 DO 100 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
26 100 WRITE(LFN,1100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
30 C...Reset variables and read information from edited file.
31 ELSEIF(MUPDA.EQ.2) THEN
41 130 READ(LFN,1200,END=140) CHINL
42 IF(CHINL(2:5).NE.' ') THEN
46 IF(NDC.NE.0) MDCY(KC,2)=IDC+1-NDC
50 IF(KC.LE.0.OR.KC.GT.MSTU(6)) CALL LUERRM_HIJING(27,
51 & '(LUUPDA_HIJING:) Read KC code illegal, KC ='//CHKC)
52 READ(CHINL,1000) KCR,CHAF(KC),(KCHG(KC,J1),J1=1,3),
53 & (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
58 IF(IDC.GE.MSTU(7)) CALL LUERRM_HIJING(27,
59 & '(LUUPDA_HIJING:) Decay data arrays full by KC ='//CHKC)
60 READ(CHINL,1100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
65 IF(NDC.NE.0) MDCY(KC,2)=IDC+1-NDC
68 C...Perform possible tests that new information is consistent.
73 IF(MIN(PMAS(KC,1),PMAS(KC,2),PMAS(KC,3),PMAS(KC,1)-PMAS(KC,3),
74 & PMAS(KC,4)).LT.0..OR.MDCY(KC,3).LT.0) CALL LUERRM_HIJING(17
75 $ ,'(LUUPDA_HIJING:) Mass/width/life/(# channels) wrong '/
78 DO 160 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
79 IF(MDME(IDC,2).GT.80) GOTO 160
81 PMS=PMAS(KC,1)-PMAS(KC,3)-PARJ(64)
85 IF(KP.EQ.0.OR.KP.EQ.81.OR.IABS(KP).EQ.82) THEN
86 ELSEIF(LUCOMP_HIJING(KP).EQ.0) THEN
89 KQ=KQ-LUCHGE_HIJING(KP)
90 PMS=PMS-ULMASS_HIJING(KP)
93 IF(KQ.NE.0) MERR=MAX(2,MERR)
94 IF(KFDP(IDC,2).NE.0.AND.(KC.LE.20.OR.KC.GT.40).AND.
95 & (KC.LE.80.OR.KC.GT.100).AND.MDME(IDC,2).NE.34.AND.
96 & MDME(IDC,2).NE.61.AND.PMS.LT.0.) MERR=MAX(1,MERR)
97 IF(MERR.EQ.3) CALL LUERRM_HIJING(17,
98 & '(LUUPDA_HIJING:) Unknown particle code in decay of KC ='//CHKC)
99 IF(MERR.EQ.2) CALL LUERRM_HIJING(17,
100 & '(LUUPDA_HIJING:) Charge not conserved in decay of KC ='//CHKC)
101 IF(MERR.EQ.1) CALL LUERRM_HIJING(7,
102 & '(LUUPDA_HIJING:) Kinematically unallowed decay of KC ='//CHKC)
103 BRSUM=BRSUM+BRAT(IDC)
105 WRITE(CHTMP,1500) BRSUM
106 IF(ABS(BRSUM).GT.0.0005.AND.ABS(BRSUM-1.).GT.0.0005) CALL
108 $ ,'(LUUPDA_HIJING:) Sum of branching ratios is '//CHTMP(5:12
109 $ )//' for KC ='//CHKC)
113 C...Initialize writing of DATA statements for inclusion in program.
114 ELSEIF(MUPDA.EQ.3) THEN
117 IF(IVAR.GE.11.AND.IVAR.LE.18) NDIM=MSTU(7)
120 CHLIN(7:35)='DATA ('//CHVAR(IVAR)//',I= 1, )/'
124 C...Loop through variables for conversion to characters.
126 IF(IVAR.EQ.1) WRITE(CHTMP,1400) KCHG(IDIM,1)
127 IF(IVAR.EQ.2) WRITE(CHTMP,1400) KCHG(IDIM,2)
128 IF(IVAR.EQ.3) WRITE(CHTMP,1400) KCHG(IDIM,3)
129 IF(IVAR.EQ.4) WRITE(CHTMP,1500) PMAS(IDIM,1)
130 IF(IVAR.EQ.5) WRITE(CHTMP,1500) PMAS(IDIM,2)
131 IF(IVAR.EQ.6) WRITE(CHTMP,1500) PMAS(IDIM,3)
132 IF(IVAR.EQ.7) WRITE(CHTMP,1500) PMAS(IDIM,4)
133 IF(IVAR.EQ.8) WRITE(CHTMP,1400) MDCY(IDIM,1)
134 IF(IVAR.EQ.9) WRITE(CHTMP,1400) MDCY(IDIM,2)
135 IF(IVAR.EQ.10) WRITE(CHTMP,1400) MDCY(IDIM,3)
136 IF(IVAR.EQ.11) WRITE(CHTMP,1400) MDME(IDIM,1)
137 IF(IVAR.EQ.12) WRITE(CHTMP,1400) MDME(IDIM,2)
138 IF(IVAR.EQ.13) WRITE(CHTMP,1500) BRAT(IDIM)
139 IF(IVAR.EQ.14) WRITE(CHTMP,1400) KFDP(IDIM,1)
140 IF(IVAR.EQ.15) WRITE(CHTMP,1400) KFDP(IDIM,2)
141 IF(IVAR.EQ.16) WRITE(CHTMP,1400) KFDP(IDIM,3)
142 IF(IVAR.EQ.17) WRITE(CHTMP,1400) KFDP(IDIM,4)
143 IF(IVAR.EQ.18) WRITE(CHTMP,1400) KFDP(IDIM,5)
144 IF(IVAR.EQ.19) CHTMP=CHAF(IDIM)
146 C...Length of variable, trailing decimal zeros, quotation marks.
150 IF(CHTMP(13-LL:13-LL).NE.' ') LLOW=13-LL
151 180 IF(CHTMP(LL:LL).NE.' ') LHIG=LL
152 CHNEW=CHTMP(LLOW:LHIG)//' '
154 IF((IVAR.GE.4.AND.IVAR.LE.7).OR.IVAR.EQ.13) THEN
157 IF(CHNEW(LNEW:LNEW).EQ.'0') GOTO 190
158 IF(LNEW.EQ.1) CHNEW(1:2)='0.'
160 ELSEIF(IVAR.EQ.19) THEN
162 IF(CHNEW(LL:LL).EQ.'''') THEN
164 CHNEW=CHTMP(1:LL)//''''//CHTMP(LL+1:11)
169 CHNEW(1:LNEW+2)=''''//CHTMP(1:LNEW)//''''
173 C...Form composite character string, often including repetition counter.
174 IF(CHNEW.NE.CHOLD) THEN
181 IF(NRPT.GE.2) LRPT=LNEW+3
182 IF(NRPT.GE.10) LRPT=LNEW+4
183 IF(NRPT.GE.100) LRPT=LNEW+5
184 IF(NRPT.GE.1000) LRPT=LNEW+6
187 WRITE(CHTMP,1400) NRPT
189 IF(NRPT.GE.10) LRPT=2
190 IF(NRPT.GE.100) LRPT=3
191 IF(NRPT.GE.1000) LRPT=4
192 CHCOM(1:LRPT+1+LNEW)=CHTMP(13-LRPT:12)//'*'//CHNEW(1:LNEW)
196 C...Add characters to end of line, to new line (after storing old line),
197 C...or to new block of lines (after writing old block).
198 IF(LLIN+LCOM.LE.70) THEN
199 CHLIN(LLIN+1:LLIN+LCOM+1)=CHCOM(1:LCOM)//','
201 ELSEIF(NLIN.LE.19) THEN
205 CHLIN(6:6+LCOM+1)='&'//CHCOM(1:LCOM)//','
208 CHLIN(LLIN:72)='/'//' '
210 WRITE(CHTMP,1400) IDIM-NRPT
211 CHBLK(1)(30:33)=CHTMP(9:12)
213 210 WRITE(LFN,1600) CHBLK(ILIN)
216 CHLIN(7:35+LCOM+1)='DATA ('//CHVAR(IVAR)//',I= , )/'//
218 WRITE(CHTMP,1400) IDIM-NRPT+1
219 CHLIN(25:28)=CHTMP(9:12)
224 C...Write final block of lines.
225 CHLIN(LLIN:72)='/'//' '
227 WRITE(CHTMP,1400) NDIM
228 CHBLK(1)(30:33)=CHTMP(9:12)
230 230 WRITE(LFN,1600) CHBLK(ILIN)
234 C...Formats for reading and writing particle data.
235 1000 FORMAT(1X,I4,2X,A8,3I3,3F12.5,2X,F12.5,I3)
236 1100 FORMAT(5X,2I5,F12.5,5I8)