]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gphys/glando.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / gphys / glando.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:21:25 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.21 by S.Giani
11*-- Author :
12 SUBROUTINE GLANDO(IMODE,STEP,Z,A,RHO,P,E,XMASS,DE,IFLAG)
13C.
14C. ******************************************************************
15C. * *
16C. * *
17C. * GLANDO *
18C. * ------ *
19C. * *
20C. * Energy straggling using Gaussian, Landau & Vavilov theories. *
21C. * *
22C. * Input *
23C. * ----- *
24C. * IMODE = 3 Landau(RANLAN) sampling *
25C. * = 4 Landau(GENLAN) sampling *
26C. * = 5 Vavilov(DINVAV) sampling *
27C. * = 6 Gaussian sampling *
28C. * = 2 Automatic selection of relevant distribution *
29C. * *
30C. * STEP = current step-length (cm) *
31C. * *
32C. * Output *
33C. * ------ *
34C. * DE = DE/DX - <DE/DX> (GeV) *
35C. * *
36C. * IFLAG = 3 Landau(RANLAN) sampling used *
37C. * = 4 Landau(GENLAN) sampling used *
38C. * = 5 Vavilov(GVAVIV) sampling used *
39C. * = 6 Gaussian sampling used *
40C. * *
41C. * Warning *
42C. * ------- *
43C. * Only Landau sampling should be used since this has been well *
44C. * tested whereas both Vavilov and Gaussian sampling are being *
45C. * developed. *
46C. * *
47C. * Author : G.N. Patrick *
48C. * Date : 03.05.1985 *
49C. * Last update : 09.09.1985 *
50C. * *
51C. ******************************************************************
52C.
53 PARAMETER (EULER=0.577215)
54 PARAMETER (P1=.60715,P2=.67794,P3=.52382E-1,P4=.94753,
55 + P5=.74442,P6=1.1934)
56#include "geant321/gconsp.inc"
57 DIMENSION RNDM(2)
58 FLAND(X) = P1+P6*X+(P2+P3*X)*EXP(P4*X+P5)
59C.
60C. ------------------------------------------------------------------
61C.
62 IF(STEP.LT.1.E-7)THEN
63 DE=0.
64 IFLAG=0
65 RETURN
66 ENDIF
67C
68C Calculate xi factor (KeV).
69C
70 BETA = P/E
71 GAMMA = E/XMASS
72 XI = (153.5*Z*STEP*RHO)/(A*BETA*BETA)
73C
74C Maximum energy transfer to atomic electron (KeV).
75C
76 ETA = BETA*GAMMA
77 ETASQ = ETA*ETA
78 RATIO = EMASS/XMASS
79 F1 = 2.*EMASS*ETASQ
80 F2 = 1.+2.*RATIO*GAMMA+RATIO*RATIO
81 EMAX = F1*1.E+6/F2
82C
83C Calculate Kappa significance ratio.
84C
85 CAPPA = XI/EMAX
86C
87C Choose correct function if IMODE set to automatic selection.
88C
89 IMODEI = IMODE
90 IF (IMODEI.EQ.2) THEN
91 IF (CAPPA.LT.0.01) IMODEI = 4
92***** IF (CAPPA.GE.0.01.AND.CAPPA.LE.10.) IMODEI = 3
93 IF (CAPPA.GE.0.01.AND.CAPPA.LE.10.) IMODEI = 5
94 IF (CAPPA.GT.10.) IMODEI = 6
95 ENDIF
96C
97C +---------------------------------------------------------------+
98C I Sample lambda variable from Kolbig/Schorr Landau distribution I
99C +---------------------------------------------------------------+
100C
101 10 CONTINUE
102 IF (IMODEI.EQ.3) THEN
103 XMEAN = -BETA**2-LOG(XI/EMAX)+EULER-1.
104 XLAMX = FLAND(XMEAN)
105 20 CALL GRNDM(RNDM,1)
106 IF( RNDM(1) .GT. 0.980 ) GO TO 20
107 XLAMB = GLANDR(RNDM(1))
108 IF(XLAMB.GT.XLAMX) GO TO 20
109 IFLAG = 3
110C
111C +----------------------------------------------+
112C I Sample lambda variable from James & Hancock I
113C I Landau distribution I
114C +----------------------------------------------+
115C
116
117 ELSEIF (IMODEI.EQ.4) THEN
118 XMEAN = -BETA**2-LOG(XI/EMAX)+EULER-1.
119 XLAMX = FLAND(XMEAN)
120 25 CALL GLANDG(XLAMB)
121 IF(XLAMB.GT.XLAMX) GO TO 25
122 IFLAG = 4
123C
124C +---------------------------------------------------------+
125C I Sample lambda variable (Landau not Vavilov) from I
126C I Rotondi&Montagna&Kolbig Vavilov distribution I
127C +---------------------------------------------------------+
128C
129 ELSEIF (IMODEI.EQ.5) THEN
130C
131C Keep within computation bounds.
132C
133 RKA = CAPPA
134 BE2 = BETA*BETA
135 CALL GRNDM(RNDM,1)
136 XLAMB = GVAVIV(RKA,BE2,RNDM(1))
137 IFLAG = 5
138C
139C +-----------------------------------+
140C I Sample from Gaussian distribution I
141C +-----------------------------------+
142C
143 ELSEIF (IMODEI.EQ.6) THEN
144 SIGMA = XI*EMAX*(1.-(BETA*BETA/2.))
145 SIGMA = SQRT(SIGMA)
146 30 CALL GRNDM(RNDM,2)
147 IF(RNDM(1).LE.0.)GO TO 30
148 F1 = -2.*LOG(RNDM(1))
149 DEKEV = SIGMA*SQRT(F1)*COS(2.*PI*RNDM(2))
150 IFLAG = 6
151 GOTO 40
152 ENDIF
153C
154C Calculate DE/DX - <DE/DX>
155C
156 DEKEV = XI*(XLAMB+BETA*BETA+LOG(XI/EMAX)-EULER+1.)
157C
158 40 DE=DEKEV*1.E-6
159 END