]>
Commit | Line | Data |
---|---|---|
0795afa3 | 1 | #include "isajet/pilot.h" |
2 | SUBROUTINE LOGIC | |
3 | C | |
4 | C 10/ 3/80 | |
5 | C STARTING FROM USER DATA FIND OUT WHICH PARAMETERS SHOULD | |
6 | C BE FIXED AND WHICH LIMITS SHOULD BE SET | |
7 | C | |
8 | #include "isajet/itapes.inc" | |
9 | #include "isajet/jetlim.inc" | |
10 | #include "isajet/primar.inc" | |
11 | #include "isajet/jetpar.inc" | |
12 | #include "isajet/const.inc" | |
13 | #include "isajet/dylim.inc" | |
14 | #include "isajet/keys.inc" | |
15 | #include "isajet/q1q2.inc" | |
16 | LOGICAL COMB(8) | |
17 | DIMENSION DELPH(3) | |
18 | C | |
19 | C LOGICAL FUNCTIONS | |
20 | C | |
21 | LOGICAL LOGP,LOGPT,LOGYTH,LOGX,LOGPHI | |
22 | LOGICAL LOGQM,LOGQT,LOGYW,LOGTHW,LOGPHW,LOGXW | |
23 | LOGICAL LOGMIJ,LOGMGM,LOGMGY | |
24 | DATA UNDEF/-.9E9/ | |
25 | DATA ZERO/.00001/,ONE/.99999/ | |
26 | C | |
27 | C INVERSE HYPERBOLIC COSINE FUNCTION | |
28 | ACOSH(X)=ALOG(X+SQRT(X**2-1.0)) | |
29 | C INVERSE HYPERBOLIC SINE FUNCTION | |
30 | ASINH(X)=ALOG(X+SQRT(X**2+1.0)) | |
31 | C | |
32 | C INITIALIZE CONSTANTS | |
33 | C | |
34 | HALFPI=PI/2. | |
35 | IFATAL=0 | |
36 | IERR=0 | |
37 | DO 1 I=1,36 | |
38 | SETLMJ(I)=.TRUE. | |
39 | IF(BLIMS(I).GT.UNDEF) SETLMJ(I)=.FALSE. | |
40 | 1 CONTINUE | |
41 | DO 2 I=1,12 | |
42 | SETLMQ(I)=.TRUE. | |
43 | IF(BLIM1(I).GT.UNDEF) SETLMQ(I)=.FALSE. | |
44 | 2 CONTINUE | |
45 | C | |
46 | C SET STANDARD DRELL-YAN IF FIXED QTW=0. | |
47 | IF(KEYS(3)) THEN | |
48 | IF(QTMIN.EQ.0..AND.QTMAX.LT.UNDEF) THEN | |
49 | STDDY=.TRUE. | |
50 | ELSE | |
51 | STDDY=.FALSE. | |
52 | ENDIF | |
53 | ELSEIF(KEYS(7).OR.KEYS(9)) THEN | |
54 | STDDY=.TRUE. | |
55 | ELSEIF(KEYS(11)) THEN | |
56 | STDDY=.FALSE. | |
57 | ENDIF | |
58 | C | |
59 | IF(STDDY) THEN | |
60 | NJET=2 | |
61 | FIXPT(3)=.TRUE. | |
62 | PT(3)=0. | |
63 | PTMIN(3)=0. | |
64 | PTMAX(3)=0. | |
65 | FIXPHI(3)=.FALSE. | |
66 | PHIMIN(3)=0. | |
67 | PHIMAX(3)=2.*PI | |
68 | DELPH(3)=2.*PI | |
69 | FIXPHW=.TRUE. | |
70 | PHWMIN=0. | |
71 | PHWMAX=-1.E9 | |
72 | PHIW=0. | |
73 | QTMIN=0. | |
74 | QTMAX=-1.E9 | |
75 | QTW=0. | |
76 | FIXQT=.FALSE. | |
77 | ENDIF | |
78 | C | |
79 | C CHECK THAT PARAMETER RANGES MAKE SENSE | |
80 | C | |
81 | C DO LOGIC FOR P | |
82 | IF(.NOT.LOGP(IERR)) IFATAL=IFATAL+1 | |
83 | C DO LOGIC FOR PT | |
84 | IF(.NOT.LOGPT(IERR)) IFATAL=IFATAL+1 | |
85 | C DO LOGIC FOR THETA AND YJ(RAPIDITY) | |
86 | IF(.NOT.LOGYTH(IERR)) IFATAL=IFATAL+1 | |
87 | C DO LOGIC FOR XJ(FEYNMAN X) | |
88 | C XJ LIMITS DO NOT REDEFINE PT LIMITS | |
89 | IF(.NOT.LOGX(IERR)) IFATAL=IFATAL+1 | |
90 | C DO LOGIC FOR PHI | |
91 | C NOTE THAT PHI INTERVAL IS DEFINED BY PHIMAX-PHIMIN | |
92 | IF(.NOT.LOGPHI(IERR,DELPH)) IFATAL=IFATAL+1 | |
93 | C | |
94 | C DO LOGIC FOR MADGRAPH IF APPLICABLE | |
95 | IF(KEYS(12)) THEN | |
96 | IF(.NOT.LOGMGM(IERR)) IFATAL=IFATAL+1 | |
97 | IF(.NOT.LOGMGY(IERR)) IFATAL=IFATAL+1 | |
98 | IF(.NOT.LOGMIJ(IERR)) IFATAL=IFATAL+1 | |
99 | ENDIF | |
100 | C | |
101 | C SET DEFAULT PT LIMITS IF NONE WERE SET | |
102 | IF((KEYS(1).OR.KEYS(5).OR.KEYS(6).OR.KEYS(10)).AND. | |
103 | $(PTMAX(1).GT..99*HALFE).AND.(PTMAX(2).GT..99*HALFE)) THEN | |
104 | PTMIN(1)=0.1*HALFE | |
105 | PTMIN(2)=PTMIN(1) | |
106 | PTMAX(1)=0.4*HALFE | |
107 | PTMAX(2)=PTMAX(1) | |
108 | CALL LOGERR(0,1,IERR) | |
109 | ENDIF | |
110 | C | |
111 | C CHECK Y LIMITS WITH FINAL PT LIMITS. | |
112 | IF(KEYS(1).OR.KEYS(5).OR.KEYS(6).OR.KEYS(10)) THEN | |
113 | YMXPT=ALOG(ECM/PTMIN(1)) | |
114 | DO 11 I=1,2 | |
115 | YJMAX(I)=AMIN1(YJMAX(I),YMXPT) | |
116 | 11 YJMIN(I)=AMAX1(YJMIN(I),-YMXPT) | |
117 | ENDIF | |
118 | C | |
119 | C DO LOGIC FOR DRELL YAN VARIABLES | |
120 | IF(KEYS(3).OR.KEYS(7).OR.KEYS(9).OR.KEYS(11)) THEN | |
121 | C DO LOGIC FOR QM | |
122 | IF(.NOT.LOGQM(IERR)) IFATAL=IFATAL+1 | |
123 | C DO LOGIC FOR QT | |
124 | IF(.NOT.LOGQT(IERR)) IFATAL=IFATAL+1 | |
125 | C DO LOGIC FOR YW | |
126 | IF(.NOT.LOGYW(IERR)) IFATAL=IFATAL+1 | |
127 | C DO LOGIC FOR THETA | |
128 | IF(.NOT.LOGTHW(IERR)) IFATAL=IFATAL+1 | |
129 | C DO LOGIC FOR PHW | |
130 | C NOTE THAT PHW INTERVAL DEFINED BY PHWMAX-PHWMIN | |
131 | IF(.NOT.LOGPHW(IERR,DELPH)) IFATAL=IFATAL+1 | |
132 | C DO LOGIC FOR XW | |
133 | IF(.NOT.LOGXW(IERR)) IFATAL=IFATAL+1 | |
134 | C | |
135 | ENDIF | |
136 | C | |
137 | C CHECK FOR INCONSISTENCIES | |
138 | DO 21 I=1,NJET | |
139 | SMIN=SIN(THMIN(I)) | |
140 | SMAX=SIN(THMAX(I)) | |
141 | IF(SMAX.LT.SMIN) SMIN=SMAX | |
142 | PT1=PMIN(I)*SMIN | |
143 | IF(PT1.GT.PTMIN(I)) PTMIN(I)=PT1 | |
144 | SMAX=1.0 | |
145 | IF(THMAX(I).LT.ONE*HALFPI) SMAX=SIN(ONE*THMAX(I)) | |
146 | IF(THMIN(I).GT.ONE*HALFPI) SMAX=SIN(ONE*THMIN(I)) | |
147 | PT1=PMAX(I)*SMAX | |
148 | IF(PT1.LT.ONE*PTMAX(I)) PTMAX(I)=PT1 | |
149 | IF(PTMAX(I).LT.ONE*PTMIN(I)) CALL LOGERR(2,I,IFATAL) | |
150 | IF(PMAX(I).LT.ONE*PMIN(I)) CALL LOGERR(1,I,IFATAL) | |
151 | IF(THMAX(I).LT.ONE*THMIN(I)) CALL LOGERR(3,I,IFATAL) | |
152 | IF(XJMAX(I).LT.ONE*XJMIN(I)) CALL LOGERR(4,I,IFATAL) | |
153 | IF(ABS(XJMAX(I)).GT.1.0+ZERO.OR.ABS(XJMIN(I)).GT.1.0+ZERO) | |
154 | 1 CALL LOGERR(4,I,IFATAL) | |
155 | IF(THMIN(I).LT.-ZERO.OR.THMAX(I).GT.PI+ZERO) | |
156 | $CALL LOGERR(6,I,IFATAL) | |
157 | C | |
158 | IF(FIXXJ(I)) THEN | |
159 | X1=PMAX(I)*COS(THMIN(I))/HALFE | |
160 | X2=PMIN(I)*COS(THMAX(I))/HALFE | |
161 | X3=PMAX(I)*COS(THMIN(I))/HALFE | |
162 | IF(X3.LT.X2) X2=X3 | |
163 | IF(X1.EQ.X2) XJ(I)=X1 | |
164 | IF(XJ(I).LT.ONE*X2.OR.XJ(I).GT.X1/ONE) CALL LOGERR(7,I,IFATAL) | |
165 | ENDIF | |
166 | C | |
167 | 21 CONTINUE | |
168 | C | |
169 | C CHECK THAT PARAMETERS FOR DRELL YAN ARE CONSISTENT | |
170 | C | |
171 | IF(KEYS(3)) THEN | |
172 | COMB(1)=.FALSE. | |
173 | DO 31 I=1,2 | |
174 | COMB(1)=COMB(1).OR.FIXP(I).OR.FIXPT(I).OR.FIXYJ(I).OR.FIXPHI(I) | |
175 | 1 .OR.FIXXJ(I) | |
176 | 31 CONTINUE | |
177 | IF(COMB(1)) CALL LOGERR(114,1,IFATAL) | |
178 | COMB(1)=FIXQT.AND.FIXQM | |
179 | COMB(2)=FIXQT.AND.FIXYW | |
180 | COMB(3)=FIXQM.AND.FIXYW | |
181 | COMB(4)=COMB(1).AND.FIXYW | |
182 | COMB(5)=COMB(1).AND.FIXXW | |
183 | COMB(6)=COMB(2).AND.FIXXW | |
184 | COMB(7)=COMB(3).AND.FIXXW | |
185 | IF(COMB(4).AND.FIXXW) CALL LOGERR(115,1,IFATAL) | |
186 | IF(COMB(4)) FIXXW=.TRUE. | |
187 | C | |
188 | IF(COMB(4)) THEN | |
189 | FIXXW=.TRUE. | |
190 | XW=SQRT(QTW**2+QMW**2)*SINH(YW)/HALFE | |
191 | IF(XW.LT.XWMIN-ZERO.OR.XW.GT.XWMAX+ZERO) | |
192 | $ CALL LOGERR(101,1,IFATAL) | |
193 | XWMIN=XW | |
194 | XWMAX=XW | |
195 | ENDIF | |
196 | C | |
197 | IF(COMB(5)) THEN | |
198 | FIXYW=.TRUE. | |
199 | YW=ASINH(HALFE*XW/SQRT(QTW**2+QMW**2)) | |
200 | IF(YW.LT.YWMIN-ZERO.OR.YW.GT.YWMAX+ZERO) | |
201 | $CALL LOGERR(102,1,IFATAL) | |
202 | YWMIN=YW | |
203 | YWMAX=YW | |
204 | ENDIF | |
205 | C | |
206 | IF(COMB(6)) THEN | |
207 | IF(XW.NE.0.) THEN | |
208 | QMW2=((XW*HALFE)/SINH(YW))**2-QTW**2 | |
209 | IF(QMW2.GE.0) THEN | |
210 | QMW=SQRT(QMW2) | |
211 | IF(QMW.LT.ONE*QMIN.OR.QMW.GT.QMAX/ONE) | |
212 | $CALL LOGERR(103,1,IFATAL) | |
213 | ENDIF | |
214 | CALL LOGERR(104,1,IFATAL) | |
215 | ENDIF | |
216 | ENDIF | |
217 | C | |
218 | IF(COMB(7).AND.(YW.NE.0)) THEN | |
219 | FIXQT=.TRUE. | |
220 | FIXPT(3)=.TRUE. | |
221 | QTW2=((XW*HALFE)/SINH(YW))**2-QMW**2 | |
222 | IF(QTW2.GE.0) THEN | |
223 | QTW=SQRT(QTW2) | |
224 | PT(3)=QTW | |
225 | IF(QTW.LT.ONE*QTMIN.OR.QTW.GT.QTMAX/ONE) | |
226 | $CALL LOGERR(105,1,IFATAL) | |
227 | ENDIF | |
228 | CALL LOGERR(106,1,IFATAL) | |
229 | ENDIF | |
230 | C | |
231 | IF(QTMIN.GT.QTMAX/ONE) CALL LOGERR(107,1,IFATAL) | |
232 | IF(QMIN.GT.QMAX/ONE) CALL LOGERR(108,1,IFATAL) | |
233 | IF(THWMIN.GT.THWMAX/ONE) CALL LOGERR(109,1,IFATAL) | |
234 | IF(PHWMIN.GT.PHWMAX/ONE) CALL LOGERR(110,1,IFATAL) | |
235 | IF(XWMIN.GT.XWMAX/ONE) CALL LOGERR(111,1,IFATAL) | |
236 | IF(YWMIN.GT.YWMAX+ZERO) CALL LOGERR(112,1,IFATAL) | |
237 | IF(ABS(XWMIN).GT.1.0+ZERO.OR.ABS(XWMAX).GT.1.0+ZERO) | |
238 | 1 CALL LOGERR(111,1,IFATAL) | |
239 | IF(THWMIN.LT.-ZERO.OR.THWMAX.GT.PI+ZERO) | |
240 | $CALL LOGERR(109,1,IFATAL) | |
241 | ENDIF | |
242 | C | |
243 | C SPECIAL LOGIC FOR E+E- EVENTS | |
244 | C | |
245 | IF(KEYS(2)) THEN | |
246 | THLOW=AMAX1(THMIN(1),PI-THMAX(2)) | |
247 | THHIGH=AMAX1(THMAX(1),PI-THMIN(2)) | |
248 | IF(THHIGH-THLOW.LT.ZERO.AND..NOT.(FIXYJ(1).OR.FIXYJ(2))) THEN | |
249 | CALL LOGERR(116,1,IFATAL) | |
250 | ELSE | |
251 | DO 61 I=1,2 | |
252 | FIXYJ(I)=FIXYJ(1).OR.FIXYJ(2) | |
253 | FIXXJ(I)=FIXXJ(1).OR.FIXXJ(2) | |
254 | FIXPT(I)=FIXPT(1).OR.FIXPT(2) | |
255 | THMIN(I)=THLOW | |
256 | THMAX(I)=THHIGH | |
257 | IF(FIXYJ(I)) THMAX(I)=THMIN(I) | |
258 | XJMIN(I)=COS(THMAX(I)) | |
259 | XJMAX(I)=COS(THMIN(I)) | |
260 | PTMIN(I)=HALFE*AMIN1(SIN(THMIN(I)),SIN(THMAX(I))) | |
261 | IF(ABS(XJMAX(I)).LT.1.) YJMAX(I)= | |
262 | 1 .5*ALOG((1.+XJMAX(I))/(1.-XJMAX(I))) | |
263 | IF(ABS(XJMIN(I)).LT.1.) YJMIN(I)= | |
264 | 1 .5*ALOG((1.+XJMIN(I))/(1.-XJMIN(I))) | |
265 | 61 CONTINUE | |
266 | ENDIF | |
267 | ENDIF | |
268 | C | |
269 | C | |
270 | IF(IFATAL.NE.0) THEN | |
271 | WRITE(ITLIS,1020) IFATAL | |
272 | 1020 FORMAT(////10X,I10,' FATAL ERRORS, JOB TERMINATED') | |
273 | STOP 99 | |
274 | ENDIF | |
275 | C | |
276 | C | |
277 | RETURN | |
278 | END |