1 *CMZ : 17/07/98 15.44.34 by Federico Carminati
3 C*********************************************************************
5 SUBROUTINE LUTHRU(THR,OBL)
7 C...Purpose: to perform thrust analysis to give thrust, oblateness
8 C...and the related event axes.
10 COMMON /LUJETS/ N,K(200000,5),P(200000,5),V(200000,5)
13 COMMON /LUDAT1/ MSTU(200),PARU(200),MSTJ(200),PARJ(200)
16 COMMON /LUDAT2/ KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
19 DIMENSION TDI(3),TPR(3)
21 C...Take copy of particles that are to be considered in thrust analysis.
25 IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
26 IF(MSTU(41).GE.2) THEN
28 IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
30 IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.LUCHGE(K(I,2)).EQ.0)
33 IF(N+NP+MSTU(44)+15.GE.MSTU(4)-MSTU(32)-5) THEN
34 CALL LUERRM(11,'(LUTHRU:) no more memory left in LUJETS')
44 P(N+NP,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
46 IF(ABS(PARU(42)-1.).GT.0.001) P(N+NP,5)=P(N+NP,4)**(PARU(42)-1.)
47 PS=PS+P(N+NP,4)*P(N+NP,5)
50 C...Very low multiplicities (0 or 1) not considered.
52 CALL LUERRM(8,'(LUTHRU:) too few particles for analysis')
58 C...Loop over thrust and major. T axis along z direction in latter case.
62 PHI=ULANGL(P(N+NP+1,1),P(N+NP+1,2))
64 CALL LUDBRB(N+1,N+NP+1,0.,-PHI,0D0,0D0,0D0)
65 THE=ULANGL(P(N+NP+1,3),P(N+NP+1,1))
66 CALL LUDBRB(N+1,N+NP+1,-THE,0.,0D0,0D0,0D0)
69 C...Find and order particles with highest p (pT for major).
70 DO 110 ILF=N+NP+4,N+NP+MSTU(44)+4
73 IF(ILD.EQ.2) P(I,4)=SQRT(P(I,1)**2+P(I,2)**2)
74 DO 120 ILF=N+NP+MSTU(44)+3,N+NP+4,-1
75 IF(P(I,4).LE.P(ILF,4)) GOTO 130
77 120 P(ILF+1,J)=P(ILF,J)
83 C...Find and order initial axes with highest thrust (major).
84 DO 160 ILG=N+NP+MSTU(44)+5,N+NP+MSTU(44)+15
86 NC=2**(MIN(MSTU(44),NP)-1)
90 DO 180 ILF=1,MIN(MSTU(44),NP)
92 IF(2**ILF*((ILC+2**(ILF-1)-1)/2**ILF).GE.ILC) SGN=-SGN
94 180 TDI(J)=TDI(J)+SGN*P(N+NP+ILF+3,J)
95 TDS=TDI(1)**2+TDI(2)**2+TDI(3)**2
96 DO 190 ILG=N+NP+MSTU(44)+MIN(ILC,10)+4,N+NP+MSTU(44)+5,-1
97 IF(TDS.LE.P(ILG,4)) GOTO 200
99 190 P(ILG+1,J)=P(ILG,J)
102 210 P(ILG+1,J)=TDI(J)
106 C...Iterate direction of axis until stable maximum.
113 IF(THP.LE.1E-10) TDI(J)=P(N+NP+MSTU(44)+4+ILG,J)
114 IF(THP.GT.1E-10) TDI(J)=TPR(J)
117 SGN=SIGN(P(I,5),TDI(1)*P(I,1)+TDI(2)*P(I,2)+TDI(3)*P(I,3))
119 260 TPR(J)=TPR(J)+SGN*P(I,J)
120 THP=SQRT(TPR(1)**2+TPR(2)**2+TPR(3)**2)/PS
121 IF(THP.GE.THPS+PARU(48)) GOTO 240
123 C...Save good axis. Try new initial axis until a number of tries agree.
124 IF(THP.LT.P(N+NP+ILD,4)-PARU(48).AND.ILG.LT.MIN(10,NC)) GOTO 230
125 IF(THP.GT.P(N+NP+ILD,4)+PARU(48)) THEN
127 SGN=(-1.)**INT(RLU(0)+0.5)
129 270 P(N+NP+ILD,J)=SGN*TPR(J)/(PS*THP)
134 280 IF(IAGR.LT.MSTU(45).AND.ILG.LT.MIN(10,NC)) GOTO 230
136 C...Find minor axis and value by orthogonality.
137 SGN=(-1.)**INT(RLU(0)+0.5)
138 P(N+NP+3,1)=-SGN*P(N+NP+2,2)
139 P(N+NP+3,2)=SGN*P(N+NP+2,1)
143 290 THP=THP+P(I,5)*ABS(P(N+NP+3,1)*P(I,1)+P(N+NP+3,2)*P(I,2))
147 C...Fill axis information. Rotate back to original coordinate system.
155 P(N+ILD,J)=P(N+NP+ILD,J)
157 CALL LUDBRB(N+1,N+3,THE,PHI,0D0,0D0,0D0)
159 C...Calculate thrust and oblateness. Select storing option.
161 OBL=P(N+2,4)-P(N+3,4)
164 IF(MSTU(43).LE.1) MSTU(3)=3
165 IF(MSTU(43).GE.2) N=N+3