]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 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 |