All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
pxcamj.f
Go to the documentation of this file.
1 CDECK ID>, PXCAMJ.
2  SUBROUTINE pxcamj(ITKDM,NT,PT,YCUT,NJ,IJ,PJ,IERR)
3 C
4 C---CAMBRIDGE JET CLUSTERING ALGORITHM
5 C BASED ON YCLUS BY S BETHKE
6 C REF: YU L DOKSHITZER, G D LEDER, S MORETTI, B R WEBBER
7 C CAVENDISH-HEP-97/06 (JUNE 1997)
8 C 07/07/97 FIRST RELEASED BY BRW
9 C 23/08/97 COMMENTS REVISED BY BRW
10 C
11 C INPUT:
12 C ITKDM = 1st dimension of array PT, ITKDM >= 4 required
13 C NT = NUMBER OF TRACKS
14 C PT(,I) = 4-MOMENTUM OF TRACK I (I=1,NT)
15 C YCUT = (DURHAM) JET RESOLUTION
16 C
17 C OUTPUT:
18 C NJ = NUMBER OF JETS
19 C IJ(I) = J IF TRACK I BELONGS TO JET J (I=1,NT)
20 C PJ(4,J) = 4-MOMENTUM OF JET J (J=1,NJ)
21 C
22 C NB: CLUSTERING SEQUENCE DEPENDS ON VALUE OF YCUT
23 C
24 C Modifications:
25 C 23.09.97, STK: Variable 1st dim for PT, REAL call args, handle
26 C errors with error flag IERR
27 C 24.09.97, STK: Improved error handling, sorted declarations,
28 C added welcome message
29 C 29.09.97, SB : Calculate EVIS from PT array; introduce to PX library
30 C-----------------------------------------------------------------------
31  IMPLICIT NONE
32  INTEGER itkdm,nt,nj,ij(*),ierr
33  REAL pt(itkdm,*),evis,ycut,pj(4,*)
34  INTEGER ntrk,nv
35  parameter( ntrk=300, nv=ntrk*(ntrk-2)+ntrk-(ntrk-2)*(ntrk-1)/2 )
36  LOGICAL ip(ntrk),lcall
37  INTEGER i,ii,j,k,l,imini,jmini,iad,jj(ntrk)
38  DOUBLE PRECISION pp(5),pl(5,ntrk),v(nv),pm,vmini,ysca
39  SAVE lcall
40  DATA lcall / .false. /
41 C Welcome message:
42  IF( .NOT.lcall ) THEN
43  print *, ' '
44  print *, 'Cambridge jet finding algorithm, please refer to:'
45  print *, 'Yu.L. Dokshitzer, G.D. Leder, S. Moretti, B.R. Webber'
46  print *, 'CAVENDISH-HEP-97/06 (June 1997)'
47  print *, ' '
48  lcall= .true.
49  ENDIF
50 C---WARNINGS
51  ierr = 0
52  evis = 0.
53  IF( nt.GT.ntrk ) THEN
54  WRITE(*,'(''CAMJET: More than '',I3,'' input particles: '',I5)')
55  & ntrk,nt
56  ierr= 1
57  RETURN
58  ELSEIF( nt.LT.2 ) THEN
59  WRITE(*,'(''CAMJET: Less than 2 input particles: '',I5)') nt
60  ierr= 2
61  RETURN
62  ENDIF
63 C---COPY MOMENTA INTO PL-ARRAY
64  DO i=1,nt
65  ip(i)=.true.
66  ij(i)=i
67  DO ii=1,4
68  pl(ii,i)= dble(pt(ii,i))
69  ENDDO
70  pm=pl(1,i)**2+pl(2,i)**2+pl(3,i)**2
71  evis = evis + pt(4,i)
72  IF (pm.GT.0d0) THEN
73  pl(5,i)=1d0/sqrt(pm)
74  ELSE
75  pl(5,i)=1d0
76  ENDIF
77  ENDDO
78  ysca= dble(ycut)*dble(evis)**2
79 C---FILL V-ARRAY: V(I,J) IS V(NT*(I-1)+J-I(I+1)/2)
80  iad = 0
81  DO i=1,nt-1
82  DO ii=1,5
83  pp(ii)=pl(ii,i)
84  ENDDO
85  DO j=i+1,nt
86  iad = iad + 1
87  v(iad) = 2d0*(1d0-(pp(1)*pl(1,j) +pp(2)*pl(2,j)
88  & +pp(3)*pl(3,j))*pp(5)*pl(5,j))
89  ENDDO
90  ENDDO
91  nj=nt
92 C---START MAIN LOOP. FIRST LOOK FOR MINIMUM V
93  1 vmini = 1d10
94  imini = 0
95  iad = 0
96  DO i=1,nt-1
97  IF (ip(i)) THEN
98  DO j=i+1,nt
99  iad = iad + 1
100  IF (ip(j).AND.v(iad).LT.vmini) THEN
101  vmini = v(iad)
102  imini = i
103  jmini = j
104  ENDIF
105  ENDDO
106  ELSE
107  iad=iad+nt-i
108  ENDIF
109  ENDDO
110 C---END OF CLUSTER SEARCH FOR VMINI
111  IF (imini.NE.0) THEN
112 C---NOT FINISHED YET
113  IF (vmini*min(pl(4,imini),pl(4,jmini))**2.GE.ysca) THEN
114 C---SOFT FREEZING HERE
115  IF (pl(4,imini).LT.pl(4,jmini)) THEN
116  ip(imini)=.false.
117  ELSE
118  ip(jmini)=.false.
119  ENDIF
120  ELSE
121 C---COMBINE PARTICLES IMINI AND JMINI
122  DO ii=1,4
123  pl(ii,imini)=pl(ii,imini)+pl(ii,jmini)
124  ENDDO
125  pm=pl(1,imini)**2+pl(2,imini)**2+pl(3,imini)**2
126  IF (pm.GT.0d0) THEN
127  pl(5,imini)=1d0/sqrt(pm)
128  ELSE
129  pl(5,imini)=1d0
130  ENDIF
131 C---FLAG PARTICLE JMINI AS COMBINED
132  ip(jmini)=.false.
133  ij(jmini)=imini
134  nj=nj-1
135 C---CALCULATE RELEVANT NEW V VALUES
136  DO i=1,nt
137  IF (i.NE.imini) THEN
138  IF (ij(i).EQ.jmini) ij(i)=imini
139  IF (ip(i)) THEN
140  k = min(i,imini)
141  l = max(i,imini)
142  iad = nt*(k-1) + l - (k*(k+1))/2
143  v(iad) = 2d0*(1d0-(pl(1,k)*pl(1,l) +pl(2,k)*pl(2,l)
144  & +pl(3,k)*pl(3,l))*pl(5,k)*pl(5,l))
145  ENDIF
146  ENDIF
147  ENDDO
148  ENDIF
149 C---BACK TO START OF LOOP
150  go to 1
151  ELSE
152 C---FINISHED: CONSTRUCT JETS
153  j=0
154  DO i=1,nt
155  IF (ij(i).EQ.i) THEN
156  j=j+1
157  jj(i)=j
158  DO ii=1,4
159  pj(ii,j)= sngl(pl(ii,i))
160  ENDDO
161  ENDIF
162  ENDDO
163  DO i=1,nt
164  ij(i)=jj(ij(i))
165  ENDDO
166  ENDIF
167  END
double min(double a, double b)
subroutine pxcamj(ITKDM, NT, PT, YCUT, NJ, IJ, PJ, IERR)
Definition: pxcamj.f:2