]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA/jetset/lurobo.F
Do not save CVS subdirectories
[u/mrichter/AliRoot.git] / PYTHIA / jetset / lurobo.F
1  
2 C********************************************************************* 
3  
4       SUBROUTINE LUROBO(THE,PHI,BEX,BEY,BEZ) 
5  
6 C...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  
13 C...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  
23 C...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  
33 C...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  
43 C...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  
49 C...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  
73 C...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 
77 C...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