Import Geant4 1.0.0 source tree
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
|
||||
testem3.cra is the geant3 equivalent of TestEm3
|
||||
|
||||
% cd geant3
|
||||
% gmakeB to make an executable (Batch version)
|
||||
% gmakeT to make an executable (inTeractive version)
|
||||
|
||||
To execute:
|
||||
|
||||
% cd geant3
|
||||
% $G4SYSTEM/testem3.xb (for batch) or testem1.xt (for interactive)
|
||||
|
||||
The program will ask:
|
||||
G3 > gives the filename of the data cards to be read:
|
||||
|
||||
run01.dat (runNN.dat is the equivalent of the G4 runNN.mac)
|
||||
|
||||
|
||||
testem3 produce an Ntuple which is saved as testem3.ntupl if ISWIT(2)=1
|
||||
|
||||
Content of this Ntuple:
|
||||
|
||||
EAbs0 = energy deposit in absorber(0) per event
|
||||
LAbs0 = charged track length in absorber(0) per event
|
||||
..........
|
||||
EAbsN = energy deposit in absorber(N) per event
|
||||
LAbsN = charged track length in absorber(N) per event
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
#
|
||||
# @(#) Script to build a Batch geant executable
|
||||
#
|
||||
set name=testem3
|
||||
|
||||
set extnam=" "
|
||||
if ($G4SYSTEM == AIX-xlC) set extnam=-qextname
|
||||
#
|
||||
mkdir $G4SYSTEM
|
||||
cd $G4SYSTEM
|
||||
#
|
||||
# Run patchy
|
||||
#
|
||||
cat > temp.cra << eocra
|
||||
+USE,batch.
|
||||
eocra
|
||||
cat ../$name.cra >> temp.cra
|
||||
#
|
||||
ypatchy - $name temp $name - $name :go
|
||||
rm temp.cra
|
||||
#
|
||||
# fortran compilation
|
||||
#
|
||||
fsplit $name.f
|
||||
rm $name.f
|
||||
hepf77 $extnam -c -g *.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 *.lis *.lst *.f *.o
|
||||
echo 'done'
|
||||
exit
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# @(#) Script to build an inTeractive geant executable
|
||||
#
|
||||
set name=testem3
|
||||
|
||||
set extnam=" "
|
||||
if ($G4SYSTEM == AIX-xlC) set extnam=-qextname
|
||||
#
|
||||
mkdir $G4SYSTEM
|
||||
cd $G4SYSTEM
|
||||
#
|
||||
# Run patchy
|
||||
#
|
||||
ypatchy - $name ../$name $name - $name :go
|
||||
#
|
||||
# fortran compilation
|
||||
#
|
||||
fsplit $name.f
|
||||
rm $name.f
|
||||
hepf77 $extnam -c -g *.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 *.lis *.lst *.f *.o
|
||||
echo 'done'
|
||||
exit
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
LIST
|
||||
C
|
||||
C Lead-liquidArgon 50 layers; electon 1 GeV
|
||||
C
|
||||
CALOR 2 (nbAbs) 50 (nbLay) 40. (calorYZ) 0. (field)
|
||||
MATE 8 (lead) 5 (larg)
|
||||
THICK 0.23(cm) 0.57 (cm)
|
||||
TRIG 1000
|
||||
KINE 3 (Itype) 1.0 (Ekine) 1000. (x0) 0. (y0) 0. (z0) 1. (ux) 0. (uy) 0. (uz)
|
||||
DEBUG 10 5 100
|
||||
SWIT 0 (draw) 1 (save)
|
||||
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
||||
2*10.0e-6 (bcute/m) 2*217.0e-6 (dcute/m)
|
||||
ABAN 0
|
||||
LOSS 1
|
||||
HADR 0
|
||||
TIME 2=1.
|
||||
@@ -0,0 +1,17 @@
|
||||
LIST
|
||||
C
|
||||
C Tungsten-Silicium 50 layers; electon 1 GeV
|
||||
C
|
||||
CALOR 2 (nbAbs) 50 (nbLay) 40. (calorYZ) 0. (field)
|
||||
MATE 11 (W) 10 (Si)
|
||||
THICK 0.20(cm) 0.03 (cm)
|
||||
TRIG 100
|
||||
KINE 3 (Itype) 1.0 (Ekine) 1000. (x0) 0. (y0) 0. (z0) 1. (ux) 0. (uy) 0. (uz)
|
||||
DEBUG 10 5 100
|
||||
SWIT 0 (draw) 1 (save)
|
||||
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
||||
2*10.0e-6 (bcute/m) 2*120.0e-6 (dcute/m)
|
||||
ABAN 0
|
||||
LOSS 1
|
||||
HADR 0
|
||||
TIME 2=1.
|
||||
@@ -0,0 +1,21 @@
|
||||
LIST
|
||||
C
|
||||
C Iron-Silicium 15 layers; electon 6, 8, 10, 12 GeV
|
||||
C
|
||||
C SICAPO Collaboration. CERN-PPE/91-218 Nov.91
|
||||
C NIM A332 (85-90) Feb.93
|
||||
C
|
||||
CALOR 2 (nbAbs) 15 (nbLay) 40. (calorYZ) 0. (field)
|
||||
MATE 7 (Fe) 10 (Si)
|
||||
THICK 2.308(cm) 0.04 (cm)
|
||||
TRIG 100
|
||||
KINE 3 (Itype) 6.0 (Ekine) 1000. (x0) 0. (y0) 0. (z0) 1. (ux) 0. (uy) 0. (uz)
|
||||
DEBUG 10 5 10
|
||||
SWIT 0 (draw) 0 (save)
|
||||
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
||||
2*10.0e-6 (bcute/m) 2*541.e-6 (dcute/m)
|
||||
C CUTS 10.0e-6 (cutgam) 541.e-6 (cutele)
|
||||
ABAN 0
|
||||
LOSS 1
|
||||
HADR 0
|
||||
TIME 2=1.
|
||||
@@ -0,0 +1,21 @@
|
||||
LIST
|
||||
C
|
||||
C Lead-Iron-Silicium 15 layers; electon 6, 8, 10, 12 GeV
|
||||
C
|
||||
C SICAPO Collaboration. CERN-PPE/91-218 Nov.91
|
||||
C NIM A332 (85-90) Feb.93
|
||||
C
|
||||
CALOR 3 (nbAbs) 15 (nbLay) 40. (calorYZ) 0. (field)
|
||||
MATE 8 (pb) 7 (Fe) 10 (Si)
|
||||
THICK 1.3 (cm) 1.008 (cm) 0.04 (cm)
|
||||
TRIG 100
|
||||
KINE 3 (Itype) 6.0 (Ekine) 1000. (x0) 0. (y0) 0. (z0) 1. (ux) 0. (uy) 0. (uz)
|
||||
DEBUG 10 5 10
|
||||
SWIT 0 (draw) 0 (save)
|
||||
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
||||
2*10.0e-6 (bcute/m) 2*541.e-6 (dcute/m)
|
||||
C CUTS 10.0e-6 (cutgam) 541.e-6 (cutele)
|
||||
ABAN 0
|
||||
LOSS 1
|
||||
HADR 0
|
||||
TIME 2=1.
|
||||
@@ -0,0 +1,20 @@
|
||||
LIST
|
||||
C
|
||||
C Lead-Silicium 10 layers; electon 2, 4, 6 GeV
|
||||
C
|
||||
C SICAPO Collaboration. NIM A345 (244-249) Oct.93
|
||||
C
|
||||
CALOR 4 (nbAbs) 10 (nbLay) 16. (calorYZ) 0. (field)
|
||||
MATE 8 (pb) 12 (G10) 10 (Si) 12 (G10)
|
||||
THICK 1.9 (cm) 0.02 (cm) 0.04 (cm) 0.1 (cm)
|
||||
TRIG 500
|
||||
KINE 3 (Itype) 6.0 (Ekine) 1000. (x0) 0. (y0) 0. (z0) 1. (ux) 0. (uy) 0. (uz)
|
||||
DEBUG 10 5 10
|
||||
SWIT 0 (draw) 0 (save)
|
||||
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
||||
2*10.0e-6 (bcute/m) 2*541.e-6 (dcute/m)
|
||||
C CUTS 10.0e-6 (cutgam) 541.e-6 (cutele)
|
||||
ABAN 0
|
||||
LOSS 1
|
||||
HADR 0
|
||||
TIME 2=1.
|
||||
@@ -0,0 +1,20 @@
|
||||
LIST
|
||||
C
|
||||
C Iron-Silicium 10 layers; electon 2, 4, 6 GeV
|
||||
C
|
||||
C SICAPO Collaboration. NIM A345 (244-249) Oct.93
|
||||
C
|
||||
CALOR 4 (nbAbs) 10 (nbLay) 16. (calorYZ) 0. (field)
|
||||
MATE 7 (Fe) 12 (G10) 10 (Si) 12 (G10)
|
||||
THICK 3.57 (cm) 0.02 (cm) 0.04 (cm) 0.1 (cm)
|
||||
TRIG 500
|
||||
KINE 3 (Itype) 6.0 (Ekine) 1000. (x0) 0. (y0) 0. (z0) 1. (ux) 0. (uy) 0. (uz)
|
||||
DEBUG 10 5 10
|
||||
SWIT 0 (draw) 0 (save)
|
||||
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
||||
2*10.0e-6 (bcute/m) 2*541.e-6 (dcute/m)
|
||||
C CUTS 10.0e-6 (cutgam) 541.e-6 (cutele)
|
||||
ABAN 0
|
||||
LOSS 1
|
||||
HADR 0
|
||||
TIME 2=1.
|
||||
@@ -0,0 +1,17 @@
|
||||
LIST
|
||||
C
|
||||
C LiquidArgon-Lead 2 layers; proton 500 MeV
|
||||
C
|
||||
CALOR 2 (nbAbs) 2 (nbLay) 1.6 (calorYZ) 0. (field)
|
||||
MATE 5 (larg) 8 (lead)
|
||||
THICK 0.4(cm) 0.4 (cm)
|
||||
TRIG 1000
|
||||
KINE 14 (Itype) 0.5 (Ekine) 1000. (x0) 0. (y0) 0. (z0) 1. (ux) 0. (uy) 0. (uz)
|
||||
DEBUG 10 5 100
|
||||
SWIT 0 (draw) 1 (save)
|
||||
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
||||
2*10.0e-6 (bcute/m) 2*455.0e-6 (dcute/m)
|
||||
ABAN 0
|
||||
LOSS 1
|
||||
HADR 0
|
||||
TIME 2=1.
|
||||
@@ -0,0 +1,518 @@
|
||||
+OPTION,MAPASM.
|
||||
+ASM,23.
|
||||
+USE,GCDES,TestEm3,T=EXE.
|
||||
*
|
||||
+EXE,CRA*.
|
||||
*
|
||||
+PAM,11,T=CARD,T=ATTACH. /cern/pro/src/car/geant321.car
|
||||
+PATCH,TestEm3.
|
||||
+DECK,BLANKDEK.
|
||||
*
|
||||
* TestEm3 2.00 /01 990723 13.00 GEANT EXAMPLES
|
||||
*
|
||||
* TEST PROGRAM FOR GEANT TEST
|
||||
*
|
||||
* Author M.Maire *********
|
||||
*
|
||||
*
|
||||
* History
|
||||
* -------
|
||||
*
|
||||
*
|
||||
+KEEP,CALOR.
|
||||
PARAMETER (MaxAbs = 10)
|
||||
COMMON/CALOR/materAbs(MaxAbs),thickAbs(MaxAbs),NbAbsor,NbLayer,
|
||||
& calorYZ,Field,thLayer,calorX,worldX,worldYZ
|
||||
|
||||
*
|
||||
* NbAbsor = Number of Absorbers (data card CALOR)
|
||||
* NbLayer = Number of Layers (data card CALOR)
|
||||
* calorYZ = tranverse size of calor (cm) (data card CALOR)
|
||||
* Field = magnetic field (tesla) (data card CALOR)
|
||||
* materAbs(i) = Absorber material number. (data card MATE )
|
||||
* thickAbs(i) = thickness of absorber (cm) (data card THICK)
|
||||
*
|
||||
* thLayer = total thickness of a layer (cm)
|
||||
* calorX = total X-size of the calor (cm)
|
||||
* worldX = total X-size of the world (cm)
|
||||
* worldYZ = total YZ-size of the world (cm)
|
||||
*
|
||||
+KEEP,CELOSS.
|
||||
COMMON/CELOSS/ EdepAbs(MaxAbs),TrckAbs(MaxAbs),
|
||||
& sumEdep(MaxAbs),sumTrck(MaxAbs),
|
||||
& su2Edep(MaxAbs),su2Trck(MaxAbs)
|
||||
|
||||
+DECK,main,if=batch.
|
||||
PROGRAM main
|
||||
*
|
||||
*
|
||||
PARAMETER (NGBANK=100000, NHBOOK=40000)
|
||||
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
|
||||
+DECK,main,IF=-batch.
|
||||
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
|
||||
+DECK,UGINIT
|
||||
SUBROUTINE UGINIT
|
||||
*
|
||||
* To initialise GEANT/USER program and read data cards
|
||||
*
|
||||
+SEQ,CALOR,CELOSS.
|
||||
+SEQ,GCKINE.
|
||||
*
|
||||
CHARACTER*20 filnam
|
||||
*
|
||||
* *** Define the GEANT parameters
|
||||
CALL GINIT
|
||||
|
||||
* *** read data cards
|
||||
PRINT *, 'G3 > gives the filename of the data cards to be read:'
|
||||
READ (*,'(A)') filnam
|
||||
IF (filnam.EQ.' ') filnam = 'testem3.dat'
|
||||
OPEN (unit=5,file=filnam,status='unknown',form='formatted')
|
||||
|
||||
*
|
||||
* *** Calor definition
|
||||
CALL FFKEY('CALOR',NbAbsor,4,'MIXED')
|
||||
CALL FFKEY('MATE' ,materAbs(1),MaxAbs,'INTEGER')
|
||||
CALL FFKEY('THICK',thickAbs(1),MaxAbs,'REAL')
|
||||
*
|
||||
* *** read data cards
|
||||
CALL GFFGO
|
||||
|
||||
*
|
||||
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)
|
||||
*
|
||||
* *** Define user histograms
|
||||
CALL UHINIT
|
||||
*
|
||||
* *** some initialisation
|
||||
do k=1,MaxAbs
|
||||
sumEdep(k) = 0.
|
||||
sumTrck(k) = 0.
|
||||
su2Edep(k) = 0.
|
||||
su2Trck(k) = 0.
|
||||
enddo
|
||||
*
|
||||
END
|
||||
+DECK,UGEOM.
|
||||
SUBROUTINE UGEOM
|
||||
*
|
||||
* *** Define user geometry set up
|
||||
*
|
||||
*
|
||||
+SEQ,CALOR.
|
||||
*
|
||||
DIMENSION PAR(3)
|
||||
|
||||
DIMENSION Aair(2),Zair(2),Wair(2)
|
||||
DIMENSION ACO2(2),ZCO2(2),WCO2(2)
|
||||
DIMENSION AH2O(2),ZH2O(2),WH2O(2)
|
||||
DIMENSION AG10(4),ZG10(4),WG10(4)
|
||||
*
|
||||
CHARACTER*4 volnam
|
||||
CHARACTER*20 matnam
|
||||
*
|
||||
* *** Air compound parameters
|
||||
DATA Aair/14.01, 16.00/
|
||||
DATA Zair/ 7. , 8. /
|
||||
DATA Wair/ 0.7 , 0.3 /
|
||||
*
|
||||
* *** CO2 compound parameters
|
||||
DATA ACO2/12.01, 16.00/
|
||||
DATA ZCO2/ 6. , 8. /
|
||||
DATA WCO2/ 1. , 2. /
|
||||
*
|
||||
* *** Water compound parameters
|
||||
DATA AH2O/ 1.01, 16.00/
|
||||
DATA ZH2O/ 1. , 8. /
|
||||
DATA WH2O/ 2. , 1. /
|
||||
*
|
||||
* *** G10 compound parameters
|
||||
DATA AG10/ 1.01, 12.00, 16.00, 28.00/
|
||||
DATA ZG10/ 1. , 6. , 8. , 14. /
|
||||
DATA WG10/ 3. , 3. , 2. , 1. /
|
||||
|
||||
*
|
||||
* *** Defines USER perticular materials
|
||||
CALL GSMIXT( 1,'Air' , Aair ,Zair, 1.29E-3, 2 , Wair)
|
||||
CALL GSMIXT( 2,'CO2 gas' , ACO2 ,ZCO2, 27.0E-3,-2 , WCO2)
|
||||
CALL GSMATE( 3,'H2 Liquid', 1.01, 1., 0.0708 , 865., 790., 0,0)
|
||||
CALL GSMIXT( 4,'Water' , AH2O ,ZH2O, 1.0 ,-2 , WH2O)
|
||||
CALL GSMATE( 5,'Liquid Ar', 39.95, 18., 1.39 , 14.0, 84.0, 0,0)
|
||||
CALL GSMATE( 6,'Aluminium', 26.98, 13., 2.7 , 8.9, 37.2, 0,0)
|
||||
CALL GSMATE( 7,'Iron ', 55.85, 26., 7.87 , 1.76, 17.1, 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,'Silicium ', 28.09, 14., 2.33 , 9.36, 45.5, 0,0)
|
||||
CALL GSMATE(11,'Tungsten ',183.85, 74., 19.30 , 0.35, 9.6, 0,0)
|
||||
CALL GSMIXT(12,'NemaG10' , AG10 ,ZG10, 1.7 ,-4 , WG10)
|
||||
*
|
||||
*
|
||||
* *** Defines USER tracking media parameters
|
||||
IFIELD = 0
|
||||
IF (Field.GT.0.) IFIELD = 3
|
||||
FIELDM = 10*Field
|
||||
TMAXFD = 10.0
|
||||
STEMAX = 1000.
|
||||
DEEMAX = 0.20
|
||||
EPSIL = 0.001
|
||||
STMIN = 0.010
|
||||
*
|
||||
do k=1,NbAbsor
|
||||
CALL GSTMED( k,'absorber',materAbs(k), 0 ,IFIELD,FIELDM,TMAXFD,
|
||||
* STEMAX,DEEMAX,EPSIL,STMIN, 0 , 0 )
|
||||
enddo
|
||||
*
|
||||
nudef = NbAbsor+1
|
||||
CALL GSTMED( nudef,'default' , 1 , 0 ,IFIELD,FIELDM,TMAXFD,
|
||||
* STEMAX,DEEMAX,EPSIL,STMIN, 0 , 0 )
|
||||
*
|
||||
*
|
||||
* *** calor dimensions
|
||||
thLayer = 0.
|
||||
do k=1,NbAbsor
|
||||
thLayer = thLayer + thickAbs(k)
|
||||
enddo
|
||||
calorX = NbLayer*thLayer
|
||||
worldX = 1.2*calorX
|
||||
worldYZ = 1.2*calorYZ
|
||||
*
|
||||
* *** world
|
||||
PAR(1) = worldX /2.
|
||||
PAR(2) = worldYZ/2.
|
||||
PAR(3) = worldYZ/2.
|
||||
CALL GSVOLU('worl','BOX ',nudef,PAR,3,IVOL)
|
||||
*
|
||||
* *** calorimeter
|
||||
PAR(1) = calorX /2.
|
||||
PAR(2) = calorYZ/2.
|
||||
PAR(3) = calorYZ/2.
|
||||
CALL GSVOLU('calo','BOX ',nudef,PAR,3,IVOL)
|
||||
CALL GSPOS ('calo',1,'worl',0.,0.,0.,0,'only')
|
||||
*
|
||||
* *** layers
|
||||
CALL GSDVN ('layr','calo',NbLayer,1)
|
||||
*
|
||||
* *** absorbers
|
||||
volnam = 'abs'
|
||||
xfront = -0.5*thLayer
|
||||
do k=1,NbAbsor
|
||||
PAR(1) = thickAbs(k)/2.
|
||||
PAR(2) = calorYZ/2.
|
||||
PAR(3) = calorYZ/2.
|
||||
volnam(4:4) = char(ichar('0')+k-1)
|
||||
CALL GSVOLU(volnam,'BOX ',k,PAR,3,IVOL)
|
||||
xcenter = xfront + 0.5*thickAbs(k)
|
||||
CALL GSPOS (volnam,1,'layr',xcenter,0.,0.,0,'only')
|
||||
xfront = xfront + thickAbs(k)
|
||||
enddo
|
||||
*
|
||||
* *** Close geometry banks. (mandatory system routine)
|
||||
CALL GGCLOS
|
||||
*
|
||||
* *** print geometry
|
||||
PRINT 749
|
||||
PRINT 751,NbLayer
|
||||
do k=1,NbAbsor
|
||||
call GFMATE (materAbs(k),matnam,dua,duz,dud,dur,dui,udu,idu)
|
||||
PRINT 752,matnam,thickAbs(k)
|
||||
enddo
|
||||
PRINT 749
|
||||
*
|
||||
749 FORMAT(/ ,60(1H-),/)
|
||||
751 FORMAT(1X,'The calorimeter is ',I2,' layers of:')
|
||||
752 FORMAT(5X,A10,': ',F8.4,' cm')
|
||||
*
|
||||
* *** dessin
|
||||
CALL GSATT ('*' ,'SEEN',1)
|
||||
CALL GSATT ('layr','SEEN',0)
|
||||
*
|
||||
DO IX = 1,3
|
||||
CALL GDOPEN (IX)
|
||||
SCALE = 18./max(worldX,worldYZ)
|
||||
PAXIS = 0.
|
||||
SAXIS = 1.
|
||||
CALL GDRAWC ('worl',IX,0.,10.,9.3,SCALE,SCALE)
|
||||
CCC CALL GDAXIS (PAXIS,PAXIS,PAXIS,SAXIS)
|
||||
CALL GDSCAL (10. , 0.3)
|
||||
CALL GDCLOS
|
||||
END DO
|
||||
*
|
||||
END
|
||||
+DECK,UHINIT.
|
||||
SUBROUTINE UHINIT
|
||||
*
|
||||
* To book the user's histograms
|
||||
*
|
||||
+SEQ,CALOR.
|
||||
*
|
||||
CHARACTER*5 chtags(20)
|
||||
*
|
||||
DATA chtags /'EAbs0','LAbs0','EAbs1','LAbs1','EAbs2','LAbs2',
|
||||
+ 'EAbs3','LAbs3','EAbs4','LAbs4','EAbs5','LAbs5',
|
||||
+ 'EAbs6','LAbs6','EAbs7','LAbs7','EAbs8','LAbs8',
|
||||
+ 'EAbs9','LAbs9'/
|
||||
*
|
||||
CALL HBOOKN(1,'sum per event',2*NbAbsor,' ',4000,chtags)
|
||||
*
|
||||
END
|
||||
+DECK,GUKINE
|
||||
SUBROUTINE GUKINE
|
||||
*
|
||||
* Generates Kinematics for primary track
|
||||
*
|
||||
* Data card Kine : Itype Ekine x0 y0 z0 ux uy uz
|
||||
*
|
||||
+SEQ,GCBANK,GCFLAG,GCKINE.
|
||||
+SEQ,CALOR.
|
||||
*
|
||||
DIMENSION VERTEX(3),PLAB(3)
|
||||
*
|
||||
* *** set/reset default kinematic
|
||||
IF ((IKINE.LT.0).or.(abs(PKINE(2)).GT.0.5*worldX)) THEN
|
||||
IKINE = ABS(IKINE)
|
||||
PKINE(2) = -0.5*worldX
|
||||
PKINE(3) = 0.
|
||||
PKINE(4) = 0.
|
||||
PKINE(5) = 1.
|
||||
PKINE(6) = 0.
|
||||
PKINE(7) = 0.
|
||||
ENDIF
|
||||
*
|
||||
VERTEX(1) = PKINE(2)
|
||||
VERTEX(2) = PKINE(3)
|
||||
VERTEX(3) = PKINE(4)
|
||||
*
|
||||
CALL GSVERT(VERTEX,0,0,0,0,NVERT)
|
||||
*
|
||||
*
|
||||
JPA = LQ(JPART-IKINE)
|
||||
XMASS = Q(JPA+7)
|
||||
PMOM = SQRT(PKINE(1)*(PKINE(1)+2*XMASS))
|
||||
PLAB(1) = PMOM*PKINE(5)
|
||||
PLAB(2) = PMOM*PKINE(6)
|
||||
PLAB(3) = PMOM*PKINE(7)
|
||||
*
|
||||
CALL GSKINE(PLAB,IKINE,NVERT,0,0,NT)
|
||||
*
|
||||
* *** Kinematics debug
|
||||
IF (IEVENT.EQ.1.OR.IDEBUG.NE.0) CALL GPRINT('KINE',0)
|
||||
*
|
||||
END
|
||||
+DECK,GUTREV
|
||||
SUBROUTINE GUTREV
|
||||
*
|
||||
* User routine to control tracking of one event
|
||||
* Called by GRUN
|
||||
*
|
||||
+SEQ,CALOR,CELOSS
|
||||
*
|
||||
do k=1,NbAbsor
|
||||
EdepAbs(k) = 0.
|
||||
TrckAbs(k) = 0.
|
||||
enddo
|
||||
*
|
||||
CALL GTREVE
|
||||
*
|
||||
END
|
||||
+DECK,GUSTEP
|
||||
SUBROUTINE GUSTEP
|
||||
*
|
||||
* User routine called at the end of each tracking step
|
||||
*
|
||||
+SEQ,GCFLAG.
|
||||
+SEQ,GCKINE,GCKING,GCTRAK,GCTMED.
|
||||
+SEQ,CALOR,CELOSS.
|
||||
*
|
||||
*
|
||||
* *** Debug event and store tracks for drawing
|
||||
IF (IDEBUG.NE.0) CALL GPCXYZ
|
||||
IF ((ISWIT(1).EQ.1).AND.(CHARGE.NE.0.)) CALL GSXYZ
|
||||
IF (ISWIT(1).EQ.2) CALL GSXYZ
|
||||
*
|
||||
* *** Something generated ?
|
||||
IF(NGKINE.GT.0) CALL GSKING(0)
|
||||
*
|
||||
* *** Energy deposited and charged track length
|
||||
IF (NUMED.LE.NbAbsor) THEN
|
||||
if (DESTEP.NE.0.) EdepAbs(NUMED) = EdepAbs(NUMED) + DESTEP
|
||||
if (CHARGE*STEP.NE.0.) TrckAbs(NUMED) = TrckAbs(NUMED) + STEP
|
||||
ENDIF
|
||||
*
|
||||
END
|
||||
+DECK,GUOUT
|
||||
SUBROUTINE GUOUT
|
||||
*
|
||||
* User routine called at the end of each event
|
||||
*
|
||||
+SEQ,GCFLAG.
|
||||
+SEQ,CALOR,CELOSS.
|
||||
*
|
||||
DIMENSION sumevent(2*MaxAbS)
|
||||
CHARACTER*4 unit
|
||||
*
|
||||
* *** drawing
|
||||
*
|
||||
+self,if=-batch.
|
||||
IF (ISWIT(1).NE.0) THEN
|
||||
CALL GDHEAD (110110,'TestEm3',0.)
|
||||
CALL GDSHOW (3)
|
||||
CALL GDXYZ (0)
|
||||
END IF
|
||||
+self.
|
||||
*
|
||||
* ntuple: energies and track length per event
|
||||
do k=1,NbAbsor
|
||||
sumevent(2*k-1) = EdepAbs(k)
|
||||
sumevent(2*k ) = TrckAbs(k)
|
||||
enddo
|
||||
CALL HFN(1,sumevent)
|
||||
*
|
||||
* cumul energy deposited and charged track length
|
||||
do k=1,NbAbsor
|
||||
sumEdep(k) = sumEdep(k) + EdepAbs(k)
|
||||
sumTrck(k) = sumTrck(k) + TrckAbs(k)
|
||||
*
|
||||
su2Edep(k) = su2Edep(k) + EdepAbs(k)**2
|
||||
su2Trck(k) = su2Trck(k) + TrckAbs(k)**2
|
||||
enddo
|
||||
*
|
||||
* *** print
|
||||
IF (ISWIT(1).NE.0) THEN
|
||||
do k=1,NbAbsor
|
||||
CALL GEVKEV (EdepAbs(k),Eunit,unit)
|
||||
PRINT 751,k,Eunit,unit,TrckAbs(k)
|
||||
enddo
|
||||
print 749
|
||||
ENDIF
|
||||
|
||||
749 FORMAT(/)
|
||||
751 FORMAT(1X,'Absorber',I2,' : Energy deposit: ',F8.3,A4,
|
||||
& ' Track length: ' ,F8.3,' cm')
|
||||
*
|
||||
END
|
||||
+DECK,UGLAST
|
||||
SUBROUTINE UGLAST
|
||||
*
|
||||
* Termination routine to print histograms and statistics
|
||||
*
|
||||
+SEQ,GCFLAG.
|
||||
+SEQ,GCTRAK.
|
||||
+SEQ,CALOR,CELOSS.
|
||||
*
|
||||
CHARACTER*20 matnam
|
||||
CHARACTER*4 unitm,unitr
|
||||
*
|
||||
* *** mean energy deposit and track length
|
||||
PRINT 749
|
||||
PRINT 750,IEVENT
|
||||
PRINT 751
|
||||
fnorm = 1./IEVENT
|
||||
do k=1,NbAbsor
|
||||
call GFMATE (materAbs(k),matnam,dua,duz,dud,dur,dui,udu,idu)
|
||||
aveEdep = fnorm*sumEdep(k)
|
||||
rmsEdep = fnorm*sqrt(abs(IEVENT*su2Edep(k)-sumEdep(k)**2))
|
||||
aveTrck = fnorm*sumTrck(k)
|
||||
rmsTrck = fnorm*sqrt(abs(IEVENT*su2Trck(k)-sumTrck(k)**2))
|
||||
*
|
||||
CALL GEVKEV (aveEdep,Emean,unitm)
|
||||
CALL GEVKEV (rmsEdep,Erms ,unitr)
|
||||
PRINT 752,k-1,matnam,Emean,unitm,Erms,unitr,aveTrck,rmsTrck
|
||||
enddo
|
||||
PRINT 749
|
||||
*
|
||||
* *** geant termination
|
||||
CALL GLAST
|
||||
*
|
||||
* *** close HIGZ
|
||||
CALL HPLEND
|
||||
*
|
||||
* *** Save ntuple
|
||||
IF (ISWIT(2).EQ.1) THEN
|
||||
CALL HRPUT(0,'testem3.ntupl','N')
|
||||
ENDIF
|
||||
*
|
||||
*
|
||||
* *** formats
|
||||
749 FORMAT(/ ,60(1H-),/)
|
||||
750 FORMAT(1X,'Nb of events:',I6)
|
||||
751 FORMAT(1X,'AbsNo Material',5X,'Energy deposit',14X,'Trck length')
|
||||
752 FORMAT(I5,3X,A10,F8.3,A4,' +- ',F6.2,A4,F9.3,' cm +- ',F6.2,' cm')
|
||||
*
|
||||
END
|
||||
+DECK,ffread,T=data.
|
||||
LIST
|
||||
CALOR 2 (nbAbs) 50 (nbLay) 40. (calorYZ) 0. (field)
|
||||
MATE 8 (lead) 5 (larg)
|
||||
THICK 0.23(cm) 0.57 (cm)
|
||||
TRIG 1000
|
||||
KINE 3 (Itype) 1.0 (Ekine) 1000. (x0) 0. (y0) 0. (z0) 1. (ux) 0. (uy) 0. (uz)
|
||||
DEBUG 10 5 100
|
||||
SWIT 0 (draw) 1 (save)
|
||||
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
||||
2*10.0e-6 (bcute/m) 2*217.0e-6 (dcute/m)
|
||||
ABAN 0
|
||||
LOSS 1
|
||||
HADR 0
|
||||
TIME 2=1.
|
||||
+QUIT.
|
||||
Reference in New Issue
Block a user