]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA/jetset/lugive.F
Moved GetGoodParticles to alimacros
[u/mrichter/AliRoot.git] / PYTHIA / jetset / lugive.F
1  
2 C********************************************************************* 
3  
4       SUBROUTINE LUGIVE(CHIN) 
5  
6 C...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  
32 C...For each variable to be translated give: name, 
33 C...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  
57 C...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  
76 C...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  
99 C...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  
151 C...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  
169 C...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  
258 C...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  
277 C...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  
292 C...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  
381 C...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  
403 C...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