Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:15:43

0001     
0002 C*********************************************************************  
0003 C THIS SUBROUTINE IS ONLY FOR THE USE OF HIJING TO ROTATE OR BOOST
0004 C       THE FOUR MOMENTUM ONLY
0005 C*********************************************************************
0006     
0007       SUBROUTINE HIROBO(THE,PHI,BEX,BEY,BEZ)    
0008     
0009 C...Purpose: to perform rotations and boosts.   
0010       IMPLICIT DOUBLE PRECISION(D)  
0011       COMMON/LUJETS/N,K(9000,5),P(9000,5),V(9000,5)
0012       SAVE /LUJETS/ 
0013       COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) 
0014       SAVE /LUDAT1/ 
0015       DIMENSION ROT(3,3),PR(3),VR(3),DP(4),DV(4)    
0016     
0017 C...Find range of rotation/boost. Convert boost to double precision.    
0018       IMIN=1    
0019       IF(MSTU(1).GT.0) IMIN=MSTU(1) 
0020       IMAX=N    
0021       IF(MSTU(2).GT.0) IMAX=MSTU(2) 
0022       DBX=BEX   
0023       DBY=BEY   
0024       DBZ=BEZ   
0025     
0026 C...Check range of rotation/boost.  
0027       IF(IMIN.GT.MSTU(4).OR.IMAX.GT.MSTU(4)) THEN   
0028         CALL LUERRM(11,'(LUROBO:) range outside LUJETS memory') 
0029         RETURN  
0030       ENDIF 
0031     
0032 C...Rotate, typically from z axis to direction (theta,phi). 
0033       IF(THE**2+PHI**2.GT.1E-20) THEN   
0034         ROT(1,1)=COS(THE)*COS(PHI)  
0035         ROT(1,2)=-SIN(PHI)  
0036         ROT(1,3)=SIN(THE)*COS(PHI)  
0037         ROT(2,1)=COS(THE)*SIN(PHI)  
0038         ROT(2,2)=COS(PHI)   
0039         ROT(2,3)=SIN(THE)*SIN(PHI)  
0040         ROT(3,1)=-SIN(THE)  
0041         ROT(3,2)=0. 
0042         ROT(3,3)=COS(THE)   
0043         DO 130 I=IMIN,IMAX  
0044         IF(K(I,1).LE.0) GOTO 130    
0045         DO 110 J=1,3    
0046   110   PR(J)=P(I,J)   
0047         DO 120 J=1,3    
0048   120   P(I,J)=ROT(J,1)*PR(1)+ROT(J,2)*PR(2)+ROT(J,3)*PR(3) 
0049   130   CONTINUE    
0050       ENDIF 
0051     
0052 C...Boost, typically from rest to momentum/energy=beta. 
0053       IF(DBX**2+DBY**2+DBZ**2.GT.1E-20) THEN    
0054         DB=SQRT(DBX**2+DBY**2+DBZ**2)   
0055         IF(DB.GT.0.99999999D0) THEN 
0056 C...Rescale boost vector if too close to unity. 
0057           CALL LUERRM(3,'(LUROBO:) boost vector too large') 
0058           DBX=DBX*(0.99999999D0/DB) 
0059           DBY=DBY*(0.99999999D0/DB) 
0060           DBZ=DBZ*(0.99999999D0/DB) 
0061           DB=0.99999999D0   
0062         ENDIF   
0063         DGA=1D0/SQRT(1D0-DB**2) 
0064         DO 150 I=IMIN,IMAX  
0065         IF(K(I,1).LE.0) GOTO 150    
0066         DO 140 J=1,4    
0067   140   DP(J)=P(I,J)    
0068         DBP=DBX*DP(1)+DBY*DP(2)+DBZ*DP(3)   
0069         DGABP=DGA*(DGA*DBP/(1D0+DGA)+DP(4)) 
0070         P(I,1)=DP(1)+DGABP*DBX  
0071         P(I,2)=DP(2)+DGABP*DBY  
0072         P(I,3)=DP(3)+DGABP*DBZ  
0073         P(I,4)=DGA*(DP(4)+DBP)  
0074   150   CONTINUE    
0075       ENDIF 
0076     
0077       RETURN    
0078       END