51 #include "Zstdatmos.h" 55 real*8 ztrunc, rmg, rmgmax, L
56 real*8 clen2thick, erg
61 ka = trackbefmove%p%code
62 erg = trackbefmove%p%fm%p(4) - trackbefmove%p%mass
69 if(trackbefmove%p%charge .ne. 0)
then 71 call cmagdefr(trackbefmove, mag, rmg)
75 rmg = min(rmg, rmgmax)
79 rmg = max(min(l, rmg), 0.1
d0)
82 if(reverse .eq. 0)
then 87 if(trackbefmove%p%code .eq.
kelec .and.
88 * trackbefmove%p%fm%p(4) .gt. lpmbrememin
89 * .and. lpmeffect )
then 91 * max( min(trackbefmove%pos%depth/10., ztrunc),
96 * ka .eq.
kkaon )
then 98 ztrunc =min(ztrunc, 50.
d0*erg)
101 ztrunc = min(ztrunc, maxstep(trackbefmove%where))
103 * ztrunc, leng, thick, jcut)
104 if(rmg .lt. leng)
then 105 thick = clen2thick(trackbefmove%pos%height,
106 * trackbefmove%vec%coszenith, rmg)
109 elseif(reverse .eq. 1)
then 114 thick = clen2thick( trackbefmove%pos%height,
115 * trackbefmove%vec%coszenith, rmg)
120 if(reverse .eq. 0)
then 121 if(trackbefmove%p%code .eq.
kneumu .or.
122 * trackbefmove%p%code .eq.
kneue)
then 126 if(trackbefmove%p%code .eq.
kphoton)
then 127 if(erg .gt. magpairemin .and. magpair .ne. 0)
then 129 rmg = min(rmg, rmgmax)
138 if(trackbefmove%p%code .eq.
kphoton .and. lpmeffect
139 * .and. trackbefmove%p%fm%p(4) .gt. lpmpairemin )
then 140 if(trackbefmove%pos%height .lt. almostvach)
then 141 ztrunc = trackbefmove%pos%depth/10.
149 * ztrunc, leng, thick, jcut)
151 if(rmg .lt. leng)
then 152 thick = clen2thick(trackbefmove%pos%height,
153 * trackbefmove%vec%coszenith, rmg)
161 elseif(reverse .eq. 1)
then 169 thick = clen2thick(trackbefmove%pos%height,
170 * trackbefmove%vec%coszenith, rmg)
184 #include "Zelemagp.h" 193 ek = atrack%p%fm%p(4) - atrack%p%mass
194 if(ek .gt. 1.
d-3)
then 196 ttrunc=min( ek*5.0
d0, 1.
d0)
199 ttrunc = max(1.
d-3, ek*2.
d0)
221 real(8),
intent(out):: L
224 real(8),
parameter:: dpbyp = 0.01
d0 225 p = sqrt(dot_product(atrack%p%fm%p(1:3),atrack%p%fm%p(1:3)))
229 ef = sqrt(dot_product(
efld(1:3),
efld(1:3)) )
234 l =abs( dpbyp*p*3.0e8/(atrack%p%charge*
eval*ef) )
251 if(atrack%p%charge .eq. 0)
then 255 maxb = atrack%vec%w%r(1)*mag%x +
256 * atrack%vec%w%r(2)*mag%y +
257 * atrack%vec%w%r(3)*mag%z
263 ek = atrack%p%fm%p(4)-atrack%p%mass
264 if( ek < 3*atrack%p%mass )
then 268 ek= sqrt( sum(atrack%p%fm%p(1:3)**2) )
270 r = 3.33
d0*ek/maxb/abs(atrack%p%charge)
296 r = atrack%pos%radiallen/eradius * magchgdist
subroutine cgetefield(aTrack)
subroutine clengsmallbc(aTrack, r)
subroutine cmaxmovlen(leng, thick)
subroutine cthick2len(aTrack, tin, leng, t, jcut)
max ptcl codes in the kkaon
max ptcl codes in the kelec
subroutine cmaxcaslen(aTrack, kgpm2)
max ptcl codes in the kneue
block data cblkEvhnp ! currently usable models data RegMdls ad *special data *Cekaon d0
max ptcl codes in the kneumu
dE dx *! Nuc Int sampling table d
*************************block data cblkTracking *************************implicit none data *ExactThick *Freec *RatioToE0 *MagChgDist *TimeStructure *Truncn *Truncx data *IncMuonPolari *KEminObs *ThinSampling *EthinRatio *Generate *LpmEffect *MagPairEmin e10
subroutine cmagdefr(aTrack, mag, r)
real(8), dimension(3), save efld
max ptcl codes in the kpion
max ptcl codes in the kmuon
subroutine cmaxefefflen(aTrack, L)