5 * Revision 1.1.1.1 1995/10/24 10:22:02 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.46 by S.Giani
15 *=== pioabs ===========================================================*
17 SUBROUTINE PIOABS ( IKPMX , KRFLIN, WEE , ERECMN, LBIMPC,
18 & LBCHCK, ICYCL , NHOLE , NPROT , NNEUT ,
21 #include "geant321/dblprc.inc"
22 #include "geant321/dimpar.inc"
23 #include "geant321/iounit.inc"
25 *----------------------------------------------------------------------*
26 *----------------------------------------------------------------------*
28 #include "geant321/balanc.inc"
29 #include "geant321/finuc.inc"
30 #include "geant321/nucdat.inc"
31 #include "geant321/nucgeo.inc"
32 #include "geant321/parevt.inc"
33 #include "geant321/parnuc.inc"
34 #include "geant321/part.inc"
35 #include "geant321/resnuc.inc"
37 COMMON / FKPLOC / IABCOU
39 LOGICAL LBCHCK, LBIMPC, LTROUB, LEXIT, LNWINT
43 IF ( LABRST .OR. LABSRP ) THEN
50 NHOLE = NHOLE + NTARGT
53 IF ( NTARGT .EQ. 1 ) THEN
54 IF ( .NOT. LABRST ) STOP '???_rad_flight_abs'
57 PFROUT = PFRIMP / PFRCEN (1) * PFRCEN (2)
58 EKFOUT = SQRT ( AMNUSQ (2) + PFROUT**2 ) - AMNUCL (2)
59 POTINC = EKEWLL - EKECON + EKFERM
60 POTOUT = EKFERM + EKFOUT + BNENRG (2) - EKFIMP - BNENRG (1)
61 ERES = EKEWLL + AM (KPRIN) + EKFERM + AM (KNUCIM)
63 AMNREC = AMNTAR - AMUC12
64 ERECMN = 0.5D+00 * PTRES2 / AMNREC
66 UMO2 = ERES*ERES - PTRES2
72 ECMSNU = 0.5D+00 * ( UMO2 + AMNUSQ (2) ) / UMO
74 CALL RACO ( PCMSX, PCMSY, PCMSZ )
80 KRFNUC (NPNUC) = KRFLIN + 1
81 ETAPCM = ETAX * PCMSX + ETAY * PCMSY + ETAZ * PCMSZ
82 PHELP = PCMS + ETAPCM / ( GAMCM + 1.D+00 )
83 ENNUC (NPNUC) = GAMCM * PCMS + ETAPCM
84 PXHELP = PCMSX + ETAX * PHELP
85 PYHELP = PCMSY + ETAY * PHELP
86 PZHELP = PCMSZ + ETAZ * PHELP
87 PXRES = PXRES - PXHELP
88 PYRES = PYRES - PYHELP
89 PZRES = PZRES - PZHELP
90 ERES = ERES - ENNUC (NPNUC)
91 PTRES2= PXRES**2 + PYRES**2 + PZRES**2
92 PXHLP = PXTTOT - PXHELP
93 PYHLP = PYTTOT - PYHELP
94 PZHLP = PZTTOT - PZHELP
95 UMO2 = ( ETTOT - ENNUC (NPNUC) )**2 - PXHLP**2 - PYHLP**2
98 DELTU2 = UMO2 - ( AMNRES + EEXMNM )**2
99 IF ( DELTU2 .LT. 0.D+00 ) THEN
103 CALL BIMNXT ( LBCHCK )
104 RHOMEM = 0.5D+00 * ( RHOIMP + RHOIMT )
105 EKFMEM = 0.5D+00 * ( EKFIMP + EKFPRO )
107 CALL NWINXT ( LBCHCK )
108 IF ( BIMPCT .GT. RADTOT ) THEN
109 NHOLE = NHOLE - NTARLD
111 CALL PHDSET ( IKPMX )
112 IBRES = IBRES - IBAR (KPRIN)
113 ICRES = ICRES - ICH (KPRIN)
116 AMMRES = BBRES * AMUAMU + 0.001D+00 * FKENER
118 AMNRES = AMMRES - ZZRES * AMELEC + ELBNDE ( ICRES )
120 CALL UMOFIN ( IKPMX, BBRES, ZZRES, LTROUB )
123 UMO2 = ERES**2 - PTRES2
125 WRITE ( LUNOUT,* )' PIO0_P:UMO,AMNRES',UMO,AMNRES
130 TKI (NP) = ENNUC (IKPMX) - AM (KPRIN)
132 PLR (NP) = PNUCL (IKPMX)
133 CXR (NP) = PXNUCL (IKPMX) / PLR (NP)
134 CYR (NP) = PYNUCL (IKPMX) / PLR (NP)
135 CZR (NP) = PZNUCL (IKPMX) / PLR (NP)
139 PXNUCR = PXNUCR + PXNUCL (IKPMX)
140 PYNUCR = PYNUCR + PYNUCL (IKPMX)
141 PZNUCR = PZNUCR + PZNUCL (IKPMX)
142 ENUCR = ENUCR + ENNUC (IKPMX)
143 IBNUCR = IBNUCR + IBAR (KPART(NP))
144 ICNUCR = ICNUCR + ICH (KPART(NP))
148 XSTNUC (IKPMX) = XIMPTR
149 YSTNUC (IKPMX) = YIMPTR
150 ZSTNUC (IKPMX) = ZIMPTR
151 RSTNUC (IKPMX) = ABS (RIMPTR)
153 NHOLE = NHOLE - NTARLD
157 EKFNUC (NPNUC) = - AINFNT
158 PXNUCL (NPNUC) = PXHELP
159 PYNUCL (NPNUC) = PYHELP
160 PZNUCL (NPNUC) = PZHELP
161 PNUCL (NPNUC) = ENNUC (NPNUC)
162 XSTNUC (NPNUC) = XIMPTR
163 YSTNUC (NPNUC) = YIMPTR
164 ZSTNUC (NPNUC) = ZIMPTR
165 RSTNUC (NPNUC) = ABS (RIMPTR)
168 KRFNUC (NPNUC) = KRFLIN + 1
170 PHELP = ECMSNU + ETAPCM / ( GAMCM + 1.D+00 )
171 ENNUC (NPNUC) = GAMCM * ECMSNU + ETAPCM
173 IF ( ENNUC (NPNUC) - AM (8) .LE. EKFOUT + DEFRNU ) THEN
177 CALL BIMNXT ( LBCHCK )
178 RHOMEM = 0.5D+00 * ( RHOIMP + RHOIMT )
179 EKFMEM = 0.5D+00 * ( EKFIMP + EKFPRO )
181 CALL NWINXT ( LBCHCK )
182 IF ( BIMPCT .GT. RADTOT ) THEN
183 NHOLE = NHOLE - NTARLD
185 CALL PHDSET ( IKPMX )
186 IBRES = IBRES - IBAR (KPRIN)
187 ICRES = ICRES - ICH (KPRIN)
190 AMMRES = BBRES * AMUAMU + 0.001D+00 * FKENER
192 AMNRES = AMMRES - ZZRES * AMELEC + ELBNDE ( ICRES )
194 CALL UMOFIN ( IKPMX, BBRES, ZZRES, LTROUB )
197 UMO2 = ERES**2 - PTRES2
199 WRITE ( LUNOUT,* )' PIO0_T:UMO,AMNRES',UMO,AMNRES
204 TKI (NP) = ENNUC (IKPMX) - AM (KPRIN)
206 PLR (NP) = PNUCL (IKPMX)
207 CXR (NP) = PXNUCL (IKPMX) / PLR (NP)
208 CYR (NP) = PYNUCL (IKPMX) / PLR (NP)
209 CZR (NP) = PZNUCL (IKPMX) / PLR (NP)
213 PXNUCR = PXNUCR + PXNUCL (IKPMX)
214 PYNUCR = PYNUCR + PYNUCL (IKPMX)
215 PZNUCR = PZNUCR + PZNUCL (IKPMX)
216 ENUCR = ENUCR + ENNUC (IKPMX)
217 IBNUCR = IBNUCR + IBAR (KPART(NP))
218 ICNUCR = ICNUCR + ICH (KPART(NP))
222 XSTNUC (IKPMX) = XIMPTR
223 YSTNUC (IKPMX) = YIMPTR
224 ZSTNUC (IKPMX) = ZIMPTR
225 RSTNUC (IKPMX) = ABS (RIMPTR)
227 NHOLE = NHOLE - NTARLD
231 EKFNUC (NPNUC) = EKFOUT
232 PXNUCL (NPNUC) = -PCMSX + ETAX * PHELP
233 PYNUCL (NPNUC) = -PCMSY + ETAY * PHELP
234 PZNUCL (NPNUC) = -PCMSZ + ETAZ * PHELP
235 PNUCL (NPNUC) = SQRT ( PXNUCL (NPNUC)**2 + PYNUCL (NPNUC)**2
236 & + PZNUCL (NPNUC)**2 )
237 XSTNUC (NPNUC) = XIMPCT
238 YSTNUC (NPNUC) = YIMPCT
239 ZSTNUC (NPNUC) = ZIMPCT
240 RSTNUC (NPNUC) = ABS (RIMPCT)
244 ISCTYP (NUSCIN) = - ( KPRIN * 100 + KNUCIM )
245 IF ( NUSCIN .EQ. 1 ) IPRTYP = ISCTYP (1)
247 HOLEXP (NHLEXP) = EKFIMP - EKFERM
248 RHOACT = 0.5D+00 * ( RHOIMP + RHOIMT )
249 RHOEXP = RHOEXP + RHOACT
250 EKFEXP = EKFEXP + 0.5D+00 * ( EKFIMP + EKFPRO )
255 ITFRMI = 1 + KNUCIM / 8
256 ITFRM2 = 1 + KNUCI2 / 8
257 IF ( ICH (KPRIN) .GT. 0 ) THEN
261 IF ( IOFRMI .EQ. ITFRM2 ) THEN
265 PFROUT = PFRIMP / PFRCEN (1) * PFRCEN (2)
266 EKFOUT = SQRT ( AMNUSQ (1) + PFROUT**2 ) - AMNUCL (1)
269 ELSE IF ( ICH (KPRIN) .LT. 0 ) THEN
273 IF ( IOFRMI .EQ. ITFRM2 ) THEN
277 PFROUT = PFRIMP / PFRCEN (2) * PFRCEN (1)
278 EKFOUT = SQRT ( AMNUSQ (2) + PFROUT**2 ) - AMNUCL (2)
285 IF ( ITFRMI .EQ. 1 ) THEN
290 IF ( ITFRM2 .EQ. 1 ) THEN
296 POTINC = EKEWLL - EKECON + EKFERM + EKFER2
297 POTOUT = EKFERM + EKFER2 + EKFOUT + BNENRG (IOFRMI) - EKFIMP
299 ERES = EKEWLL + AM (KPRIN) + EKFERM + AM (KNUCIM)
300 & + EKFER2 + AM (KNUCI2) + POTOUT - POTINC
301 AMNREC = AMNTAR - 2.D+00 * AMUC12
302 PHLPSQ = ( PXRES - CXIMPC * PNUCCO )**2
303 & + ( PYRES - CYIMPC * PNUCCO )**2
304 & + ( PZRES - CZIMPC * PNUCCO )**2
305 ERECMN = 0.5D+00 * PHLPSQ / AMNREC**2
306 ERECMN = AMNREC * ERECMN * ( 1.D+00 - 0.25D+00 * ERECMN )
308 UMO2 = ERES*ERES - PTRES2
314 ECMSPR = 0.5D+00 * ( UMO2 + AMNUSQ (IOFRMI) - AMNUSQ (IOFRM2) )
316 ECMSNU = UMO - ECMSPR
317 PCMS = SQRT ( ( ECMSPR - AMNUCL (IOFRMI) ) * ( ECMSPR
318 & + AMNUCL (IOFRMI) ) )
319 CALL RACO ( PCMSX, PCMSY, PCMSZ )
324 KPNUCL (NPNUC) = 1 + 7 * ( IOFRMI - 1 )
325 KRFNUC (NPNUC) = KRFLIN + 1
326 ETAPCM = ETAX * PCMSX + ETAY * PCMSY + ETAZ * PCMSZ
327 PHELP = ECMSPR + ETAPCM / ( GAMCM + 1.D+00 )
328 ENNUC (NPNUC) = GAMCM * ECMSPR + ETAPCM
329 IF ( ENNUC (NPNUC) - AMNUCL (IOFRMI) .LE. EKFOUT + DEFRPR )THEN
333 CALL BIMNXT ( LBCHCK )
334 RHOMEM = 0.5D+00 * ( RHOIMP + RHOIMT )
335 EKFMEM = 0.5D+00 * ( EKFIMP + EKFPRO )
337 CALL NWINXT ( LBCHCK )
338 IF ( BIMPCT .GT. RADTOT ) THEN
339 NHOLE = NHOLE - NTARLD
341 CALL PHDSET ( IKPMX )
342 IBRES = IBRES - IBAR (KPRIN)
343 ICRES = ICRES - ICH (KPRIN)
346 AMMRES = BBRES * AMUAMU + 0.001D+00 * FKENER
348 AMNRES = AMMRES - ZZRES * AMELEC + ELBNDE ( ICRES )
350 CALL UMOFIN ( IKPMX, BBRES, ZZRES, LTROUB )
353 UMO2 = ERES**2 - PTRES2
355 WRITE ( LUNOUT,* )' PIO0_P:UMO,AMNRES',UMO,AMNRES
360 TKI (NP) = ENNUC (IKPMX) - AM (KPRIN)
362 PLR (NP) = PNUCL (IKPMX)
363 CXR (NP) = PXNUCL (IKPMX) / PLR (NP)
364 CYR (NP) = PYNUCL (IKPMX) / PLR (NP)
365 CZR (NP) = PZNUCL (IKPMX) / PLR (NP)
369 PXNUCR = PXNUCR + PXNUCL (IKPMX)
370 PYNUCR = PYNUCR + PYNUCL (IKPMX)
371 PZNUCR = PZNUCR + PZNUCL (IKPMX)
372 ENUCR = ENUCR + ENNUC (IKPMX)
373 IBNUCR = IBNUCR + IBAR (KPART(NP))
374 ICNUCR = ICNUCR + ICH (KPART(NP))
378 XSTNUC (IKPMX) = XIMPTR
379 YSTNUC (IKPMX) = YIMPTR
380 ZSTNUC (IKPMX) = ZIMPTR
381 RSTNUC (IKPMX) = ABS (RIMPTR)
383 NHOLE = NHOLE - NTARLD
387 EKFNUC (NPNUC) = EKFOUT
388 PXNUCL (NPNUC) = PCMSX + ETAX * PHELP
389 PYNUCL (NPNUC) = PCMSY + ETAY * PHELP
390 PZNUCL (NPNUC) = PCMSZ + ETAZ * PHELP
391 PNUCL (NPNUC) = SQRT ( PXNUCL (NPNUC)**2 + PYNUCL (NPNUC)**2
392 & + PZNUCL (NPNUC)**2 )
393 XSTNUC (NPNUC) = XIMPTR
394 YSTNUC (NPNUC) = YIMPTR
395 ZSTNUC (NPNUC) = ZIMPTR
396 RSTNUC (NPNUC) = ABS (RIMPTR)
398 KPNUCL (NPNUC) = 1 + 7 * ( IOFRM2 - 1 )
399 KRFNUC (NPNUC) = KRFLIN + 1
401 PHELP = ECMSNU + ETAPCM / ( GAMCM + 1.D+00 )
402 ENNUC (NPNUC) = GAMCM * ECMSNU + ETAPCM
403 IF ( ENNUC (NPNUC) - AMNUCL (IOFRM2) .LE. EKFIM2 + DEFRNU )THEN
407 CALL BIMNXT ( LBCHCK )
408 RHOMEM = 0.5D+00 * ( RHOIMP + RHOIMT )
409 EKFMEM = 0.5D+00 * ( EKFIMP + EKFPRO )
411 CALL NWINXT ( LBCHCK )
412 IF ( BIMPCT .GT. RADTOT ) THEN
413 NHOLE = NHOLE - NTARLD
415 CALL PHDSET ( IKPMX )
416 IBRES = IBRES - IBAR (KPRIN)
417 ICRES = ICRES - ICH (KPRIN)
420 AMMRES = BBRES * AMUAMU + 0.001D+00 * FKENER
422 AMNRES = AMMRES - ZZRES * AMELEC + ELBNDE ( ICRES )
424 CALL UMOFIN ( IKPMX, BBRES, ZZRES, LTROUB )
427 UMO2 = ERES**2 - PTRES2
429 WRITE ( LUNOUT,* )' PIO0_T:UMO,AMNRES',UMO,AMNRES
434 TKI (NP) = ENNUC (IKPMX) - AM (KPRIN)
436 PLR (NP) = PNUCL (IKPMX)
437 CXR (NP) = PXNUCL (IKPMX) / PLR (NP)
438 CYR (NP) = PYNUCL (IKPMX) / PLR (NP)
439 CZR (NP) = PZNUCL (IKPMX) / PLR (NP)
443 PXNUCR = PXNUCR + PXNUCL (IKPMX)
444 PYNUCR = PYNUCR + PYNUCL (IKPMX)
445 PZNUCR = PZNUCR + PZNUCL (IKPMX)
446 ENUCR = ENUCR + ENNUC (IKPMX)
447 IBNUCR = IBNUCR + IBAR (KPART(NP))
448 ICNUCR = ICNUCR + ICH (KPART(NP))
452 XSTNUC (IKPMX) = XIMPTR
453 YSTNUC (IKPMX) = YIMPTR
454 ZSTNUC (IKPMX) = ZIMPTR
455 RSTNUC (IKPMX) = ABS (RIMPTR)
457 NHOLE = NHOLE - NTARLD
461 EKFNUC (NPNUC) = EKFIM2
462 PXNUCL (NPNUC) = -PCMSX + ETAX * PHELP
463 PYNUCL (NPNUC) = -PCMSY + ETAY * PHELP
464 PZNUCL (NPNUC) = -PCMSZ + ETAZ * PHELP
465 PNUCL (NPNUC) = SQRT ( PXNUCL (NPNUC)**2 + PYNUCL (NPNUC)**2
466 & + PZNUCL (NPNUC)**2 )
467 XSTNUC (NPNUC) = XIMPCT
468 YSTNUC (NPNUC) = YIMPCT
469 ZSTNUC (NPNUC) = ZIMPCT
470 RSTNUC (NPNUC) = ABS (RIMPCT)
474 ISCTYP (NUSCIN) = - ( KPRIN * 100 + KNUCIM * 10 + KNUCI2 )
475 IF ( NUSCIN .EQ. 1 ) IPRTYP = ISCTYP (1)
478 HOLEXP (NHLEXP-1) = EKFIMP - EKFERM
479 HOLEXP (NHLEXP) = EKFIM2 - EKFER2
480 RHOACT = 0.6666666666666666D+00 * RHOIMP
481 & + 0.3333333333333333D+00 * RHOIMT
482 RHOEXP = RHOEXP + 2.D+00 * RHOACT
483 EKFEXP = EKFEXP + 0.6666666666666666D+00 * ( EKFIMP + EKFIM2
487 DO 3000 KP = NPNCLD+1, NPNUC
489 IF ( AM (KPNUC) .LE. 0.D+00 ) THEN
490 TAUTAU = RZNUCL / PNUCL (KP)
492 TAUEFF = 0.5D+00 * TAUFOR * AM (13) / AM (KPNUC)
494 TAUTAU = - TAUEFF / AM (KPNUC) * LOG ( 1.D+00 - RNDM
496 TAUTAU = MAX ( TAUTAU, RZNUCL / PNUCL (KP) )
498 XSTNUC (KP) = XSTNUC (KP) + PXNUCL (KP) * TAUTAU
499 YSTNUC (KP) = YSTNUC (KP) + PYNUCL (KP) * TAUTAU
500 ZSTNUC (KP) = ZSTNUC (KP) + PZNUCL (KP) * TAUTAU
501 RSTNUC (KP) = SQRT ( XSTNUC (KP)**2 + YSTNUC (KP)**2
506 *=== End of subroutine pioabs =========================================*