Import Geant4 6.2.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 10:56:29 +02:00
parent 1d812b78b1
commit e083ffb441
1415 changed files with 111223 additions and 21207 deletions
@@ -0,0 +1,44 @@
photonprocesses is the geant3 equivalent of PhotonProcesses
% cd geant3
% gmakeB to make an executable (Batch version)
% gmakeT to make an executable (inTeractive version)
To execute:
% cd geant3
% $G4SYSTEM/photonprocesses.xb (for batch) or photonprocesses.xt (for interactive)
The program will ask:
G3 > gives the filename of the data cards to be read:
myMacro.dat (myMacro.dat is the equivalent of the G4 myMacro.mac)
data cards
----------
Most of the data cards used in xxxx.dat are standard data cards of GEANT3,
but some of them are defined in testem5:
KEY VARIABLE/type Short description
FILE fileName (character) fileName of the histos
(the FILE data card should be the
first, with the format A4,A2,A25)
DETECTOR MAT (integer) mat.number of the absorber
THICK (real) X thickness of the absorber
histograms
----------
The list of built-in histograms is identical to TestEm5.cc
(see G4 README or histo.F)
One can control the binning of the histograms with the data card:
*HISTO id1 nbBins valMin valMax valUnit
*HISTO id2 nbBins valMin valMax valUnit
... etc ...........
valMin and ValMax are given in the desired unit, whose numerical value must
be specified in valUnit. Remember that Geant3 defaults are: GeV, cm, rad.
@@ -0,0 +1,18 @@
FILE allprocesses.paw
LIST
C
C Photon Processes; gamma 1 MeV
C
DETECTOR 3 (Water) 10000. (cm)
KINE 1 (gamma) 0.001 (GeV)
C
PHOT 1
COMP 1
PAIR 1
C
CUTS 10.e-6 (cutgam) 10.e-6 (cutele)
C
SWIT 0 (draw)
DEBUG 10 5 10000
C
TRIG 100000
@@ -0,0 +1,23 @@
FILE compton.paw
LIST
C
C Photon 300 keV; compton
C
DETECTOR 5 (Aluminium) 10000. (cm)
KINE 1 (gamma) 300.e-6 (GeV)
C
*HISTO 1 (id) 100 (nbins) 0. (Emin) 300. (Emax) 1.e-6 (keV)
*HISTO 2 (id) 200 (nbins) -1. (cost1) +1. (cost2)
*HISTO 3 (id) 100 (nbins) 0. (Emin) 300. (Emax) 1.e-6 (keV)
*HISTO 4 (id) 200 (nbins) -1. (cost1) +1. (cost2)
C
PHOT 0
COMP 1
PAIR 0
C
CUTS 10.e-6 (cutgam) 10.e-6 (cutele)
C
SWIT 0 (draw)
DEBUG 10 5 10000
C
TRIG 100000
@@ -0,0 +1,21 @@
FILE conversion.paw
LIST
C
C Photon 100 MeV; gamma conversion to e+e-
C
DETECTOR 8 (Lead) 10000. (cm)
KINE 1 (gamma) 0.1 (GeV)
C
*HISTO 3 (id) 200 (nbins) 0. (Emin) 100. (Emax) 1.e-3 (MeV)
*HISTO 4 (id) 200 (nbins) 0. (cost1) +1. (cost2)
C
PHOT 0
COMP 0
PAIR 1
C
CUTS 10.e-6 (cutgam) 10.e-6 (cutele)
C
SWIT 0 (draw)
DEBUG 10 5 10000
C
TRIG 100000
@@ -0,0 +1,32 @@
#
# @(#) Script to build a Batch geant executable
#
set name=photonprocesses
set extnam=" "
if ($G4SYSTEM == AIX-AFS) set extnam=-qextname
#
mkdir $G4SYSTEM
cd $G4SYSTEM
#
# fortran compilation
#
hepf77 $extnam -c -g -Dbatch -I/cern/pro/include -I../include ../src/*.F
#
# Link
#
echo 'linking geant3+cernlib libraries ...'
#
hepf77 $extnam -g -o $name.xb *.o \
`cernlib geant321 pawlib graflib packlib mathlib kernlib`
#
#
chmod +x $name.xb
#
# cleanup
#
rm -f *.o
echo 'done'
exit
@@ -0,0 +1,31 @@
#
# @(#) Script to build an inTeractive geant executable
#
set name=photonprocesses
set extnam=" "
if ($G4SYSTEM == AIX-AFS) set extnam=-qextname
#
mkdir $G4SYSTEM
cd $G4SYSTEM
#
# fortran compilation
#
hepf77 $extnam -c -g -I/cern/pro/include -I../include ../src/*.F
#
# Link
#
echo 'linking geant3+cernlib libraries...'
#
hepf77 $extnam -g -o $name.xt *.o \
`cernlib geant321 pawlib graflib packlib mathlib kernlib`
#
#
chmod +x $name.xt
#
# cleanup
#
rm -f *.o
echo 'done'
exit
@@ -0,0 +1,6 @@
COMMON/DETECTOR/Imat,BoxSize
*
* Imat = GEANT material number. (data card DETECTOR)
* BoxSize = total size of the box (cm) (data card DETECTOR)
*
@@ -0,0 +1,8 @@
CHARACTER*25 fileName
COMMON/HISTO1/fileName
COMMON/HISTO2/idhist,nbBins,valmin,valmax,valunit
PARAMETER (MaxHist = 6)
LOGICAL histo
COMMON/HISTO3/histo(MaxHist),histUnit(MaxHist),binWidth(MaxHist)
@@ -0,0 +1,2 @@
COMMON/PROCESS/nbCall(12),sumTrak,sumTrak2
@@ -0,0 +1,11 @@
SUBROUTINE FFUSER(ikey)
*
* The routine is called when a *key card is read
*
CHARACTER*4 keyw
*
call UHTOC(ikey,4,keyw,4)
if (keyw.eq.'HIST') call uhinit
*
END
@@ -0,0 +1,267 @@
SUBROUTINE GTGAMA
C.
C. ******************************************************************
C. * *
C. * Photon track. Computes step size and propagates particle *
C. * through step. *
C. * *
C. * ==>Called by : GTRACK *
C. * Authors R.Brun, F.Bruyant L.Urban ******** *
C. * *
C. ******************************************************************
C.
#include "geant321/gcbank.inc"
#include "geant321/gccuts.inc"
#include "geant321/gcjloc.inc"
#include "geant321/gconsp.inc"
#include "geant321/gcphys.inc"
#include "geant321/gcstak.inc"
#include "geant321/gctmed.inc"
#include "geant321/gcmulo.inc"
#include "geant321/gctrak.inc"
#include "geant321/gcunit.inc"
PARAMETER (EPSMAC=1.E-6)
DOUBLE PRECISION ONE,XCOEF1,XCOEF2,XCOEF3,ZERO
PARAMETER (ONE=1,ZERO=0)
PARAMETER (EPCUT=1.022E-3)
C.
*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IABAN = NINT(DPHYS1)
*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
C. ------------------------------------------------------------------
*
* *** Particle below energy threshold ? Short circuit
*
*
IF (GEKIN.LE.CUTGAM) GOTO 998
*
* *** Update local pointers if medium has changed
*
IF(IUPD.EQ.0)THEN
IUPD = 1
JPHOT = LQ(JMA-6)
JCOMP = LQ(JMA-8)
JPAIR = LQ(JMA-10)
JPFIS = LQ(JMA-12)
JRAYL = LQ(JMA-13)
ENDIF
*
* *** Compute current step size
*
IPROC = 103
STEP = STEMAX
GEKRT1 = 1 .-GEKRAT
*
* ** Step limitation due to pair production ?
*
IF (GETOT.GT.EPCUT) THEN
IF (IPAIR.GT.0) THEN
STEPPA = GEKRT1*Q(JPAIR+IEKBIN) +GEKRAT*Q(JPAIR+IEKBIN+1)
SPAIR = STEPPA*ZINTPA
IF (SPAIR.LT.STEP) THEN
STEP = SPAIR
IPROC = 6
ENDIF
ENDIF
ENDIF
*
* ** Step limitation due to Compton scattering ?
*
IF (ICOMP.GT.0) THEN
STEPCO = GEKRT1*Q(JCOMP+IEKBIN) +GEKRAT*Q(JCOMP+IEKBIN+1)
SCOMP = STEPCO*ZINTCO
IF (SCOMP.LT.STEP) THEN
STEP = SCOMP
IPROC = 7
ENDIF
ENDIF
*
* ** Step limitation due to photo-electric effect ?
*
IF (GEKIN.LT.0.4) THEN
IF (IPHOT.GT.0) THEN
STEPPH = GEKRT1*Q(JPHOT+IEKBIN) +GEKRAT*Q(JPHOT+IEKBIN+1)
SPHOT = STEPPH*ZINTPH
IF (SPHOT.LT.STEP) THEN
STEP = SPHOT
IPROC = 8
ENDIF
ENDIF
ENDIF
*
* ** Step limitation due to photo-fission ?
*
IF (JPFIS.GT.0) THEN
STEPPF = GEKRT1*Q(JPFIS+IEKBIN) +GEKRAT*Q(JPFIS+IEKBIN+1)
SPFIS = STEPPF*ZINTPF
IF (SPFIS.LT.STEP) THEN
STEP = SPFIS
IPROC = 23
ENDIF
ENDIF
*
* ** Step limitation due to Rayleigh scattering ?
*
IF (IRAYL.GT.0) THEN
IF (GEKIN.LT.0.01) THEN
STEPRA = GEKRT1*Q(JRAYL+IEKBIN) +GEKRAT*Q(JRAYL+IEKBIN+1)
SRAYL = STEPRA*ZINTRA
IF (SRAYL.LT.STEP) THEN
STEP = SRAYL
IPROC = 25
ENDIF
ENDIF
ENDIF
*
IF (STEP.LT.0.) STEP = 0.
*
* ** Step limitation due to geometry ?
*
IF (STEP.GE.SAFETY) THEN
CALL GTNEXT
IF (IGNEXT.NE.0) THEN
STEP = SNEXT + PREC
INWVOL= 2
IPROC = 0
NMEC = 1
LMEC(1)=1
ENDIF
*
* Update SAFETY in stack companions, if any
IF (IQ(JSTAK+3).NE.0) THEN
DO 10 IST = IQ(JSTAK+3),IQ(JSTAK+1)
JST = JSTAK +3 +(IST-1)*NWSTAK
Q(JST+11) = SAFETY
10 CONTINUE
IQ(JSTAK+3) = 0
ENDIF
*
ELSE
IQ(JSTAK+3) = 0
ENDIF
*
* *** Linear transport
*
IF (INWVOL.EQ.2) THEN
DO 20 I = 1,3
VECTMP = VECT(I) +STEP*VECT(I+3)
IF(VECTMP.EQ.VECT(I)) THEN
*
* *** Correct for machine precision
*
IF(VECT(I+3).NE.0.) THEN
VECTMP = VECT(I)+ABS(VECT(I))*SIGN(1.,VECT(I+3))*
+ EPSMAC
IF(NMEC.GT.0) THEN
IF(LMEC(NMEC).EQ.104) NMEC=NMEC-1
ENDIF
NMEC=NMEC+1
LMEC(NMEC)=104
#ifdef G3DEBUG
WRITE(CHMAIL, 10000)
CALL GMAIL(0,0)
WRITE(CHMAIL, 10100) GEKIN, NUMED, STEP, SNEXT
CALL GMAIL(0,0)
10000 FORMAT(' Boundary correction in GTGAMA: ',
+ ' GEKIN NUMED STEP SNEXT')
10100 FORMAT(31X,E10.3,1X,I10,1X,E10.3,1X,E10.3,1X)
#endif
ENDIF
ENDIF
VECT(I) = VECTMP
20 CONTINUE
ELSE
DO 30 I = 1,3
VECT(I) = VECT(I) +STEP*VECT(I+3)
30 CONTINUE
ENDIF
*
SLENG = SLENG +STEP
*
* *** Update time of flight
*
TOFG = TOFG +STEP/CLIGHT
*
* *** Update interaction probabilities
*
IF (GETOT.GT.EPCUT) THEN
IF (IPAIR.GT.0) ZINTPA = ZINTPA -STEP/STEPPA
ENDIF
IF (ICOMP.GT.0) ZINTCO = ZINTCO -STEP/STEPCO
IF (GEKIN.LT.0.4) THEN
IF (IPHOT.GT.0) ZINTPH = ZINTPH -STEP/STEPPH
ENDIF
IF (JPFIS.GT.0) ZINTPF = ZINTPF -STEP/STEPPF
IF (IRAYL.GT.0) THEN
IF (GEKIN.LT.0.01) ZINTRA = ZINTRA -STEP/STEPRA
ENDIF
*
IF (IPROC.EQ.0) GO TO 999
NMEC = 1
LMEC(1) = IPROC
*
* ** Pair production ?
*
IF (IPROC.EQ.6) THEN
CALL GPAIRG
*
* ** Compton scattering ?
*
ELSE IF (IPROC.EQ.7) THEN
CALL GCOMP
*
* ** Photo-electric effect ?
*
ELSE IF (IPROC.EQ.8) THEN
*
IF ((IABAN.NE.0).AND.(GEKIN.LE.0.001)) THEN
* Calculate range of the photoelectron ( with kin. energy Ephot)
JCOEF = LQ(JMA-17)
IF(GEKRAT.LT.0.7) THEN
I1 = MAX(IEKBIN-1,1)
ELSE
I1 = MIN(IEKBIN,NEKBIN-1)
ENDIF
I1 = 3*(I1-1)+1
XCOEF1 = Q(JCOEF+I1)
XCOEF2 = Q(JCOEF+I1+1)
XCOEF3 = Q(JCOEF+I1+2)
IF(XCOEF1.NE.0.) THEN
STOPMX = -XCOEF2+SIGN(ONE,XCOEF1)*SQRT(XCOEF2**2 - (XCOEF3-
+ GEKIN/XCOEF1))
ELSE
STOPMX = - (XCOEF3-GEKIN)/XCOEF2
ENDIF
*
* DO NOT call GPHOT if this (overestimated) range is smaller
* than SAFETY
*
IF (STOPMX.LE.SAFETY) GOTO 998
ENDIF
CALL GPHOT
*
* ** Rayleigh effect ?
*
ELSE IF (IPROC.EQ.25) THEN
CALL GRAYL
*
* ** Photo-fission ?
*
ELSE IF (IPROC.EQ.23) THEN
CALL GPFIS
*
ENDIF
*
GOTO 999
998 DESTEP = GEKIN
GEKIN = 0.
GETOT = 0.
VECT(7)= 0.
ISTOP = 2
NMEC = 1
LMEC(1)= 30
999 END
@@ -0,0 +1,40 @@
SUBROUTINE GUKINE
*
* Generates Kinematics for primary track
*
* Data card Kine : Itype Ekine
*
#include "geant321/gcbank.inc"
#include "geant321/gcflag.inc"
#include "geant321/gckine.inc"
*
#include "detector.inc"
*
DIMENSION vertex(3),Plab(3)
dimension rndm(2)
*
DATA vertex/3*0./
DATA Plab /3*0./
*
vertex(1) = -0.5*BoxSize
*
* random in YZ
beam = 0.4*BoxSize
call GRNDM (rndm,2)
*
vertex(2) = (2*rndm(1)-1.)*beam
vertex(3) = (2*rndm(2)-1.)*beam
*
CALL GSVERT(vertex,0,0,0,0,NVERT)
*
JPA = LQ(JPART-IKINE)
XMASS = Q(JPA+7)
Plab(1) = SQRT(PKINE(1)*(PKINE(1)+2*XMASS))
*
CALL GSKINE(Plab,IKINE,NVERT,0,0,NT)
*
* *** Kinematics debug
IF (IEVENT.EQ.1.OR.IDEBUG.NE.0) CALL GPRINT('KINE',0)
*
END
@@ -0,0 +1,18 @@
SUBROUTINE GUOUT
*
* User routine called at the end of each event
*
#include "geant321/gcflag.inc"
*
* *** drawing
*
#ifndef batch
IF (ISWIT(1).NE.0) THEN
CALL GDHEAD (110110,'PhotonProcesses',0.)
CALL GDSHOW (3)
CALL GDXYZ (0)
END IF
#endif
*
END
@@ -0,0 +1,67 @@
SUBROUTINE GUSTEP
*
* User routine called at the end of each tracking step
*
#include "geant321/gcflag.inc"
#include "geant321/gckine.inc"
#include "geant321/gcking.inc"
#include "geant321/gctrak.inc"
*
#include "process.inc"
#include "histo.inc"
*
character*20 cdum
*
* *** Debug event and store tracks for drawing
IF (IDEBUG.NE.0) CALL GPCXYZ
IF (IDEBUG.NE.0) CALL GPGKIN
IF ((ISWIT(1).EQ.1).AND.(CHARGE.NE.0.)) CALL GSXYZ
IF (ISWIT(1).EQ.2) CALL GSXYZ
*
* *** if no process: return
IF (NMEC.EQ.0) return
*
* *** count nb of invoked processes
DO IM = 1,NMEC
IPROC = LMEC(IM)
IF (IPROC.EQ.21) IPROC = 12
IF (IPROC.LE.12) NBCALL(IPROC) = NBCALL(IPROC)+1
ENDDO
*
* *** sum track length for photon processes
if ((iproc.eq.6).or.(iproc.eq.7).or.(iproc.eq.8)) then
sumTrak = sumTrak + sleng
sumTrak2 = sumTrak2 + sleng*sleng
endif
*
* *** plot final state
*
* scattered primary particle (if still alive)
if (istop.eq.0) then
id = 1
if (histo(id)) call hfill (id,gekin/histUnit(id),0.,1.)
id = 2
if (histo(id)) call hfill (id,vect(4),0.,1.)
endif
*
* *** secondaries
if (ngkine.gt.0) then
do lp = 1,ngkine
ipar = gkin(5,lp) + 0.1
call gfpart(ipar,cdum,ndum,gmass,gcharg,dum,dum,ndum)
ekin = gkin(4,lp) - gmass
pc = sqrt(gkin(1,lp)**2 + gkin(2,lp)**2 + gkin(3,lp)**2)
cost = gkin(1,lp)/pc
if (gcharg.ne.0.) id = 3
if (gcharg.eq.0.) id = 5
if (histo(id)) call hfill (id,ekin/histUnit(id),0.,1.)
id = id + 1
if (histo(id)) call hfill (id,cost,0.,1.)
enddo
endif
*
* *** stop the tracking
istop = 1
*
END
@@ -0,0 +1,61 @@
#ifdef batch
PROGRAM main
*
*
PARAMETER (NGBANK=100000, NHBOOK=10000)
COMMON/GCBANK/Q(NGBANK)
COMMON/PAWC /H(NHBOOK)
*
CALL GZEBRA( NGBANK)
CALL HLIMIT(-NHBOOK)
*
* *** initialize HIGZ
CALL HPLINT(0)
*
* *** GEANT initialisation
CALL UGINIT
*
* *** Start events processing
CALL GRUN
*
* *** End of RUN
CALL UGLAST
*
STOP
END
#else
PROGRAM main
*
* GEANT main program. To link with the MOTIF user interface
* the routine GPAWPP(NWGEAN,NWPAW) should be called, whereas
* the routine GPAW(NWGEAN,NWPAW) gives access to the basic
* graphics version.
*
PARAMETER (NWGEAN=3000000, NWPAW=1000000)
COMMON/GCBANK/GEANT(NWGEAN)
COMMON/PAWC /PAW (NWPAW)
*
*
CALL GPAW (NWGEAN,NWPAW)
*
END
*
SUBROUTINE qnext
END
*
SUBROUTINE czopen
END
*
SUBROUTINE cztcp
END
*
SUBROUTINE czclos
END
*
SUBROUTINE czputa
END
#endif
@@ -0,0 +1,74 @@
SUBROUTINE UGEOM
*
* *** Define user geometry set up
*
*
#include "detector.inc"
*
DIMENSION PAR(3)
DIMENSION Aair(2),Zair(2),Wair(2)
DIMENSION AH2O(2),ZH2O(2),WH2O(2)
*
* *** Air compound parameters
DATA Aair/14.01, 16.00/
DATA Zair/ 7. , 8. /
DATA Wair/ 0.7 , 0.3 /
*
* *** Air compound parameters
DATA AH2O/ 1.01, 16.00/
DATA ZH2O/ 1. , 8. /
DATA WH2O/ 2. , 1. /
*
* *** Defines USER perticular materials
CALL GSMIXT( 1,'Air' , Aair ,Zair, 1.29E-3, 2 , Wair)
CALL GSMATE( 2,'H2 Liquid', 1.01, 1., 0.0708 , 865., 790., 0,0)
CALL GSMIXT( 3,'Water' , AH2O ,ZH2O, 1.0 ,-2 , WH2O)
CALL GSMATE( 4,'Liquid Ar', 39.95, 18., 1.39 , 14.0, 84.0, 0,0)
CALL GSMATE( 5,'Aluminium', 26.98, 13., 2.7 , 8.9, 37.2, 0,0)
CALL GSMATE( 6,'Iron' , 55.85, 26., 7.87 , 1.76, 17.1, 0,0)
CALL GSMATE( 7,'Tungsten' ,183.85, 74., 19.30 , 0.35, 18.5, 0,0)
CALL GSMATE( 8,'Lead' ,207.19, 82., 11.35 , 0.56, 18.5, 0,0)
CALL GSMATE( 9,'Uranium' ,238.03, 92., 18.95 , 0.32, 12. , 0,0)
CALL GSMATE(10,'Germanium', 72.61, 32., 5.323 , 2.30, 16.6, 0,0)
*
* *** Defines USER tracking media parameters
IFIELD = 0
FIELDM = 0.
TMAXFD = 10.0
STEMAX = 1000.
DEEMAX = 0.20
EPSIL = 0.001
STMIN = 0.010
*
CALL GSTMED( 1,'Container',Imat, 0 ,IFIELD,FIELDM,TMAXFD,
* STEMAX,DEEMAX,EPSIL,STMIN, 0 , 0 )
*
*
* *** Geometry
PAR(1) = BoxSize/2.
PAR(2) = BoxSize/2.
PAR(3) = BoxSize/2.
CALL GSVOLU('aBox','BOX ',1,PAR,3,IVOL)
*
* *** Close geometry banks. (obligatory system routine)
CALL GGCLOS
*
*
* *** dessin
CALL GSATT ('*','SEEN',1)
*
DO IX = 1,3
CALL GDOPEN (IX)
SCALE = 18./BoxSize
PAXIS = 0.
SAXIS = 0.1*BoxSize
CALL GDRAWC ('aBox',IX,0.,10.,9.3,SCALE,SCALE)
CALL GDAXIS (PAXIS,PAXIS,PAXIS,SAXIS)
CALL GDSCAL (10. , 0.3)
CALL GDCLOS
END DO
*
END
@@ -0,0 +1,66 @@
SUBROUTINE UGINIT
*
* To initialise GEANT/USER program and read data cards
*
#include "detector.inc"
#include "process.inc"
#include "histo.inc"
*
CHARACTER*20 filnam
CHARACTER*4 key
CHARACTER*2 spaces
*
* *** Define the GEANT parameters
CALL GINIT
*
* histograms
do ih = 1,MaxHist
histo(ih) = .false.
enddo
*
* *** Detector definition
CALL FFKEY('DETECTOR',Imat,2,'MIXED')
*
* histograms
CALL FFKEY('HISTO',idhist,5,'MIXED')
*
* *** read data cards
PRINT *, 'G3 > gives the filename of the data cards to be read:'
READ (*,'(A)') filnam
IF (filnam.EQ.' ') filnam = 'allprocesses.dat'
OPEN (unit=5,file=filnam,status='unknown',form='formatted')
*
* filename should be 1st data card !
fileName = 'photonprocesses.paw'
READ(5,98)key,spaces,fileName
98 FORMAT(A4,A2,A25)
*
* *** read data cards
CALL GFFGO
*
write(6,99) fileName
99 FORMAT(/,15x,'histogram file --> Name: ',A25)
*
CALL GZINIT
CALL GPART
*
CALL GDINIT
*
* *** Geometry and materials description
CALL UGEOM
*
* *** Energy loss and cross-sections initialisations
CALL GPHYSI
*
CALL GPRINT('MATE',0)
CALL GPRINT('TMED',0)
CALL GPRINT('VOLU',0)
*
* *** initialisation of /process/
CALL VZERO (nbCall,12)
sumTrak = 0.
sumTrak2 = 0.
*
END
@@ -0,0 +1,63 @@
SUBROUTINE UGLAST
*
* Termination routine to print histograms and statistics
*
#include "geant321/gcflag.inc"
#include "geant321/gckine.inc"
#include "geant321/gctrak.inc"
*
#include "detector.inc"
#include "process.inc"
#include "histo.inc"
*
character*20 material, particle
character*4 unit
real massMFP, massAC
*
* *** run conditions
call gfmate(Imat,material,dum,dum,density,dum,dum,dum,ndum)
call gfpart(Ikine,particle,ndum,dum,dum,dum,dum,ndum)
call gevkev(pkine(1),energy,unit)
PRINT 750, ievent,particle,energy,unit,boxSize,material,density
*
* *** frequency of processes call
CALL UCTOH('MUNU',NAMEC(12),4,4)
PRINT 760,(NAMEC(I),I=1,12)
PRINT 761,(NBCALL(I),I=1,12)
*
* *** compute mean free path and related quantities
nbProc = nbcall(6) + nbcall(7) + nbcall(8)
avTrak = sumTrak /nbProc
avTrak2 = sumTrak2/nbProc
rms = sqrt(abs(avTrak2 - avTrak*avTrak))
AtteCoef = 1./avTrak
*
massMFP = avTrak*density
massAC = 1./massMFP
print 770, avTrak,rms,massMFP,AtteCoef,massAC
*
* *** geant termination
CALL GLAST
*
* *** close HIGZ file
CALL HPLEND
*
* *** histograms
CALL HRPUT(0,fileName,'N')
*
* *** formats
*
750 FORMAT(/,1X,'The run consists of ',I7,1X,A8,' of ',F7.2,A4,
+ ' throught',F10.2,' cm of ',A8,' (density: ',F7.3,' g/cm3)')
760 FORMAT(/,1X,'Frequency of process calls: ',
+ /,1X,12A8)
761 FORMAT( 1X,12I8,/)
770 FORMAT(/,1X,'MeanFreePath: ',F12.5,' cm +- ',F12.5,' cm',
+ 5X,'massic: ',F12.5,' g/cm2',
+ /,1X,'AttenuationCoef: ',F12.5,' cm^-1 ',15X,
+ 5X,'massic: ',F12.5,' cm2/g',/)
*
END
@@ -0,0 +1,28 @@
SUBROUTINE UHINIT
*
*
#include "histo.inc"
*
CHARACTER*50 title(6)
*
data title /
1 'scattered primary particle: energy spectrum',
2 'scattered primary particle: costheta distribution',
3 'charged secondaries: energy spectrum',
4 'charged secondaries: costheta distribution',
5 'neutral secondaries: energy spectrum',
6 'neutral secondaries: costheta distribution' /
*
if (histo(idhist)) call hdelet(idhist)
*
vmin = valmin
vmax = valmax
call hbook1(idhist,title(idhist),nbBins,vmin,vmax,0.)
*
histo (idhist) = .true.
binWidth(idhist) = (valmax-valmin)/nbBins
if (valunit.le.0.) valunit = 1.
histUnit(idhist) = valunit
*
END