All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
pxcone.f
Go to the documentation of this file.
1 CDECK ID>, PXCONE.
2  SUBROUTINE pxcone (NTRAK,ITKDM,PTRAK,CONER,EPSLON,MXJET,
3  + njet,pjet,ipass,ijmul,ierr)
4 *.*********************************************************
5 *. ------
6 *. PXCONE
7 *. ------
8 *.
9 *.********** Pre Release Version 26.2.93
10 *.
11 *. Driver for the Cone Jet finding algorithm of L.A. del Pozo.
12 *. Based on algorithm from D.E. Soper.
13 *. Finds jets inside cone of half angle CONER with energy > EPSLON.
14 *. Output jets are ordered in energy.
15 *. Usage :
16 *.
17 *. INTEGER ITKDM,MXTRK
18 *. PARAMETER (ITKDM=4.or.more,MXTRK=1.or.more)
19 *. INTEGER MXJET, MXTRAK, MXPROT
20 *. PARAMETER (MXJET=10,MXTRAK=200,MXPROT=100)
21 *. INTEGER IPASS (MXTRAK),IJMUL (MXJET)
22 *. INTEGER NTRAK,NJET,IERR
23 *. REAL PTRAK (ITKDM,MXTRK),PJET (5,MXJET)
24 *. REAL CONER, EPSLON
25 *. NTRAK = 1.to.MXTRAK
26 *. CONER = 0.7 (suggested value)
27 *. EPSLON = 7.0 (suggested value)
28 *. CALL PXCONE (NTRAK,ITKDM,PTRAK,CONER,EPSLON,MXJET,
29 *. + NJET,PJET,IPASS,IJMUL,IERR)
30 *.
31 *. INPUT : NTRAK Number of particles
32 *. INPUT : ITKDM First dimension of PTRAK array
33 *. INPUT : PTRAK Array of particle 4-momenta (Px,Py,Pz,E)
34 *. INPUT : CONER Cone size (half angle) in radians
35 *. INPUT : EPSLON Minimum Jet energy (GeV)
36 *. INPUT : MXJET Maximum possible number of jets
37 *. OUTPUT : NJET Number of jets found
38 *. OUTPUT : PJET 5-vectors of jets
39 *. OUTPUT : IPASS(k) Particle k belongs to jet number IPASS(k)
40 *. IPASS = -1 if not assosciated to a jet
41 *. OUTPUT : IJMUL(i) Jet i contains IJMUL(i) particles
42 *. OUTPUT : IERR = 0 if all is OK ; = -1 otherwise
43 *.
44 *. CALLS : PXSEAR, PXSAME, PXNEW, PXTRY, PXORD, PXUVEC, PXOLAP
45 *. CALLED : User
46 *.
47 *. AUTHOR : L.A. del Pozo
48 *. CREATED : 26-Feb-93
49 *. LAST MOD : 08-Oct-97
50 *.
51 *. Modification Log.
52 *. 08-Oct-97: D. Chrisman - Call PXADDV with the correct number
53 *. of arguments.
54 *. 26-Jun-96: D. Chrisman - Save ROLD and EPSOLD
55 *. 3-Mar-93: L A del Pozo - Check Cone size is sensible.
56 *. 2-Mar-93: L A del Pozo - Fix Bugs in PXOLAP
57 *. 1-Mar-93: L A del Pozo - Remove Cern library routine calls
58 *. 1-Mar-93: L A del Pozo - Add Print out of welcome and R and Epsilon
59 *.
60 *.*********************************************************
61  IMPLICIT NONE
62 *** External Arrays
63  INTEGER itkdm,mxjet,ntrak,njet,ierr
64  INTEGER ipass (*),ijmul (mxjet)
65  REAL ptrak (itkdm,*),pjet (5,*), coner, epslon
66 *** Internal Arrays
67  INTEGER mxprot, mxtrak
68  parameter(mxprot=100, mxtrak=200)
69  REAL pp(4,mxtrak), pu(3,mxtrak), pj(4,mxprot)
70  LOGICAL jetlis(mxprot,mxtrak)
71 *** Used in the routine.
72  REAL cosr,cos2r, vseed(3), vec1(3), vec2(3)
73  LOGICAL unstbl
74  INTEGER i,j,n,mu,n1,n2, iterr
75  REAL rold, epsold
76  SAVE rold, epsold
77  INTEGER ncall, nprint
78  SAVE ncall,nprint
79  DATA ncall,nprint /0,0/
80  ierr=0
81 *
82 *** INITIALIZE
83  IF(ncall.LE.0) THEN
84  rold = 0.
85  epsold = 0.
86  ENDIF
87  ncall = ncall + 1
88 *
89 *** Print welcome and Jetfinder parameters
90  IF((coner.NE.rold .OR. epslon.NE.epsold) .AND. nprint.LE.10) THEN
91  WRITE (6,*)
92  WRITE (6,*) ' *********** PXCONE: Cone Jet-finder ***********'
93  WRITE(6,1000)' Cone Size R = ',coner,' Radians'
94  WRITE(6,1001)' Min Jet energy Epsilon = ',epslon,' GeV'
95  WRITE (6,*) ' ***********************************************'
96  WRITE (6,*)
97 1000 FORMAT(a18,f5.2,a10)
98 1001 FORMAT(a29,f5.2,a5)
99  nprint = nprint + 1
100  rold=coner
101  epsold=epslon
102  ENDIF
103 *** Check input Value of R is sensible.
104  IF (coner .GT. 1.5708) THEN
105  WRITE (6,*) ' PXCONE: CONER > 1.57 rad (90 degrees)'
106  ierr=-1
107  RETURN
108  ENDIF
109 *
110 *** Copy calling array PTRAK to internal array PP(4,NTRAK)
111 *
112  IF (ntrak .GT. mxtrak) THEN
113  WRITE (6,*) ' PXCONE: Ntrak too large'
114  ierr=-1
115  RETURN
116  ENDIF
117  DO 100 i=1, ntrak
118  DO 101 j=1,4
119  pp(j,i)=ptrak(j,i)
120 101 CONTINUE
121 100 CONTINUE
122 *
123 *** Zero output variables
124 *
125  njet=0
126  DO 102 i = 1, ntrak
127  DO 103 j = 1, mxprot
128  jetlis(j,i) = .false.
129 103 CONTINUE
130 102 CONTINUE
131  CALL pxzerv(4*mxprot,pj)
132  CALL pxzerv(mxjet,ijmul)
133 *
134  cosr = cos(coner)
135  cos2r = cos(2*coner)
136  unstbl = .false.
137  CALL pxuvec(ntrak,pp,pu,ierr)
138  IF (ierr .NE. 0) RETURN
139 *** Look for jets using particle diretions as seed axes
140 *
141  DO 110 n = 1,ntrak
142  DO 120 mu = 1,3
143  vseed(mu) = pu(mu,n)
144 120 CONTINUE
145  CALL pxsear(cosr,ntrak,pu,pp,vseed,
146  + njet,jetlis,pj,unstbl,ierr)
147  IF (ierr .NE. 0) RETURN
148 110 CONTINUE
149 *** Now look between all pairs of jets as seed axes.
150  DO 140 n1 = 1,njet-1
151  vec1(1)=pj(1,n1)
152  vec1(2)=pj(2,n1)
153  vec1(3)=pj(3,n1)
154  CALL pxnorv(3,vec1,vec1,iterr)
155  DO 150 n2 = n1+1,njet
156  vec2(1)=pj(1,n2)
157  vec2(2)=pj(2,n2)
158  vec2(3)=pj(3,n2)
159  CALL pxnorv(3,vec2,vec2,iterr)
160  CALL pxaddv(3,vec1,vec2,vseed)
161  CALL pxnorv(3,vseed,vseed,iterr)
162  CALL pxsear(cosr,ntrak,pu,pp,vseed,njet,
163  + jetlis,pj,unstbl,ierr)
164  IF (ierr .NE. 0) RETURN
165 150 CONTINUE
166 140 CONTINUE
167  IF (unstbl) THEN
168  ierr=-1
169  WRITE (6,*) ' PXCONE: Too many iterations to find a proto-jet'
170  RETURN
171  ENDIF
172 *** Now put the jet list into order by jet energy, eliminating jets
173 *** with energy less than EPSLON.
174  CALL pxord(epslon,njet,ntrak,jetlis,pj)
175 *
176 *** Take care of jet overlaps
177  CALL pxolap(njet,ntrak,jetlis,pj,pp)
178 *
179 *** Order jets again as some have been eliminated, or lost energy.
180  CALL pxord(epslon,njet,ntrak,jetlis,pj)
181 *
182 *** All done!, Copy output into output arrays
183  IF (njet .GT. mxjet) THEN
184  WRITE (6,*) ' PXCONE: Found more than MXJET jets'
185  ierr=-1
186  goto 99
187  ENDIF
188  DO 300 i=1, njet
189  DO 310 j=1,4
190  pjet(j,i)=pj(j,i)
191 310 CONTINUE
192 300 CONTINUE
193  DO 320 i=1, ntrak
194  ipass(i)=-1
195  DO 330 j=1, njet
196  IF (jetlis(j,i)) THEN
197  ijmul(j)=ijmul(j)+1
198  ipass(i)=j
199  ENDIF
200 330 CONTINUE
201 320 CONTINUE
202 99 RETURN
203  END
subroutine pxaddv(ISIZ, VEC1, VEC2, VECO)
Definition: pxaddv.f:2
subroutine pxsear(COSR, NTRAK, PU, PP, VSEED, NJET, JETLIS, PJ, UNSTBL, IERR)
Definition: pxsear.f:3
subroutine pxord(EPSLON, NJET, NTRAK, JETLIS, PJ)
Definition: pxord.f:3
subroutine pxzerv(ISZE, VEC)
Definition: pxzerv.f:2
subroutine pxnorv(ISIZ, VEC, VNOR, IERR)
Definition: pxnorv.f:2
subroutine pxuvec(NTRAK, PP, PU, IERR)
Definition: pxuvec.f:4
subroutine pxolap(NJET, NTRAK, JETLIS, PJ, PP)
Definition: pxolap.f:3
subroutine pxcone(NTRAK, ITKDM, PTRAK, CONER, EPSLON, MXJET, NJET, PJET, IPASS, IJMUL, IERR)
Definition: pxcone.f:2