musrsim/geant3/src/lemsr/rotate.F

53 lines
1.5 KiB
Fortran

c
c----------------------------------------------------------------------------
c
subroutine rotate(decay_rot, time)
c
c routine to rotate the e+-momentum vector in case of an applied
c bfield; BFIELD is a 4-component array with bfield(4) = polarization.
c If Polarization = 0 return.
c
c T. Prokscha, 15-Sep-2000, PSI
c
c Unix version, part of the geant_lemsr program
c
c-----------------------------------------------------------------------------
c
implicit none
c
#include "common.inc"
c
real*4 decay_rot(3), time
real*4 omega, prec_angle, costh, sinth, cosph, sinph
c
c------------------------------------------------
c
if ( bfield(4) .eq. 0. ) return
c
if ( bfield(2) .ne. 0. ) then
omega = bfield(2) * TWO_PI * MU_GYRO ! cycle/nsec
prec_angle = omega * time
costh = cos(prec_angle)
sinth = -sin(prec_angle) ! clockwise rotation
cosph = 1.
sinph = 0.
c
call gdrot(decay_rot, costh, sinth, cosph, sinph)
c
endif
c
if ( bfield(3) .ne. 0. ) then
omega = bfield(3) * TWO_PI * MU_GYRO ! cycle/nsec
prec_angle = omega * time
cosph = cos(prec_angle)
sinph = -sin(prec_angle) ! clockwise rotation
costh = 1.
sinth = 0.
c
call gdrot(decay_rot, costh, sinth, cosph, sinph)
c
endif
c
return
end