]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PYTHIA/jetset/lugive.F
cuts on Q out, side, long added
[u/mrichter/AliRoot.git] / PYTHIA / jetset / lugive.F
CommitLineData
fe4da5cc 1
2C*********************************************************************
3
4 SUBROUTINE LUGIVE(CHIN)
5
6C...Purpose: to set values of commonblock variables (also in PYTHIA!).
7 COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5)
8 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
9 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
10 COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
11 COMMON/LUDAT4/CHAF(500)
12 CHARACTER CHAF*8
13 COMMON/LUDATR/MRLU(6),RRLU(100)
14 COMMON/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
15 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
16 COMMON/PYINT1/MINT(400),VINT(400)
17 COMMON/PYINT2/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
18 COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
19 COMMON/PYINT4/WIDP(21:40,0:40),WIDE(21:40,0:40),WIDS(21:40,3)
20 COMMON/PYINT5/NGEN(0:200,3),XSEC(0:200,3)
21 COMMON/PYINT6/PROC(0:200)
22 COMMON/PYINT7/SIGT(0:6,0:6,0:5)
23 CHARACTER PROC*28
24 SAVE /LUJETS/,/LUDAT1/,/LUDAT2/,/LUDAT3/,/LUDAT4/,/LUDATR/
25 SAVE /PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,
26 &/PYINT5/,/PYINT6/,/PYINT7/
27 CHARACTER CHIN*(*),CHFIX*104,CHBIT*104,CHOLD*8,CHNEW*8,CHOLD2*28,
28 &CHNEW2*28,CHNAM*4,CHVAR(43)*4,CHALP(2)*26,CHIND*8,CHINI*10,
29 &CHINR*16
30 DIMENSION MSVAR(43,8)
31
32C...For each variable to be translated give: name,
33C...integer/real/character, no. of indices, lower&upper index bounds.
34 DATA CHVAR/'N','K','P','V','MSTU','PARU','MSTJ','PARJ','KCHG',
35 &'PMAS','PARF','VCKM','MDCY','MDME','BRAT','KFDP','CHAF','MRLU',
36 &'RRLU','MSEL','MSUB','KFIN','CKIN','MSTP','PARP','MSTI','PARI',
37 &'MINT','VINT','ISET','KFPR','COEF','ICOL','XSFX','ISIG','SIGH',
38 &'WIDP','WIDE','WIDS','NGEN','XSEC','PROC','SIGT'/
39 DATA ((MSVAR(I,J),J=1,8),I=1,43)/ 1,7*0, 1,2,1,4000,1,5,2*0,
40 & 2,2,1,4000,1,5,2*0, 2,2,1,4000,1,5,2*0, 1,1,1,200,4*0,
41 & 2,1,1,200,4*0, 1,1,1,200,4*0, 2,1,1,200,4*0,
42 & 1,2,1,500,1,3,2*0, 2,2,1,500,1,4,2*0, 2,1,1,2000,4*0,
43 & 2,2,1,4,1,4,2*0, 1,2,1,500,1,3,2*0, 1,2,1,2000,1,2,2*0,
44 & 2,1,1,2000,4*0, 1,2,1,2000,1,5,2*0, 3,1,1,500,4*0,
45 & 1,1,1,6,4*0, 2,1,1,100,4*0,
46 & 1,7*0, 1,1,1,200,4*0, 1,2,1,2,-40,40,2*0, 2,1,1,200,4*0,
47 & 1,1,1,200,4*0, 2,1,1,200,4*0, 1,1,1,200,4*0, 2,1,1,200,4*0,
48 & 1,1,1,400,4*0, 2,1,1,400,4*0, 1,1,1,200,4*0,
49 & 1,2,1,200,1,2,2*0, 2,2,1,200,1,20,2*0, 1,3,1,40,1,4,1,2,
50 & 2,2,1,2,-40,40,2*0, 1,2,1,1000,1,3,2*0, 2,1,1,1000,4*0,
51 & 2,2,21,40,0,40,2*0, 2,2,21,40,0,40,2*0, 2,2,21,40,1,3,2*0,
52 & 1,2,0,200,1,3,2*0, 2,2,0,200,1,3,2*0, 4,1,0,200,4*0,
53 & 2,3,0,6,0,6,0,5/
54 DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
55 &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
56
57C...Length of character variable. Subdivide it into instructions.
58 IF(MSTU(12).GE.1) CALL LULIST(0)
59 CHBIT=CHIN//' '
60 LBIT=101
61 100 LBIT=LBIT-1
62 IF(CHBIT(LBIT:LBIT).EQ.' ') GOTO 100
63 LTOT=0
64 DO 110 LCOM=1,LBIT
65 IF(CHBIT(LCOM:LCOM).EQ.' ') GOTO 110
66 LTOT=LTOT+1
67 CHFIX(LTOT:LTOT)=CHBIT(LCOM:LCOM)
68 110 CONTINUE
69 LLOW=0
70 120 LHIG=LLOW+1
71 130 LHIG=LHIG+1
72 IF(LHIG.LE.LTOT.AND.CHFIX(LHIG:LHIG).NE.';') GOTO 130
73 LBIT=LHIG-LLOW-1
74 CHBIT(1:LBIT)=CHFIX(LLOW+1:LHIG-1)
75
76C...Identify commonblock variable.
77 LNAM=1
78 140 LNAM=LNAM+1
79 IF(CHBIT(LNAM:LNAM).NE.'('.AND.CHBIT(LNAM:LNAM).NE.'='.AND.
80 &LNAM.LE.4) GOTO 140
81 CHNAM=CHBIT(1:LNAM-1)//' '
82 DO 160 LCOM=1,LNAM-1
83 DO 150 LALP=1,26
84 IF(CHNAM(LCOM:LCOM).EQ.CHALP(1)(LALP:LALP)) CHNAM(LCOM:LCOM)=
85 &CHALP(2)(LALP:LALP)
86 150 CONTINUE
87 160 CONTINUE
88 IVAR=0
89 DO 170 IV=1,43
90 IF(CHNAM.EQ.CHVAR(IV)) IVAR=IV
91 170 CONTINUE
92 IF(IVAR.EQ.0) THEN
93 CALL LUERRM(18,'(LUGIVE:) do not recognize variable '//CHNAM)
94 LLOW=LHIG
95 IF(LLOW.LT.LTOT) GOTO 120
96 RETURN
97 ENDIF
98
99C...Identify any indices.
100 I1=0
101 I2=0
102 I3=0
103 NINDX=0
104 IF(CHBIT(LNAM:LNAM).EQ.'(') THEN
105 LIND=LNAM
106 180 LIND=LIND+1
107 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 180
108 CHIND=' '
109 IF((CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.'c').
110 & AND.(IVAR.EQ.9.OR.IVAR.EQ.10.OR.IVAR.EQ.13.OR.IVAR.EQ.17)) THEN
111 CHIND(LNAM-LIND+11:8)=CHBIT(LNAM+2:LIND-1)
112 READ(CHIND,'(I8)') KF
113 I1=LUCOMP(KF)
114 ELSEIF(CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.
115 & 'c') THEN
116 CALL LUERRM(18,'(LUGIVE:) not allowed to use C index for '//
117 & CHNAM)
118 LLOW=LHIG
119 IF(LLOW.LT.LTOT) GOTO 120
120 RETURN
121 ELSE
122 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
123 READ(CHIND,'(I8)') I1
124 ENDIF
125 LNAM=LIND
126 IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
127 NINDX=1
128 ENDIF
129 IF(CHBIT(LNAM:LNAM).EQ.',') THEN
130 LIND=LNAM
131 190 LIND=LIND+1
132 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 190
133 CHIND=' '
134 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
135 READ(CHIND,'(I8)') I2
136 LNAM=LIND
137 IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
138 NINDX=2
139 ENDIF
140 IF(CHBIT(LNAM:LNAM).EQ.',') THEN
141 LIND=LNAM
142 200 LIND=LIND+1
143 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 200
144 CHIND=' '
145 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
146 READ(CHIND,'(I8)') I3
147 LNAM=LIND+1
148 NINDX=3
149 ENDIF
150
151C...Check that indices allowed.
152 IERR=0
153 IF(NINDX.NE.MSVAR(IVAR,2)) IERR=1
154 IF(NINDX.GE.1.AND.(I1.LT.MSVAR(IVAR,3).OR.I1.GT.MSVAR(IVAR,4)))
155 &IERR=2
156 IF(NINDX.GE.2.AND.(I2.LT.MSVAR(IVAR,5).OR.I2.GT.MSVAR(IVAR,6)))
157 &IERR=3
158 IF(NINDX.EQ.3.AND.(I3.LT.MSVAR(IVAR,7).OR.I3.GT.MSVAR(IVAR,8)))
159 &IERR=4
160 IF(CHBIT(LNAM:LNAM).NE.'=') IERR=5
161 IF(IERR.GE.1) THEN
162 CALL LUERRM(18,'(LUGIVE:) unallowed indices for '//
163 & CHBIT(1:LNAM-1))
164 LLOW=LHIG
165 IF(LLOW.LT.LTOT) GOTO 120
166 RETURN
167 ENDIF
168
169C...Save old value of variable.
170 IF(IVAR.EQ.1) THEN
171 IOLD=N
172 ELSEIF(IVAR.EQ.2) THEN
173 IOLD=K(I1,I2)
174 ELSEIF(IVAR.EQ.3) THEN
175 ROLD=P(I1,I2)
176 ELSEIF(IVAR.EQ.4) THEN
177 ROLD=V(I1,I2)
178 ELSEIF(IVAR.EQ.5) THEN
179 IOLD=MSTU(I1)
180 ELSEIF(IVAR.EQ.6) THEN
181 ROLD=PARU(I1)
182 ELSEIF(IVAR.EQ.7) THEN
183 IOLD=MSTJ(I1)
184 ELSEIF(IVAR.EQ.8) THEN
185 ROLD=PARJ(I1)
186 ELSEIF(IVAR.EQ.9) THEN
187 IOLD=KCHG(I1,I2)
188 ELSEIF(IVAR.EQ.10) THEN
189 ROLD=PMAS(I1,I2)
190 ELSEIF(IVAR.EQ.11) THEN
191 ROLD=PARF(I1)
192 ELSEIF(IVAR.EQ.12) THEN
193 ROLD=VCKM(I1,I2)
194 ELSEIF(IVAR.EQ.13) THEN
195 IOLD=MDCY(I1,I2)
196 ELSEIF(IVAR.EQ.14) THEN
197 IOLD=MDME(I1,I2)
198 ELSEIF(IVAR.EQ.15) THEN
199 ROLD=BRAT(I1)
200 ELSEIF(IVAR.EQ.16) THEN
201 IOLD=KFDP(I1,I2)
202 ELSEIF(IVAR.EQ.17) THEN
203 CHOLD=CHAF(I1)
204 ELSEIF(IVAR.EQ.18) THEN
205 IOLD=MRLU(I1)
206 ELSEIF(IVAR.EQ.19) THEN
207 ROLD=RRLU(I1)
208 ELSEIF(IVAR.EQ.20) THEN
209 IOLD=MSEL
210 ELSEIF(IVAR.EQ.21) THEN
211 IOLD=MSUB(I1)
212 ELSEIF(IVAR.EQ.22) THEN
213 IOLD=KFIN(I1,I2)
214 ELSEIF(IVAR.EQ.23) THEN
215 ROLD=CKIN(I1)
216 ELSEIF(IVAR.EQ.24) THEN
217 IOLD=MSTP(I1)
218 ELSEIF(IVAR.EQ.25) THEN
219 ROLD=PARP(I1)
220 ELSEIF(IVAR.EQ.26) THEN
221 IOLD=MSTI(I1)
222 ELSEIF(IVAR.EQ.27) THEN
223 ROLD=PARI(I1)
224 ELSEIF(IVAR.EQ.28) THEN
225 IOLD=MINT(I1)
226 ELSEIF(IVAR.EQ.29) THEN
227 ROLD=VINT(I1)
228 ELSEIF(IVAR.EQ.30) THEN
229 IOLD=ISET(I1)
230 ELSEIF(IVAR.EQ.31) THEN
231 IOLD=KFPR(I1,I2)
232 ELSEIF(IVAR.EQ.32) THEN
233 ROLD=COEF(I1,I2)
234 ELSEIF(IVAR.EQ.33) THEN
235 IOLD=ICOL(I1,I2,I3)
236 ELSEIF(IVAR.EQ.34) THEN
237 ROLD=XSFX(I1,I2)
238 ELSEIF(IVAR.EQ.35) THEN
239 IOLD=ISIG(I1,I2)
240 ELSEIF(IVAR.EQ.36) THEN
241 ROLD=SIGH(I1)
242 ELSEIF(IVAR.EQ.37) THEN
243 ROLD=WIDP(I1,I2)
244 ELSEIF(IVAR.EQ.38) THEN
245 ROLD=WIDE(I1,I2)
246 ELSEIF(IVAR.EQ.39) THEN
247 ROLD=WIDS(I1,I2)
248 ELSEIF(IVAR.EQ.40) THEN
249 IOLD=NGEN(I1,I2)
250 ELSEIF(IVAR.EQ.41) THEN
251 ROLD=XSEC(I1,I2)
252 ELSEIF(IVAR.EQ.42) THEN
253 CHOLD2=PROC(I1)
254 ELSEIF(IVAR.EQ.43) THEN
255 ROLD=SIGT(I1,I2,I3)
256 ENDIF
257
258C...Print current value of variable. Loop back.
259 IF(LNAM.GE.LBIT) THEN
260 CHBIT(LNAM:14)=' '
261 CHBIT(15:60)=' has the value '
262 IF(MSVAR(IVAR,1).EQ.1) THEN
263 WRITE(CHBIT(51:60),'(I10)') IOLD
264 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
265 WRITE(CHBIT(47:60),'(F14.5)') ROLD
266 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
267 CHBIT(53:60)=CHOLD
268 ELSE
269 CHBIT(33:60)=CHOLD
270 ENDIF
271 IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
272 LLOW=LHIG
273 IF(LLOW.LT.LTOT) GOTO 120
274 RETURN
275 ENDIF
276
277C...Read in new variable value.
278 IF(MSVAR(IVAR,1).EQ.1) THEN
279 CHINI=' '
280 CHINI(LNAM-LBIT+11:10)=CHBIT(LNAM+1:LBIT)
281 READ(CHINI,'(I10)') INEW
282 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
283 CHINR=' '
284 CHINR(LNAM-LBIT+17:16)=CHBIT(LNAM+1:LBIT)
285 READ(CHINR,'(F16.2)') RNEW
286 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
287 CHNEW=CHBIT(LNAM+1:LBIT)//' '
288 ELSE
289 CHNEW2=CHBIT(LNAM+1:LBIT)//' '
290 ENDIF
291
292C...Store new variable value.
293 IF(IVAR.EQ.1) THEN
294 N=INEW
295 ELSEIF(IVAR.EQ.2) THEN
296 K(I1,I2)=INEW
297 ELSEIF(IVAR.EQ.3) THEN
298 P(I1,I2)=RNEW
299 ELSEIF(IVAR.EQ.4) THEN
300 V(I1,I2)=RNEW
301 ELSEIF(IVAR.EQ.5) THEN
302 MSTU(I1)=INEW
303 ELSEIF(IVAR.EQ.6) THEN
304 PARU(I1)=RNEW
305 ELSEIF(IVAR.EQ.7) THEN
306 MSTJ(I1)=INEW
307 ELSEIF(IVAR.EQ.8) THEN
308 PARJ(I1)=RNEW
309 ELSEIF(IVAR.EQ.9) THEN
310 KCHG(I1,I2)=INEW
311 ELSEIF(IVAR.EQ.10) THEN
312 PMAS(I1,I2)=RNEW
313 ELSEIF(IVAR.EQ.11) THEN
314 PARF(I1)=RNEW
315 ELSEIF(IVAR.EQ.12) THEN
316 VCKM(I1,I2)=RNEW
317 ELSEIF(IVAR.EQ.13) THEN
318 MDCY(I1,I2)=INEW
319 ELSEIF(IVAR.EQ.14) THEN
320 MDME(I1,I2)=INEW
321 ELSEIF(IVAR.EQ.15) THEN
322 BRAT(I1)=RNEW
323 ELSEIF(IVAR.EQ.16) THEN
324 KFDP(I1,I2)=INEW
325 ELSEIF(IVAR.EQ.17) THEN
326 CHAF(I1)=CHNEW
327 ELSEIF(IVAR.EQ.18) THEN
328 MRLU(I1)=INEW
329 ELSEIF(IVAR.EQ.19) THEN
330 RRLU(I1)=RNEW
331 ELSEIF(IVAR.EQ.20) THEN
332 MSEL=INEW
333 ELSEIF(IVAR.EQ.21) THEN
334 MSUB(I1)=INEW
335 ELSEIF(IVAR.EQ.22) THEN
336 KFIN(I1,I2)=INEW
337 ELSEIF(IVAR.EQ.23) THEN
338 CKIN(I1)=RNEW
339 ELSEIF(IVAR.EQ.24) THEN
340 MSTP(I1)=INEW
341 ELSEIF(IVAR.EQ.25) THEN
342 PARP(I1)=RNEW
343 ELSEIF(IVAR.EQ.26) THEN
344 MSTI(I1)=INEW
345 ELSEIF(IVAR.EQ.27) THEN
346 PARI(I1)=RNEW
347 ELSEIF(IVAR.EQ.28) THEN
348 MINT(I1)=INEW
349 ELSEIF(IVAR.EQ.29) THEN
350 VINT(I1)=RNEW
351 ELSEIF(IVAR.EQ.30) THEN
352 ISET(I1)=INEW
353 ELSEIF(IVAR.EQ.31) THEN
354 KFPR(I1,I2)=INEW
355 ELSEIF(IVAR.EQ.32) THEN
356 COEF(I1,I2)=RNEW
357 ELSEIF(IVAR.EQ.33) THEN
358 ICOL(I1,I2,I3)=INEW
359 ELSEIF(IVAR.EQ.34) THEN
360 XSFX(I1,I2)=RNEW
361 ELSEIF(IVAR.EQ.35) THEN
362 ISIG(I1,I2)=INEW
363 ELSEIF(IVAR.EQ.36) THEN
364 SIGH(I1)=RNEW
365 ELSEIF(IVAR.EQ.37) THEN
366 WIDP(I1,I2)=RNEW
367 ELSEIF(IVAR.EQ.38) THEN
368 WIDE(I1,I2)=RNEW
369 ELSEIF(IVAR.EQ.39) THEN
370 WIDS(I1,I2)=RNEW
371 ELSEIF(IVAR.EQ.40) THEN
372 NGEN(I1,I2)=INEW
373 ELSEIF(IVAR.EQ.41) THEN
374 XSEC(I1,I2)=RNEW
375 ELSEIF(IVAR.EQ.42) THEN
376 PROC(I1)=CHNEW2
377 ELSEIF(IVAR.EQ.43) THEN
378 SIGT(I1,I2,I3)=RNEW
379 ENDIF
380
381C...Write old and new value. Loop back.
382 CHBIT(LNAM:14)=' '
383 CHBIT(15:60)=' changed from to '
384 IF(MSVAR(IVAR,1).EQ.1) THEN
385 WRITE(CHBIT(33:42),'(I10)') IOLD
386 WRITE(CHBIT(51:60),'(I10)') INEW
387 IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
388 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
389 WRITE(CHBIT(29:42),'(F14.5)') ROLD
390 WRITE(CHBIT(47:60),'(F14.5)') RNEW
391 IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
392 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
393 CHBIT(35:42)=CHOLD
394 CHBIT(53:60)=CHNEW
395 IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
396 ELSE
397 CHBIT(15:88)=' changed from '//CHOLD2//' to '//CHNEW2
398 IF(MSTU(13).GE.1) WRITE(MSTU(11),5100) CHBIT(1:88)
399 ENDIF
400 LLOW=LHIG
401 IF(LLOW.LT.LTOT) GOTO 120
402
403C...Format statement for output on unit MSTU(11) (by default 6).
404 5000 FORMAT(5X,A60)
405 5100 FORMAT(5X,A88)
406
407 RETURN
408 END