]>
Commit | Line | Data |
---|---|---|
e74335a4 | 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 |