]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ISAJET/code/ipartns.F
Allowing coding conventions to be checked
[u/mrichter/AliRoot.git] / ISAJET / code / ipartns.F
CommitLineData
0795afa3 1#include "isajet/pilot.h"
2 SUBROUTINE IPARTNS(NPRTNS,IDS,PRTNS,IDQ,WEIGHT,WZDK)
3C----------------------------------------------------------------------
4C-
5C- Purpose and Methods :
6C- fill PJETS array from a list of input partons
7C- Inputs :
8C- NPRTNS = number of partons
9C- IDS(NPRTNS) = parton ids
10C- PRTNS(4,NPRTNS) = parton 4 vectors
11C- IDQ(2) = initial partons
12C- WEIGHT = weight
13C- WZDK = if true last 2 partons are from W,Z decay
14C-
15C-
16C- Created 8-OCT-1991 Serban D. Protopopescu
17C- Updated 17-APR-1996 Serban D. Protopopescu
18C- added entry evcuts to supply evolution limits
19C- modified DrellYan (keys(3)) to stay within VECBOS jet ranking
20C- Updated 16-JUN-1998 F. Paige
21C- Removed ISAZEB dependence: use ISPJET and do not call ISPETA
22C-
23C----------------------------------------------------------------------
24#if defined(CERNLIB_IMPNONE)
25 IMPLICIT NONE
26#endif
27 INTEGER NPRTNS,IDS(NPRTNS),IDQ(2)
28 REAL PRTNS(4,NPRTNS),WEIGHT
29 LOGICAL WZDK
30#include "isajet/final.inc"
31#include "isajet/idrun.inc"
32#include "isajet/jetpar.inc"
33#include "isajet/keys.inc"
34#include "isajet/nodcay.inc"
35#include "isajet/partcl.inc"
36#include "isajet/pjets.inc"
37#include "isajet/primar.inc"
38#include "isajet/q1q2.inc"
39#include "isajet/totals.inc"
40 REAL SUM(4),AMASS
41 INTEGER K,J,IWZ,ID,NQS
42 INTEGER MAXQ
43 PARAMETER (MAXQ=15)
44 INTEGER I,NP,JDORD(MAXQ),JIORD(MAXQ),NPJ
45 REAL ETAQ(MAXQ),PHIQ(MAXQ),THQ(MAXQ),PTQ(MAXQ)
46 REAL ETCUT,ETIN,RCUT,RIN,R
47 REAL PPI
48 REAL PXPT(MAXQ),PXETA(MAXQ),PXPHI(MAXQ)
49 LOGICAL DOEVOL,DOEVIN
50 DOUBLE PRECISION PI, TWOPI, HALFPI, RADIAN
51 PARAMETER (PI= 3.1415 92653 58979 32384 6 D0)
52 PARAMETER (TWOPI= 6.2831 85307 17958 64769 3 D0)
53 PARAMETER (HALFPI= 1.5707 96326 79489 66192 3 D0)
54 PARAMETER (RADIAN= 0.0174532 92519 94329 5769237 D0)
55C----------------------------------------------------------------------
56C
57 NJET=0
58C
59C handle W's and Z's
60C
61 IEVT=IEVT+1
62 IWZ=0
63 NQS=NPRTNS
64 IF(WZDK) NQS=NPRTNS-2
65 DO 1 J=1,NPRTNS
66 ID=IABS(IDS(J))
67 IF(ID.GT.79) THEN
68 IF(ID.EQ.90) JWTYP=4
69 IF(IDS(J).EQ.80) JWTYP=2
70 IF(IDS(J).EQ.-80) JWTYP=3
71 IDENTW=IDS(J)
72 DO 2 K=1,4
73 QWJET(K)=PRTNS(K,J)
74 2 CONTINUE
75 QWJET(5)=SQRT(QWJET(4)**2-QWJET(1)**2-QWJET(2)**2-QWJET(3)**2)
76 IWZ=J
77 ENDIF
78 1 CONTINUE
79 DO 4 J=NQS+1,NPRTNS
80 ID=IABS(IDS(J))
81 NJET=NJET+1
82 DO 3 K=1,4
83 PJETS(K,NJET)=PRTNS(K,J)
84 3 CONTINUE
85 IDJETS(NJET)=IDS(J)
86 PJETS(5,NJET)=AMASS(ID)
87 4 CONTINUE
88C W,Z decays were not in input
89 IF(IWZ.NE.0.AND.NJET.EQ.0) THEN
90 NJET=2
91 CALL ISWDKY
92 ENDIF
93C
94C fill with the other partons
95C
96 DO 5 K=1,4
97 SUM(K)=0
98 5 CONTINUE
99 DO 11 J=1,NQS
100 ID=IABS(IDS(J))
101 IF(IWZ.NE.J.AND.ID.LT.11) THEN
102 NJET=NJET+1
103 IDJETS(NJET)=IDS(J)
104 DO 12 K=1,4
105 PJETS(K,NJET)=PRTNS(K,J)
106 12 CONTINUE
107 PJETS(5,NJET)=PRTNS(4,J)**2-PRTNS(1,J)**2-PRTNS(2,J)**2-
108 $ PRTNS(3,J)**2
109 IF ( PJETS(5,NJET).GT.0. ) THEN
110 PJETS(5,NJET)=SQRT(PJETS(5,NJET))
111 ELSE
112 PJETS(4,NJET)=SQRT(PRTNS(4,J)**2-PJETS(5,NJET))
113 PJETS(5,NJET)=0.
114 ENDIF
115 ENDIF
116 DO 13 K=1,4
117 SUM(K)=SUM(K)+PRTNS(K,J)
118 13 CONTINUE
119 11 CONTINUE
120C
121C eta and phi of incoming partons
122 IF(DOEVOL) THEN
123 NP=NQS-1
124 DO 114 I=1,NP
125 PPI=SQRT(PRTNS(1,I)**2+PRTNS(2,I)**2+PRTNS(3,I)**2)
126 IF(PPI.GT.0.AND.PPI.GT.ABS(PRTNS(3,I))) THEN
127 THQ(I)=ACOS(PRTNS(3,I)/PPI)
128 ETAQ(I)=-LOG(TAN(THQ(I)/2))
129 ELSE
130 THQ(I)=0
131 ETAQ(I)=SIGN(999.,PRTNS(3,I))
132 ENDIF
133 PTQ(I)=SQRT(PRTNS(1,I)**2+PRTNS(2,I)**2)
134 IF(PTQ(I).GT.0) THEN
135 PHIQ(I)=ATAN2(PRTNS(2,I),PRTNS(1,I))
136 IF(PHIQ(I).LT.0) PHIQ(I)=PHIQ(I)+TWOPI
137 ELSE
138 PHIQ(I)=0
139 ENDIF
140 114 CONTINUE
141C
142C ... Order partons in pt
143C
144 DO 115 I = 1 , NP
145 JIORD(I) = I
146 PXPT(I)=PTQ(I)
147 115 CONTINUE
148 CALL ISASRT(PXPT(1),NP,JIORD)
149 DO 116 I = 1 , NP
150 PXPT(I)=PTQ(I)
151 PXETA(I)=ETAQ(I)
152 PXPHI(I)=PHIQ(I)
153 JDORD(I) = JIORD(NP-I+1)
154 116 CONTINUE
155 DO 117 I = 1 , NP
156 PTQ(I)=PXPT(JDORD(I))
157 ETAQ(I)=PXETA(JDORD(I))
158 PHIQ(I)=PXPHI(JDORD(I))
159 117 CONTINUE
160 ENDIF
161C
162C
163 15 CONTINUE
164 PBEAM(1)=(ECM-SUM(4)-SUM(3))/2.
165 PBEAM(2)=(ECM-SUM(4)+SUM(3))/2.
166 QSQ=SQRT(SUM(4)**2-SUM(3)**2-SUM(2)**2-SUM(1)**2)
167 CALL RANFMT
168 NPTCL=0
169 IF(KEYS(3)) THEN
170 STDDY=.FALSE.
171 IF(NQS.EQ.1.OR.NJET.LT.3) STDDY=.TRUE.
172 ENDIF
173 CALL IPRTNS(NQS,PRTNS,IDQ)
174 IF(.NOT.NOEVOL) THEN
175 CALL EVOLVE
176C
177C special check for VECBOS
178 IF(DOEVOL) THEN
179C Find parton jets
180 CALL ISPJET(RCUT,ETCUT,NPJ,PXPT,PXPHI,PXETA)
181 IF(NPJ.GE.NP.AND.PXPT(NP).GT.PTQ(NP)) THEN
182 R=SQRT((PXETA(NP)-ETAQ(NP))**2+(PXPHI(NP)-PHIQ(NP))**2)
183 IF(R.GT.RCUT) GOTO 15
184 ENDIF
185 ENDIF
186C
187 IF(.NOT.NOHADR) THEN
188 CALL FRGMNT
189 CALL MBIAS
190 ENDIF
191 ENDIF
192 WT=WEIGHT
193 SUMWT=SUMWT+WT
194 SIGF=SUMWT
195 NKINF=IEVT
196 NEVENT=IEVT
197 999 RETURN
198C
199C Entry point to set parameters
200C
201 ENTRY EVCUTS(RIN,ETIN,DOEVIN)
202 RCUT=RIN
203 ETCUT=ETIN
204 DOEVOL=DOEVIN
205 RETURN
206 END