1 *CMZ : 17/07/98 15.44.34 by Federico Carminati
3 C*********************************************************************
5 SUBROUTINE LUUPDA(MUPDA,LFN)
7 C...Purpose: to facilitate the updating of particle and decay data.
9 COMMON /LUDAT1/ MSTU(200),PARU(200),MSTJ(200),PARJ(200)
12 COMMON /LUDAT2/ KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
15 COMMON /LUDAT3/ MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
18 COMMON /LUDAT4/ CHAF(500)
22 CHARACTER CHINL*80,CHKC*4,CHVAR(19)*9,CHLIN*72,
23 &CHBLK(20)*72,CHOLD*12,CHTMP*12,CHNEW*12,CHCOM*12
24 DATA CHVAR/ 'KCHG(I,1)','KCHG(I,2)','KCHG(I,3)','PMAS(I,1)',
25 &'PMAS(I,2)','PMAS(I,3)','PMAS(I,4)','MDCY(I,1)','MDCY(I,2)',
26 &'MDCY(I,3)','MDME(I,1)','MDME(I,2)','BRAT(I) ','KFDP(I,1)',
27 &'KFDP(I,2)','KFDP(I,3)','KFDP(I,4)','KFDP(I,5)','CHAF(I) '/
29 C...Write information on file for editing.
30 IF(MSTU(12).GE.1) CALL LULIST(0)
33 WRITE(LFN,1000) KC,CHAF(KC),(KCHG(KC,J1),J1=1,3),
34 & (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
35 DO 100 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
36 100 WRITE(LFN,1100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
40 C...Reset variables and read information from edited file.
41 ELSEIF(MUPDA.EQ.2) THEN
51 130 READ(LFN,1200,END=140) CHINL
52 IF(CHINL(2:5).NE.' ') THEN
56 IF(NDC.NE.0) MDCY(KC,2)=IDC+1-NDC
60 IF(KC.LE.0.OR.KC.GT.MSTU(6)) CALL LUERRM(27,
61 & '(LUUPDA:) Read KC code illegal, KC ='//CHKC)
62 READ(CHINL,1000) KCR,CHAF(KC),(KCHG(KC,J1),J1=1,3),
63 & (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
68 IF(IDC.GE.MSTU(7)) CALL LUERRM(27,
69 & '(LUUPDA:) Decay data arrays full by KC ='//CHKC)
70 READ(CHINL,1100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
75 IF(NDC.NE.0) MDCY(KC,2)=IDC+1-NDC
78 C...Perform possible tests that new information is consistent.
83 IF(MIN(PMAS(KC,1),PMAS(KC,2),PMAS(KC,3),PMAS(KC,1)-PMAS(KC,3),
84 & PMAS(KC,4)).LT.0..OR.MDCY(KC,3).LT.0) CALL LUERRM(17,
85 & '(LUUPDA:) Mass/width/life/(# channels) wrong for KC ='//CHKC)
87 DO 160 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
88 IF(MDME(IDC,2).GT.80) GOTO 160
90 PMS=PMAS(KC,1)-PMAS(KC,3)-PARJ(64)
94 IF(KP.EQ.0.OR.KP.EQ.81.OR.IABS(KP).EQ.82) THEN
95 ELSEIF(LUCOMP(KP).EQ.0) THEN
102 IF(KQ.NE.0) MERR=MAX(2,MERR)
103 IF(KFDP(IDC,2).NE.0.AND.(KC.LE.20.OR.KC.GT.40).AND.
104 & (KC.LE.80.OR.KC.GT.100).AND.MDME(IDC,2).NE.34.AND.
105 & MDME(IDC,2).NE.61.AND.PMS.LT.0.) MERR=MAX(1,MERR)
106 IF(MERR.EQ.3) CALL LUERRM(17,
107 & '(LUUPDA:) Unknown particle code in decay of KC ='//CHKC)
108 IF(MERR.EQ.2) CALL LUERRM(17,
109 & '(LUUPDA:) Charge not conserved in decay of KC ='//CHKC)
110 IF(MERR.EQ.1) CALL LUERRM(7,
111 & '(LUUPDA:) Kinematically unallowed decay of KC ='//CHKC)
112 BRSUM=BRSUM+BRAT(IDC)
114 WRITE(CHTMP,1500) BRSUM
115 IF(ABS(BRSUM).GT.0.0005.AND.ABS(BRSUM-1.).GT.0.0005) CALL
116 & LUERRM(7,'(LUUPDA:) Sum of branching ratios is '//CHTMP(5:12)//
121 C...Initialize writing of DATA statements for inclusion in program.
122 ELSEIF(MUPDA.EQ.3) THEN
125 IF(IVAR.GE.11.AND.IVAR.LE.18) NDIM=MSTU(7)
128 CHLIN(7:35)='DATA ('//CHVAR(IVAR)//',I= 1, )/'
132 C...Loop through variables for conversion to characters.
134 IF(IVAR.EQ.1) WRITE(CHTMP,1400) KCHG(IDIM,1)
135 IF(IVAR.EQ.2) WRITE(CHTMP,1400) KCHG(IDIM,2)
136 IF(IVAR.EQ.3) WRITE(CHTMP,1400) KCHG(IDIM,3)
137 IF(IVAR.EQ.4) WRITE(CHTMP,1500) PMAS(IDIM,1)
138 IF(IVAR.EQ.5) WRITE(CHTMP,1500) PMAS(IDIM,2)
139 IF(IVAR.EQ.6) WRITE(CHTMP,1500) PMAS(IDIM,3)
140 IF(IVAR.EQ.7) WRITE(CHTMP,1500) PMAS(IDIM,4)
141 IF(IVAR.EQ.8) WRITE(CHTMP,1400) MDCY(IDIM,1)
142 IF(IVAR.EQ.9) WRITE(CHTMP,1400) MDCY(IDIM,2)
143 IF(IVAR.EQ.10) WRITE(CHTMP,1400) MDCY(IDIM,3)
144 IF(IVAR.EQ.11) WRITE(CHTMP,1400) MDME(IDIM,1)
145 IF(IVAR.EQ.12) WRITE(CHTMP,1400) MDME(IDIM,2)
146 IF(IVAR.EQ.13) WRITE(CHTMP,1500) BRAT(IDIM)
147 IF(IVAR.EQ.14) WRITE(CHTMP,1400) KFDP(IDIM,1)
148 IF(IVAR.EQ.15) WRITE(CHTMP,1400) KFDP(IDIM,2)
149 IF(IVAR.EQ.16) WRITE(CHTMP,1400) KFDP(IDIM,3)
150 IF(IVAR.EQ.17) WRITE(CHTMP,1400) KFDP(IDIM,4)
151 IF(IVAR.EQ.18) WRITE(CHTMP,1400) KFDP(IDIM,5)
152 IF(IVAR.EQ.19) CHTMP=CHAF(IDIM)
154 C...Length of variable, trailing decimal zeros, quotation marks.
158 IF(CHTMP(13-LL:13-LL).NE.' ') LLOW=13-LL
159 180 IF(CHTMP(LL:LL).NE.' ') LHIG=LL
160 CHNEW=CHTMP(LLOW:LHIG)//' '
162 IF((IVAR.GE.4.AND.IVAR.LE.7).OR.IVAR.EQ.13) THEN
165 IF(CHNEW(LNEW:LNEW).EQ.'0') GOTO 190
166 IF(LNEW.EQ.1) CHNEW(1:2)='0.'
168 ELSEIF(IVAR.EQ.19) THEN
170 IF(CHNEW(LL:LL).EQ.'''') THEN
172 CHNEW=CHTMP(1:LL)//''''//CHTMP(LL+1:11)
177 CHNEW(1:LNEW+2)=''''//CHTMP(1:LNEW)//''''
181 C...Form composite character string, often including repetition counter.
182 IF(CHNEW.NE.CHOLD) THEN
189 IF(NRPT.GE.2) LRPT=LNEW+3
190 IF(NRPT.GE.10) LRPT=LNEW+4
191 IF(NRPT.GE.100) LRPT=LNEW+5
192 IF(NRPT.GE.1000) LRPT=LNEW+6
195 WRITE(CHTMP,1400) NRPT
197 IF(NRPT.GE.10) LRPT=2
198 IF(NRPT.GE.100) LRPT=3
199 IF(NRPT.GE.1000) LRPT=4
200 CHCOM(1:LRPT+1+LNEW)=CHTMP(13-LRPT:12)//'*'//CHNEW(1:LNEW)
204 C...Add characters to end of line, to new line (after storing old line),
205 C...or to new block of lines (after writing old block).
206 IF(LLIN+LCOM.LE.70) THEN
207 CHLIN(LLIN+1:LLIN+LCOM+1)=CHCOM(1:LCOM)//','
209 ELSEIF(NLIN.LE.19) THEN
213 CHLIN(6:6+LCOM+1)='&'//CHCOM(1:LCOM)//','
216 CHLIN(LLIN:72)='/'//' '
218 WRITE(CHTMP,1400) IDIM-NRPT
219 CHBLK(1)(30:33)=CHTMP(9:12)
221 210 WRITE(LFN,1600) CHBLK(ILIN)
224 CHLIN(7:35+LCOM+1)='DATA ('//CHVAR(IVAR)//',I= , )/'//
226 WRITE(CHTMP,1400) IDIM-NRPT+1
227 CHLIN(25:28)=CHTMP(9:12)
232 C...Write final block of lines.
233 CHLIN(LLIN:72)='/'//' '
235 WRITE(CHTMP,1400) NDIM
236 CHBLK(1)(30:33)=CHTMP(9:12)
238 230 WRITE(LFN,1600) CHBLK(ILIN)
242 C...Formats for reading and writing particle data.
243 1000 FORMAT(1X,I4,2X,A8,3I3,3F12.5,2X,F12.5,I3)
244 1100 FORMAT(5X,2I5,F12.5,5I8)