5 * Revision 1.1.1.1 1995/10/24 10:22:04 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.46 by S.Giani
15 *=== umofin ===========================================================*
17 SUBROUTINE UMOFIN ( IKPMX, BBRES, ZZRES, LTRPPD )
19 #include "geant321/dblprc.inc"
20 #include "geant321/dimpar.inc"
21 #include "geant321/iounit.inc"
23 *----------------------------------------------------------------------*
24 *----------------------------------------------------------------------*
26 #include "geant321/balanc.inc"
27 #include "geant321/nucdat.inc"
28 #include "geant321/nucgeo.inc"
29 #include "geant321/parevt.inc"
30 #include "geant321/parnuc.inc"
31 #include "geant321/part.inc"
32 #include "geant321/resnuc.inc"
36 PXRES = PXTTOT - PXNUCR - PXINTR - PXNUCL (IKPMX)
37 PYRES = PYTTOT - PYNUCR - PYINTR - PYNUCL (IKPMX)
38 PZRES = PZTTOT - PZNUCR - PZINTR - PZNUCL (IKPMX)
39 ERES = ETTOT - EINTR - ENUCR - ENNUC (IKPMX)
40 PTRES2 = PXRES**2 + PYRES**2 + PZRES**2
41 UMO2 = ERES**2 - PTRES2
42 DELTU2 = ( AMNRES + EEXMIN )**2 - UMO2
43 IF ( DELTU2 .LT. 0.D+00 ) RETURN
46 ENNUC0 = ENNUC (IKPMX)
48 PXRES = PXTTOT - PXNUCR - PXINTR
49 PYRES = PYTTOT - PYNUCR - PYINTR
50 PZRES = PZTTOT - PZNUCR - PZINTR
51 ERES = ETTOT - EINTR - ENUCR
52 PTRES2 = PXRES**2 + PYRES**2 + PZRES**2
53 UMO2 = ERES**2 - PTRES2
55 ENEMIN = 0.5D+00 * ( UMO2 - ( AMNRES + EEXMIN )**2 - AMSQ )
56 & / ( AMNRES + EEXMIN )
57 ENEDLT = 0.5D+00 * ( UMO2 - ( AMNRES + EEXDEL )**2 - AMSQ )
58 & / ( AMNRES + EEXDEL )
59 ENEANY = 0.5D+00 * ( UMO2 - ( AMNRES + EEXANY )**2 - AMSQ )
60 & / ( AMNRES + EEXANY )
61 IF ( ENEANY .LE. AM (KPRIN) ) THEN
62 IBRES = IBRES + IBAR (KPRIN)
63 ICRES = ICRES + ICH (KPRIN)
66 AMMRES = BBRES * AMUAMU + 0.001D+00
67 & * FKENER ( BBRES, ZZRES )
68 AMNRES = AMMRES - ZZRES * AMELEC + ELBNDE ( ICRES )
73 IF ( ENNUC (IKPMX) .GT. 0.5D+00 * ( ENEANY + ENEDLT ) ) THEN
74 ENNUC (IKPMX) = ENEANY
75 PNUCL (IKPMX) = SQRT ( ( ENNUC (IKPMX) - AM (KPRIN) )
76 & * ( ENNUC (IKPMX) + AM (KPRIN) ) )
77 PHELP = PNUCL (IKPMX) / PNUCC0
78 PXNUCL (IKPMX) = PXNUCL (IKPMX) * PHELP
79 PYNUCL (IKPMX) = PYNUCL (IKPMX) * PHELP
80 PZNUCL (IKPMX) = PZNUCL (IKPMX) * PHELP
81 ELSE IF ( ENNUC (IKPMX) .GT. 0.5D+00 * ( ENEDLT + ENEMIN ) ) THEN
82 ENNUC (IKPMX) = ENEDLT
83 PNUCL (IKPMX) = SQRT ( ( ENNUC (IKPMX) - AM (KPRIN) )
84 & * ( ENNUC (IKPMX) + AM (KPRIN) ) )
85 PHELP = PNUCL (IKPMX) / PNUCC0
86 PXNUCL (IKPMX) = PXNUCL (IKPMX) * PHELP
87 PYNUCL (IKPMX) = PYNUCL (IKPMX) * PHELP
88 PZNUCL (IKPMX) = PZNUCL (IKPMX) * PHELP
89 ELSE IF ( ENNUC (IKPMX) .GE. ENEMIN ) THEN
90 ENNUC (IKPMX) = ENEMIN
91 PNUCL (IKPMX) = SQRT ( ( ENNUC (IKPMX) - AM (KPRIN) )
92 & * ( ENNUC (IKPMX) + AM (KPRIN) ) )
93 PHELP = PNUCL (IKPMX) / PNUCC0
94 PXNUCL (IKPMX) = PXNUCL (IKPMX) * PHELP
95 PYNUCL (IKPMX) = PYNUCL (IKPMX) * PHELP
96 PZNUCL (IKPMX) = PZNUCL (IKPMX) * PHELP
100 AMNHLP = SQRT ( UMO2 + PNUCL (IKPMX)**2 ) - ENNUC (IKPMX)
105 GAMRES = ( AMNHLP + ENNUC (IKPMX) ) / UMO
106 ETXRES = PXNUCL (IKPMX) / UMO
107 ETYRES = PYNUCL (IKPMX) / UMO
108 ETZRES = PZNUCL (IKPMX) / UMO
109 ETAPCM = ETXRES * PXNUCL (IKPMX) + ETYRES * PYNUCL (IKPMX)
110 & + ETZRES * PZNUCL (IKPMX)
111 ECMSPR = GAMRES * ENNUC (IKPMX) - ETAPCM
112 PHELP = ENNUC (IKPMX) - ETAPCM / ( GAMRES + 1.D+00 )
113 PCMSX = PXNUCL (IKPMX) - ETXRES * PHELP
114 PCMSY = PYNUCL (IKPMX) - ETYRES * PHELP
115 PCMSZ = PZNUCL (IKPMX) - ETZRES * PHELP
116 ETAPCM = ETXLAB * PCMSX + ETYLAB * PCMSY + ETZLAB * PCMSZ
117 ENNUC (IKPMX) = GAMLAB * ECMSPR + ETAPCM
118 PHELP = ECMSPR + ETAPCM / ( GAMLAB + 1.D+00 )
119 PXNUCL (IKPMX) = PCMSX + ETXLAB * PHELP
120 PYNUCL (IKPMX) = PCMSY + ETYLAB * PHELP
121 PZNUCL (IKPMX) = PCMSZ + ETZLAB * PHELP
122 PNUCL (IKPMX) = SQRT ( ( ENNUC (IKPMX) - AM (KPRIN) )
123 & * ( ENNUC (IKPMX) + AM (KPRIN) ) )
126 *=== End of subroutine UMOFIN =========================================*