2 C*********************************************************************
4 SUBROUTINE LUUPDA(MUPDA,LFN)
6 C...Purpose: to facilitate the updating of particle and decay data.
7 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
8 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
9 COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
10 COMMON/LUDAT4/CHAF(500)
12 SAVE /LUDAT1/,/LUDAT2/,/LUDAT3/,/LUDAT4/
13 CHARACTER CHINL*80,CHKC*4,CHVAR(19)*9,CHLIN*72,
14 &CHBLK(20)*72,CHOLD*12,CHTMP*12,CHNEW*12,CHCOM*12
15 DATA CHVAR/ 'KCHG(I,1)','KCHG(I,2)','KCHG(I,3)','PMAS(I,1)',
16 &'PMAS(I,2)','PMAS(I,3)','PMAS(I,4)','MDCY(I,1)','MDCY(I,2)',
17 &'MDCY(I,3)','MDME(I,1)','MDME(I,2)','BRAT(I) ','KFDP(I,1)',
18 &'KFDP(I,2)','KFDP(I,3)','KFDP(I,4)','KFDP(I,5)','CHAF(I) '/
20 C...Write information on file for editing.
21 IF(MSTU(12).GE.1) CALL LULIST(0)
24 WRITE(LFN,5000) KC,CHAF(KC),(KCHG(KC,J1),J1=1,3),
25 & (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
26 DO 100 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
27 WRITE(LFN,5100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
32 C...Reset variables and read information from edited file.
33 ELSEIF(MUPDA.EQ.2) THEN
45 140 READ(LFN,5200,END=150) CHINL
46 IF(CHINL(2:5).NE.' ') THEN
50 IF(NDC.NE.0) MDCY(KC,2)=IDC+1-NDC
54 IF(KC.LE.0.OR.KC.GT.MSTU(6)) CALL LUERRM(27,
55 & '(LUUPDA:) Read KC code illegal, KC ='//CHKC)
56 READ(CHINL,5000) KCR,CHAF(KC),(KCHG(KC,J1),J1=1,3),
57 & (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
62 IF(IDC.GE.MSTU(7)) CALL LUERRM(27,
63 & '(LUUPDA:) Decay data arrays full by KC ='//CHKC)
64 READ(CHINL,5100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
69 IF(NDC.NE.0) MDCY(KC,2)=IDC+1-NDC
72 C...Perform possible tests that new information is consistent.
77 IF(MIN(PMAS(KC,1),PMAS(KC,2),PMAS(KC,3),PMAS(KC,1)-PMAS(KC,3),
78 & PMAS(KC,4)).LT.0..OR.MDCY(KC,3).LT.0) CALL LUERRM(17,
79 & '(LUUPDA:) Mass/width/life/(# channels) wrong for KC ='//CHKC)
81 DO 170 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
82 IF(MDME(IDC,2).GT.80) GOTO 170
84 PMS=PMAS(KC,1)-PMAS(KC,3)-PARJ(64)
88 IF(KP.EQ.0.OR.KP.EQ.81.OR.IABS(KP).EQ.82) THEN
89 ELSEIF(LUCOMP(KP).EQ.0) THEN
96 IF(KQ.NE.0) MERR=MAX(2,MERR)
97 IF(KFDP(IDC,2).NE.0.AND.(KC.LE.20.OR.KC.GT.40).AND.
98 & (KC.LE.80.OR.KC.GT.100).AND.MDME(IDC,2).NE.34.AND.
99 & MDME(IDC,2).NE.61.AND.PMS.LT.0.) MERR=MAX(1,MERR)
100 IF(MERR.EQ.3) CALL LUERRM(17,
101 & '(LUUPDA:) Unknown particle code in decay of KC ='//CHKC)
102 IF(MERR.EQ.2) CALL LUERRM(17,
103 & '(LUUPDA:) Charge not conserved in decay of KC ='//CHKC)
104 IF(MERR.EQ.1) CALL LUERRM(7,
105 & '(LUUPDA:) Kinematically unallowed decay of KC ='//CHKC)
106 BRSUM=BRSUM+BRAT(IDC)
108 WRITE(CHTMP,5500) BRSUM
109 IF(ABS(BRSUM).GT.0.0005.AND.ABS(BRSUM-1.).GT.0.0005) CALL
110 & LUERRM(7,'(LUUPDA:) Sum of branching ratios is '//CHTMP(5:12)//
115 C...Initialize writing of DATA statements for inclusion in program.
116 ELSEIF(MUPDA.EQ.3) THEN
119 IF(IVAR.GE.11.AND.IVAR.LE.18) NDIM=MSTU(7)
122 CHLIN(7:35)='DATA ('//CHVAR(IVAR)//',I= 1, )/'
126 C...Loop through variables for conversion to characters.
128 IF(IVAR.EQ.1) WRITE(CHTMP,5400) KCHG(IDIM,1)
129 IF(IVAR.EQ.2) WRITE(CHTMP,5400) KCHG(IDIM,2)
130 IF(IVAR.EQ.3) WRITE(CHTMP,5400) KCHG(IDIM,3)
131 IF(IVAR.EQ.4) WRITE(CHTMP,5500) PMAS(IDIM,1)
132 IF(IVAR.EQ.5) WRITE(CHTMP,5500) PMAS(IDIM,2)
133 IF(IVAR.EQ.6) WRITE(CHTMP,5500) PMAS(IDIM,3)
134 IF(IVAR.EQ.7) WRITE(CHTMP,5500) PMAS(IDIM,4)
135 IF(IVAR.EQ.8) WRITE(CHTMP,5400) MDCY(IDIM,1)
136 IF(IVAR.EQ.9) WRITE(CHTMP,5400) MDCY(IDIM,2)
137 IF(IVAR.EQ.10) WRITE(CHTMP,5400) MDCY(IDIM,3)
138 IF(IVAR.EQ.11) WRITE(CHTMP,5400) MDME(IDIM,1)
139 IF(IVAR.EQ.12) WRITE(CHTMP,5400) MDME(IDIM,2)
140 IF(IVAR.EQ.13) WRITE(CHTMP,5500) BRAT(IDIM)
141 IF(IVAR.EQ.14) WRITE(CHTMP,5400) KFDP(IDIM,1)
142 IF(IVAR.EQ.15) WRITE(CHTMP,5400) KFDP(IDIM,2)
143 IF(IVAR.EQ.16) WRITE(CHTMP,5400) KFDP(IDIM,3)
144 IF(IVAR.EQ.17) WRITE(CHTMP,5400) KFDP(IDIM,4)
145 IF(IVAR.EQ.18) WRITE(CHTMP,5400) KFDP(IDIM,5)
146 IF(IVAR.EQ.19) CHTMP=CHAF(IDIM)
148 C...Length of variable, trailing decimal zeros, quotation marks.
152 IF(CHTMP(13-LL:13-LL).NE.' ') LLOW=13-LL
153 IF(CHTMP(LL:LL).NE.' ') LHIG=LL
155 CHNEW=CHTMP(LLOW:LHIG)//' '
157 IF((IVAR.GE.4.AND.IVAR.LE.7).OR.IVAR.EQ.13) THEN
160 IF(CHNEW(LNEW:LNEW).EQ.'0') GOTO 200
161 IF(LNEW.EQ.1) CHNEW(1:2)='0.'
163 ELSEIF(IVAR.EQ.19) THEN
165 IF(CHNEW(LL:LL).EQ.'''') THEN
167 CHNEW=CHTMP(1:LL)//''''//CHTMP(LL+1:11)
172 CHNEW(1:LNEW+2)=''''//CHTMP(1:LNEW)//''''
176 C...Form composite character string, often including repetition counter.
177 IF(CHNEW.NE.CHOLD) THEN
184 IF(NRPT.GE.2) LRPT=LNEW+3
185 IF(NRPT.GE.10) LRPT=LNEW+4
186 IF(NRPT.GE.100) LRPT=LNEW+5
187 IF(NRPT.GE.1000) LRPT=LNEW+6
190 WRITE(CHTMP,5400) NRPT
192 IF(NRPT.GE.10) LRPT=2
193 IF(NRPT.GE.100) LRPT=3
194 IF(NRPT.GE.1000) LRPT=4
195 CHCOM(1:LRPT+1+LNEW)=CHTMP(13-LRPT:12)//'*'//CHNEW(1:LNEW)
199 C...Add characters to end of line, to new line (after storing old line),
200 C...or to new block of lines (after writing old block).
201 IF(LLIN+LCOM.LE.70) THEN
202 CHLIN(LLIN+1:LLIN+LCOM+1)=CHCOM(1:LCOM)//','
204 ELSEIF(NLIN.LE.19) THEN
208 CHLIN(6:6+LCOM+1)='&'//CHCOM(1:LCOM)//','
211 CHLIN(LLIN:72)='/'//' '
213 WRITE(CHTMP,5400) IDIM-NRPT
214 CHBLK(1)(30:33)=CHTMP(9:12)
216 WRITE(LFN,5600) CHBLK(ILIN)
220 CHLIN(7:35+LCOM+1)='DATA ('//CHVAR(IVAR)//',I= , )/'//
222 WRITE(CHTMP,5400) IDIM-NRPT+1
223 CHLIN(25:28)=CHTMP(9:12)
228 C...Write final block of lines.
229 CHLIN(LLIN:72)='/'//' '
231 WRITE(CHTMP,5400) NDIM
232 CHBLK(1)(30:33)=CHTMP(9:12)
234 WRITE(LFN,5600) CHBLK(ILIN)
239 C...Formats for reading and writing particle data.
240 5000 FORMAT(1X,I4,2X,A8,3I3,3F12.5,2X,F12.5,I3)
241 5100 FORMAT(5X,2I5,F12.5,5I8)