All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
yasso.f
Go to the documentation of this file.
1 CDECK ID>, YASSO.
2  SUBROUTINE yasso(NJET,PNJ,BL,IERR)
3 C
4 C ROUTINE TO RETURN THE ASSIGNMENT OF PARTICLES TO JET AXES, FOR
5 C CLASSIFICATION AS N-JET (FOR PARTICLE K IN MOMENTUM ARRAY,
6 C J=BL(K) POINTS TO JET NUMBER J IN ARRAY PNJ).
7 C JETS ARE ORDERED ACCORDING TO THEIR ENERGIES: E1 >= E2 >= ...
8 C
9 C LAST MOD : 28-Jul-99
10 C
11 C Modification Log.
12 C 28-Jul-99 D. Chrisman, ITAG and IREORD are now dimensioned with NJETMX
13 C elements.
14 C 08-Oct-97 D. Chrisman, Increase NYCLMX from 250 to 500.
15 C 21-Jun-98 D. Chrisman, Want to be able to handle more than 10 jets.
16 C Introduce parameter NJETMX. Use this
17 C in declaration of PJET, YREC and PNJ in order to
18 C remove hard coded numbers.
19 C
20  IMPLICIT NONE
21 C IMPLICIT NONE
22  INTEGER nyclmx,njetmx,njet,ierr,imodeo,njeto,nto,icheck,i,j,k,n
23  INTEGER i1,i2
24  parameter(nyclmx = 500, njetmx = 20)
25  INTEGER histor(2,nyclmx),imax,bl(nyclmx),itag(njetmx),
26  + ireord(njetmx)
27  REAL yrec(njetmx),pint(10,nyclmx),pjet(10,njetmx,njetmx)
28  REAL pnj(10,njetmx),emax
29  COMMON /ycl/yrec,pjet,histor
30  COMMON /yint/ imodeo,nto,njeto,pint
31  ierr = -1
32 C
33 CHECK IF CALL WAS MADE TO YKERN
34 C
35  icheck = 0
36  IF(imodeo.LE.0 .OR. imodeo.GT.7) THEN
37  WRITE(6,111)
38  111 FORMAT(' #### YASSO: YKERN MUST BE CALLED FIRST ! ####')
39  icheck = -1
40  ENDIF
41 C
42 CHECK IF INPUT MAKES SENSE
43 C
44  IF(njet.LE.0 .OR. njet.GT.njetmx) THEN
45  WRITE(6,1) njet
46  1 FORMAT(' #### YASSO: REQUEST FOR NJET=',i4,
47  + ' NOT SUPPORTED ####')
48  icheck = -1
49  ENDIF
50  IF(njet.GT.nto) THEN
51  WRITE(6,2) njet,nto
52  2 FORMAT(' #### YASSO:',i4,' JETS OUT OF',i4,' PARTICLES NOT',
53  + ' POSSIBLE. ####')
54  icheck = -1
55  ENDIF
56  IF(icheck.NE.0) THEN
57  DO 5001 i=1,10
58  DO 5002 j=1,njetmx
59  pnj(i,j) = -1.
60  5002 CONTINUE
61  5001 CONTINUE
62  DO 5003 i=1,nto
63  bl(i) = -1
64  5003 CONTINUE
65  RETURN
66  ENDIF
67 C
68  DO 5004 i=1,nto
69  bl(i) = i
70  5004 CONTINUE
71 C
72  IF(njet.NE.nto) THEN
73  DO 5005 i=nto,njet+1,-1
74  i1 = histor(1,i)
75  i2 = histor(2,i)
76  DO 5006 n=1,nto
77  IF(bl(n).EQ.i1) bl(n) = i2
78  IF(i1.NE.i) THEN
79  IF(bl(n).EQ.i) bl(n) = i1
80  ENDIF
81  5006 CONTINUE
82  5005 CONTINUE
83  ENDIF
84 C
85 C ORDER JETS ACCORDING TO THEIR ENERGY (FIRST IS LARGEST)
86 C AND CHANGE POINTERS ACCORDINGLY
87 C
88  DO 5007 i=1,njet
89  itag(i) = 1
90  5007 CONTINUE
91  DO 5008 i=1,njet
92 C IF(ITAG(I).NE.0) THEN
93  emax = 0.
94  imax = 0
95  DO 5009 j=1,njet
96  IF(itag(j).NE.0 .AND. emax.LT.pjet(4,j,njet)) THEN
97  emax = pjet(4,j,njet)
98  imax = j
99  ENDIF
100  5009 CONTINUE
101  IF(imax.LE.0) THEN
102  WRITE(6,9)
103  9 FORMAT(' #### YASSO: JET AXIS WITH ZERO OR NEGATIVE ',
104  + 'ENERGY COMPONENT DETECTED; NO ORDERING DONE. ####')
105  DO 5010 n=1,njet
106  DO 5011 k=1,7
107  pnj(k,n) = pjet(k,n,njet)
108  5011 CONTINUE
109  5010 CONTINUE
110  RETURN
111  ENDIF
112  itag(imax) = 0
113  ireord(imax) = i
114 C ENDIF
115  5008 CONTINUE
116 C
117  DO 5012 n=1,njet
118  DO 5013 k=1,7
119  pnj(k,ireord(n)) = pjet(k,n,njet)
120  5013 CONTINUE
121  5012 CONTINUE
122 C
123  DO 5014 i=1,nto
124  bl(i) = ireord(bl(i))
125  5014 CONTINUE
126 C
127  ierr = 0
128  RETURN
129  END
subroutine yasso(NJET, PNJ, BL, IERR)
Definition: yasso.f:2