This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / neutron / n2nn3n.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:21:58  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 29/03/94  15.41.48  by  S.Giani
11 *-- Author :
12       SUBROUTINE N2NN3N(D,LD,AWR,KZ,ID,FM,Q,IFLG)
13 C       THIS ROUTINE CALCULATES THE DIRECTIONAL COSINES FOR THE
14 C       NEUTRON AND RECOIL NUCLEUS FOR AN N2N OR N3N REACTION
15 C       USING THE ONE NEUTRON EMMISION MODEL.  IT ALSO SETS ALL
16 C       EXIT PARAMETRS FOR THE RECOIL NUCLEUS.
17 #include "geant321/minput.inc"
18 #include "geant321/mconst.inc"
19 #include "geant321/mnutrn.inc"
20 #include "geant321/mrecoi.inc"
21 #include "geant321/mapoll.inc"
22 #include "geant321/mmass.inc"
23 #include "geant321/mpstor.inc"
24       DIMENSION D(*),LD(*),FM(*)
25       SAVE
26       MT=0
27       IF(ID.EQ.8)MT=16
28       IF(ID.EQ.9)MT=17
29       IF(ID.EQ.12)MT=24
30 C       IFLG EQUAL TO ONE IMPLIES THE DIRECTION COSINES WERE
31 C       SELECTED ISOTROPICALLY IN THE LABORATORY COORDINATE SYSTEM
32 C       CALCULATE THE NEUTRON EXIT DIRECTIONAL COSINES
33       POX = 0.0
34       POY = 0.0
35       POZ = 0.0
36       DO 40 KN=1,INEU
37          IF(IFLG.EQ.1) THEN
38             CALL GTISO(UP,VP,WP)
39          ELSE
40             SINPSI=SQRT(1.0-FM(KN)**2)
41             CALL AZIRN(SINETA,COSETA)
42             STHETA=1.0-UOLD**2
43             IF(STHETA)20,20,10
44    10       STHETA=SQRT(STHETA)
45             COSPHI=VOLD/STHETA
46             SINPHI=WOLD/STHETA
47             GO TO 30
48    20       COSPHI=1.0
49             SINPHI=0.0
50             STHETA=0.0
51    30       UP = UOLD*FM(KN)-COSETA*SINPSI*STHETA
52             VP = VOLD*FM(KN)+UOLD*COSPHI*COSETA*SINPSI-SINPHI* SINPSI*
53      +      SINETA
54             WP = WOLD*FM(KN)+UOLD*SINPHI*COSETA*SINPSI+COSPHI* SINPSI*
55      +      SINETA
56             S=1.0/SQRT(UP*UP+VP*VP+WP*WP)
57             UP=UP*S
58             VP=VP*S
59             WP=WP*S
60          ENDIF
61          EP = ENE(KN)
62 C use ONLY first neutron for recoil calculation in order the ensure
63 C correct energy spectrum of recoil nucleus
64          IF(KN.EQ.1) THEN
65             PP = SQRT(EP**2 + 2.0*EP*ZN)
66             POX = POX + PP*UP
67             POY = POY + PP*VP
68             POZ = POZ + PP*WP
69          ENDIF
70          AGEP = AGE
71          MTP = MT
72          CALL STOPAR(IDNEU,NNEU)
73    40 CONTINUE
74 C       CALCULATE AND SET THE RECOIL NUCLEUS EXIT PARAMETERS
75    50 XR=X
76       YR=Y
77       ZR=Z
78       WATER=WTBC
79       NZR=KZ
80       ZMP = FLOAT(KZ)
81       AGER=AGE
82       AGEP = AGE
83       NCOLR=NCOL
84       MTNR=MT
85       MTP = MT
86       AR = (AWR*AN) - FLOAT(INEU-1)*AN
87       AMP = AR
88       ENIR=EOLD
89       UNIR=UOLD
90       VNIR=VOLD
91       WNIR=WOLD
92       ENOR=E
93       UNOR=U
94       VNOR=V
95       WNOR=W
96       WTNR=WATE
97       QR=Q
98 C       CALCULATE THE NEUTRON MOMENTUM BEFORE AND AFTER COLLISION
99 C       NEUTRON MOMENTUM BEFORE COLLISION (PI) EQUALS TOTAL MOMENTUM
100       PI=SQRT(2.0*ZN*EOLD)
101 C   CALCULATE THE DIRECTIONAL MOMENTUM OF THE RECOIL NUCLEUS
102       PIX=PI*UOLD
103       PIY=PI*VOLD
104       PIZ=PI*WOLD
105       PRX = PIX - POX
106       PRY = PIY - POY
107       PRZ = PIZ - POZ
108 C       CALCULATE THE TOTAL MOMENTUM OF THE RECOIL NUCLEUS
109       PR=SQRT(PRX**2+PRY**2+PRZ**2)
110 C       CALCULATE THE RECOIL NUCLEUS DIRECTIONAL COSINES
111       UR=PRX/PR
112       VR=PRY/PR
113       WR=PRZ/PR
114       UP = UR
115       VP = VR
116       WP = WR
117 C       CALCULATE THE RECOIL NUCLEUS EXIT ENERGY
118       XM = AR*931.075E6
119       ER= SQRT(PR**2 + XM**2) - XM
120       EP = ER
121       MTP = MT
122 C       IF MT=24, DO NOT STORE THE RECOIL HEAVY ION IN THE BANK
123       IF(MT.EQ.24)RETURN
124 C       STORE THE  RECOIL HEAVY ION IN THE RECOIL BANK
125       CALL STOPAR(IDHEVY,NHEVY)
126       RETURN
127       END