]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HIJING/hipyset1_35/hirobo.F
Moving lib*.pkg
[u/mrichter/AliRoot.git] / HIJING / hipyset1_35 / hirobo.F
CommitLineData
e74335a4 1* $Id$
2
3C*********************************************************************
4C THIS SUBROUTINE IS ONLY FOR THE USE OF HIJING TO ROTATE OR BOOST
5C THE FOUR MOMENTUM ONLY
6C*********************************************************************
7
8 SUBROUTINE HIROBO(THE,PHI,BEX,BEY,BEZ)
9
10C...Purpose: to perform rotations and boosts.
11 IMPLICIT DOUBLE PRECISION(D)
12#include "lujets_hijing.inc"
13#include "ludat1_hijing.inc"
14 DIMENSION ROT(3,3),PR(3),VR(3),DP(4),DV(4)
15
16C...Find range of rotation/boost. Convert boost to double precision.
17 IMIN=1
18 IF(MSTU(1).GT.0) IMIN=MSTU(1)
19 IMAX=N
20 IF(MSTU(2).GT.0) IMAX=MSTU(2)
21 DBX=BEX
22 DBY=BEY
23 DBZ=BEZ
24
25C...Check range of rotation/boost.
26 IF(IMIN.GT.MSTU(4).OR.IMAX.GT.MSTU(4)) THEN
27 CALL LUERRM_HIJING(11
28 $ ,'(LUROBO_HIJING:) range outside LUJETS_HIJING memory')
29 RETURN
30 ENDIF
31
32C...Rotate, typically from z axis to direction (theta,phi).
33 IF(THE**2+PHI**2.GT.1E-20) THEN
34 ROT(1,1)=COS(THE)*COS(PHI)
35 ROT(1,2)=-SIN(PHI)
36 ROT(1,3)=SIN(THE)*COS(PHI)
37 ROT(2,1)=COS(THE)*SIN(PHI)
38 ROT(2,2)=COS(PHI)
39 ROT(2,3)=SIN(THE)*SIN(PHI)
40 ROT(3,1)=-SIN(THE)
41 ROT(3,2)=0.
42 ROT(3,3)=COS(THE)
43 DO 130 I=IMIN,IMAX
44 IF(K(I,1).LE.0) GOTO 130
45 DO 110 J=1,3
46 110 PR(J)=P(I,J)
47 DO 120 J=1,3
48 120 P(I,J)=ROT(J,1)*PR(1)+ROT(J,2)*PR(2)+ROT(J,3)*PR(3)
49 130 CONTINUE
50 ENDIF
51
52C...Boost, typically from rest to momentum/energy=beta.
53 IF(DBX**2+DBY**2+DBZ**2.GT.1E-20) THEN
54 DB=SQRT(DBX**2+DBY**2+DBZ**2)
55 IF(DB.GT.0.99999999D0) THEN
56C...Rescale boost vector if too close to unity.
57 CALL LUERRM_HIJING(3
58 $ ,'(LUROBO_HIJING:) boost vector too large')
59 DBX=DBX*(0.99999999D0/DB)
60 DBY=DBY*(0.99999999D0/DB)
61 DBZ=DBZ*(0.99999999D0/DB)
62 DB=0.99999999D0
63 ENDIF
64 DGA=1D0/SQRT(1D0-DB**2)
65 DO 150 I=IMIN,IMAX
66 IF(K(I,1).LE.0) GOTO 150
67 DO 140 J=1,4
68 140 DP(J)=P(I,J)
69 DBP=DBX*DP(1)+DBY*DP(2)+DBZ*DP(3)
70 DGABP=DGA*(DGA*DBP/(1D0+DGA)+DP(4))
71 P(I,1)=DP(1)+DGABP*DBX
72 P(I,2)=DP(2)+DGABP*DBY
73 P(I,3)=DP(3)+DGABP*DBZ
74 P(I,4)=DGA*(DP(4)+DBP)
75 150 CONTINUE
76 ENDIF
77
78 RETURN
79 END