COSMOS v7.655  COSMOSv7655
(AirShowerMC)
ccompPathEnd.f
Go to the documentation of this file.
1 ! ccompPathEnd
2 ! compute path end information. including multiple scattering and mag.
3 ! deflection
4 !
5  subroutine ccomppathend
6  implicit none
7 
8 #include "Ztrack.h"
9 #include "Ztrackv.h"
10 #include "Ztrackp.h"
11 !
12 !
13 ! get endpoint coord. assuming no scat, no mag. effect. at first
14 ! MovedTrack has complete information at path end.
15  movedtrack = trackbefmove ! copy TrackBefMove into MovedTrack.
16  if(intinfarray(processno)%length .gt. 0.0 ) then
17  call cmovestreight(intinfarray(processno)%length,
18  * trackbefmove%vec%w)
19 ! If a chargde ptcl, compute energy loss by dE/dx and reset energy
20 ! in MovedTrack. If it is too large, path is truncated. Also compute
21 ! deflection.
22 
23  if(trackbefmove%p%charge .ne. 0) then
24 ! if(.not. (mod(HowGeomag, 10) .eq. 1 .and. this existed from uv4.92 to 5.13
25 ! * Zfirst .eq. 0.)) then
26  call cputenergyloss
27 ! endif
28 ! if "if" is omitted, segmentation violation
29 ! may take place occasionally
30  if(movestat .ne. dead) then
31  call cputdeflection
32  endif
33  endif
34  else
35  energyloss = 0.
36  endif
37  end
38 ! --------------------------------------------------------
39  subroutine cmovestreight(leng, dir)
40 ! move a track by leng m
41 ! after this is called, MovedTrack has inf for moved pos.
42 ! MovedTrack.pos.where may not be correct. It must be
43 ! corrected by seeing if the track passes acrosss a
44 ! observation layer.
45  implicit none
46 
47 #include "Ztrack.h"
48 #include "Ztrackp.h"
49 #include "Ztrackv.h"
50 #include "Zearth.h"
51 
52  real*8 leng, cnewcos
53  type(coord)::dir ! input.
54 !
55 ! new coord in xyz system.
56 
57  movedtrack%pos%xyz%r(1) = trackbefmove%pos%xyz%r(1)
58 ! * + TrackBefMove.vec.w.r(1) * leng
59  * + dir%r(1) * leng
60  movedtrack%pos%xyz%r(2) = trackbefmove%pos%xyz%r(2)
61 ! * + TrackBefMove.vec.w.r(2) * leng
62  * + dir%r(2) * leng
63  movedtrack%pos%xyz%r(3) = trackbefmove%pos%xyz%r(3)
64 ! * + TrackBefMove.vec.w.r(3) * leng
65  * + dir%r(3) * leng
66  call csetpos(movedtrack%pos) ! set height, radial length, thickness
67 ! get new cos
68  movedtrack%vec%coszenith = cnewcos(movedtrack%pos%radiallen,
69  * trackbefmove%vec%coszenith, leng)
70  if(timestructure ) then
71  call cgetbeta(movedtrack%p, beta)
72 ! note righthand is not MovedTrack.t
73  if(beta .gt. 0.) then
74  movedtrack%t = trackbefmove%t + leng/beta
75  endif
76  endif
77  end
78 ! -----------------------------------
79  subroutine cputenergyloss
80 ! observation layer.
81  implicit none
82 
83 #include "Zcode.h"
84 #include "Ztrack.h"
85 #include "Ztrackv.h"
86 #include "Ztrackp.h"
87 
88 !
89  real*8 rho, cvh2den, dedt, dedtF, thick, leng, cupsilon
90  save dedt, dedtf
91  real*8 csyncTELoss
92  integer jcut
93  real*8 dedx, dedxF ! output. dedt, dedtF is put
94 
95 
96  real*8 dedxmu, dedxmuF
97 
98 !
99 ! first consider the synchrotron loss.
100 !
101  if( trackbefmove%p%fm%p(4) .gt. magbrememin) then
102  if( magbrem .eq. 1 .and. trackbefmove%p%code .eq. kelec) then
103  upsilon = cupsilon(trackbefmove%p, mag)
104  if(upsilon .gt. upsilonmin) then
105 ! compute energy loss due to sychrotron rad.
106  energyloss = csyncteloss(upsilon) *
107  * intinfarray(processno)%length
108  if(reverse .eq. 0) then
109  movedtrack%p%fm%p(4) =
110  * movedtrack%p%fm%p(4) - energyloss
111  elseif(reverse .eq. 2) then
112  movedtrack%p%fm%p(4) =
113  * movedtrack%p%fm%p(4) + energyloss
114  endif
115 ! don't worry about death
116  endif
117  endif
118  endif
119 !
120 ! dE/dX
121 !
122  rho = cvh2den(trackbefmove%pos%height)
123  call cdedxinair(trackbefmove%p, rho, dedt, dedtf ) ! dedt; GeV/(kg/m2)
124 
125  if(trackbefmove%p%code .eq. kmuon ) then
126 ! dE/dx due to muon pair, brem, nuc.i
127  call cmudedx(muni, mubr, mupr, trackbefmove%p%fm%p(4),
128  * dedxmu, dedxmuf) ! dedxmu in GeV/(g/cm2)
129  dedxmu = dedxmu /10. ! GeV/(kg/m2)
130  dedxmuf = dedxmuf /10. ! GeV/(kg/m2)
131  dedt = dedt + dedxmu
132  dedtf = dedtf + dedxmuf
133  endif
134 
135  energyloss = dedt * intinfarray(processno)%thickness
136  if(reverse .eq. 0) then
137  movedtrack%p%fm%p(4) = movedtrack%p%fm%p(4) - energyloss
138 ! see if <=mass
139  if(movedtrack%p%fm%p(4) .lt. movedtrack%p%mass) then
140  energyloss =( trackbefmove%p%fm%p(4) - movedtrack%p%mass )
141  if(dedt .gt. 0.) then
142  thick =energyloss / dedt
143  else
144  thick = 0.
145  endif
146  movedtrack%p%fm%p(4) = movedtrack%p%mass
147 
148 ! call cthick2len(TrackBefMove.pos.height,
149 ! * TrackBefMove.vec.coszenith, thick, leng, thick, jcut)
150 ! Mar.18
151  call cthick2len(trackbefmove, thick, leng, thick, jcut)
152 ! reset position information in MovedTrack
153  call cmovestreight(leng, trackbefmove%vec%w)
154  movestat = truncated
155  endif
156 ! reset 3 momenta px, py, pz
157 ! (but assume direction is unchanged)
158  call ce2p(movedtrack)
159  elseif(reverse .eq. 2) then
160  movedtrack%p%fm%p(4) = movedtrack%p%fm%p(4) + energyloss
161 ! reset 3 momenta px, py, pz
162 ! (but assume direction is unchanged)
163  call ce2p(movedtrack)
164 ! MoveStat = Truncated
165  else
166 ! MoveStat = Truncated
167  endif
168  return
169 ! **************
170  entry cqelossrate(dedx, dedxf)
171 ! **************
172 ! inquire the dedt; which may be used when particle cross
173 ! an obs. level and recompute the energy
174  dedx = dedt
175  dedxf = dedtf
176  end
177 ! --------------------------------------------------------------
178  subroutine cputdeflection
179  implicit none
180 
181 #include "Ztrack.h"
182 #include "Ztrackp.h"
183 #include "Ztrackv.h"
184 #include "Zelemagp.h"
185 
186 !
187  real*8 dt, dispx, dispy
188  logical nodef
189  if(reverse .eq. 0) then
190  nodef = onedim .ne. 0 .or.
191  * (mod(howgeomag, 10) .eq. 1 .and. zfirst%pos%depth .eq. 0.)
192  else
193  nodef = .false.
194  endif
195  if(.not. nodef) then
196 !
197 ! compute magnetic deflection first. independently of scattering.
198 ! system is xyz; if Efield exists, together with it
199  call cmagdef
200  endif
201  if(.not. nodef .and. reverse .eq. 0) then
202 ! this is for multiple scattering
203  call celecdef(dispx, dispy) ! effect alrady put in
204  ! MovedTrack. dispx, y are dummy
205  endif
206  if(.not. nodef) then
207  call csetpos(movedtrack%pos)
208  call cgetzenith(movedtrack, movedtrack%vec%coszenith)
209 ! reset momentum to be compatible with direction cos.
210  call cresetmom(movedtrack)
211 !
212  if(timestructure .and. reverse .eq. 0) then ! only for mul. scat
213 ! compute excess path length to be added to streight path
214  call cexcesslen(dispx, dispy, dt)
215  if(beta .gt. 0.) then
216  movedtrack%t = movedtrack%t + dt/beta
217  endif
218  endif
219  endif
220  end
221 ! *************************
222 #include "ZsubstRec.h"
223  subroutine cmagdef
225  implicit none
226 #include "Zobs.h"
227 #include "Zobsp.h"
228 #include "Ztrack.h"
229 #include "Ztrackp.h"
230 #include "Ztrackv.h"
231 #include "Zelemagp.h"
232 
233 !
234 
235 ! by Geomag (dr and ddirec)
236  type(coord)::dispmr, dispmd
237  type(magfield)::tempmag
238  real*8 leng
239  real*8 temp1, temp2
240 !cc * ,norm
241  integer i
242 
243  integer icon
244  type(coord):: middle
245  logical usemiddle, high, usecmiddle
246  real*8 cheight
247  data cheight/30.d3/
248  real*8 newmom(3), dE, E1, E2, p1sq, p2sq, newE, norm
249  save cheight
250 
251  leng = intinfarray(processno)%length
252  if( howefield >= 1 ) then
253  call cdefbymagande(trackbefmove, leng, dispmr, dispmd,
254  * newmom)
255  p1sq =dot_product(trackbefmove%p%fm%p(1:3),
256  * trackbefmove%p%fm%p(1:3))
257  e1 = sqrt( p1sq + trackbefmove%p%mass**2)
258  p2sq =dot_product(newmom(1:3),newmom(1:3))
259  e2=sqrt(p2sq + trackbefmove%p%mass**2)
260  de=e2-e1 ! may be + or - depending on Ef and charge
261  ! dE/dx loss has been put in MovedTrack. adjust it again
262 
263  newe = movedtrack%p%fm%p(4) + de
264  if( newe < trackbefmove%p%mass ) then
265  newe = trackbefmove%p%mass
266  newmom(:) = 0
267  else
268  ! keeping the direction,adjust new momentum to be
269  ! consistent with newE
270  if( p2sq <= 0. ) then
271  write(0,*) ' p2sq = ',p2sq
272  write(0,*)
273  * ' TrackBefMove%p=',trackbefmove%p%fm%p(1:4)
274  write(0,*) ' dE, newE=',de, newe
275  write(0,*) ' leng =', leng
276  write(0,*) 'dispmr=',dispmr%r(:)
277  write(0,*) 'dispmd=',dispmd%r(:)
278  write(0,*)
279  * 'code, chg=',trackbefmove%p%code,
280  * trackbefmove%p%charge
281 
282  newe = trackbefmove%p%mass
283  newmom(:) = 0
284  dispmd%r(:) = (/0.,0.,1./)
285  else
286  norm = sqrt( (newe**2 - trackbefmove%p%mass**2)/p2sq)
287  newmom(:) = newmom(:) *norm
288  endif
289  endif
290  movedtrack%p%fm%p(4) = newe
291 ! note. dispmr is r(new)-r(old) vector and different
292 ! from other routines below.
293 ! dispmd is new dir and set at 100
294  movedtrack%pos%xyz%r(:) = trackbefmove%pos%xyz%r(:) +
295  * dispmr%r(:)
296  movedtrack%p%fm%p(1:3) = newmom(:)
297  goto 100
298  endif
299 !
300 ! UseRungeKutta Height
301 ! 0 any Mag and cmagneticDef
302 
303 ! 1 >cheight middle Mag and cmagneticDef
304 ! 1 < Mag and cmagneticDef
305 
306 ! 2 > middle Mag and cmagneticDef
307 ! or cbDefByRK2
308 ! 2 < Mag and cmagneticDef
309 
310 ! 3 > middle Mag and cmagneticDef
311 ! or cbDefByRK
312 ! 3 < Mag and cmagneticDef
313 
314 ! 4 > use Mag at curved middle point
315 ! and estimate end point by
316 ! cmagneticDef or cbDefByRK2
317 ! 4 < Mag and cmagneticDef
318 
319 ! 5 > use Mag at curved middle point
320 ! and estimate end point by
321 ! cmagneticDef or cbDefByRK
322 ! 5 < Mag and cmagneticDef
323 
324 ! 6 > cbDefByRK2
325 ! 6 < Mag and cmagneticDef
326 
327 ! 7 > cbDefByRK
328 ! 7 < Mag and cmagneticDef
329 !
330 ! 8 at any height cbDefUser ; interface is
331 ! same as cbDefByRK
332 !
333  if(userungekutta .eq. 8 ) then
334  call cbdefuser(trackbefmove, leng, dispmr, dispmd,
335  * movedtrack%p%fm%p(1:3))
336 #if defined SUBSTREC
337  movedtrack%pos%xyz = dispmr ! this is not a dispalcement vector
338 #else
339  call csubstcoord(dispmr, movedtrack%pos%xyz)
340 #endif
341  goto 100
342  endif
343  high = trackbefmove%pos%height .gt. cheight
344  usemiddle = ( userungekutta .ge. 1 .and.
345  * userungekutta .le. 3 .and.
346  * high )
347  usecmiddle = ( userungekutta .ge. 4 .and.
348  * userungekutta .le. 5 .and.
349  * high )
350 
351 
352  if(usemiddle) then
353  do i = 1, 3
354  middle%r(i) = trackbefmove%pos%xyz%r(i)+
355  * leng/2 * trackbefmove%vec%w%r(i)
356  enddo
357  middle%sys='xyz'
358 
359  call cgeomag(yearofgeomag, middle,
360  * tempmag, icon)
361  call ctransmagto('xyz', middle,
362  * tempmag, tempmag)
363  elseif(usecmiddle) then
364 ! get curved middle point
365  call cmagneticdef(trackbefmove, mag, leng/2.0d0,
366  * dispmr, dispmd)
367  do i = 1, 3
368  middle%r(i) = trackbefmove%pos%xyz%r(i) + dispmr%r(i)
369  enddo
370  middle%sys ='xyz'
371  call cgeomag(yearofgeomag, middle,
372  * tempmag, icon)
373  call ctransmagto('xyz', middle,
374  * tempmag, tempmag)
375  endif
376 
377  if(usemiddle .and. userungekutta .eq. 1) then
378  mag = tempmag
379  elseif( usemiddle .and. userungekutta .eq. 2 ) then
380  temp1 = tempmag%x**2 + tempmag%y**2 + tempmag%z**2
381  temp2 = mag%x**2 + mag%y**2 + mag%z**2
382 ! if dB/B~ dB^2/B^2/2 > 0.4 %, use RungeKutta.
383  if( abs(temp1-temp2)/temp1/2.0 .gt. 4.0d-3) then
384  call cbdefbyrk2(trackbefmove, leng, dispmr, dispmd,
385  * movedtrack%p%fm%p(1:3))
386 #if defined SUBSTREC
387  movedtrack%pos%xyz = dispmr ! this is not a dispalcement vector
388 #else
389  call csubstcoord(dispmr, movedtrack%pos%xyz)
390 #endif
391  goto 100
392  else
393  mag = tempmag
394  endif
395  elseif(usemiddle .and. userungekutta .eq. 3) then
396  temp1 = tempmag%x**2 + tempmag%y**2 + tempmag%z**2
397  temp2 = mag%x**2 + mag%y**2 + mag%z**2
398 ! if dB/B~ dB^2/B^2/2 > 0.45 %, use RungeKutta.
399 ! next 4.5d-3 is very sensitive to cpu time
400 ! if it was 4.0d-3, cpu time becomes twice.
401  if( abs(temp1-temp2)/temp1/2.0 .gt. 4.5d-3) then
402  call cbdefbyrk(trackbefmove, leng, dispmr, dispmd,
403  * movedtrack%p%fm%p(1:3))
404 #if defined SUBSTREC
405  movedtrack%pos%xyz = dispmr ! this is not a dispalcement vector
406 #else
407  call csubstcoord(dispmr, movedtrack%pos%xyz)
408 #endif
409  goto 100
410  else
411  mag = tempmag
412  endif
413  elseif(usecmiddle .and. userungekutta .eq. 4) then
414  temp1 = tempmag%x**2 + tempmag%y**2 + tempmag%z**2
415  temp2 = mag%x**2 + mag%y**2 + mag%z**2
416 ! if dB/B~ dB^2/B^2/2 > 0.1 %, use RungeKutta.
417  if( abs(temp1-temp2)/temp1/2.0 .gt. 4.0d-3) then
418  call cbdefbyrk2(trackbefmove, leng, dispmr, dispmd,
419  * movedtrack%p%fm%p(1:3))
420 #if defined SUBSTREC
421  movedtrack%pos%xyz = dispmr ! this is not a dispalcement vector
422 #else
423  call csubstcoord(dispmr, movedtrack%pos%xyz)
424 #endif
425  goto 100
426  else
427  mag = tempmag
428  endif
429  elseif(usecmiddle .and. userungekutta .eq. 5) then
430  temp1 = tempmag%x**2 + tempmag%y**2 + tempmag%z**2
431  temp2 = mag%x**2 + mag%y**2 + mag%z**2
432 ! if dB/B~ dB^2/B^2/2 > 0.45 %, use RungeKutta.
433  if( abs(temp1-temp2)/temp1/2.0 .gt. 4.5d-3) then
434  call cbdefbyrk(trackbefmove, leng, dispmr, dispmd,
435  * movedtrack%p%fm%p(1:3))
436 #if defined SUBSTREC
437  movedtrack%pos%xyz = dispmr ! this is not a dispalcement vector
438 #else
439  call csubstcoord(dispmr, movedtrack%pos%xyz)
440 #endif
441  goto 100
442  else
443  mag = tempmag
444  endif
445  endif
446 !!!!!! default comes here
447  if(userungekutta .le. 5 .or. .not. high ) then
448  call cmagneticdef(trackbefmove, mag, leng,
449  * dispmr, dispmd)
450 
451  do i = 1, 3
452  movedtrack%pos%xyz%r(i) = trackbefmove%pos%xyz%r(i) +
453  * dispmr%r(i)
454  enddo
455  elseif(userungekutta .eq. 6) then
456  call cbdefbyrk2(trackbefmove, leng, dispmr, dispmd,
457  * movedtrack%p%fm%p(1:3))
458 #if defined SUBSTREC
459  movedtrack%pos%xyz = dispmr ! this is not a dispalcement vector
460 #else
461  call csubstcoord(dispmr, movedtrack%pos%xyz)
462 #endif
463  ! but the vector itself.
464  else
465  call cbdefbyrk(trackbefmove, leng, dispmr, dispmd,
466  * movedtrack%p%fm%p(1:3))
467 #if defined SUBSTREC
468  movedtrack%pos%xyz = dispmr ! this is not a dispalcement vector
469  ! but the vector itself.
470 #else
471  call csubstcoord(dispmr, movedtrack%pos%xyz)
472 #endif
473  endif
474  100 continue
475 #if defined SUBSTREC
476  movedtrack%vec%w = dispmd
477 #else
478  call csubstcoord(dispmd, movedtrack%vec%w)
479 #endif
480  end
481 ! for IBM AIX
482  subroutine csubstcoord(c1, c2)
483  implicit none
484 #include "Zcoord.h"
485  type(coord)::c1, c2
486  c2 = c1
487  end
488 
489 ! ==============================================================
490  subroutine celecdef(dx, dy)
491  implicit none
492 
493 #include "Ztrack.h"
494 #include "Ztrackp.h"
495 #include "Ztrackv.h"
496 #include "Zelemagp.h"
497 
498  real*8 dx, dy ! output. scatttering displacement
499 !
500  type(coord)::dircos
501 ! by Multiple Scattering
502  type(coord)::dsa ! dire ccos of scattering angle
503  type(coord)::w
504  real*8 sint, cs, sn, tmp, avx, avy, disp, dt, dl
505  real*8 r, g1, g2, gf1, gf2, beta2, tetarms
506  real*8 theta
507 
508  call cmulscat(theta)
509  if(theta .lt. 0.01d0) then
510 ! cos
511 ! dsa%z = 1.-theta**2/2
512  dsa%r(3) = 1.-theta**2/2
513  sint = theta
514  else
515 ! dsa%z = cos(theta)
516  dsa%r(3) = cos(theta)
517  sint = sin(theta)
518  endif
519 ! azimuthal angle
520  call kcossn(cs, sn)
521 ! dsa%x = sint * cs
522 ! dsa%y = sint * sn
523 ! dsa%z = cos(theta)
524  dsa%r(1) = sint * cs
525  dsa%r(2) = sint * sn
526  dsa%r(3) = cos(theta)
527  dt = intinfarray(processno)%thickness/ x0 ! r%l
528  dl = intinfarray(processno)%length ! m
529 
530 ! if(Moliere .ge. 0) then
531 ! if( ALateCor ) then ! >v7.645
532 ! v>=7.655
533  if( (moliere == 0 .and. alatecor>=1) .or.
534  * alatecor == 2) then
535 ! ALateCor D=1. if Gaussian (Moliere=0), correlation is taken
536 ! into account.
537 ! If 0, no correlation is considered.
538 ! 2, correlation based on Gaussian formula is forced even if
539 ! Moliere is not 0.
540 
541 ! sample displacement correlated to theta
542 ! this is the same as P.D.B though look like
543 ! diff.
544  tmp = dl/2.d0
545  avx = tmp * dsa%r(1)
546  avy = tmp * dsa%r(2)
547 ! dispersion
548  gf1 = trackbefmove%p%fm%p(4)/movedtrack%p%mass
549  gf2 = movedtrack%p%fm%p(4)/movedtrack%p%mass
550  beta2 = 1.d0 - 1.d0/gf1/gf2
551  if(beta2 .le. 0.) then
552  disp = 0.d0
553  else
554  if(dt .gt. 1.d-3) then
555  tetarms = es/trackbefmove%p%fm%p(4)*
556  * abs(movedtrack%p%charge)*
557  * sqrt(dt)*(1.0 + 0.038*log(dt))
558  else
559  tetarms = es/trackbefmove%p%fm%p(4)*
560  * abs(movedtrack%p%charge)*
561  * sqrt(dt)
562  endif
563  disp=tetarms/sqrt(6.d0*beta2)*dl/2.d0
564 ! sample 2 independent gaussian variables
565 ! with mean 0 and var 1
566  endif
567  call kgauss2(0.d0, 1.0d0, g1, g2)
568  dx = g1 * disp + avx
569  dy = g2 * disp + avy
570 ! displacement
571  r=sqrt(dx*dx+dy*dy) ! in m
572 ! direction cos of vector r in original sys.
573  if(r .ne. 0.) then
574 ! w%x = dx/r
575 ! w%y = dy/r
576 ! w%z = 0.
577  w%r(1) = dx/r
578  w%r(2) = dy/r
579  w%r(3) = 0.d0
580 
581 ! transform wx,wy,wz to original sys.
582 ! TrackBefMove is better
583  call ctransvectz(trackbefmove%vec%w, w, w)
584 ! r is already in m.
585 ! add scattering effect.
586 ! r*w is displacement by scattering
587 ! MovedTrack%pos%xyz%x = r*w%x + MovedTrack%pos%xyz%x
588 ! MovedTrack%pos%xyz%y = r*w%y + MovedTrack%pos%xyz%y
589 ! MovedTrack%pos%xyz%z = r*w%z + MovedTrack%pos%xyz%z
590  movedtrack%pos%xyz%r(1:3) =
591  * r*w%r(1:3)+ movedtrack%pos%xyz%r(1:3)
592  endif
593  else
594  dx = 0.
595  dy = 0.
596  endif
597 ! convert scattering angle at end of path to
598 ! original system . MovedTrack is better since
599 ! mag. def is contained there already.
600  call ctransvectz(movedtrack%vec%w, dsa,
601  * movedtrack%vec%w)
602 
603  end
subroutine cgetbeta(aPtcl, beta)
Definition: cgetBeta.f:4
subroutine cputdeflection
Definition: ccompPathEnd.f:179
subroutine csubstcoord(c1, c2)
Definition: ccompPathEnd.f:483
! for length to thickness conversion or v v ! integer maxnodes real Hinf ! This is used when making table for dim simulation ! The slant length for vertical height to km is ! divided by LenStep m steps ! It can cover the slant length of about km for cos
Definition: Zatmos.h:8
integer, save howefield
Definition: cEfield0.f:17
subroutine cthick2len(aTrack, tin, leng, t, jcut)
Definition: cthick2len.f:6
subroutine cresetmom(aTrack)
Definition: cresetMom.f:2
subroutine ce2p(aTrack)
Definition: ce2p.f:5
block data cblkIncident data *Za1ry *HeightOfInj d3
Definition: cblkIncident.h:7
subroutine cmudedx(flagN, flagBr, flagPr, Emu, dEdx, dEdxF)
Definition: cmudEdx.f:2
subroutine celecdef(dx, dy)
Definition: ccompPathEnd.f:491
max ptcl codes in the kelec
Definition: Zcode.h:2
subroutine cbdefuser(aTrack, leng, newpos, newdir, newmom)
Definition: cbDefByRK.f:641
subroutine cgetzenith(aTrack, cosz)
Definition: cgetZenith.f:20
const int truncated
Definition: Ztrackv.h:95
subroutine cgeomag(yearin, llh, h, icon)
Definition: cgeomag.f:25
subroutine cdefbymagande(aTrack, leng, dispmr, dispmd, newmom)
Definition: cdefByMagAndE.f:40
! Parameters used for hadronic cascade shower is generated newline ! For you may give as as or em quick generation of AS for heavy primaries is tried See chookASbyH f character *Generate2 don t touch this for skeleton flesh use integer MagBrem no magnetic bremsstrahlung is considered newline ! if and Ee energy loss due to magnetic brems is considered newline ! if and Ee real sampling of gamma is performed WaitRatio ! must be made small so that WaitRatio *E0 sim MagBremEmin integer MagPair no magnetic pair creation is considered newline ! if and Eg real sampling is the LPM effect is considered when Ee LpmBremEmin for electrons and ! Eg LpmPairEmin for gamma rays real *MagBremEmin E magnetic bremsstrahlung by electrons may be considered if not considered at all newline total energy loss due to brems is considered newline gamma energy is sampled actually newline ! If upsilon(Ee/m *B/Bcr) is small
subroutine cdedxinair(aPtcl, rhoin, dedt, dedtF)
Definition: cdedxInAir.f:49
block data cblkEvhnp ! currently usable models data RegMdls ad *special data *Cekaon d0
Definition: cblkEvhnp.h:5
subroutine ctransvectz(zax, dir1, dir2)
Definition: ctransVectZ.f:21
const int dead
Definition: Ztrackv.h:96
dE dx *! Nuc Int sampling table d
Definition: cblkMuInt.h:130
subroutine cbdefbyrk(aTrack, leng, newpos, newdir, newmom)
Compute magnetic deflection (angle and displacement) Use Runge-Kutta-Fehlberg Method.
Definition: cbDefByRK.f:12
subroutine cbdefbyrk2(aTrack, leng, newpos, newdir, newmom)
Definition: cbDefByRK.f:473
subroutine kcossn(cs, sn)
Definition: kcossn.f:13
block data cblkElemag data *AnihiE ! Eposi< 1 TeV, anihilation considered *X0/365.667/, ! radiation length of air in kg/m2 *Ecrit/81.e-3/, ! critical energy of air in GeV *MaxComptonE/1./, ! compton is considered below 1 GeV *MaxPhotoE/1.e-3/, ! above this, PhotoElectric effect neg. *MinPhotoProdE/153.e-3/, ! below 153 MeV, no gp --> hadrons ! scattering const not MeV *Knockon ! knockon is considered Obsolete *PhotoProd false
Definition: cblkElemag.h:7
subroutine cmagneticdef(aTrack, B, leng, dr, dir)
Definition: cmagneticDef.f:5
subroutine cmovestreight(leng, dir)
Definition: ccompPathEnd.f:40
subroutine ctransmagto(sys, pos, a, b)
Definition: ctransMagTo.f:11
subroutine ccomppathend
Definition: ccompPathEnd.f:6
Definition: Zcoord.h:43
subroutine cputenergyloss
Definition: ccompPathEnd.f:80
max ptcl codes in the kmuon
Definition: Zcode.h:2
subroutine cexcesslen(dx, dy, dt)
Definition: cexcessLen.f:19
subroutine cmulscat(theta)
Definition: cmulScat.f:9
subroutine csetpos(location)
Definition: csetPos.f:8
subroutine cmagdef
Definition: ccompPathEnd.f:224