]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ISAJET/code/isaevt.F
Adding MUON HLT code to the repository.
[u/mrichter/AliRoot.git] / ISAJET / code / isaevt.F
1 #include "isajet/pilot.h"
2       SUBROUTINE ISAEVT(I,OK,DONE)
3 C----------------------------------------------------------------------
4 C-
5 C-   Purpose and Methods :
6 C-
7 C-         Normal operation:
8 C-    Generate one ISAJET event and return.
9 C-
10 C-         "ISALEP" generation:
11 C-    Generate a TWOJET or DRELLYAN hard scattering. Then make NEVOLVE 
12 C-    evolutions and NHADRON fragmentations, rejecting events which 
13 C-    fail the desired cuts using logical functions
14 C-         REJJET()   tests the QCD evolution stage, e.g. by requiring
15 C-                    a heavy quark.
16 C-         REJFRG()   tests the fragmentation stage, e.g. by requiring
17 C-                    a high-pt lepton.
18 C-    These functions default to .FALSE.; i.e. they do not reject any 
19 C-    events. Note that one hard scattering can give more than one 
20 C-    event. You must choose NEVOLVE and NHADRON carefully.
21 C-         IEVT   = event number. This is incremented NEVOLVE * NHADRON 
22 C-                  times for each hard scattering; i.e. it counts the
23 C-                  number of potential events.
24 C-         IEVGEN = counter for generated events.
25 C-         NEVENT = maximum value of hard scatterings. Hence the limit
26 C-                  for IEVT is NEVENT * NEVOLVE * NHADRON.
27 C-    The cross section SIGF contains an extra factor of
28 C-         1 / (NEVOLVE * NHADRON)
29 C-    to produce the correct final cross section using the weight
30 C-         SIGF / NEVENT
31 C-
32 C-   Input:
33 C-    I      = number used to control printout
34 C-   Output:
35 C-    OK     = logical flag for good event.
36 C-    DONE   = logical flag for job completion.
37 C-
38 C-   Created   3-FEB-1988   Serban D. Protopopescu
39 C-   Updated  17-APR-1990 Serban D. Protopopescu (add ISALEP option) 
40 C-   22-JUL-1992: Move PRTEVT and GETTOT statements to end so they
41 C-                work for TWOJET and DRELLYAN with NOVOLVE. (FEP)
42 C-
43 C----------------------------------------------------------------------
44 #if defined(CERNLIB_IMPNONE)
45       IMPLICIT NONE
46 #endif
47 #include "isajet/itapes.inc"
48 #include "isajet/idrun.inc"
49 #include "isajet/keys.inc"
50 #include "isajet/nodcay.inc"
51 #include "isajet/primar.inc"
52 #include "isajet/jetpar.inc"
53 #include "isajet/partcl.inc"
54 #include "isajet/jetset.inc"
55 #include "isajet/isloop.inc"
56 C
57       LOGICAL REJJET,REJFRG,OK,DONE
58       INTEGER NPASS,I,NLIMIT
59 C
60       NPASS=0
61       OK=.TRUE.
62       DONE=.FALSE.
63       NLIMIT=NEVENT*NEVOLV*NFRGMN
64 C
65 C          Twojet or Drell-Yan events. The evolution and fragmentation
66 C          loops are done with GO TO statements so that we can exit
67 C          the loops with a good event and reenter them.
68 C
69       IF(KEYS(1).OR.KEYS(3)) THEN
70 100     CONTINUE
71         IF(IEVOL.EQ.1.AND.IFRG.EQ.1) THEN
72           NPASS=NPASS+1
73           IF(NPASS.GT.NTRIES) THEN
74             WRITE(ITLIS,1001) NTRIES
75 1001        FORMAT(//' IT IS TAKING MORE THAN',I6,' TRIES TO MAKE',
76      $      ' AN EVENT IN ISAEVT.'/
77      $      ' CHECK YOUR LIMITS OR OR INCREASE NTRIES.'/
78      $      ' CHECK NEVOLVE, NHADRON, AND YOUR REJJET AND REJFRG',
79      $      ' FUNCTIONS IF ANY.'/
80      $      ' JOB TERMINATED.')
81             STOP 99
82           ENDIF
83           CALL RANFMT
84 C          Generate appropriate hard scattering
85           IF(KEYS(1)) THEN
86             CALL TWOJET
87           ELSE
88             CALL DRLLYN
89           ENDIF
90         ENDIF
91 C          QCD evolution
92         IF(NOEVOL) THEN
93           IEVT=IEVT+NEVOLV*NFRGMN
94           GOTO 9999
95         ENDIF
96 C          Continue if in fragmentation loop
97         IF(IFRG.NE.1) GO TO 120
98 C          Begin multiple evolution loop
99 110       CONTINUE
100           NJSET=0
101           IEVT=IEVT+1
102           CALL EVOLVE
103           IEVT=IEVT-1
104           IF(NJSET.LT.0) THEN
105             IEVT=IEVT+NFRGMN
106             GO TO 111
107           ENDIF
108           IF(REJJET()) THEN
109             IEVT=IEVT+NFRGMN
110             GO TO 111
111           ENDIF
112           IF(NOHADR) THEN
113             IEVT=IEVT+NFRGMN
114             GO TO 9999
115           ENDIF
116 C          Begin multiple fragmentation loop
117 120         CONTINUE
118             NPTCL=0
119             CALL FRGMNT
120             IEVT=IEVT+1
121             IF(REJFRG()) GO TO 121
122 C          Finish good event
123             CALL MBIAS
124             IFRG=IFRG+1
125             IF(IFRG.GT.NFRGMN) IFRG=1
126             IF(IFRG.EQ.1) THEN
127               IEVOL=IEVOL+1
128               IF(IEVOL.GT.NEVOLV) IEVOL=1
129             ENDIF
130             GOTO 9999
131 C          Fragmentation failed - increment counter and loop
132 121         IFRG=IFRG+1
133             IF(IFRG.GT.NFRGMN) THEN
134               IFRG=1
135             ELSE
136               GO TO 120
137             ENDIF
138 C          End of multiple fragmentation loop
139 C          Evolution failed - increment counter and loop
140 111       IEVOL=IEVOL+1
141           IF(IEVOL.GT.NEVOLV) THEN
142             IEVOL=1
143             IFRG=1
144             GO TO 100
145           ELSE
146             GO TO 110
147           ENDIF
148 C
149 C          E+E- events
150 C
151       ELSE IF(KEYS(2)) THEN
152         IEVT=IEVT+1
153         CALL RANFMT
154         CALL ELCTRN
155         IF(.NOT.NOEVOL) THEN
156           CALL EVOLVE
157           IF(.NOT.NOHADR) CALL FRGMNT
158         ENDIF
159 C
160 C          MINBIAS events
161 C
162       ELSE IF(KEYS(4)) THEN
163         IEVT=IEVT+1
164         CALL RANFMT
165         NPTCL=0
166         IF(.NOT.(NOEVOL.OR.NOHADR)) CALL MBIAS
167 C
168 C          SUPERSYM events
169 C
170       ELSE IF(KEYS(5)) THEN
171         IEVT=IEVT+1
172         CALL RANFMT
173         CALL TWOJET
174         IF(.NOT.NOEVOL) THEN
175           CALL EVOLVE
176           IF(NJSET.LT.0) GO TO 9999
177           IF(.NOT.NOHADR) THEN
178             CALL FRGMNT
179             CALL MBIAS
180           ENDIF
181         ENDIF
182 C
183 C          WPAIR events
184 C
185       ELSE IF(KEYS(6)) THEN
186         IEVT=IEVT+1
187         CALL RANFMT
188         CALL TWOJET
189         CALL WPAIR
190 C
191         IF(.NOT.NOEVOL) THEN
192           CALL EVOLVE
193           IF(NJSET.LT.0) GO TO 9999
194           IF(.NOT.NOHADR) THEN
195             CALL FRGMNT
196             CALL MBIAS
197           ENDIF
198         ENDIF
199 C
200 C          HIGGS events
201 C
202       ELSE IF(KEYS(7)) THEN
203         IEVT=IEVT+1
204         CALL RANFMT
205         CALL DRLLYN
206         CALL HIGGS
207         IF(.NOT.NOEVOL) THEN
208           CALL EVOLVE
209           IF(NJSET.LT.0) GOTO 9999
210           IF(.NOT.NOHADR) THEN
211             CALL FRGMNT
212             CALL MBIAS
213           ENDIF
214         ENDIF
215 C
216 C          PHOTON events
217 C
218       ELSEIF(KEYS(8)) THEN
219         IEVT=IEVT+1
220         CALL RANFMT
221         CALL TWOJET
222         IF(.NOT.NOEVOL) THEN
223           CALL EVOLVE
224           IF(NJSET.LT.0) GOTO 9999
225           IF(.NOT.NOHADR) THEN
226             CALL FRGMNT
227             CALL MBIAS
228           ENDIF
229         ENDIF
230 C
231 C          TCOLOR events, e.g. techni-rho
232 C
233       ELSEIF(KEYS(9)) THEN
234         IEVT=IEVT+1
235         CALL RANFMT
236         CALL DRLLYN
237         CALL HIGGS
238         IF(.NOT.NOEVOL) THEN
239           CALL EVOLVE
240           IF(NJSET.LT.0) GOTO 9999
241           IF(.NOT.NOHADR) THEN
242             CALL FRGMNT
243             CALL MBIAS
244           ENDIF
245         ENDIF
246 C
247 C          WHIGGS events
248 C
249       ELSE IF(KEYS(10)) THEN
250         IEVT=IEVT+1
251         CALL RANFMT
252         CALL TWOJET
253         CALL WHIGGS
254 C
255         IF(.NOT.NOEVOL) THEN
256           CALL EVOLVE
257           IF(NJSET.LT.0) GO TO 9999
258           IF(.NOT.NOHADR) THEN
259             CALL FRGMNT
260             CALL MBIAS
261           ENDIF
262         ENDIF
263 C
264 C          EXTRADIM events
265 C
266       ELSE IF(KEYS(11)) THEN
267         IEVT=IEVT+1
268         CALL RANFMT
269         CALL DRLLYN
270
271         IF(.NOT.NOEVOL) THEN
272           CALL EVOLVE
273           IF(NJSET.LT.0) GO TO 9999
274           IF(.NOT.NOHADR) THEN
275             CALL FRGMNT
276             CALL MBIAS
277           ENDIF
278         ENDIF
279 C
280 C          ZJJ events
281 C
282       ELSEIF(KEYS(12)) THEN
283         IEVT=IEVT+1
284         CALL RANFMT
285         CALL ZJJ
286 C
287         IF(.NOT.NOEVOL) THEN
288           CALL EVOLVE
289           IF(NJSET.LT.0) GO TO 9999
290           IF(.NOT.NOHADR) THEN
291             CALL FRGMNT
292             CALL MBIAS
293           ENDIF
294         ENDIF
295       ENDIF
296 C
297 C          Event complete
298 C
299  9999 IEVGEN=IEVGEN+1
300       IF(NJSET.LT.0) OK=.FALSE.
301       IF(IEVT.GT.NLIMIT) THEN
302         OK=.FALSE.
303         DONE=.TRUE.
304       ELSEIF(IEVT.EQ.NLIMIT) THEN
305         DONE=.TRUE.
306       ENDIF
307       IF(OK) THEN
308         CALL PRTEVT(I)
309         CALL GETTOT(.FALSE.)
310       ENDIF
311       RETURN
312       END