--- /dev/null
+*
+* $Id$
+*
+* $Log$
+* Revision 1.1.1.1 1995/10/24 10:21:39 cernlib
+* Geant
+*
+*
+#include "geant321/pilot.h"
+*CMZ : 3.21/02 29/03/94 15.41.25 by S.Giani
+*-- Author :
+ FUNCTION GSTREN (GAMMA,ECUT,STEP)
+C. ******************************************************************
+C. * *
+C. * Simulation of energy loss straggling in thin layers. *
+C. * Sampling is done from the tables which are prepared *
+C. * in GSTINI. *
+C. * *
+C. * ==> Called by : GTELEC, GTHADR, GTMUON *
+C. * Authors : K. Lassila-Perini, I. Gavrilenko *
+C. * *
+C. ******************************************************************
+#include "geant321/gcbank.inc"
+#include "geant321/gcjloc.inc"
+#include "geant321/gcmate.inc"
+#include "geant321/gcstra.inc"
+C
+ DIMENSION ANGL(200),RNDM(2)
+C...
+* Reading the tables, if the medium has not changed
+ NP = Q(JTSTRA+1)
+*
+ EC = 1.E9*ECUT
+ GSTLOC = 0.
+ IF(STEP.LE.0.) GO TO 90
+C...
+* Interpolate the tables for the current gamma-factor
+ GAML = LOG(GAMMA)
+ IF(GAML.GT.GAMLOG(21)) THEN
+ DO 10 J=1,NP
+ ANGL(J)=Q(JTSTCO+J*21)
+ 10 CONTINUE
+ ELSE
+C...
+ DO 20 I = 2,21
+ IF(GAML.LE.GAMLOG(I)) THEN
+ DGG = (GAML-GAMLOG(I-1))/(GAMLOG(I)-GAMLOG(I-1))
+ IP=I
+ GO TO 30
+ ENDIF
+ 20 CONTINUE
+ 30 DG1=1.-DGG
+C...
+ DO 40 K = 1,NP
+ ANGL(K) = Q(JTSTCO+(K-1)*21+IP-1)*DG1+
+ + Q(JTSTCO+(K-1)*21+IP )*DGG
+ 40 CONTINUE
+ ENDIF
+*
+* The sampling from the tables
+ ANMIN = EXP(ANGL(NP))
+ ANMAX = EXP(ANGL( 1))
+*
+ DAN = ANMAX-ANMIN
+ AMU = DAN*STEP
+ CALL GPOISS(AMU,N,1)
+ NICOLL = MAX(N,1)
+ DO 80 I = 1,NICOLL
+ 50 K1 = 1
+ K2 = NP
+ CALL GRNDM(RNDM,1)
+ R = LOG(RNDM(1)*DAN+ANMIN)
+ 60 K = (K1+K2)/2
+ IF(R.GT.ANGL(K)) THEN
+ K2=K
+ ELSEIF(R.LT.ANGL(K)) THEN
+ K1=K
+ ELSE
+ E=Q(JTSTEN+K)
+ GOTO 70
+ ENDIF
+ IF(K2-K1.GT.1 ) GO TO 60
+*
+ E = Q(JTSTEN+K2)+(R-ANGL(K2))*
+ + (Q(JTSTEN+K1)-Q(JTSTEN+K2))/(ANGL(K1)-ANGL(K2))
+ 70 EE = EXP(E)
+ IF(EE.GT.EC) GO TO 50
+*
+* *** Total energy calculation
+ GSTLOC = GSTLOC+EE
+ 80 CONTINUE
+*
+ 90 GSTREN = GSTLOC*1.E-9
+ END