]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PYTHIA/jetset/lurobo.F
Removed AliITSv3 geometry. This geometry has a non compatable local x, y, z
[u/mrichter/AliRoot.git] / PYTHIA / jetset / lurobo.F
CommitLineData
fe4da5cc 1
2C*********************************************************************
3
4 SUBROUTINE LUROBO(THE,PHI,BEX,BEY,BEZ)
5
6C...Purpose: to perform rotations and boosts.
7 IMPLICIT DOUBLE PRECISION(D)
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 SAVE /LUJETS/,/LUDAT1/
11 DIMENSION ROT(3,3),PR(3),VR(3),DP(4),DV(4)
12
13C...Find range of rotation/boost. Convert boost to double precision.
14 IMIN=1
15 IF(MSTU(1).GT.0) IMIN=MSTU(1)
16 IMAX=N
17 IF(MSTU(2).GT.0) IMAX=MSTU(2)
18 DBX=BEX
19 DBY=BEY
20 DBZ=BEZ
21 GOTO 120
22
23C...Entry for specific range and double precision boost.
24 ENTRY LUDBRB(IMI,IMA,THE,PHI,DBEX,DBEY,DBEZ)
25 IMIN=IMI
26 IF(IMIN.LE.0) IMIN=1
27 IMAX=IMA
28 IF(IMAX.LE.0) IMAX=N
29 DBX=DBEX
30 DBY=DBEY
31 DBZ=DBEZ
32
33C...Optional resetting of V (when not set before.)
34 IF(MSTU(33).NE.0) THEN
35 DO 110 I=MIN(IMIN,MSTU(4)),MIN(IMAX,MSTU(4))
36 DO 100 J=1,5
37 V(I,J)=0.
38 100 CONTINUE
39 110 CONTINUE
40 MSTU(33)=0
41 ENDIF
42
43C...Check range of rotation/boost.
44 120 IF(IMIN.GT.MSTU(4).OR.IMAX.GT.MSTU(4)) THEN
45 CALL LUERRM(11,'(LUROBO:) range outside LUJETS memory')
46 RETURN
47 ENDIF
48
49C...Rotate, typically from z axis to direction (theta,phi).
50 IF(THE**2+PHI**2.GT.1E-20) THEN
51 ROT(1,1)=COS(THE)*COS(PHI)
52 ROT(1,2)=-SIN(PHI)
53 ROT(1,3)=SIN(THE)*COS(PHI)
54 ROT(2,1)=COS(THE)*SIN(PHI)
55 ROT(2,2)=COS(PHI)
56 ROT(2,3)=SIN(THE)*SIN(PHI)
57 ROT(3,1)=-SIN(THE)
58 ROT(3,2)=0.
59 ROT(3,3)=COS(THE)
60 DO 150 I=IMIN,IMAX
61 IF(K(I,1).LE.0) GOTO 150
62 DO 130 J=1,3
63 PR(J)=P(I,J)
64 VR(J)=V(I,J)
65 130 CONTINUE
66 DO 140 J=1,3
67 P(I,J)=ROT(J,1)*PR(1)+ROT(J,2)*PR(2)+ROT(J,3)*PR(3)
68 V(I,J)=ROT(J,1)*VR(1)+ROT(J,2)*VR(2)+ROT(J,3)*VR(3)
69 140 CONTINUE
70 150 CONTINUE
71 ENDIF
72
73C...Boost, typically from rest to momentum/energy=beta.
74 IF(DBX**2+DBY**2+DBZ**2.GT.1E-20) THEN
75 DB=SQRT(DBX**2+DBY**2+DBZ**2)
76 IF(DB.GT.0.99999999D0) THEN
77C...Rescale boost vector if too close to unity.
78 CALL LUERRM(3,'(LUROBO:) boost vector too large')
79 DBX=DBX*(0.99999999D0/DB)
80 DBY=DBY*(0.99999999D0/DB)
81 DBZ=DBZ*(0.99999999D0/DB)
82 DB=0.99999999D0
83 ENDIF
84 DGA=1D0/SQRT(1D0-DB**2)
85 DO 170 I=IMIN,IMAX
86 IF(K(I,1).LE.0) GOTO 170
87 DO 160 J=1,4
88 DP(J)=P(I,J)
89 DV(J)=V(I,J)
90 160 CONTINUE
91 DBP=DBX*DP(1)+DBY*DP(2)+DBZ*DP(3)
92 DGABP=DGA*(DGA*DBP/(1D0+DGA)+DP(4))
93 P(I,1)=DP(1)+DGABP*DBX
94 P(I,2)=DP(2)+DGABP*DBY
95 P(I,3)=DP(3)+DGABP*DBZ
96 P(I,4)=DGA*(DP(4)+DBP)
97 DBV=DBX*DV(1)+DBY*DV(2)+DBZ*DV(3)
98 DGABV=DGA*(DGA*DBV/(1D0+DGA)+DV(4))
99 V(I,1)=DV(1)+DGABV*DBX
100 V(I,2)=DV(2)+DGABV*DBY
101 V(I,3)=DV(3)+DGABV*DBZ
102 V(I,4)=DGA*(DV(4)+DBV)
103 170 CONTINUE
104 ENDIF
105
106 RETURN
107 END