]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PYTHIA/jetset/luthru.F
Corrections to line for alpha
[u/mrichter/AliRoot.git] / PYTHIA / jetset / luthru.F
CommitLineData
fe4da5cc 1
2C*********************************************************************
3
4 SUBROUTINE LUTHRU(THR,OBL)
5
6C...Purpose: to perform thrust analysis to give thrust, oblateness
7C...and the related event axes.
8 COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5)
9 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
10 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
11 SAVE /LUJETS/,/LUDAT1/,/LUDAT2/
12 DIMENSION TDI(3),TPR(3)
13
14C...Take copy of particles that are to be considered in thrust analysis.
15 NP=0
16 PS=0.
17 DO 100 I=1,N
18 IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
19 IF(MSTU(41).GE.2) THEN
20 KC=LUCOMP(K(I,2))
21 IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
22 & KC.EQ.18) GOTO 100
23 IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.LUCHGE(K(I,2)).EQ.0)
24 & GOTO 100
25 ENDIF
26 IF(N+NP+MSTU(44)+15.GE.MSTU(4)-MSTU(32)-5) THEN
27 CALL LUERRM(11,'(LUTHRU:) no more memory left in LUJETS')
28 THR=-2.
29 OBL=-2.
30 RETURN
31 ENDIF
32 NP=NP+1
33 K(N+NP,1)=23
34 P(N+NP,1)=P(I,1)
35 P(N+NP,2)=P(I,2)
36 P(N+NP,3)=P(I,3)
37 P(N+NP,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
38 P(N+NP,5)=1.
39 IF(ABS(PARU(42)-1.).GT.0.001) P(N+NP,5)=P(N+NP,4)**(PARU(42)-1.)
40 PS=PS+P(N+NP,4)*P(N+NP,5)
41 100 CONTINUE
42
43C...Very low multiplicities (0 or 1) not considered.
44 IF(NP.LE.1) THEN
45 CALL LUERRM(8,'(LUTHRU:) too few particles for analysis')
46 THR=-1.
47 OBL=-1.
48 RETURN
49 ENDIF
50
51C...Loop over thrust and major. T axis along z direction in latter case.
52 DO 320 ILD=1,2
53 IF(ILD.EQ.2) THEN
54 K(N+NP+1,1)=31
55 PHI=ULANGL(P(N+NP+1,1),P(N+NP+1,2))
56 MSTU(33)=1
57 CALL LUDBRB(N+1,N+NP+1,0.,-PHI,0D0,0D0,0D0)
58 THE=ULANGL(P(N+NP+1,3),P(N+NP+1,1))
59 CALL LUDBRB(N+1,N+NP+1,-THE,0.,0D0,0D0,0D0)
60 ENDIF
61
62C...Find and order particles with highest p (pT for major).
63 DO 110 ILF=N+NP+4,N+NP+MSTU(44)+4
64 P(ILF,4)=0.
65 110 CONTINUE
66 DO 160 I=N+1,N+NP
67 IF(ILD.EQ.2) P(I,4)=SQRT(P(I,1)**2+P(I,2)**2)
68 DO 130 ILF=N+NP+MSTU(44)+3,N+NP+4,-1
69 IF(P(I,4).LE.P(ILF,4)) GOTO 140
70 DO 120 J=1,5
71 P(ILF+1,J)=P(ILF,J)
72 120 CONTINUE
73 130 CONTINUE
74 ILF=N+NP+3
75 140 DO 150 J=1,5
76 P(ILF+1,J)=P(I,J)
77 150 CONTINUE
78 160 CONTINUE
79
80C...Find and order initial axes with highest thrust (major).
81 DO 170 ILG=N+NP+MSTU(44)+5,N+NP+MSTU(44)+15
82 P(ILG,4)=0.
83 170 CONTINUE
84 NC=2**(MIN(MSTU(44),NP)-1)
85 DO 250 ILC=1,NC
86 DO 180 J=1,3
87 TDI(J)=0.
88 180 CONTINUE
89 DO 200 ILF=1,MIN(MSTU(44),NP)
90 SGN=P(N+NP+ILF+3,5)
91 IF(2**ILF*((ILC+2**(ILF-1)-1)/2**ILF).GE.ILC) SGN=-SGN
92 DO 190 J=1,4-ILD
93 TDI(J)=TDI(J)+SGN*P(N+NP+ILF+3,J)
94 190 CONTINUE
95 200 CONTINUE
96 TDS=TDI(1)**2+TDI(2)**2+TDI(3)**2
97 DO 220 ILG=N+NP+MSTU(44)+MIN(ILC,10)+4,N+NP+MSTU(44)+5,-1
98 IF(TDS.LE.P(ILG,4)) GOTO 230
99 DO 210 J=1,4
100 P(ILG+1,J)=P(ILG,J)
101 210 CONTINUE
102 220 CONTINUE
103 ILG=N+NP+MSTU(44)+4
104 230 DO 240 J=1,3
105 P(ILG+1,J)=TDI(J)
106 240 CONTINUE
107 P(ILG+1,4)=TDS
108 250 CONTINUE
109
110C...Iterate direction of axis until stable maximum.
111 P(N+NP+ILD,4)=0.
112 ILG=0
113 260 ILG=ILG+1
114 THP=0.
115 270 THPS=THP
116 DO 280 J=1,3
117 IF(THP.LE.1E-10) TDI(J)=P(N+NP+MSTU(44)+4+ILG,J)
118 IF(THP.GT.1E-10) TDI(J)=TPR(J)
119 TPR(J)=0.
120 280 CONTINUE
121 DO 300 I=N+1,N+NP
122 SGN=SIGN(P(I,5),TDI(1)*P(I,1)+TDI(2)*P(I,2)+TDI(3)*P(I,3))
123 DO 290 J=1,4-ILD
124 TPR(J)=TPR(J)+SGN*P(I,J)
125 290 CONTINUE
126 300 CONTINUE
127 THP=SQRT(TPR(1)**2+TPR(2)**2+TPR(3)**2)/PS
128 IF(THP.GE.THPS+PARU(48)) GOTO 270
129
130C...Save good axis. Try new initial axis until a number of tries agree.
131 IF(THP.LT.P(N+NP+ILD,4)-PARU(48).AND.ILG.LT.MIN(10,NC)) GOTO 260
132 IF(THP.GT.P(N+NP+ILD,4)+PARU(48)) THEN
133 IAGR=0
134 SGN=(-1.)**INT(RLU(0)+0.5)
135 DO 310 J=1,3
136 P(N+NP+ILD,J)=SGN*TPR(J)/(PS*THP)
137 310 CONTINUE
138 P(N+NP+ILD,4)=THP
139 P(N+NP+ILD,5)=0.
140 ENDIF
141 IAGR=IAGR+1
142 IF(IAGR.LT.MSTU(45).AND.ILG.LT.MIN(10,NC)) GOTO 260
143 320 CONTINUE
144
145C...Find minor axis and value by orthogonality.
146 SGN=(-1.)**INT(RLU(0)+0.5)
147 P(N+NP+3,1)=-SGN*P(N+NP+2,2)
148 P(N+NP+3,2)=SGN*P(N+NP+2,1)
149 P(N+NP+3,3)=0.
150 THP=0.
151 DO 330 I=N+1,N+NP
152 THP=THP+P(I,5)*ABS(P(N+NP+3,1)*P(I,1)+P(N+NP+3,2)*P(I,2))
153 330 CONTINUE
154 P(N+NP+3,4)=THP/PS
155 P(N+NP+3,5)=0.
156
157C...Fill axis information. Rotate back to original coordinate system.
158 DO 350 ILD=1,3
159 K(N+ILD,1)=31
160 K(N+ILD,2)=96
161 K(N+ILD,3)=ILD
162 K(N+ILD,4)=0
163 K(N+ILD,5)=0
164 DO 340 J=1,5
165 P(N+ILD,J)=P(N+NP+ILD,J)
166 V(N+ILD,J)=0.
167 340 CONTINUE
168 350 CONTINUE
169 CALL LUDBRB(N+1,N+3,THE,PHI,0D0,0D0,0D0)
170
171C...Calculate thrust and oblateness. Select storing option.
172 THR=P(N+1,4)
173 OBL=P(N+2,4)-P(N+3,4)
174 MSTU(61)=N+1
175 MSTU(62)=NP
176 IF(MSTU(43).LE.1) MSTU(3)=3
177 IF(MSTU(43).GE.2) N=N+3
178
179 RETURN
180 END