All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
ykern.f
Go to the documentation of this file.
1 CDECK ID>, YKERN.
2  SUBROUTINE ykern(IMODE,NT,ITKDM,PP,IERR)
3 C
4 C JET FINDING ROUTINE A LA THE ORIGINAL JADE (E0) SCHEME, INCLUDING
5 C THE E-,P- AND P0-VARIANTS. ALSO FEATURES THE NEW DURHAM (D)
6 C AND GENEVA (G) SCHEMES.
7 C
8 C INPUTS: IMODE (JET FINDING SCHEME); PP-ARRAY CONTAINING THE
9 C FOUR-MOMENTA OF THE SELECTED PARTICLES, NT SPECIFYING HOW
10 C MANY LOCATIONS IN PP ARE FILLED.
11 C
12 C OUTPUTS: YREC(I) CONTAINS VALUE OF Y WHERE EVENT FLIPS FROM
13 C (I+1)-JET TO I-JET; PJET(K,I,J) CONTAINS THE JET AXES FOUR VECTOR
14 C (K=1-4) OF JET NUMBER I WHEN THE EVENT IS CLASSIFIED AS J-JET.
15 C LOCATION K=7 GIVES THE NUMBER OF PARTICLES ASSIGNED TO THIS JET.
16 C NOTE THAT EACH EVENT IS ALWAYS FULLY RECONSTRUCTED DOWN TO
17 C 1-JET CONFIGURATION.
18 C PROGRAM IS SELF-CONTAINED.
19 C
20 C IMODE=1: E0 (=JADE) 2: P 3: P0 4: E 5: DURHAM (KT) 6: GENEVA
21 C
22 C LAST MOD : 21-Jun-98
23 C
24 C Modification Log.
25 C 08-Oct-97 D. Chrisman, Increase NYCLMX from 250 to 500.
26 C 21-Jun-98 D. Chrisman, Want to be able to handle more than 10 jets.
27 C Introduce parameter NJETMX. Use this
28 C in declaration of PJET and YREC in order to remove
29 C hard coded numbers. Remove variable JCHECK and
30 C replace with NJETMX.
31 C
32  IMPLICIT NONE
33 C IMPLICIT NONE
34  INTEGER nt,itkdm,nyclmx,njetmx,ncall,nprint,i,j,k,ierr,imodeo
35  INTEGER imode
36  parameter(nyclmx = 500, njetmx = 20)
37  INTEGER nto,njeto,njj,im,jm,nold,kk,ii,histor(2,nyclmx)
38  REAL pl(7,nyclmx),y(nyclmx,nyclmx),pint(10,nyclmx)
39  REAL yrec(njetmx),eviso
40  REAL pp(itkdm,*),jade,d,g,e,evis,pvis,pjet(10,njetmx,njetmx),ymini
41  COMMON /ycl/yrec,pjet,histor
42  COMMON /yint/ imodeo,nto,njeto,pint
43  CHARACTER*7 cm
44  SAVE ncall,nprint,y
45  DATA ncall,nprint /0,0/
46 C
47 C JET RESOLUTION FUNCTIONS
48 C
49  jade(i,j) = 2.*pl(4,i)*pl(4,j)*max(0.,(1.-
50  + (pl(1,i)*pl(1,j)+pl(2,i)*pl(2,j)+pl(3,i)*pl(3,j))/
51  + (pl(6,i)*pl(6,j))))
52  d(i,j) = 2.*min(pl(4,i)*pl(4,i),pl(4,j)*pl(4,j))*max(0.,(1.-
53  + (pl(1,i)*pl(1,j)+pl(2,i)*pl(2,j)+pl(3,i)*pl(3,j))/
54  + (pl(6,i)*pl(6,j))))
55  e(i,j) = max(0.,(pl(4,i)+pl(4,j))**2-(pl(1,i)+pl(1,j))**2-
56  + (pl(2,i)+pl(2,j))**2-(pl(3,i)+pl(3,j))**2)
57  g(i,j) = 8.*pl(4,i)*pl(4,j)*max(0.,(1.-
58  + (pl(1,i)*pl(1,j)+pl(2,i)*pl(2,j)+pl(3,i)*pl(3,j))/
59  + (pl(6,i)*pl(6,j))))/(9.*(pl(4,i)+pl(4,j))**2)
60 C
61 C INITIALIZE
62 C
63  ierr = -1
64  IF(ncall.LE.0) THEN
65  imodeo = 0
66  nto = 0
67  njeto = 0
68  ENDIF
69  DO 5001 i=1,njetmx
70  yrec(i) = 0.
71  5001 CONTINUE
72  ncall = ncall + 1
73 C
74 C PRINT JET SCHEME
75 C
76  IF(imode.NE.imodeo .AND. nprint.LE.7) THEN
77  IF(imode.EQ.1) THEN
78  cm = 'JADE E0'
79  ELSEIF(imode.EQ.2) THEN
80  cm = 'JADE P '
81  ELSEIF(imode.EQ.3) THEN
82  cm = 'JADE P0'
83  ELSEIF(imode.EQ.4) THEN
84  cm = 'JADE E '
85  ELSEIF(imode.EQ.5) THEN
86  cm = 'DURHAM '
87  ELSEIF(imode.EQ.6) THEN
88  cm = 'GENEVA '
89  ELSE
90  WRITE(6,281) imode
91  281 FORMAT(/,' ### YKERN: IMODE =',i3,' INVALID; SET TO 1 ###')
92  imode = 1
93  cm = 'JADE E0'
94  ENDIF
95  print 789, cm
96  789 FORMAT(/,8x,54('#'),/,8x,
97  + '# YCLUS JET FINDER WITH ',a7,' RECOMBINATION SCHEME #',/,
98  + 8x,54('#'),/)
99  nprint = nprint + 1
100  ENDIF
101 C
102 C CHECK INPUT PARAMETERS
103 C
104  IF(nt.LE.1) THEN
105  print 701, nt
106  701 FORMAT(/,' ### YKERN: NUMBER OF INPUT PARTICLES ',i4,' < 2;',
107  + ' NO JET RECONSTRUCTION DONE. ###')
108  RETURN
109  ENDIF
110  IF(nt.GT.nyclmx) THEN
111  print 700, nt, nyclmx,nyclmx
112  700 FORMAT(/,' #### YKERN: NUMBER OF INPUT PARTICLES ',i4,' > ',i4,
113  + '; SET TO ',i4,/,12x,' INCREASE NYCLMX IF THIS',
114  + ' WARNING OCCURS MORE OFTEN. #### ')
115  nt = nyclmx
116  ENDIF
117 C
118 C COPY INPUT VECTORS INTO INTERNAL MOMENTUM ARRAY (PL)
119 C (POSITION 7 OF EACH VECTOR IN PL WILL BE OVERWRITTEN BY THIS ROUTINE
120 C IN ORDER TO RECORD NUMBER OF INITIAL PARTICLES BELONGING TO THIS
121 C POSITION [= 1. INITIALLY])
122 C
123  evis = 0.
124  pvis = 0.
125  DO 5002 i=1,nt
126  pl(6,i)=sqrt(pp(1,i)**2 + pp(2,i)**2 + pp(3,i)**2)
127  pl(1,i)=pp(1,i)
128  pl(2,i)=pp(2,i)
129  pl(3,i)=pp(3,i)
130  IF(imode.EQ.2 .OR. imode.EQ.3) THEN
131  pl(4,i) = pl(6,i)
132  ELSE
133  pl(4,i) = pp(4,i)
134  ENDIF
135  pl(7,i) = 1.
136  DO 5003 k=1,7
137  pint(k,i) = pl(k,i)
138  5003 CONTINUE
139  evis=evis+pl(4,i)
140  pvis=pvis+pl(6,i)
141  5002 CONTINUE
142  njj = nt
143 C
144  IF(evis.LE.0. .OR. pvis.GT.1.001*evis) THEN
145  WRITE(6,283) evis,pvis
146  283 FORMAT(' #### YKERN: INCOMPATIBLE SUMS OF ENERGIES',
147  + ' AND/OR MOMENTA:',
148  + /,12x,' SUM(E) = ',f11.4,' SUM(P) = ',f11.4,/,12x,' CHECK',
149  + ' INPUT VECTORS AND/OR ARRAY DIMENSIONS. ####')
150  RETURN
151  ENDIF
152 C
153  IF(njj.LE.njetmx) THEN
154  DO 5004 j=1,njj
155  DO 5005 i=1,7
156  pjet(i,j,njj) = pl(i,j)
157  5005 CONTINUE
158  5004 CONTINUE
159  ENDIF
160 C
161 C CALCULATE AND STORE PAIR MASSES
162 C
163  DO 5006 i=1,njj-1
164  DO 5007 j=i+1,njj
165  IF(imode.EQ.1) THEN
166  y(i,j) = jade(i,j)
167  ELSEIF(imode.EQ.5) THEN
168  y(i,j) = d(i,j)
169  ELSEIF(imode.EQ.6) THEN
170  y(i,j) = g(i,j)
171  ELSE
172  y(i,j) = e(i,j)
173  ENDIF
174  5007 CONTINUE
175  5006 CONTINUE
176 C
177 C FIND LOCAL MINIMUM OF PAIR MASSES
178 C
179  im = 0
180  jm = 0
181  1000 CONTINUE
182  ymini = 2.*evis**2
183  DO 5008 i=1,njj-1
184  DO 5009 j=i+1,njj
185  IF(y(i,j).LT.ymini) THEN
186  ymini = y(i,j)
187  im = i
188  jm = j
189  ENDIF
190  5009 CONTINUE
191  5008 CONTINUE
192 C
193  IF(im.EQ.0 .OR. jm.EQ.0) THEN
194  WRITE(6,284)
195  284 FORMAT(' #### YKERN: ERROR; NO MINIMUM FOUND IN Y-ARRAY! ####')
196  RETURN
197  ENDIF
198 C
199 C RECOMBINE PARTICLES IM AND JM, STORE AT POSITION IM
200 C
201  pl(1,im) = pl(1,im) + pl(1,jm)
202  pl(2,im) = pl(2,im) + pl(2,jm)
203  pl(3,im) = pl(3,im) + pl(3,jm)
204  pl(6,im) = sqrt(pl(1,im)**2 + pl(2,im)**2
205  + + pl(3,im)**2)
206  IF(imode.EQ.2) THEN
207  pl(4,im) = pl(6,im)
208  ELSEIF(imode.EQ.3) THEN
209  eviso = evis
210  evis = evis-pl(4,im)-pl(4,jm)+pl(6,im)
211  pl(4,im) = pl(6,im)
212  ELSE
213  pl(4,im) = pl(4,im) + pl(4,jm)
214  ENDIF
215 C KEEP TRACK OF # OF PARTICLES ASSIGNED TO NEW CLUSTER:
216  pl(7,im) = pl(7,im) + pl(7,jm)
217 C MOVE LAST PARTICLE IN LIST (NJJ) TO EMPTY SLOT (JM)
218  nold = 0
219  IF(jm.NE.njj) THEN
220  DO 5010 kk=1,7
221  pl(kk,jm) = pl(kk,njj)
222  5010 CONTINUE
223  nold = njj
224  ENDIF
225  histor(1,njj) = jm
226  histor(2,njj) = im
227  njj = njj - 1
228 C REMEMBER JET AXES AND VALUE OF YIJ OF FLIP
229  IF(njj.LE.njetmx) THEN
230  IF(imode.EQ.3) THEN
231  yrec(njj) = ymini/eviso**2
232  ELSEIF(imode.EQ.6) THEN
233  yrec(njj) = ymini
234  ELSE
235  yrec(njj) = ymini/evis**2
236  ENDIF
237  DO 5011 i=1,njj
238  DO 5012 k=1,7
239  pjet(k,i,njj) = pl(k,i)
240  5012 CONTINUE
241  5011 CONTINUE
242  ENDIF
243 C
244 C END IF 1-JET CASE REACHED
245 C
246  IF(njj.LE.1) goto 9000
247 C
248 C NOW CALCULATE RELEVANT NEW MASS-COMBINATIONS
249 C
250  DO 5013 ii=1,njj
251  IF(ii.NE.im) THEN
252  i = min(ii,im)
253  j = max(ii,im)
254  IF(imode.EQ.1) THEN
255  y(i,j) = jade(i,j)
256  ELSEIF(imode.EQ.5) THEN
257  y(i,j) = d(i,j)
258  ELSEIF(imode.EQ.6) THEN
259  y(i,j) = g(i,j)
260  ELSE
261  y(i,j) = e(i,j)
262  ENDIF
263  ENDIF
264  IF(nold.NE.0) THEN
265  i = min(ii,jm)
266  j = max(ii,jm)
267  y(i,j) = y(ii,nold)
268  ENDIF
269  5013 CONTINUE
270 C
271 C BACK TO START OF LOOP
272 C
273  goto 1000
274 C
275  9000 CONTINUE
276 C
277  imodeo = imode
278  nto = nt
279  ierr = 0
280 CCCCC
281 C WRITE(6,825) (J,(HISTOR(I,J),I=1,2),J=1,NT)
282 C825 FORMAT(/,' HISTORY:',/,250(I3,4X,2I4,/))
283 CCCCC
284  RETURN
285  END
double min(double a, double b)
double y[MAX_LINK]
double x[MAX_LINK]
subroutine ykern(IMODE, NT, ITKDM, PP, IERR)
Definition: ykern.f:2