13 #include "Zincidentv.h" 18 real*8 Ein1, Ein2, Eout, dEabs1, deabs2, dErel1, dErel2
19 real*8 dErel, dEabs, Ein
25 integer neverNEP/0/, neverE/0/, neverG/0/
26 save nevernep, nevere, neverg
31 integer,
parameter::loopmax=100
54 do while (loopc < loopmax )
66 if(movedtrack%p%code .eq.
kelec)
then 68 elseif(movedtrack%p%code .eq.
kphoton)
then 72 if(intinfarray(processno)%process .eq.
'coll')
then 73 movedtrack%pos%colheight = movedtrack%pos%height
77 if(movedtrack%p%code .eq.
kelec)
then 78 if(nevere .ne. 1)
then 82 elseif(movedtrack%p%code .eq.
kphoton)
then 83 if(neverg .ne. 1)
then 88 if(nevernep .ne. 1)
then 96 if(btest(eabsorb(1), biteconsv-1) )
then 97 if(intinfarray(processno)%process .eq.
'coll' .or.
98 * intinfarray(processno)%process .eq.
'photop' .or.
99 * intinfarray(processno)%process .eq.
'munuci' )
then 105 ein1 = movedtrack%p%fm%p(4)
106 * +
masn*(targetnucleonno-targetprotonno) +
107 *
masp*targetprotonno
108 ein2 = movedtrack%p%fm%p(4) +
masp 111 eout = eout + pwork(i)%fm%p(4)
115 derel1 = eout/ein1 -1.0
117 derel2 = eout/ein2 -1.0
118 if( abs(derel1) .lt. abs(derel2))
then 127 ein1 = movedtrack%p%fm%p(4)
129 derel1 = eout/ein1 -1.0
130 if(abs(deabs1) .lt. abs(deabs) )
then 136 if( abs(derel) .gt. 0.1 .or.
137 * abs(deabs) .gt. 1.e5 )
then 138 write(0,*)
" code=",movedtrack%p%code
139 write(0,*)
" chg=",movedtrack%p%charge
140 write(0,*)
' Moved E=',movedtrack%p%fm%p(4)
141 write(0,*)
' Ein =', ein,
' Eout=',eout
142 write(0,*)
' Rerr =', eout/ein -1.0
143 write(0,*)
' dEabscol= ',deabs
144 write(0,*)
'ActiveModel=', activemdl
149 ein = movedtrack%p%fm%p(4)
150 if(intinfarray(processno)%process .ne.
'decay' .and.
151 * intinfarray(processno)%process .ne.
'brems' .and.
152 * intinfarray(processno)%process .ne.
'pair' .and.
153 * intinfarray(processno)%process .ne.
'cohs' )
then 156 if(ein .gt. movedtrack%p%mass)
then 159 eout = eout + pwork(i)%fm%p(4)
162 derel = eout/ein -1.0
163 if( abs(derel) .gt. 0.2 )
then 165 if( abs(deabs) .gt. 1.e5 )
then 166 write(0,*)
'****************************' 168 write(0,*)
'----------------------------' 170 write(0,*)
'proc=', intinfarray(processno)%process
171 write(0,*)
'code=',movedtrack%p%code,
' charge=',
172 * movedtrack%p%charge,
' E=',ein
173 write(0,*)
'dEabs= ', deabs, derel, nproduced
175 write(0,*) i, pwork(i)%code, pwork(i)%fm%p(4)
183 if(onedim .eq. 0)
then 186 call cmoveptcl3(movedtrack, pwork, nproduced, nstacked)
188 movedtrack%vec = incidentcopy%vec
189 call cmoveptcl1(movedtrack, pwork, nproduced, nstacked)
193 if(never .eq. 0 .or. never .eq. 1 )
then 195 elseif(never .eq. 3)
then 198 stackpos=stackpos-nstacked
200 elseif(never .eq. 4)
then 205 call cerrormsg(
'return value from chookE,G,NEPInt wrong', 1)
206 write(0,*)
' never=', never
266 atrack%p%fm%p = pw(i)%fm%p
267 atrack%p%mass = pw(i)%mass
268 atrack%p%code = pw(i)%code
269 atrack%p%subcode = pw(i)%subcode
270 atrack%p%charge = pw(i)%charge
282 if(atrack%info .gt. 0)
then 286 labelcounter = labelcounter + 1
287 atrack%label = labelcounter
299 if(thinsampling .and. npush .ge. 2 )
then 308 subroutine cthinstack(stackloc, n, iTrack, nout)
320 call cthinning(stack(stackloc), n, itrack, nout)
351 if( itrack%pos%height .gt. 40.
d3 )
then 352 if(intinfarray(processno)%process .eq.
'brems' )
then 354 if( atrack%p%fm%p(4) .lt. itrack%p%fm%p(4)*0.8)
then 355 atrack%label = itrack%label
358 elseif(intinfarray(processno)%process .eq.
'knock' .or.
359 * intinfarray(processno)%process .eq.
'mscat' .or.
360 * intinfarray(processno)%process .eq.
'bscat' )
then 363 if(itrack%p%code .ne.
kelec .or.
364 * itrack%p%charge .ne. -1)
then 366 if(atrack%p%code .ne.
kelec)
then 368 atrack%label = itrack%label
373 if(pw(1)%fm%p(4) .gt. pw(2)%fm%p(4))
then 375 atrack%label = itrack%label
380 atrack%label = itrack%label
388 labelcounter = labelcounter +1
389 atrack%label = labelcounter
406 #include "Zincidentv.h" 429 atrack%p%fm%p = pw(i)%fm%p
430 atrack%p%mass = pw(i)%mass
431 atrack%p%code = pw(i)%code
432 atrack%p%subcode = pw(i)%subcode
433 atrack%p%charge = pw(i)%charge
437 call cpxyzp(atrack%p%fm, p)
443 if(temp .gt. backanglimit)
then 446 atrack%p%fm%p(1) = p * atrack%vec%w%r(1)
447 atrack%p%fm%p(2) = p * atrack%vec%w%r(2)
448 atrack%p%fm%p(3) = p * atrack%vec%w%r(3)
459 if( atrack%info .gt. 0)
then 463 labelcounter = labelcounter + 1
464 atrack%label = labelcounter
474 if(thinsampling .and. npush .gt. 0 )
then 501 if( movedtrack%p%code .eq.
kgnuc )
then 502 call cqhvyintin(ptcla, num)
506 ptcla(1) = movedtrack%p
508 ptcla(1)%fm%p = movedtrack%p%fm%p
509 ptcla(1)%mass = movedtrack%p%mass
510 ptcla(1)%code = movedtrack%p%code
511 ptcla(1)%subcode = movedtrack%p%subcode
512 ptcla(1)%charge = movedtrack%p%charge
subroutine cerrormsg(msg, needrtn)
subroutine chookgint(never)
subroutine cqinteptcl(ptclA, num)
subroutine ctrickycount(iTrack, aTrack, pw, i)
max ptcl codes in the kgnuc
block data cblkIncident data *Za1ry *HeightOfInj d3
subroutine cpxyzp(po, pabs)
max ptcl codes in the kelec
subroutine chooknepint(never)
subroutine cgetzenith(aTrack, cosz)
subroutine cmoveptcl3(iTrack, pw, n, npush)
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 cmoveptcl1(iTrack, pw, n, npush)
subroutine cresetdirec(aTrack)
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 cthinning(Tracks, n, iTrack, nout)
subroutine cresetstackpos(stackpos)
subroutine chookeabsorbc(a, n, p, info)
subroutine cgetcurrentstackpos(stackpos)
subroutine cthinstack(stackloc, n, iTrack, nout)
subroutine chookeint(never)
subroutine cscalerprod(a, b, c)