]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA/pythia/pyinbm.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / PYTHIA / pythia / pyinbm.F
1  
2 C*********************************************************************
3  
4       SUBROUTINE PYINBM(CHFRAM,CHBEAM,CHTARG,WIN)
5  
6 C...Identifies the two incoming particles and the choice of frame.
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/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
11       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
12       COMMON/PYINT1/MINT(400),VINT(400)
13       SAVE /LUJETS/,/LUDAT1/,/LUDAT2/
14       SAVE /PYSUBS/,/PYPARS/,/PYINT1/
15       CHARACTER CHFRAM*8,CHBEAM*8,CHTARG*8,CHCOM(3)*8,CHALP(2)*26,
16      &CHIDNT(3)*8,CHTEMP*8,CHCDE(29)*8,CHINIT*76
17       DIMENSION LEN(3),KCDE(29),PM(2)
18       DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
19      &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
20       DATA CHCDE/'e-      ','e+      ','nu_e    ','nu_e~   ',
21      &'mu-     ','mu+     ','nu_mu   ','nu_mu~  ','tau-    ',
22      &'tau+    ','nu_tau  ','nu_tau~ ','pi+     ','pi-     ',
23      &'n0      ','n~0     ','p+      ','p~-     ','gamma   ',
24      &'lambda0 ','sigma-  ','sigma0  ','sigma+  ','xi-     ',
25      &'xi0     ','omega-  ','pi0     ','reggeon ','pomeron '/
26       DATA KCDE/11,-11,12,-12,13,-13,14,-14,15,-15,16,-16,
27      &211,-211,2112,-2112,2212,-2212,22,3122,3112,3212,3222,
28      &3312,3322,3334,111,28,29/
29  
30 C...Store initial energy. Default frame.
31       VINT(290)=WIN
32       MINT(111)=0
33  
34 C...Convert character variables to lowercase and find their length.
35       CHCOM(1)=CHFRAM
36       CHCOM(2)=CHBEAM
37       CHCOM(3)=CHTARG
38       DO 130 I=1,3
39       LEN(I)=8
40       DO 110 LL=8,1,-1
41       IF(LEN(I).EQ.LL.AND.CHCOM(I)(LL:LL).EQ.' ') LEN(I)=LL-1
42       DO 100 LA=1,26
43       IF(CHCOM(I)(LL:LL).EQ.CHALP(2)(LA:LA)) CHCOM(I)(LL:LL)=
44      &CHALP(1)(LA:LA)
45   100 CONTINUE
46   110 CONTINUE
47       CHIDNT(I)=CHCOM(I)
48  
49 C...Fix up bar, underscore and charge in particle name (if needed).
50       DO 120 LL=1,6
51       IF(CHIDNT(I)(LL:LL+2).EQ.'bar') THEN
52         CHTEMP=CHIDNT(I)
53         CHIDNT(I)=CHTEMP(1:LL-1)//'~'//CHTEMP(LL+3:8)//'  '
54       ENDIF
55   120 CONTINUE
56       IF(CHIDNT(I)(1:2).EQ.'nu'.AND.CHIDNT(I)(3:3).NE.'_') THEN
57         CHTEMP=CHIDNT(I)
58         CHIDNT(I)='nu_'//CHTEMP(3:7)
59       ELSEIF(CHIDNT(I)(1:2).EQ.'n ') THEN
60         CHIDNT(I)(1:3)='n0 '
61       ELSEIF(CHIDNT(I)(1:2).EQ.'n~') THEN
62         CHIDNT(I)(1:3)='n~0'
63       ELSEIF(CHIDNT(I)(1:2).EQ.'p ') THEN
64         CHIDNT(I)(1:3)='p+ '
65       ELSEIF(CHIDNT(I)(1:2).EQ.'p~'.OR.CHIDNT(I)(1:2).EQ.'p-') THEN
66         CHIDNT(I)(1:3)='p~-'
67       ELSEIF(CHIDNT(I)(1:6).EQ.'lambda') THEN
68         CHIDNT(I)(7:7)='0'
69       ELSEIF(CHIDNT(I)(1:3).EQ.'reg') THEN
70         CHIDNT(I)(1:7)='reggeon'
71       ELSEIF(CHIDNT(I)(1:3).EQ.'pom') THEN
72         CHIDNT(I)(1:7)='pomeron'
73       ENDIF
74   130 CONTINUE
75  
76 C...Identify free initialization.
77       IF(CHCOM(1)(1:2).EQ.'no') THEN
78         MINT(65)=1
79         RETURN
80       ENDIF
81  
82 C...Identify incoming beam and target particles.
83       DO 150 I=1,2
84       DO 140 J=1,29
85       IF(CHIDNT(I+1).EQ.CHCDE(J)) MINT(10+I)=KCDE(J)
86   140 CONTINUE
87       PM(I)=ULMASS(MINT(10+I))
88       VINT(2+I)=PM(I)
89   150 CONTINUE
90       IF(MINT(11).EQ.0) WRITE(MSTU(11),5000) CHBEAM(1:LEN(2))
91       IF(MINT(12).EQ.0) WRITE(MSTU(11),5100) CHTARG(1:LEN(3))
92       IF(MINT(11).EQ.0.OR.MINT(12).EQ.0) STOP
93  
94 C...Identify choice of frame and input energies.
95       CHINIT=' '
96  
97 C...Events defined in the CM frame.
98       IF(CHCOM(1)(1:2).EQ.'cm') THEN
99         MINT(111)=1
100         S=WIN**2
101         IF(MSTP(122).GE.1) THEN
102           IF(CHCOM(2)(1:1).NE.'e') THEN
103             LOFFS=(31-(LEN(2)+LEN(3)))/2
104             CHINIT(LOFFS+1:76)='PYTHIA will be initialized for a '//
105      &      CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
106      &      ' collider'//' '
107           ELSE
108             LOFFS=(30-(LEN(2)+LEN(3)))/2
109             CHINIT(LOFFS+1:76)='PYTHIA will be initialized for an '//
110      &      CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
111      &      ' collider'//' '
112           ENDIF
113           WRITE(MSTU(11),5200) CHINIT
114           WRITE(MSTU(11),5300) WIN
115         ENDIF
116  
117 C...Events defined in fixed target frame.
118       ELSEIF(CHCOM(1)(1:3).EQ.'fix') THEN
119         MINT(111)=2
120         S=PM(1)**2+PM(2)**2+2.*PM(2)*SQRT(PM(1)**2+WIN**2)
121         IF(MSTP(122).GE.1) THEN
122           LOFFS=(29-(LEN(2)+LEN(3)))/2
123           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
124      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
125      &    ' fixed target'//' '
126           WRITE(MSTU(11),5200) CHINIT
127           WRITE(MSTU(11),5400) WIN
128           WRITE(MSTU(11),5500) SQRT(S)
129         ENDIF
130  
131 C...Frame defined by user three-vectors.
132       ELSEIF(CHCOM(1)(1:3).EQ.'use') THEN
133         MINT(111)=3
134         P(1,5)=PM(1)
135         P(2,5)=PM(2)
136         P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
137         P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
138         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
139      &  (P(1,3)+P(2,3))**2
140         IF(MSTP(122).GE.1) THEN
141           LOFFS=(12-(LEN(2)+LEN(3)))/2
142           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
143      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
144      &    ' user-specified configuration'//' '
145           WRITE(MSTU(11),5200) CHINIT
146           WRITE(MSTU(11),5600)
147           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
148           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
149           WRITE(MSTU(11),5500) SQRT(MAX(0.,S))
150         ENDIF
151  
152 C...Frame defined by user four-vectors.
153       ELSEIF(CHCOM(1)(1:4).EQ.'four') THEN
154         MINT(111)=4
155         PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
156         P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
157         PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
158         P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
159         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
160      &  (P(1,3)+P(2,3))**2
161         IF(MSTP(122).GE.1) THEN
162           LOFFS=(12-(LEN(2)+LEN(3)))/2
163           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
164      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
165      &    ' user-specified configuration'//' '
166           WRITE(MSTU(11),5200) CHINIT
167           WRITE(MSTU(11),5600)
168           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
169           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
170           WRITE(MSTU(11),5500) SQRT(MAX(0.,S))
171         ENDIF
172  
173 C...Frame defined by user five-vectors.
174       ELSEIF(CHCOM(1)(1:4).EQ.'five') THEN
175         MINT(111)=5
176         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
177      &  (P(1,3)+P(2,3))**2
178         IF(MSTP(122).GE.1) THEN
179           LOFFS=(12-(LEN(2)+LEN(3)))/2
180           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
181      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
182      &    ' user-specified configuration'//' '
183           WRITE(MSTU(11),5200) CHINIT
184           WRITE(MSTU(11),5600)
185           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
186           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
187           WRITE(MSTU(11),5500) SQRT(MAX(0.,S))
188         ENDIF
189  
190 C...Unknown frame. Error for too low CM energy.
191       ELSE
192         WRITE(MSTU(11),5800) CHFRAM(1:LEN(1))
193         STOP
194       ENDIF
195       IF(S.LT.PARP(2)**2) THEN
196         WRITE(MSTU(11),5900) SQRT(S)
197         STOP
198       ENDIF
199  
200 C...Formats for initialization and error information.
201  5000 FORMAT(1X,'Error: unrecognized beam particle ''',A,'''.'/
202      &1X,'Execution stopped!')
203  5100 FORMAT(1X,'Error: unrecognized target particle ''',A,'''.'/
204      &1X,'Execution stopped!')
205  5200 FORMAT(/1X,78('=')/1X,'I',76X,'I'/1X,'I',A76,'I')
206  5300 FORMAT(1X,'I',18X,'at',1X,F10.3,1X,'GeV center-of-mass energy',
207      &19X,'I'/1X,'I',76X,'I'/1X,78('='))
208  5400 FORMAT(1X,'I',22X,'at',1X,F10.3,1X,'GeV/c lab-momentum',22X,'I')
209  5500 FORMAT(1X,'I',76X,'I'/1X,'I',11X,'corresponding to',1X,F10.3,1X,
210      &'GeV center-of-mass energy',12X,'I'/1X,'I',76X,'I'/1X,78('='))
211  5600 FORMAT(1X,'I',76X,'I'/1X,'I',18X,'px (GeV/c)',3X,'py (GeV/c)',3X,
212      &'pz (GeV/c)',6X,'E (GeV)',9X,'I')
213  5700 FORMAT(1X,'I',8X,A8,4(2X,F10.3,1X),8X,'I')
214  5800 FORMAT(1X,'Error: unrecognized coordinate frame ''',A,'''.'/
215      &1X,'Execution stopped!')
216  5900 FORMAT(1X,'Error: too low CM energy,',F8.3,' GeV for event ',
217      &'generation.'/1X,'Execution stopped!')
218  
219       RETURN
220       END