All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
symrgj.f
Go to the documentation of this file.
1 CDECK ID>, SYMRGJ.
2 **************************************************************************
3  SUBROUTINE symrgj
4  + (nfin,iexam4,n0jet,npart,ijout,qjet,ijfin,qjfin4,ierr)
5 * Jet Merge Routine
6 * Authour : Satoru Yamashita
7 * Creat : 1-Oct-97
8 * Mod : 1-Feb-98 S.Yamashita buffer size increased
9 *
10 * Inputs:
11 * NFIN ; requested Number of Jets
12 * IEXAM4 ; Jet merge method 1-8
13 * N0JET ; Number of original Jets (>=NFIN)
14 * NPART ; Number of particles
15 * IJOUT ; Original Jet assignment for "particle"s
16 * QJET ; Original Jet 6-momenta
17 * Outputs:
18 * IJFIN ; New Jet assignment of "particle"s for the Merged Jet
19 * QJFIN4 ; New merged Jet 6-momenta
20 * IERR ; 0=O.K Others=error
21  implicit none
22  INTEGER mxjet
23  parameter(mxjet = 30)
24  INTEGER i,j,n,imins,jmins
25  REAL examin
26  INTEGER nfin,iexam4
27  INTEGER n0jet,npart
28  INTEGER ijout(*)
29  REAL qjet(6,*)
30  INTEGER ijfin(*)
31  REAL qjfin4(6,*),qtemp(6,mxjet)
32  INTEGER ierr
33 
34  REAL durham(mxjet,mxjet)
35  REAL e0jade(mxjet,mxjet)
36  REAL ejade(mxjet,mxjet)
37  REAL angle(mxjet,mxjet)
38  REAL ecos(mxjet,mxjet)
39  REAL rmult(mxjet,mxjet)
40  REAL pl(6,mxjet)
41  INTEGER mxexam
42  parameter(mxexam = 8)
43  REAL exam(mxexam,1000)
44  INTEGER nnjet,idjet(mxjet),idtemp(mxjet)
45 
46 * EXAM(1,N) = PL(4,I)*PL(4,J)
47 * EXAM(2,N) = RMULT(I,J)
48 * EXAM(3,N) = DURHAM(I,J)
49 * EXAM(4,N) = E0JADE(I,J)
50 * EXAM(5,N) = EJADE(I,J)
51 * EXAM(6,N) = ANGLE(I,J)
52 * EXAM(7,N) = ECOS(I,J)
53 * EXAM(8,N) = PL(6,I)*PL(6,J)
54 *
55 CC OLD 1996 S.Y
56 CC EXAM(1) = THETA
57 CC EXAM(2) = - SQRT(EMIN2) * COSTH
58 CC EXAM(3) = DURHAM
59 CC EXAM(4) = E0JADE
60 CC EXAM(5) = EJADE
61 *
62 *
63 ** INITIALYSE
64  DO i=1,nfin
65  DO j=1,6
66  qjfin4(j,i) = 0.0
67  ENDDO
68  ENDDO
69  DO i=1,npart
70  ijfin(i) = 0
71  ENDDO
72  ierr = 0
73 
74  IF(n0jet.LT.nfin) THEN
75  ierr = 1
76  RETURN
77  ELSE IF(n0jet.EQ.nfin) THEN ! Just Copy
78  DO i=1,nfin
79  DO j=1,6
80  qjfin4(j,i) = qjet(j,i)
81  ENDDO
82  ENDDO
83  DO i=1,npart
84  ijfin(i) = ijout(i)
85  ENDDO
86  RETURN
87  ENDIF
88 
89  IF(iexam4.LT.1.OR.iexam4.LT.mxexam) THEN
90  ierr = -80
91  RETURN
92  ENDIF
93 
94  DO i=1,n0jet
95  DO j=1,6
96  pl(j,i) = qjet(j,i)
97  ENDDO
98  idjet(i) = i
99  ENDDO
100 
101  nnjet = n0jet
102  100 CONTINUE
103  IF(nnjet.LE.nfin) THEN
104  goto 777
105  ENDIF
106 
107  n=0
108  DO i=1,nnjet-1
109  DO j=i+1,nnjet
110  n=n+1
111 
112  e0jade(i,j) =
113  + 2.*pl(4,i)*pl(4,j)*max(0.,(1.-
114  + (pl(1,i)*pl(1,j)+pl(2,i)*pl(2,j)+pl(3,i)*pl(3,j))/
115  + (pl(6,i)*pl(6,j))))
116  durham(i,j) =
117  + 2.*min(pl(4,i)*pl(4,i),pl(4,j)*pl(4,j))*max(0.,(1.-
118  + (pl(1,i)*pl(1,j)+pl(2,i)*pl(2,j)+pl(3,i)*pl(3,j))/
119  + (pl(6,i)*pl(6,j))))
120  ejade(i,j) =
121  + max(0.,(pl(4,i)+pl(4,j))**2-(pl(1,i)+pl(1,j))**2-
122  + (pl(2,i)+pl(2,j))**2-(pl(3,i)+pl(3,j))**2)
123  angle(i,j) =
124  + (pl(1,i)*pl(1,j)+pl(2,i)*pl(2,j)+pl(3,i)*pl(3,j))/
125  + (pl(6,i)*pl(6,j))
126  angle(i,j) = min(angle(i,j), 1.)
127  angle(i,j) = max(angle(i,j),-1.)
128  angle(i,j) = acos(angle(i,j))
129  ecos(i,j) = -min(pl(4,i),pl(4,j)) *
130  + (pl(1,i)*pl(1,j)+pl(2,i)*pl(2,j)+pl(3,i)*pl(3,j))/
131  + (pl(6,i)*pl(6,j))
132  rmult(i,j) = pl(4,i)*pl(4,j)-pl(1,i)*pl(1,j)
133  + -pl(2,i)*pl(2,j)-pl(3,i)*pl(3,j)
134 
135  exam(1,n) = pl(4,i)*pl(4,j)
136  exam(2,n) = rmult(i,j)
137  exam(3,n) = durham(i,j)
138  exam(4,n) = e0jade(i,j)
139  exam(5,n) = ejade(i,j)
140  exam(6,n) = angle(i,j)
141  exam(7,n) = ecos(i,j)
142  exam(8,n) = pl(6,i)*pl(6,j)
143  ENDDO
144  ENDDO
145 
146  n=0
147  imins=0
148  jmins=0
149  examin = 1.e+10
150  DO i=1,nnjet-1
151  DO j=i+1,nnjet
152  n=n+1
153  IF(exam(iexam4,n).LT.examin) THEN
154  imins=i
155  jmins=j
156  examin=exam(iexam4,n)
157  ENDIF
158  ENDDO
159  ENDDO
160 
161 * MERGE JETS
162  DO i=1,nnjet
163  DO j=1,6
164  qtemp(j,i) = pl(j,i)
165  ENDDO
166  ENDDO
167  DO i=1,n0jet
168  idtemp(i) = idjet(i)
169  ENDDO
170  DO i=1,n0jet
171  idjet(i) = 0
172  ENDDO
173 
174  n = 0
175  DO i=1,nnjet
176  IF(i.NE.imins.AND.i.NE.jmins) THEN
177  n = n + 1
178  DO j=1,6
179  pl(j,n) = qtemp(j,i)
180  ENDDO
181  DO j=1,n0jet
182  IF(idtemp(j).EQ.i) THEN
183  idjet(j) = n
184  ENDIF
185  ENDDO
186  ENDIF
187  ENDDO
188  nnjet = nnjet - 1
189  DO j=1,6
190  pl(j,nnjet) = qtemp(j,imins)+qtemp(j,jmins)
191  ENDDO
192  DO j=1,n0jet
193  IF(idtemp(j).EQ.imins.OR.idtemp(j).EQ.jmins) THEN
194  idjet(j) = nnjet
195  ENDIF
196  ENDDO
197  goto 100
198 
199  777 CONTINUE
200  DO i=1,nfin
201  DO j=1,6
202  qjfin4(j,i) = pl(j,i)
203  ENDDO
204  ENDDO
205  DO i=1,npart
206  ijfin(i) = idjet(ijout(i))
207  ENDDO
208 
209  END
subroutine symrgj(NFIN, IEXAM4, N0JET, NPART, IJOUT, QJET, IJFIN, QJFIN4, IERR)
Definition: symrgj.f:3
double min(double a, double b)