]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HIJING/hipyset1_35/hirobo.F
Removing obsolete dummy libraries
[u/mrichter/AliRoot.git] / HIJING / hipyset1_35 / hirobo.F
1 * $Id$
2     
3 C*********************************************************************  
4 C THIS SUBROUTINE IS ONLY FOR THE USE OF HIJING TO ROTATE OR BOOST
5 C       THE FOUR MOMENTUM ONLY
6 C*********************************************************************
7     
8       SUBROUTINE HIROBO(THE,PHI,BEX,BEY,BEZ)    
9     
10 C...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     
16 C...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     
25 C...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     
32 C...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     
52 C...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 
56 C...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