14 #include "chookHybAS.f" 15 #include "ctemplCeren.f" 24 #include "Zmanagerp.h" 60 write(msg, *)
'Skeleton is judged at obs.pos=',
Where 62 write(msg, *)
' Ngmin=',ngmin,
63 *
' SumEGmin=',sumegmin/1000.,
'TeV' 65 write(msg, *)
' Nhmin=',nhmin,
66 *
' SumEHmin=',sumehmin/1000.,
'TeV' 70 inquire(file=mskel(1:klena(mskel)), opened=opn, exist=ex)
73 call cerrormsg(
' already opened: starange', 0)
75 * append(1:klena(append)) .eq.
'append' )
then 76 open(mdev, file=mskel, form=
'unformatted',status=
'old')
77 call cerrormsg(
'skeleton node info. will be appended', 1)
84 * append(1:klena(append)) .ne.
'append' )
then 86 *
'Old skeleton node info. file exists', 1)
88 *
'but node info. will NOT be appended', 1)
90 open(mdev, file=mskel(1:klena(mskel)), form=
'unformatted',
96 open(wdev, file=wskel(1:klena(wskel)), form=
'unformatted',
119 #include "Zprivate.h" 129 real*8 svEasWait, svEthin(2), kepn
134 kepn = incident.
p.fm.
p(4)
138 ethresh = kepn * waitratio
141 svethin(1) = ethin(1)
142 svethin(2) = ethin(2)
143 call csetemin(generate2, keminobs2, cutneg, cuteg)
145 ethin(1) = svethin(1)
146 ethin(2) = svethin(2)
152 eventno = eventno + 1
155 * sngl(obssites(i).pos.
depth),
164 1000
format(f10.3,i9,3i4,e15.5,3(1
x,f12.8))
186 #include "Zprivate.h" 198 common /testcos/sumg,
ng(20),
nth, eventno
200 integer ng, nth, EventNo
206 equivalence(user, usere(1)), (user, useri(1))
212 if( id .eq. 2 .and. atrack.
p.
code .ne.
kneumu .and.
215 if( np .gt. npmax)
then 217 *
'# of particles >NpMax in observation', 0)
219 o(np).
where = atrack.
where 223 o(np).atime = atrack.
t 224 o(np).
erg = atrack.
p.fm.
p(4)
226 o(np).
x = atrack.pos.
xyz.
r(1)
227 o(np).
y = atrack.pos.
xyz.
r(2)
228 o(np).wx = atrack.vec.w.
r(1)
229 o(np).wy = atrack.vec.w.
r(2)
230 o(np).wz = atrack.vec.w.
r(3)
232 o(np).user = atrack.user
235 if(
o(np).
code .eq. 3)
then 248 * useri(1)/1000., useri(2), usere(2), codex
251 959
format(2g14.3,i7, e11.3, i3)
273 #include "Zmanagerp.h" 274 #include "Zprivate.h" 290 if(
o(i).
where .eq.
where)
then 293 sumeg = sumeg +
o(i).
erg 299 sumeh = sumeh +
o(i).
erg 305 memorize =(ng .ge. ngmin .and. sumeg .ge. sumegmin) .or.
306 * ( nh .ge. nhmin .and. sumeh .ge. sumehmin)
309 write(0,*)
' memo=', memorize,
310 *
' ng=',ng,
' seg=',sumeg,
' nh=',nh,
' seh=',sumeh
316 accepted = accepted + 1
331 #include "Zprivate.h" 338 write(msg,
'(i8, a)') accepted,
339 *
' events are memorized as skeleton' 341 call cerrormsg(
'their seeds are also memorized', 1)
381 h1 = trackbefmove.pos.
height- obssites(noofsites).pos.
height 382 h2 = movedtrack.pos.
height - obssites(noofsites).pos.
height 394 #include "Zprivate.h" 421 if(never .lt. 0)
then 424 pwork(1) = movedtrack.
p 431 if( movedtrack.
asflag .eq. 0 )
then 432 if( movedtrack.
p.fm.
p(4) .lt. ethresh )
then 439 if(movedtrack.
asflag .eq. -1)
then 456 #include "Zprivate.h" 486 #include "Zprivate.h" 496 equivalence(user, usere(1)), (user, useri(1))
498 integer i, icon, codex
506 movedtrack.user = user
510 proc = intinfarray(processno).
process 513 if(proc .eq.
"coll")
then 518 tgt.fm.
p(4) = tgt.
mass 522 call cgeqm(pj, tgt, cmsptcl, icon)
523 call cbst1(1, cmsptcl, pj, pjcm)
527 do i = stackpos-nstacked+1, stackpos
529 if(proc .eq.
"coll")
then 532 call cbst1(1, cmsptcl, aptcl, aptcl)
534 call cyeta(aptcl, y, eta)
539 if(pjcm.fm.
p(3) .eq. 0.)
then 540 usere(2)= aptcl.fm.
p(3)/(cmsptcl.
mass/2.)
542 usere(2)= aptcl.fm.
p(3)/pjcm.fm.
p(3)
545 elseif( proc .eq.
"decay" .and.
546 * ( incip.
code .eq. 4 .or. incip.
code .eq. 5))
then 560 if( proc .eq.
"coll" )
then 573 #include "Zprivate.h" 622 equivalence(user, usere(1)), (user, useri(1))
631 ke = pwork(i).fm.
p(4) - pwork(i).
mass 633 * ke .ge. cuteg ) .or.
635 * ke .ge. cutneg ) )
then 637 if(flag .ne. -3)
then 638 if( ke .lt. keminobs)
then 655 if(nlow .eq. 0 .and. movedtrack.
asflag .ne. -1)
return 658 p.posx = movedtrack.pos.
xyz.
r(1)
659 p.posy = movedtrack.pos.
xyz.
r(2)
660 p.posz = movedtrack.pos.
xyz.
r(3)
663 if( movedtrack.pos.
colheight .gt. 1.e36)
then 668 p.atime = movedtrack.
t 669 p.
where = movedtrack.
where 672 p.
erg = movedtrack.
p.fm.
p(4)
674 p.user = movedtrack.user
692 ke = pwork(i).fm.
p(4) - pwork(i).
mass 694 * ke .ge. cuteg ) .or.
696 * ke .ge. cutneg ) )
then 697 if(flag .eq. -3 .or. ke .lt. keminobs)
then 701 c.fm(1) = pwork(i).fm.
p(1)
702 c.fm(2) = pwork(i).fm.
p(2)
703 c.fm(3) = pwork(i).fm.
p(3)
704 c.fm(4) = pwork(i).fm.
p(4)
706 if(neporeg .eq. 4 )
then 709 call cbst1(1, cmsptcl, aptcl, aptcl)
710 call cyeta(aptcl, y, eta)
713 useri(2) = useri(2) + 1
715 if( pjcm.fm.
p(3) .eq. 0.)
then 716 usere(2)= aptcl.fm.
p(3)/(cmsptcl.
mass/2.)
718 usere(2)= aptcl.fm.
p(3)/pjcm.fm.
p(3)
721 elseif( proc .eq.
"decay" .and.
722 * incip.
code .eq. 4 .or. incip.
code .eq. 5)
then 757 integer num, cumnum, irevent(2)
770 write(to) cumnum, num, irevent, zfirst
772 write(0,*)
' first Z=',zfirst.pos.
depth*0.1,
' g/cm2',
782 #include "Zprivate.h" 800 #include "Zprivate.h" 807 do while ( nlow .ge. 0 )
subroutine cgetfname(fnin, fn)
*Zfirst p fm *Zfirst p Zfirst p Zfirst p *Zfirst p *Zfirst pos xyz Zfirst pos xyz *Zfirst pos *Zfirst pos depth
subroutine cerrormsg(msg, needrtn)
subroutine cqincident(incident, AngleAtObs)
subroutine cbst1(init, p1, p2, po)
subroutine chookgint(never)
subroutine cputnodinfo(from, to)
dE dx *! Nuc Int sampling table e
*Zfirst p fm *Zfirst p Zfirst p Zfirst p *Zfirst p *Zfirst pos xyz Zfirst pos xyz *Zfirst pos *Zfirst pos Zfirst pos *Zfirst pos colheight
*Zfirst p fm *Zfirst p Zfirst p Zfirst p *Zfirst p *Zfirst pos xyz r
! parameters for Elemag process(-> ---------------------------------------------- real *8 RecoilKineMinE !2 Recoil Kinetic Min Energy above which the recoil(=knock-on process) ! is treated. Below this energy, the effect is included as continuous ! energy loss. Used only if KnockOnRatio $>$ 1. ! If this is 0 or if KnockOnRatio=1, KEminObs(gamma)=KEminObs(elec) is used. ! See also KnockOnRatio. real *8 KnockOnRatio !2 KnockOnRatio *KEminoObs is used instead of RecoilKineMinE if KnockOnRatio $< $1. real *8 X0 !2 Radiation length in kg/m$^2$ for air. Normally the user should not touch this. real *8 Ecrit !2 Critical energy in GeV. \newline ! Employed only when calculating air shower size in the hybrid ! air shower generation. The value would be dependent on the ! experimental purpose. The default value, 81 MeV, is bit too ! small in many applications(The air shower size is overestimated). ! Comparisons of sizes by the hybrid method and by the full Monte ! Carlo tell that \newline ! $N_e$(full 3-D M.C) $< N_e$(hybrid AS with $E_c=81$ MeV) $< N_e$(full 1-D M.C) ! $ {\ \lower-1.2pt\vbox{\hbox{\rlap{$<$}\lower5pt\vbox{\hbox{$\sim$}}}}\ } ! N_e$(hybrid AS with $E_c={76}$ MeV) at around shower maximum. ! Hybrid AS is always essentially 1-D. logical Knockon !2 Obsolete. Don 't use this. See RecoilKineMinE ! and KnockonRatio. real *8 AnihiE !2 If E(positron) $<$ AnihiE, annihilation is considered. real *8 Es !2 Modified scattering constant. 19.3d-3 GeV real *8 MaxComptonE !2 Above this energy, Compton scattering is neglected. real *8 MaxPhotoE !2 Above this energy, photoelectric effect is neglected. real *8 MinPhotoProdE !1 Below this energy, no photo-prod of hadron. See also PhotoProd. logical PhotoProd !1 Switch. if .false., no photo prod. of hadron is considered at all. ! See also MinPhotoProdE, HowPhotoP real *8 Excom1 !2(GeV). If photon energy is<=Excom1, use XCOM data for ! compton/p.e/coherent scattering(must be< 100 GeV). real *8 Excom2 !2(GeV). If photon energy is<=Excom2, use XCOM data for ! pair creation cross-section.(must be< 100 GeV). integer Moliere !2 2$\rightarrow$ use Moliere scat.\newline ! 0$\rightarrow$ use Gaussian scattrign. \newline ! 1$\rightarrow$ use Moli\`ere scattering for non-electrons \newline ! 2$\rightarrow$ use Moli\`ere scattering for all charged ! particles. But treatment is not so rigorous as case of 3. ! \newline ! 3$\rightarrow$ use rigorus Moliere scattering. Diff. from 2 is verysmall. May be some effect in the ! core region. integer ALateCor !2 1$\rightarrow$ angular and lateral correlation is taken into account when Moliere=0 .\newline ! t$\rightarrow$ Use angular-lateral correlation by Gaussian ! approximation. No effect is seen if path length is short. !<-) ---------------------------------------------- common/Zelemagc/RecoilKineMinE
max ptcl codes in the kgnuc
subroutine setpcode(p, code)
subroutine cmemorize(from, to)
latitude latitude this system is used *****************************************************************! type coord sequence union map real z z in m endmap xyz map real ! latitude in deg is to the north ! longitude in deg is to the east *h ! height in m endmap llh map real ! polar angle ! azimuthal angle *radius ! radial distance endmap sph endunion character *sys ! which system xyz
max ptcl codes in the kelec
subroutine chooknepint(never)
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 true
subroutine cprintprim(out)
max ptcl codes in the kneue
subroutine cgeqm(p1, p2, q, icon)
subroutine cwriteparam(io, force)
subroutine cirot3vec(init, p1, p2, po)
subroutine csetemin(gen, eminob, emin, emCas)
********************block data cblkHeavy ********************integer j data *HeavyG2symbol p
subroutine cquhookr(i, rv)
*Zfirst p fm *Zfirst p Zfirst p Zfirst p *Zfirst p *Zfirst pos xyz Zfirst pos xyz *Zfirst pos *Zfirst pos Zfirst pos *Zfirst pos *Zfirst Zfirst vec w *Zfirst vec w Zfirst vec *Zfirst Zfirst Zfirst asflag
*Zfirst p fm *Zfirst p Zfirst p code
subroutine getpcode(code, codex)
subroutine cmemonode(dev, flag)
********************block data cblkHeavy ********************integer j data *HeavyG2symbol *data *HeavyG2code knuc
max ptcl codes in the kneumu
*Zfirst p fm *Zfirst p Zfirst p Zfirst p *Zfirst p *Zfirst pos xyz Zfirst pos xyz *Zfirst pos *Zfirst pos Zfirst pos height
latitude latitude this system is used *****************************************************************! type coord sequence union map real y
subroutine cqeventno(num, cumnum)
*Zfirst p fm *Zfirst p Zfirst p Zfirst p *Zfirst p *Zfirst pos xyz Zfirst pos xyz *Zfirst pos *Zfirst pos Zfirst pos *Zfirst pos *Zfirst Zfirst vec w *Zfirst vec w Zfirst vec coszenith
*Zfirst p fm *Zfirst p Zfirst p Zfirst p *Zfirst p charge
subroutine chookobs(aTrack, id)
subroutine cquhooki(i, iv)
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
subroutine cmkptc(code, subcode, charge, p)
*Zfirst p fm *Zfirst p Zfirst p Zfirst p *Zfirst p *Zfirst pos xyz Zfirst pos xyz *Zfirst pos *Zfirst pos Zfirst pos *Zfirst pos *Zfirst Zfirst vec w *Zfirst vec w Zfirst vec *Zfirst Zfirst where
subroutine cquhookc(i, cv)
*Zfirst p fm *Zfirst p mass
max ptcl codes in the kpion
subroutine cyeta(p, y, eta)
subroutine cgetcurrentstackpos(stackpos)
subroutine chookeint(never)
! structure defining a particle at production ! Basic idea of what is to be contained in ! the particle structue is that dynamical ones should be included those derivable from the particle code ! is not included ******************************************************type fmom momentum sequence union map real e endmap map real * x
*Zfirst p fm *Zfirst p Zfirst p Zfirst p subcode
dE dx *! Nuc Int sampling table c