This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / peanut / umofin.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:22:04  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 29/03/94  15.41.46  by  S.Giani
11 *-- Author :
12 *$ CREATE UMOFIN.FOR
13 *COPY UMOFIN
14 *
15 *=== umofin ===========================================================*
16 *
17       SUBROUTINE UMOFIN ( IKPMX, BBRES, ZZRES, LTRPPD )
18  
19 #include "geant321/dblprc.inc"
20 #include "geant321/dimpar.inc"
21 #include "geant321/iounit.inc"
22 *
23 *----------------------------------------------------------------------*
24 *----------------------------------------------------------------------*
25 *
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"
33 *
34       LOGICAL LTRPPD
35 *
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
44 *
45       PNUCC0 = PNUCCO
46       ENNUC0 = ENNUC (IKPMX)
47 *
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
54       AMSQ   = AM (KPRIN)**2
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)
64          BBRES = IBRES
65          ZZRES = ICRES
66          AMMRES = BBRES * AMUAMU + 0.001D+00
67      &          * FKENER ( BBRES, ZZRES )
68          AMNRES = AMMRES - ZZRES * AMELEC + ELBNDE ( ICRES )
69          LTRPPD = .TRUE.
70          EEXMIN = 0.D+00
71          RETURN
72       END IF
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
97       ELSE
98       END IF
99       UMO = SQRT (UMO2)
100       AMNHLP = SQRT ( UMO2 + PNUCL (IKPMX)**2 ) - ENNUC (IKPMX)
101       GAMLAB = ERES  / UMO
102       ETXLAB = PXRES / UMO
103       ETYLAB = PYRES / UMO
104       ETZLAB = PZRES / UMO
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) ) )
124  
125       RETURN
126 *=== End of subroutine UMOFIN =========================================*
127       END