5 * Revision 1.1.1.1 1995/10/24 10:21:24 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.21 by S.Giani
12 SUBROUTINE GFLUCT(DEMEAN,DE)
14 C. ******************************************************************
16 C. * Subroutine to decide which method is used to simulate *
17 C. * the straggling around the mean energy loss. *
20 C. * DNMIN: <---------->1<-------->30<--------->50<---------> *
23 C. * STRA=0 <----------GLANDZ-------------------><--GLANDO--> *
25 C. * STRA=0 <---------------------GLANDZ--------------------> *
27 C. * STRA=1 <-----------PAI---------------------><--GLANDZ--> *
28 #if defined(CERNLIB_ASHO)
29 C. * STRA=2 <---PAI----><---ASHO---><----PAI----><--GLANDZ--> *
33 C. * DNMIN : an estimation of the number of collisions *
34 C. * with energy close to the ionization energy *
37 C. * Input : DEMEAN (mean energy loss) *
38 C. * Output : DE (energy loss in the current step) *
40 C. * ==>Called by : GTELEC,GTMUON,GTHADR *
42 C. ******************************************************************
44 #include "geant321/gcbank.inc"
45 #include "geant321/gcjloc.inc"
46 #include "geant321/gconsp.inc"
47 #include "geant321/gcmate.inc"
48 #include "geant321/gccuts.inc"
49 #include "geant321/gckine.inc"
50 #include "geant321/gcmulo.inc"
51 #include "geant321/gcphys.inc"
52 #include "geant321/gctrak.inc"
54 PARAMETER (EULER=0.577215,GAM1=EULER-1)
55 PARAMETER (P1=.60715,P2=.67794,P3=.52382E-1,P4=.94753,
56 + P5=.74442,P6=1.1934)
57 PARAMETER (DGEV=0.153536 E-3, DNLIM=50)
58 #if defined(CERNLIB_ASHO)
59 PARAMETER (ASHMIN=1,ASHMAX=30)
62 FLAND(X) = P1+P6*X+(P2+P3*X)*EXP(P4*X+P5)
69 IF(ISTRA.EQ.0.AND.ILOSS.NE.2) THEN
70 CALL GLANDZ(Z,STEP,VECT(7),GETOT,DEDX,DE,POTI,Q(JPROB+10))
73 * *** mean ionization potential (GeV)
80 * *** low energy transfer
81 XI = DGEV*CHARGE**2*STEP*DENS*Z/(A*BET2)
84 * *** ISTRA = 1 --> PAI + URBAN
85 #if defined(CERNLIB_ASHO)
86 * *** ISTRA = 2 --> PAI + URBAN + ASHO
88 DNMIN = MIN(XI,DEMEAN)/POTI
91 IF(DNMIN.GE.DNLIM) THEN
93 * Energy straggling using Gaussian, Landau & Vavilov theories.
95 * STEP = current step-length (cm)
97 * DELAND = DE/DX - <DE/DX> (GeV)
99 * Author : G.N. Patrick
101 IF(STEP.LT.1.E-7)THEN
105 * Maximum energy transfer to atomic electron (GeV).
109 * Calculate Kappa significance ratio.
110 * EMAX=(2*EMASS*ETA**2)/(1+2*RATIO*GAMMA+RATIO**2)
112 CAPPA = XI*(1+2*RATIO*GAMMA+RATIO**2)/(2*EMASS*
114 IF (CAPPA.GE.10.) THEN
116 * +-----------------------------------+
117 * I Sample from Gaussian distribution I
118 * +-----------------------------------+
119 SIGMA = XI*SQRT((1.-0.5*BET2)/CAPPA)
121 F1 = -2.*LOG(RNDM(1))
122 DELAND = SIGMA*SQRT(F1)*COS(TWOPI*RNDM(2))
124 XMEAN = -BET2-LOG(CAPPA)+GAM1
125 IF (CAPPA.LT.0.01) THEN
127 * +---------------------------------------------------------------+
128 * I Sample lambda variable from Kolbig/Schorr Landau distribution I
129 * +---------------------------------------------------------------+
130 * 10 CALL GRNDM(RNDM,1)
131 * IF( RNDM(1) .GT. 0.980 ) GO TO 10
132 * XLAMB = GLANDR(RNDM(1))
133 * +---------------------------------------------------------------+
134 * I Sample lambda variable from James/Hancock Landau distribution I
135 * +---------------------------------------------------------------+
136 10 CALL GLANDG(XLAMB)
137 IF(XLAMB.GT.XLAMX) GO TO 10
139 * +---------------------------------------------------------+
140 * I Sample lambda variable (Landau not Vavilov) from I
141 * I Rotondi&Montagna&Kolbig Vavilov distribution I
142 * +---------------------------------------------------------+
144 XLAMB = GVAVIV(CAPPA,BET2,RNDM(1))
147 * Calculate DE/DX - <DE/DX>
148 DELAND = XI*(XLAMB-XMEAN)
153 CALL GLANDZ(Z,STEP,VECT(7),GETOT,DEDX,DE,POTI,
156 ELSE IF (ISTRA.LE.2) THEN
157 IF(DNMIN.GE.DNLIM) THEN
158 CALL GLANDZ(Z,STEP,VECT(7),GETOT,DEDX,DE,POTI,
163 #if defined(CERNLIB_ASHO)
164 IF (DNMIN.GE.ASHMIN.AND.DNMIN.LT.ASHMAX .AND.ISTRA.EQ
166 CALL GASHO(VECT(7),AMASS,STEP,DE)
168 DE = GSTREN(GAMMA,DCUTE,STEP)
171 #if !defined(CERNLIB_ASHO)
172 DE = GSTREN(GAMMA,DCUTE,STEP)
175 * *** Add brem losses to ionisation
177 JBASE = LQ(JMA-1)+2*NEK1+IEKBIN
178 DE = DE +(1.-GEKRAT)*Q(JBASE)+GEKRAT*Q(JBASE+1)
179 ELSEIF(ITRTYP.EQ.5) THEN
180 JBASE = LQ(JMA-2)+NEK1+IEKBIN
181 DE = DE +(1.-GEKRAT)*Q(JBASE)+GEKRAT*Q(JBASE+1)