111 lines
3.2 KiB
Fortran
111 lines
3.2 KiB
Fortran
c
|
|
#include "geant321/pilot.h"
|
|
c---------------------------------------------------------------------------
|
|
c
|
|
subroutine gudcay
|
|
c
|
|
c in case of muon started with partcode = 500, throw michel spectrum
|
|
c and anisotropic angular distribution
|
|
c
|
|
c T. Prokscha, 15-Sep-2000 PSI
|
|
c
|
|
c Unix version
|
|
c
|
|
c TP, 05-Apr-2001 PSI Unix, NT, Linux
|
|
c
|
|
c---------------------------------------------------------------------------
|
|
c
|
|
implicit none
|
|
c
|
|
#define CERNLIB_TYPE
|
|
#include "geant321/gctrak.inc"
|
|
#include "geant321/gckine.inc"
|
|
#include "geant321/gcking.inc"
|
|
c
|
|
#include "common.inc"
|
|
c
|
|
c Michel spectrum
|
|
c
|
|
real*4 pos_tot ! total positron energy (including rest mass)
|
|
real*4 p0 ! total positron momentum (MeV)
|
|
real*4 px0, py0, pz0 ! components of p0
|
|
c
|
|
c decay direction in muon rest system (Spin parallel to x-axis !!!)
|
|
c
|
|
real*4 costheta, sintheta, cosphi, sinphi
|
|
c
|
|
c 4-momentum of muon particle (if decay in flight); if decay in flight
|
|
c do a Lorentz-transformation to get momenta in real space
|
|
c
|
|
real*4 decay_rest(4), beta(4), decay_lab(4), gamma, beta_tot
|
|
real*4 decay_rot(3) ! copy of momentum comp. of decay_lab(4)
|
|
c
|
|
c----------------------------------------------------------------------------
|
|
c
|
|
c get the Michel spectrum
|
|
c
|
|
call michel(pos_tot, p0)
|
|
c
|
|
call get_direction(costheta, sintheta, cosphi, sinphi, pos_tot)
|
|
c
|
|
c get the single momentum components in the laboratory system
|
|
c the muon spin is directed along the x-axis which points to the
|
|
c LEFT detector.)
|
|
c
|
|
px0 = p0 * costheta
|
|
py0 = p0 * sintheta * cosphi
|
|
pz0 = p0 * sintheta * sinphi
|
|
c
|
|
decay_rest(1) = px0/1000. ! GEANT uses GeV/c instead of MeV/c
|
|
decay_rest(2) = py0/1000.
|
|
decay_rest(3) = pz0/1000.
|
|
decay_rest(4) = pos_tot/1000.
|
|
c
|
|
c for the Lorentz transformation, maybe not important, because the
|
|
c mu+ are slow
|
|
c
|
|
gamma = getot / MU_MASS
|
|
beta_tot = vect(7) / getot ! this is p/E, vect(7) = p
|
|
beta(1) = -vect(4) * beta_tot ! vect(4) = px/p
|
|
beta(2) = -vect(5) * beta_tot ! vect(5) = py/p
|
|
beta(3) = -vect(6) * beta_tot ! vect(6) = pz/p
|
|
c
|
|
c negative sign because we need the velocity of
|
|
c the lab-system with respect to the rest-system
|
|
c
|
|
beta(4) = gamma
|
|
c
|
|
call gloren(beta, decay_rest, decay_lab)
|
|
c
|
|
c if there is a B-field present we have to rotate the momentum vector
|
|
c at the moment only Bz implemented; exit program if Bx or By are
|
|
c given.
|
|
c
|
|
c
|
|
if ( bfield(1) .ne. 0. .or. bfield(2) .ne. 0. or. bfield(3) .ne.
|
|
1 0.) then
|
|
decay_rot(1) = decay_lab(1)
|
|
decay_rot(2) = decay_lab(2)
|
|
decay_rot(3) = decay_lab(3)
|
|
c
|
|
call rotate(decay_rot, tofg)
|
|
c
|
|
decay_lab(1) = decay_rot(1)
|
|
decay_lab(2) = decay_rot(2)
|
|
decay_lab(3) = decay_rot(3)
|
|
endif
|
|
c
|
|
ngkine = 1
|
|
tofd(1) = 0.
|
|
gkin(1,1) = decay_lab(1)
|
|
gkin(2,1) = decay_lab(2)
|
|
gkin(3,1) = decay_lab(3)
|
|
gkin(4,1) = decay_lab(4)
|
|
gkin(5,1) = 2
|
|
gpos(1,1) = vect(1)
|
|
gpos(2,1) = vect(2)
|
|
gpos(3,1) = vect(3)
|
|
c
|
|
return
|
|
end
|