]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ISAJET/code/logic.F
Added the magnetic field as a static member of the AliL3Transform class,
[u/mrichter/AliRoot.git] / ISAJET / code / logic.F
CommitLineData
0795afa3 1#include "isajet/pilot.h"
2 SUBROUTINE LOGIC
3C
4C 10/ 3/80
5C STARTING FROM USER DATA FIND OUT WHICH PARAMETERS SHOULD
6C BE FIXED AND WHICH LIMITS SHOULD BE SET
7C
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)
18C
19C LOGICAL FUNCTIONS
20C
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/
26C
27C INVERSE HYPERBOLIC COSINE FUNCTION
28 ACOSH(X)=ALOG(X+SQRT(X**2-1.0))
29C INVERSE HYPERBOLIC SINE FUNCTION
30 ASINH(X)=ALOG(X+SQRT(X**2+1.0))
31C
32C INITIALIZE CONSTANTS
33C
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
45C
46C 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
58C
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
78C
79C CHECK THAT PARAMETER RANGES MAKE SENSE
80C
81C DO LOGIC FOR P
82 IF(.NOT.LOGP(IERR)) IFATAL=IFATAL+1
83C DO LOGIC FOR PT
84 IF(.NOT.LOGPT(IERR)) IFATAL=IFATAL+1
85C DO LOGIC FOR THETA AND YJ(RAPIDITY)
86 IF(.NOT.LOGYTH(IERR)) IFATAL=IFATAL+1
87C DO LOGIC FOR XJ(FEYNMAN X)
88C XJ LIMITS DO NOT REDEFINE PT LIMITS
89 IF(.NOT.LOGX(IERR)) IFATAL=IFATAL+1
90C DO LOGIC FOR PHI
91C NOTE THAT PHI INTERVAL IS DEFINED BY PHIMAX-PHIMIN
92 IF(.NOT.LOGPHI(IERR,DELPH)) IFATAL=IFATAL+1
93C
94C 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
100C
101C 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
110C
111C 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)
11611 YJMIN(I)=AMAX1(YJMIN(I),-YMXPT)
117 ENDIF
118C
119C DO LOGIC FOR DRELL YAN VARIABLES
120 IF(KEYS(3).OR.KEYS(7).OR.KEYS(9).OR.KEYS(11)) THEN
121C DO LOGIC FOR QM
122 IF(.NOT.LOGQM(IERR)) IFATAL=IFATAL+1
123C DO LOGIC FOR QT
124 IF(.NOT.LOGQT(IERR)) IFATAL=IFATAL+1
125C DO LOGIC FOR YW
126 IF(.NOT.LOGYW(IERR)) IFATAL=IFATAL+1
127C DO LOGIC FOR THETA
128 IF(.NOT.LOGTHW(IERR)) IFATAL=IFATAL+1
129C DO LOGIC FOR PHW
130C NOTE THAT PHW INTERVAL DEFINED BY PHWMAX-PHWMIN
131 IF(.NOT.LOGPHW(IERR,DELPH)) IFATAL=IFATAL+1
132C DO LOGIC FOR XW
133 IF(.NOT.LOGXW(IERR)) IFATAL=IFATAL+1
134C
135 ENDIF
136C
137C 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)
157C
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
166C
167 21 CONTINUE
168C
169C CHECK THAT PARAMETERS FOR DRELL YAN ARE CONSISTENT
170C
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.
187C
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
196C
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
205C
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
217C
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
230C
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
242C
243C SPECIAL LOGIC FOR E+E- EVENTS
244C
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
268C
269C
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
275C
276C
277 RETURN
278 END