1 |
* |
2 |
* $Id: gfluct.F,v 3.1.1.1 2002/07/11 16:02:14 cafagna Exp $ |
3 |
* |
4 |
* $Log: gfluct.F,v $ |
5 |
* Revision 3.1.1.1 2002/07/11 16:02:14 cafagna |
6 |
* First GPAMELA release on CVS |
7 |
* |
8 |
* |
9 |
#if !defined(GPAMELA_NOGFLUCT) |
10 |
*CMZ : 3.00/00 22/12/2000 19.00.22 by Marialuigia Ambriola |
11 |
*CMZ : 2.01/00 06/03/2000 13.07.03 by Francesco Cafagna |
12 |
*CMZ : 2.00/00 03/03/2000 15.39.06 by Francesco Cafagna |
13 |
*CMZ : 1.02/00 18/03/97 18.25.28 by Francesco Cafagna |
14 |
*CMZ : 3.21/02 29/03/94 15.41.21 by S.Giani |
15 |
*-- Author : |
16 |
SUBROUTINE GFLUCT(DEMEAN,DE) |
17 |
C. |
18 |
C. ****************************************************************** |
19 |
C. * * |
20 |
C. * Subroutine to decide which method is used to simulate * |
21 |
C. * the straggling around the mean energy loss. * |
22 |
C. * * |
23 |
C. * * |
24 |
C. * DNMIN: <---------->1<-------->30<--------->50<---------> * |
25 |
C. * * |
26 |
C. * LOSS=2 : * |
27 |
C. * STRA=0 <----------GLANDZ-------------------><--GLANDO--> * |
28 |
C. * LOSS=1,3: * |
29 |
C. * STRA=0 <---------------------GLANDZ--------------------> * |
30 |
C. * * |
31 |
C. * STRA=1 <-----------PAI---------------------><--GLANDZ--> * |
32 |
#if defined(GPAMELA_ASHO) |
33 |
C. * STRA=2 <---PAI----><---ASHO---><----PAI----><--GLANDZ--> * |
34 |
C. * * |
35 |
#endif |
36 |
C. * SSTR=1: Silicon straggling, gaussian straggling * |
37 |
C. * * |
38 |
C. * DNMIN : an estimation of the number of collisions * |
39 |
C. * with energy close to the ionization energy * |
40 |
C. * (see PHYS333) * |
41 |
C. * * |
42 |
C. * Input : DEMEAN (mean energy loss) * |
43 |
C. * Output : DE (energy loss in the current step) * |
44 |
C. * * |
45 |
C. * ==>Called by : GTELEC,GTMUON,GTHADR * |
46 |
C. * * |
47 |
C. ****************************************************************** |
48 |
C. |
49 |
#include "gcbank.inc" |
50 |
#include "gcjloc.inc" |
51 |
#include "gconsp.inc" |
52 |
#include "gcmate.inc" |
53 |
#include "gccuts.inc" |
54 |
#include "gckine.inc" |
55 |
#include "gcmulo.inc" |
56 |
#include "gcphys.inc" |
57 |
#include "gctrak.inc" |
58 |
* |
59 |
* |
60 |
* *** VARIABLE FOR SILICON STRAGGLING |
61 |
#include "gpkey.inc" |
62 |
#include "gppmat.inc" |
63 |
INTEGER NMAT,NWNMAT |
64 |
CHARACTER*20 CHNMAT, |
65 |
REAL ANMAT,ZNMAT,DNMAT,RNMAT,ABNMAT,UBNMAT(NWMMAT),GRNDM0,GPGAUS |
66 |
* |
67 |
PARAMETER (EULER=0.577215,GAM1=EULER-1) |
68 |
PARAMETER (P1=.60715,P2=.67794,P3=.52382E-1,P4=.94753, |
69 |
+ P5=.74442,P6=1.1934) |
70 |
PARAMETER (DGEV=0.153536 E-3, DNLIM=50) |
71 |
#if defined(GPAMELA_ASHO) |
72 |
PARAMETER (ASHMIN=1,ASHMAX=30) |
73 |
#endif |
74 |
DIMENSION RNDM(2) |
75 |
FLAND(X) = P1+P6*X+(P2+P3*X)*EXP(P4*X+P5) |
76 |
* |
77 |
IF(STEP.LE.0) THEN |
78 |
DE=DEMEAN |
79 |
ELSE |
80 |
DEDX = DEMEAN/STEP |
81 |
POTI=Q(JPROB+9) |
82 |
IF(ISTRA.EQ.0.AND.ILOSS.NE.2) THEN |
83 |
CALL GLANDZ(Z,STEP,VECT(7),GETOT,DEDX,DE,POTI,Q(JPROB+10)) |
84 |
ELSE |
85 |
* |
86 |
* *** mean ionization potential (GeV) |
87 |
* POTI=16E-9*Z**0.9 |
88 |
* |
89 |
GAMMA = GETOT/AMASS |
90 |
BETA = VECT(7)/GETOT |
91 |
BET2 = BETA**2 |
92 |
* |
93 |
* *** low energy transfer |
94 |
XI = DGEV*CHARGE**2*STEP*DENS*Z/(A*BET2) |
95 |
* |
96 |
* *** regime |
97 |
* *** ISTRA = 1 --> PAI + URBAN |
98 |
#if defined(GPAMELA_ASHO) |
99 |
* *** ISTRA = 2 --> PAI + URBAN + ASHO |
100 |
#endif |
101 |
DNMIN = MIN(XI,DEMEAN)/POTI |
102 |
* |
103 |
IF (ISTRA.EQ.0) THEN |
104 |
IF(DNMIN.GE.DNLIM) THEN |
105 |
* |
106 |
* Energy straggling using Gaussian, Landau & Vavilov theories. |
107 |
* |
108 |
* STEP = current step-length (cm) |
109 |
* |
110 |
* DELAND = DE/DX - <DE/DX> (GeV) |
111 |
* |
112 |
* Author : G.N. Patrick |
113 |
* |
114 |
IF(STEP.LT.1.E-7)THEN |
115 |
DELAND=0. |
116 |
ELSE |
117 |
* |
118 |
* Maximum energy transfer to atomic electron (GeV). |
119 |
ETA = BETA*GAMMA |
120 |
RATIO = EMASS/AMASS |
121 |
* |
122 |
* Calculate Kappa significance ratio. |
123 |
* EMAX=(2*EMASS*ETA**2)/(1+2*RATIO*GAMMA+RATIO**2) |
124 |
* CAPPA = XI/EMAX |
125 |
CAPPA = XI*(1+2*RATIO*GAMMA+RATIO**2)/(2*EMASS* |
126 |
+ ETA**2) |
127 |
IF (CAPPA.GE.10.) THEN |
128 |
* |
129 |
* +-----------------------------------+ |
130 |
* I Sample from Gaussian distribution I |
131 |
* +-----------------------------------+ |
132 |
SIGMA = XI*SQRT((1.-0.5*BET2)/CAPPA) |
133 |
CALL GRNDM(RNDM,2) |
134 |
F1 = -2.*LOG(RNDM(1)) |
135 |
DELAND = SIGMA*SQRT(F1)*COS(TWOPI*RNDM(2)) |
136 |
ELSE |
137 |
XMEAN = -BET2-LOG(CAPPA)+GAM1 |
138 |
IF (CAPPA.LT.0.01) THEN |
139 |
XLAMX = FLAND(XMEAN) |
140 |
* +---------------------------------------------------------------+ |
141 |
* I Sample lambda variable from Kolbig/Schorr Landau distribution I |
142 |
* +---------------------------------------------------------------+ |
143 |
* 10 CALL GRNDM(RNDM,1) |
144 |
* IF( RNDM(1) .GT. 0.980 ) GO TO 10 |
145 |
* XLAMB = GLANDR(RNDM(1)) |
146 |
* +---------------------------------------------------------------+ |
147 |
* I Sample lambda variable from James/Hancock Landau distribution I |
148 |
* +---------------------------------------------------------------+ |
149 |
10 CALL GLANDG(XLAMB) |
150 |
IF(XLAMB.GT.XLAMX) GO TO 10 |
151 |
ELSE |
152 |
* +---------------------------------------------------------+ |
153 |
* I Sample lambda variable (Landau not Vavilov) from I |
154 |
* I Rotondi&Montagna&Kolbig Vavilov distribution I |
155 |
* +---------------------------------------------------------+ |
156 |
CALL GRNDM(RNDM,1) |
157 |
XLAMB = GVAVIV(CAPPA,BET2,RNDM(1)) |
158 |
ENDIF |
159 |
* |
160 |
* Calculate DE/DX - <DE/DX> |
161 |
DELAND = XI*(XLAMB-XMEAN) |
162 |
ENDIF |
163 |
ENDIF |
164 |
DE = DEMEAN + DELAND |
165 |
ELSE |
166 |
CALL GLANDZ(Z,STEP,VECT(7),GETOT,DEDX,DE,POTI, |
167 |
+ Q(JPROB+ 10)) |
168 |
ENDIF |
169 |
ELSE IF (ISTRA.LE.2) THEN |
170 |
IF(DNMIN.GE.DNLIM) THEN |
171 |
CALL GLANDZ(Z,STEP,VECT(7),GETOT,DEDX,DE,POTI, |
172 |
+ Q(JPROB+ 10)) |
173 |
ELSE |
174 |
NMEC = NMEC+1 |
175 |
LMEC(NMEC)=109 |
176 |
#if defined(GPAMELA_ASHO) |
177 |
IF (DNMIN.GE.ASHMIN.AND.DNMIN.LT.ASHMAX .AND.ISTRA.EQ |
178 |
+ .2) THEN |
179 |
CALL GASHO(VECT(7),AMASS,STEP,DE) |
180 |
ELSE |
181 |
DE = GSTREN(GAMMA,DCUTE,STEP) |
182 |
ENDIF |
183 |
#endif |
184 |
#if !defined(GPAMELA_ASHO) |
185 |
DE = GSTREN(GAMMA,DCUTE,STEP) |
186 |
#endif |
187 |
* |
188 |
* *** Add brem losses to ionisation |
189 |
IF(ITRTYP.EQ.2) THEN |
190 |
JBASE = LQ(JMA-1)+2*NEK1+IEKBIN |
191 |
DE = DE +(1.-GEKRAT)*Q(JBASE)+GEKRAT*Q(JBASE+1) |
192 |
ELSEIF(ITRTYP.EQ.5) THEN |
193 |
JBASE = LQ(JMA-2)+NEK1+IEKBIN |
194 |
DE = DE +(1.-GEKRAT)*Q(JBASE)+GEKRAT*Q(JBASE+1) |
195 |
ENDIF |
196 |
ENDIF |
197 |
ENDIF |
198 |
ENDIF |
199 |
* |
200 |
* *** Add straggling specifically for Silicon By P.Papini and F.S.Cafagna |
201 |
* |
202 |
* change in de/dx with gaussian convolution |
203 |
* see Hall paper: NIM 220 (1984) 356. |
204 |
* |
205 |
IF(ISSTR.EQ.1) THEN |
206 |
* |
207 |
* *** First of all get a look to the DELTA2 and SIGMA2 parameter |
208 |
|
209 |
CALL GFMATE(NMAT,CHNMAT,ANMAT,ZNMAT,DNMAT,RNMAT,ABNMAT, |
210 |
+ UBNMAT,NWNMAT) |
211 |
* |
212 |
* *** Save user infos |
213 |
DELTA2 = UBNMAT(1) |
214 |
SIGMA2 = DELTA2*STEP |
215 |
GRNDM0 = GPGAUS(0.) |
216 |
* Gaussian energy spread... |
217 |
* Delta is in GeV^2/cm |
218 |
DE = DE + GRNDM0 * SQRT(SIGMA2) |
219 |
ENDIF |
220 |
ENDIF |
221 |
* |
222 |
END |