File indexing completed on 2025-08-05 08:15:43
0001
0002
0003
0004
0005
0006
0007 SUBROUTINE HIROBO(THE,PHI,BEX,BEY,BEZ)
0008
0009
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
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
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
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
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
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