]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/neutron/thrsel.F
Some function moved to AliZDC
[u/mrichter/AliRoot.git] / GEANT321 / neutron / thrsel.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:21:59 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 THRSEL(NE,NP7,NB7,E,EOUT,FM,TDK,ETH,ALPHA,BETA,W,
13 + PMUPS,PMDS,F,AWR,IIN,IPTMD,IPMDS,IOUT)
14C THIS ROUTINE SELECTS THE EXIT ENERGY AND SCATTERING ANGLE
15C FROM S(ALPHA,BETA) DATA TABLES
16 DIMENSION ETH(*),ALPHA(*),BETA(*),ABETA2(2),PMDS(*),
17 + IPTMD(NE),W(NE),IPMDS(*),PMUPS(NB7,NE),F(NP7,NB7),AWR(*)
18 SAVE
19C
20 AAWR=AWR(IIN)
21 DO 10 IE=1,NE
22 IF(E.LT.ETH(IE))GO TO 20
23 10 CONTINUE
24 INDX=NE
25 GO TO 30
26 20 INDX=IE
27 IF(INDX.EQ.1)GO TO 30
28 R=FLTRNF(0)
29 DELE=(ETH(INDX)-E)/(ETH(INDX)-ETH(INDX-1))
30 DELEN=DELE
31 GO TO 40
32 30 DELEN=1.0
33 INDX=2
34 40 PROB=DELEN*W(INDX-1)+(1.0-DELEN)*W(INDX)
35 IF(R.LE.PROB)GO TO 120
36C NEUTRON DOWNSCATTERS
37 R=FLTRNF(0)
38 DO 90 I=1,2
39 IP=IPTMD(INDX)
40 NB=IPMDS(IP)
41 DO 50 IB=1,NB
42 IF(R.LE.PMDS(IP+NB+IB))GO TO 60
43 50 CONTINUE
44 WRITE(IOUT,10000)PMDS(IP+2*NB)
4510000 FORMAT(' MICAP: CUMULATIVE DOWNSCATTER DIST. DOES NOT END ',
46 + 'IN 1.0 IN THRSEL',E12.4)
47 PRINT *,' CALOR: ERROR in MICAP ====> STOP '
48 STOP
49 60 IF(IB.EQ.1)GO TO 70
50 DELE=(PMDS(IP+NB+IB)-R)/(PMDS(IP+NB+IB)-PMDS(IP+NB+IB-1))
51 ABETA=DELE*(PMDS(IP+IB-1)-PMDS(IP+IB))+PMDS(IP+IB)
52 GO TO 80
53 70 ABETA=BETA(IB)
54 80 ABETA2(I)=ABETA
55 INDX=INDX-1
56 90 CONTINUE
57 ABETA=DELEN*ABETA2(2)+(1.0-DELEN)*ABETA2(1)
58 EOUT=E-TDK*ABETA
59 IF(EOUT.LT.1.0E-05)EOUT=1.0E-05
60 DO 100 IB=1,NB7
61 IF(ABETA.LE.BETA(IB))GO TO 110
62 100 CONTINUE
63 IB=NB7
64 110 DELE=(ABETA-BETA(IB))/(BETA(IB-1)-BETA(IB))
65 GO TO 180
66C NEUTRON UPSCATTERS
67 120 R=FLTRNF(0)
68 DO 170 I=1,2
69 DO 130 IB=1,NB7
70 IF(R.LE.PMUPS(IB,INDX))GO TO 140
71 130 CONTINUE
72 WRITE(IOUT,10100)PMUPS(NB7,INDX)
7310100 FORMAT(' MICAP: CUMULATIVE UPSCATTER DIST. DOES NOT END ',
74 + 'IN 1.0 IN THRSEL',E12.4)
75 PRINT *,' CALOR: ERROR in MICAP ====> STOP '
76 STOP
77 140 IF(IB.EQ.1)GO TO 150
78 DELE=(PMUPS(IB,INDX)-R)/(PMUPS(IB,INDX)-PMUPS(IB-1,INDX))
79 ABETA=DELE*(BETA(IB-1)-BETA(IB))+BETA(IB)
80 GO TO 160
81 150 WRITE(IOUT,10200)PMUPS(1,INDX)
8210200 FORMAT(' MICAP: CUMULATIVE UPSCATTER DIST. DOES NOT BEGIN ',
83 + 'AT 0.0 IN THRSEL',E12.4)
84 PRINT *,' CALOR: ERROR in MICAP ====> STOP '
85 STOP
86 160 ABETA2(I)=ABETA
87 INDX=INDX-1
88 170 CONTINUE
89 ABETA=DELEN*ABETA2(2)+(1.0-DELEN)*ABETA2(1)
90 EOUT=E+TDK*ABETA
91C SELECT ANGLE
92 180 AMAX=(EOUT+E+2.0*SQRT(E*EOUT))/(AAWR*TDK)
93 AMIN=(EOUT+E-2.0*SQRT(E*EOUT))/(AAWR*TDK)
94 DO 190 IA=1,NP7
95 IF(AMAX.LT.ALPHA(IA))GO TO 200
96 190 CONTINUE
97 IA=NP7
98 DELA=0.0
99 GO TO 210
100 200 DELA=(ALPHA(IA)-AMAX)/(ALPHA(IA)-ALPHA(IA-1))
101 210 F4=DELE*(F(IA,IB-1)-F(IA,IB))+F(IA,IB)
102 F3=DELE*(F(IA-1,IB-1)-F(IA-1,IB))+F(IA-1,IB)
103 F2=DELA*(F3-F4)+F4
104 DO 220 IA=1,NP7
105 IF(AMIN.LT.ALPHA(IA))GO TO 230
106 220 CONTINUE
107 IA=NP7
108 DELA=0.0
109 GO TO 240
110 230 DELA=(ALPHA(IA)-AMIN)/(ALPHA(IA)-ALPHA(IA-1))
111 240 F4=DELE*(F(IA,IB-1)-F(IA,IB))+F(IA,IB)
112 F3=DELE*(F(IA-1,IB-1)-F(IA-1,IB))+F(IA-1,IB)
113 F1=DELA*(F3-F4)+F4
114 R=FLTRNF(0)
115 F0=R*F2+(1.0-R)*F1
116 F1=0.0
117 DO 250 IA=1,NP7
118 F2=DELE*(F(IA,IB-1)-F(IA,IB))+F(IA,IB)
119 IF(F0.LE.F2)GO TO 260
120 F1=F2
121 250 CONTINUE
122 260 IF(F1.EQ.F2)GO TO 270
123 DELA=(F2-F0)/(F2-F1)
124 GO TO 280
125 270 ALP=ALPHA(IA)
126 GO TO 290
127 280 ALP=DELA*ALPHA(IA-1)+(1.0-DELA)*ALPHA(IA)
128 290 FM=(E+EOUT-ALP*AAWR*TDK)/(2.0*SQRT(E*EOUT))
129 IF(ABS(FM).LE.1.0)RETURN
130 WRITE(IOUT,10300)FM,E,EOUT,R,IA,IB
13110300 FORMAT(' MICAP: ERROR IN THRSEL, COSINE OF ANGLE >1'/,
132 +' ',1P4E12.4,2I11)
133 FM=2.0*FLTRNF(0)-1.0
134 RETURN
135 END