]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ISAJET/code/logic.F
Coding conventions (Gustavo)
[u/mrichter/AliRoot.git] / ISAJET / code / logic.F
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