759 lines
18 KiB
Plaintext
759 lines
18 KiB
Plaintext
+OPT,MAPASM.
|
|
+ASM,23.
|
|
+USE,GCDES.
|
|
+USE,P=TESTEM5,T=EXE.
|
|
+EXE,CRA*.
|
|
+PAM,11,T=CARD,T=ATTACH. /cern/pro/src/car/geant321.car
|
|
+PATCH,TESTEM5.
|
|
+DECK,BLANKDECK.
|
|
*
|
|
* TestEm5 1.00 /01 980918 13.00 GEANT EXAMPLES
|
|
*
|
|
* TEST PROGRAM FOR GEANT TEST
|
|
*
|
|
* Author L.Urban *********
|
|
*
|
|
*
|
|
* History
|
|
* -------
|
|
*
|
|
*
|
|
+KEEP,EDEPO.
|
|
COMMON/EDEPO/EDEP,SEDEP,SEDEP2
|
|
+ ,DEEM,STMA,STMI,RMAX
|
|
+ ,anbstep,sstep,s2step,anch,anne
|
|
+ ,anele,anpos,sanele,sanpos
|
|
+ ,sanch,sanch2,sanne,sanne2
|
|
+ ,tra,ref,stra,sref
|
|
+ ,nth0
|
|
+ ,NHI1,HIS1(2),NHI2 ,HIS2(2),NHI3,HIS3(2),NHI4,HIS4(2)
|
|
+ ,NHI5,HIS5(2),NHI6 ,HIS6(2),NHI7,HIS7(2),NHI8,HIS8(2)
|
|
+ ,NHI9,HIS9(2),NHI10,HIS10(2)
|
|
COMMON/PLOTS/NAME
|
|
CHARACTER*25 NAME
|
|
COMMON/GEOMAT/MATWLD,XWORLD,YZWORL,FieldW,
|
|
+ MATABS,XABSOR,YZABSO,FieldA,
|
|
+ XPOSAB,X1ABSO,X2ABSO,
|
|
+ XVERT ,YVERT ,ZVERT
|
|
|
|
+DECK,main,if=batch.
|
|
PROGRAM main
|
|
|
|
PARAMETER (NG=200000,NH=10000)
|
|
COMMON/GCBANK/Q(NG)
|
|
COMMON/PAWC/H(NH)
|
|
C ALLOCATE MEMORY FOR ZEBRA/HBOOK
|
|
C
|
|
CALL GZEBRA(NG)
|
|
CALL HLIMIT(-NH)
|
|
C
|
|
CALL HPLINT(0)
|
|
C
|
|
C INITIALISATION
|
|
C
|
|
CALL UGINIT
|
|
C
|
|
C PROCESSING
|
|
C
|
|
CALL GRUN
|
|
C
|
|
C TERMINATION
|
|
C
|
|
CALL UGLAST
|
|
C
|
|
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
|
|
C
|
|
+SEQ,GCUNIT
|
|
+SEQ,GCLIST
|
|
+SEQ,GCKINE
|
|
+SEQ,EDEPO
|
|
CHARACTER*25 filnam
|
|
CHARACTER*25 HF
|
|
CHARACTER*4 KEY
|
|
CHARACTER*2 SPACES
|
|
DATA HF/'testem5.histo'/
|
|
C
|
|
C INITIALIZE GEANT STRUCTURES
|
|
C
|
|
CALL GINIT
|
|
*
|
|
C default values (materials,sizes)
|
|
*
|
|
MATABS = 23
|
|
XABSOR = 1.
|
|
YZABSO = 2.
|
|
FieldA = 0.
|
|
*
|
|
MATWLD = 30
|
|
XWORLD = 0.
|
|
YZWORL = 0.
|
|
FieldW = 0.
|
|
*
|
|
XPOSAB = 0.
|
|
*
|
|
XVERT = -1000.
|
|
YVERT = 0.
|
|
ZVERT = 0.
|
|
*
|
|
NAME=HF
|
|
C
|
|
C DEFINE DATA CARDS
|
|
C
|
|
CALL FFKEY('WORLD',MATWLD,4,'mixed')
|
|
CALL FFKEY('ABSOR',MATABS,4,'mixed')
|
|
CALL FFKEY('XPOS' ,XPOSAB,1,'real')
|
|
CALL FFKEY('VERT' ,XVERT ,3,'real')
|
|
*
|
|
CALL FFKEY('HIS1',NHI1 ,3,'mixed')
|
|
CALL FFKEY('HIS2',NHI2 ,3,'mixed')
|
|
CALL FFKEY('HIS3',NHI3 ,3,'mixed')
|
|
CALL FFKEY('HIS4',NHI4 ,3,'mixed')
|
|
CALL FFKEY('HIS5',NHI5 ,3,'mixed')
|
|
CALL FFKEY('HIS6',NHI6 ,3,'mixed')
|
|
CALL FFKEY('HIS7',NHI7 ,3,'mixed')
|
|
CALL FFKEY('HIS8',NHI8 ,3,'mixed')
|
|
CALL FFKEY('HIS9',NHI9 ,3,'mixed')
|
|
CALL FFKEY('HI10',NHI10,3,'mixed')
|
|
*
|
|
CALL FFKEY('DEEM',DEEM, 1,'REAL')
|
|
CALL FFKEY('STMA',STMA, 1,'REAL')
|
|
CALL FFKEY('STMI',STMI, 1,'REAL')
|
|
*
|
|
* *** read data cards
|
|
PRINT *, 'G3 > gives the filename of the data cards to be read:'
|
|
READ (*,'(A)') filnam
|
|
IF (filnam.EQ.' ') filnam = 'testem5.dat'
|
|
OPEN (unit=5,file=filnam,status='unknown',form='formatted')
|
|
*
|
|
* filename should be 1st data card !
|
|
READ(5,98)KEY,SPACES,NAME
|
|
98 FORMAT(A4,A2,A25)
|
|
*
|
|
CALL GFFGO
|
|
*
|
|
write(6,99) NAME
|
|
99 FORMAT(/,15x,'histogram file --> NAME:',A25)
|
|
C
|
|
C INITIALIZE ZEBRA STRUCTURES
|
|
C
|
|
CALL GZINIT
|
|
C
|
|
C DEFINE STANDARD PARTICLES AND MATERIALS
|
|
C
|
|
CALL GPART
|
|
CALL GMATE
|
|
*
|
|
CALL GDINIT
|
|
C
|
|
C DEFINE GEOMETRY
|
|
C
|
|
CALL UGEOM
|
|
C
|
|
C COMPUTE CROSS SECTIONS/ENERGY LOSSES
|
|
C
|
|
CALL GPHYSI
|
|
C
|
|
C PRINT MATERIALS,MEDIA,VOLUMES
|
|
C
|
|
CALL GPRINT('MATE',0)
|
|
CALL GPRINT('TMED',0)
|
|
CALL GPRINT('VOLU',0)
|
|
C
|
|
C DEFINE HISTOGRAMS
|
|
C
|
|
CALL UHINIT
|
|
C
|
|
C SOME MORE INITIALISATION
|
|
C
|
|
SEDEP=0.
|
|
SEDEP2=0.
|
|
sanch=0.
|
|
sanch2=0.
|
|
sanne=0.
|
|
sanne2=0.
|
|
sanele=0.
|
|
sanpos=0.
|
|
sstep=0.
|
|
s2step=0.
|
|
stra=0.
|
|
sref=0.
|
|
nth0=0
|
|
*
|
|
X1ABSO = XPOSAB-0.5*XABSOR
|
|
X2ABSO = XPOSAB+0.5*XABSOR
|
|
*
|
|
if(xvert.le.-1000.) XVERT=-0.5*XWORLD
|
|
*
|
|
END
|
|
+DECK,UGEOM.
|
|
SUBROUTINE UGEOM
|
|
C
|
|
+SEQ,GCBANK
|
|
+SEQ,GCKINE
|
|
+SEQ,GCUNIT
|
|
+SEQ,GCTRAK
|
|
+SEQ,EDEPO
|
|
C
|
|
DIMENSION AWAT(2),ZWAT(2),WWAT(2)
|
|
DIMENSION AAIR(2),ZAIR(2),WAIR(2)
|
|
DIMENSION PALL(3),PVOL(3)
|
|
C
|
|
C COMPOUND/MIXTURE PARAMETERS
|
|
C
|
|
DATA AWAT/1.01,16.00/
|
|
DATA ZWAT/1.,8./
|
|
DATA WWAT/2.,1./
|
|
DATA AAIR/14.01,16.00/
|
|
DATA ZAIR/7.,8./
|
|
DATA WAIR/0.7,0.3/
|
|
C
|
|
C DEFINE MATERIALS
|
|
C
|
|
CALL GSMATE(21,'BERYLLIUM',9.010,4.,1.848,35.30,0.,0,0)
|
|
CALL GSMATE(22,'ALUMINIUM',26.98,13.,2.70,8.900,0.,0,0)
|
|
CALL GSMATE(23,'SILICON',28.09,14.,2.33,9.36,45.49,0,0)
|
|
CALL GSMATE(24,'LIQUID ARGON',39.95,18.,1.4,14.,83.71,0,0)
|
|
CALL GSMATE(25,'IRON',55.85,26.,7.87,1.760,0.,0,0)
|
|
CALL GSMATE(26,'COPPER',63.54,29.,8.96,1.430,0.,0,0)
|
|
CALL GSMATE(27,'GOLD',196.967,79.,19.32,0.33,0.,0,0)
|
|
CALL GSMATE(28,'LEAD',207.190,82.,11.35,0.560,0.,0,0)
|
|
C
|
|
CALL GSMIXT(29,'WATER',AWAT,ZWAT,1.00,-2,WWAT)
|
|
CALL GSMIXT(30,'AIR',AAIR,ZAIR,1.205E-3,+2,WAIR)
|
|
C
|
|
C DEFINE MEDIA
|
|
C
|
|
IFIELD=0
|
|
if (FieldW.ne.0.) IFIELD=3
|
|
FIELDM=10*FieldW
|
|
*
|
|
TMAXFD=10.
|
|
STEMAX=1.E+10
|
|
DEEMAX=0.20
|
|
EPSIL=0.0001
|
|
STMIN=0.0010
|
|
C
|
|
CALL GSTMED(99,'WORLD',MATWLD,0,IFIELD,
|
|
* FIELDM,TMAXFD,STEMAX,DEEMAX,EPSIL,STMIN,0,0)
|
|
C
|
|
|
|
IFIELD=0
|
|
if (FieldA.ne.0.) IFIELD=3
|
|
FIELDM=10*FieldA
|
|
*
|
|
IF(IGAUTO.LE.0) THEN
|
|
DEEMAX=DEEM
|
|
STMIN =STMI
|
|
STEMAX=STMA
|
|
ENDIF
|
|
CALL GSTMED(1,'ABSORBER',MATABS,0,IFIELD,
|
|
* FIELDM,TMAXFD,STEMAX,DEEMAX,EPSIL,STMIN,0,0)
|
|
C
|
|
C
|
|
C DEFINE VOLUMES (WORLD+ABSORBER)
|
|
*
|
|
if(XWORLD*YZWORL.le.0.) then
|
|
XWORLD=1.5*XABSOR
|
|
YZWORL=1.2*YZABSO
|
|
endif
|
|
*
|
|
PALL(1)=0.5*XWORLD
|
|
PALL(2)=0.5*YZWORL
|
|
PALL(3)=0.5*YZWORL
|
|
CALL GSVOLU('worl','BOX ',99,PALL,3,IVOL)
|
|
C
|
|
PVOL(1)=0.5*XABSOR
|
|
PVOL(2)=0.5*YZABSO
|
|
PVOL(3)=0.5*YZABSO
|
|
CALL GSVOLU('abso','BOX ', 1,PVOL,3,IVOL)
|
|
C
|
|
C BUILD GEOMETRY
|
|
C
|
|
CALL GSPOS('abso',1,'worl',XPOSAB,0.,0.,0,'ONLY')
|
|
*
|
|
* *** Close geometry banks. (mandatory system routine)
|
|
CALL GGCLOS
|
|
*
|
|
*
|
|
* *** dessin
|
|
CALL GSATT ('*','SEEN',1)
|
|
*
|
|
DO IX = 1,3
|
|
CALL GDOPEN (IX)
|
|
SCALE = 18./max(XWORLD,YZWORL)
|
|
PAXIS = 0.
|
|
SAXIS = 0.1*max(XWORLD,YZWORL)
|
|
CALL GDRAWC ('worl',IX,0.,10.,9.3,SCALE,SCALE)
|
|
CALL GDAXIS (PAXIS,PAXIS,PAXIS,SAXIS)
|
|
CALL GDSCAL (10., 0.3)
|
|
CALL GDCLOS
|
|
END DO
|
|
*
|
|
END
|
|
+DECK,UHINIT.
|
|
SUBROUTINE UHINIT
|
|
C
|
|
+SEQ,GCBANK
|
|
+SEQ,GCKINE
|
|
+SEQ,EDEPO
|
|
C
|
|
IF(NHI1.GT.0) THEN
|
|
CALL HBOOK1(1,'number of steps/event'
|
|
+ ,NHI1,HIS1(1),HIS1(2),0.)
|
|
ENDIF
|
|
IF(NHI2.GT.0) THEN
|
|
CALL HBOOK1(2,'energy deposit in absorber (MeV)'
|
|
+ ,NHI2,HIS2(1),HIS2(2),0.)
|
|
ENDIF
|
|
IF(NHI3.GT.0) THEN
|
|
CALL HBOOK1(3,'angle distribution at exit(deg)'
|
|
+ ,NHI3,HIS3(1),HIS3(2),0.)
|
|
ENDIF
|
|
IF(NHI4.GT.0) THEN
|
|
CALL HBOOK1(4,'lateral distribution at exit(mm)'
|
|
+ ,NHI4,HIS4(1),HIS4(2),0.)
|
|
ENDIF
|
|
IF(NHI5.GT.0) THEN
|
|
CALL HBOOK1(5,'kinetic energy of the primary at exit(MeV)'
|
|
+ ,NHI5,HIS5(1),HIS5(2),0.)
|
|
ENDIF
|
|
IF(NHI6.GT.0) THEN
|
|
CALL HBOOK1(6,'angle distr. of backscattered primaries(deg)'
|
|
+ ,NHI6,HIS6(1),HIS6(2),0.)
|
|
ENDIF
|
|
IF(NHI7.GT.0) THEN
|
|
CALL HBOOK1(7,'kinetic energy of backscattered primaries(deg)'
|
|
+ ,NHI7,HIS7(1),HIS7(2),0.)
|
|
ENDIF
|
|
IF(NHI8.GT.0) THEN
|
|
CALL HBOOK1(8,'kinetic energy of the charged secondaries(deg)'
|
|
+ ,NHI8,HIS8(1),HIS8(2),0.)
|
|
ENDIF
|
|
IF(NHI9.GT.0) THEN
|
|
CALL HBOOK1(9,'z of secondary charged vertices (mm)'
|
|
+ ,NHI9,HIS9(1),HIS9(2),0.)
|
|
ENDIF
|
|
IF(NHI10.GT.0) THEN
|
|
CALL HBOOK1(10,'energy of gammas escaping the absorber(MeV)'
|
|
* + ,NHI10,HIS10(1),HIS10(2),0.)
|
|
+ ,NHI10,log10(HIS10(1)),log10(HIS10(2)),0.)
|
|
ENDIF
|
|
*
|
|
CALL HIDOPT(0,'STAT')
|
|
*
|
|
END
|
|
+DECK,GUKINE.
|
|
SUBROUTINE GUKINE
|
|
C
|
|
+SEQ,GCBANK
|
|
+SEQ,GCFLAG
|
|
+SEQ,GCKINE
|
|
+SEQ,GCONST
|
|
+SEQ,EDEPO
|
|
C
|
|
DIMENSION VERTEX(3),PLAB(3)
|
|
C
|
|
VERTEX(1)=XVERT
|
|
VERTEX(2)=YVERT
|
|
VERTEX(3)=ZVERT
|
|
CALL GSVERT(VERTEX,0,0,0,0,NVERT)
|
|
*
|
|
JPA = LQ(JPART-IKINE)
|
|
XMASS = Q(JPA+7)
|
|
PMOM = SQRT(PKINE(1)*(PKINE(1)+2*XMASS))
|
|
THETA = PKINE(2)*DEGRAD
|
|
PHI = PKINE(3)*DEGRAD
|
|
C
|
|
PLAB(1)=PMOM*SIN(THETA)*COS(PHI)
|
|
PLAB(2)=PMOM*SIN(THETA)*SIN(PHI)
|
|
PLAB(3)=PMOM*COS(THETA)
|
|
C
|
|
CALL GSKINE(PLAB,IKINE,NVERT,0,0,NT)
|
|
*
|
|
* *** Kinematics debug
|
|
IF (IEVENT.EQ.1.OR.IDEBUG.NE.0) CALL GPRINT('KINE',0)
|
|
C
|
|
*
|
|
* *** initialisation per event
|
|
anbstep=1.e-6
|
|
anch=0.
|
|
anne=0.
|
|
anele=0.
|
|
anpos=0.
|
|
EDEP=0.
|
|
tra=0.
|
|
ref=0.
|
|
*
|
|
END
|
|
+DECK,GUSTEP.
|
|
SUBROUTINE GUSTEP
|
|
C
|
|
+SEQ,GCBANK
|
|
+SEQ,GCTMED
|
|
+SEQ,GCKINE
|
|
+SEQ,GCKING
|
|
+SEQ,GCFLAG
|
|
+SEQ,GCTRAK
|
|
+SEQ,GCVOLU
|
|
+SEQ,GCCUTS
|
|
+SEQ,GCONST
|
|
+SEQ,GCUNIT
|
|
+SEQ,EDEPO
|
|
C
|
|
parameter ( facdeg=180./3.1415927 )
|
|
DATA IEVOLD/0/
|
|
|
|
*
|
|
*
|
|
* *** 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
|
|
*
|
|
*
|
|
IF(IEVOLD.NE.IEVENT) THEN
|
|
IEVOLD=IEVENT
|
|
ITOLD=0
|
|
NMOLD=0
|
|
XO=VERT(1)
|
|
RO=sqrt(vect(2)**2+vect(3)**2)
|
|
ENDIF
|
|
C
|
|
C TRACK FLAG
|
|
C
|
|
ITFL=ISTAK+10000*ITRA+100000*IVERT
|
|
IF(ITOLD.NE.IEVENT) THEN
|
|
XO=VERT(1)
|
|
RO=sqrt(vect(2)**2+vect(3)**2)
|
|
ENDIF
|
|
C
|
|
X=VECT(1)
|
|
C
|
|
IF(NGKINE.GT.0) THEN
|
|
do 10 i=1,ngkine
|
|
itypa=gkin(5,i)
|
|
* all the charged secondaries
|
|
if(itypa.ne.1) call hfill(9,10.*GPOS(1,i),0.,1.)
|
|
* in absorber only !
|
|
if(NUMED.EQ.1) then
|
|
if(itypa.eq.1) then
|
|
anne=anne+1.
|
|
else
|
|
anch=anch+1.
|
|
if(itypa.eq.2) anpos=anpos+1.
|
|
if(itypa.eq.3) anele=anele+1.
|
|
tsec=1000.*(GKIN(4,i)-510.999e-6)
|
|
call hfill(8,tsec,0.,1.)
|
|
endif
|
|
endif
|
|
10 continue
|
|
CALL GSKING(0)
|
|
ENDIF
|
|
*
|
|
R=SQRT(VECT(2)**2+VECT(3)**2)
|
|
if((r.le.YZABSO).and.(xo.lt.X2ABSO).and.(x.ge.X2ABSO)) then
|
|
if(vect(4).gt.0.) then
|
|
if(ipart.eq.1) call hfill(10,log10(1000.*gekin),0.,1.)
|
|
if(ipart.eq.ikine) then
|
|
tra=1.
|
|
*
|
|
call hfill(5,1000.*gekin,0.,1.)
|
|
|
|
if((1-vect(4)).gt.1.e-6) then
|
|
theta=acos(vect(4))
|
|
else
|
|
theta=sqrt(2.*(1.-vect(4)))
|
|
endif
|
|
if(nhi3.gt.0) then
|
|
h1=his3(1)/facdeg
|
|
h2=his3(2)/facdeg
|
|
dth=(h2-h1)/float(nhi3)
|
|
ibin=int((theta-h1)/dth)+1
|
|
if((ibin.le.0).or.(ibin.gt.nhi3)) then
|
|
w=1.
|
|
else
|
|
th=ibin*dth
|
|
if(theta.GT.0.001*dth) then
|
|
w=PI/(64800.*dth*sin(theta))
|
|
else
|
|
nth0=nth0+1
|
|
if(nth0.le.10) then
|
|
thdeg=theta*facdeg
|
|
write(6,997) thdeg
|
|
997 format('theta<0.001*dth (from plot excluded)'
|
|
+ ,' theta=',e12.4,' deg')
|
|
endif
|
|
w=0.
|
|
endif
|
|
endif
|
|
theta = facdeg*theta
|
|
call hfill(3,theta,0.,w)
|
|
endif
|
|
call hfill(4,10.*R,0.,1.)
|
|
endif
|
|
endif
|
|
endif
|
|
if((r.le.YZABSO).and.(xo.gt.X1ABSO).and.(x.le.X1ABSO)) then
|
|
if(vect(4).lt.0.) then
|
|
if(ipart.eq.ikine) then
|
|
ref=1.
|
|
call hfill(7,1000.*gekin,0.,1.)
|
|
if((1.+vect(4)).gt.1.e-6) then
|
|
theta=acos(vect(4))-PIBY2
|
|
else
|
|
theta=sqrt(2.*(1.+vect(4)))
|
|
endif
|
|
if(nhi6.gt.0) then
|
|
h1=his6(1)/facdeg
|
|
h2=his6(2)/facdeg
|
|
dth=(h2-h1)/float(nhi6)
|
|
ibin=int((theta-h1)/dth)+1
|
|
if((ibin.le.0).or.(ibin.gt.nhi6)) then
|
|
w=0.
|
|
else
|
|
th=ibin*dth
|
|
if(theta.GT.0.001*dth) then
|
|
w=PI/(64800.*dth*sin(theta))
|
|
else
|
|
thdeg=theta*facdeg
|
|
write(6,997) thdeg
|
|
w=0.
|
|
endif
|
|
theta = facdeg*theta
|
|
call hfill(6,theta,0.,w)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
IF(NUMED.EQ.1) THEN
|
|
anbstep=anbstep+1.
|
|
EDEP = EDEP+DESTEP
|
|
ENDIF
|
|
C
|
|
ITOLD=IEVENT
|
|
XO=X
|
|
RO=R
|
|
C
|
|
END
|
|
+DECK,GUOUT.
|
|
SUBROUTINE GUOUT
|
|
C
|
|
+SEQ,GCBANK
|
|
+SEQ,GCFLAG
|
|
+SEQ,GCUNIT
|
|
+SEQ,EDEPO
|
|
+SEQ,GCONST
|
|
*
|
|
dimension runerr(2)
|
|
* *** drawing
|
|
*
|
|
+self,if=-batch.
|
|
IF (ISWIT(1).NE.0) THEN
|
|
CALL GDHEAD (110110,'TestEm5',0.)
|
|
CALL GDSHOW (3)
|
|
CALL GDXYZ (0)
|
|
END IF
|
|
+self.
|
|
*
|
|
call hfill(1,anbstep,0.,1.)
|
|
sstep=sstep+anbstep
|
|
s2step=s2step+anbstep*anbstep
|
|
sanch = sanch+anch
|
|
sanch2=sanch2+anch*anch
|
|
sanne = sanne+anne
|
|
sanne2=sanne2+anne*anne
|
|
sanele=sanele+anele
|
|
sanpos=sanpos+anpos
|
|
SEDEP=SEDEP+EDEP
|
|
SEDEP2=SEDEP2+EDEP**2
|
|
stra=stra+tra
|
|
sref=sref+ref
|
|
eein=1000.*EDEP
|
|
CALL HFILL(2,eein,0.,1.0)
|
|
C
|
|
END
|
|
+DECK,UGLAST.
|
|
SUBROUTINE UGLAST
|
|
C
|
|
+SEQ,GCBANK
|
|
+SEQ,GCFLAG
|
|
+SEQ,GCUNIT
|
|
+SEQ,GCONST
|
|
+SEQ,EDEPO
|
|
+SEQ,GCKINE.
|
|
C
|
|
CALL GLAST
|
|
C
|
|
IF(IEVENT.GT.0) THEN
|
|
AEV=FLOAT(IEVENT)
|
|
SEDEP=SEDEP/AEV
|
|
SE2=SEDEP2/AEV-SEDEP**2
|
|
SEDEP2=0.
|
|
IF(SE2.GT.0.) SEDEP2=SQRT(SE2/AEV)
|
|
*
|
|
WRITE(CHMAIL,1002)SEDEP,SEDEP2
|
|
CALL GMAIL(0,0)
|
|
sstep=sstep/aev
|
|
s2step=s2step/aev-sstep*sstep
|
|
sigst=0.
|
|
if(s2step.gt.0.) sigst=sqrt(s2step/aev)
|
|
write(6,122)sstep,sigst
|
|
122 format(/,' mean number of steps=',f15.3,' +- ',f15.3)
|
|
sanch=sanch/aev
|
|
sigch2=sanch2/aev-sanch*sanch
|
|
sigch=0.
|
|
if(sigch2.gt.0.) sigch=sqrt(sigch2/aev)
|
|
sanne=sanne/aev
|
|
signe2=sanne2/aev-sanne*sanne
|
|
signe=0.
|
|
if(signe2.gt.0.) signe=sqrt(signe2/aev)
|
|
write(6,123) sanch,sigch,sanne,signe
|
|
123 format(/,' mean nb of charged secondaries=',f15.4,' +- ',f15.4,
|
|
+ /,' mean nb of neutral secondaries=',f15.4,' +- ',f15.4)
|
|
sanele=sanele/aev
|
|
sanpos=sanpos/aev
|
|
write(6,124)sanele,sanpos
|
|
124 format(/,' mean nb of e-s = ',f15.4,' and e+s=',f15.4)
|
|
stra=stra/aev
|
|
sref=sref/aev
|
|
write(6,125)stra,sref
|
|
125 format(/,' (number) transmission coeff=',e12.4,
|
|
+ ' reflexion coeff=',e12.4)
|
|
write(6,126) nth0
|
|
126 format(/,' nb of (theta<0.001*bin) events=',i6)
|
|
*
|
|
CCC CALL HISTDO
|
|
*
|
|
CALL HPLEND
|
|
*
|
|
CALL HRPUT(0,NAME,'N')
|
|
C
|
|
ENDIF
|
|
C
|
|
1002 FORMAT(5X,'energy deposit=',E12.4,' +- ',E12.4)
|
|
C
|
|
END
|
|
+DECK,GRUN.
|
|
SUBROUTINE GRUN
|
|
*.
|
|
*. ******************************************************************
|
|
*. * *
|
|
*. * Steering routine to process all the events *
|
|
*. * *
|
|
*. * ==>Called by : <USER>, main program *
|
|
*. * Author R.Brun ********* *
|
|
*. * *
|
|
*. ******************************************************************
|
|
*.
|
|
+SEQ,GCBANK
|
|
+SEQ,GCFLAG
|
|
+SEQ,GCUNIT
|
|
+SEQ,GCTIME
|
|
SAVE IFIRST
|
|
DATA IFIRST/0/
|
|
*.
|
|
*. ------------------------------------------------------------------
|
|
*.
|
|
* Keep starting time
|
|
*
|
|
IF(IFIRST.EQ.0)THEN
|
|
IFIRST=1
|
|
CALL TIMEL(TIMINT)
|
|
ENDIF
|
|
*
|
|
10 IF(IEVENT.LT.NEVENT) THEN
|
|
IEVENT=IEVENT+1
|
|
*
|
|
* Initialises event partition
|
|
LOUT=9
|
|
CALL GTRIGI
|
|
LOUT=6
|
|
* Process one event (trigger)
|
|
*
|
|
CALL GTRIG
|
|
*
|
|
* Clear event partition
|
|
*
|
|
CALL GTRIGC
|
|
*
|
|
IF(IEORUN.EQ.0) THEN
|
|
*
|
|
* Check time left
|
|
*
|
|
IF(ITIME.LE.0)GO TO 10
|
|
IF(MOD(IEVENT,ITIME).NE.0)GO TO 10
|
|
CALL TIMEL(TIMNOW)
|
|
IF(TIMNOW.GT.TIMEND)GO TO 10
|
|
WRITE(CHMAIL,10000)TIMEND
|
|
CALL GMAIL(0,2)
|
|
IEORUN = 1
|
|
ENDIF
|
|
ENDIF
|
|
*
|
|
10000 FORMAT(5X,'***** THE JOB STOPS NOW BECAUSE THE TIME LEFT IS LESS',
|
|
+' THAN ',F8.3,' SECONDS *****')
|
|
END
|
|
|
|
+DECK,ffread,T=data.
|
|
FILE geant3.siplots
|
|
LIST
|
|
ABSOR 23 (mate) 1.0 (thicknX) 2.0 (sizeYZ) 0. (field)
|
|
KINE 3 (Itype) 0.030000 (Ekine) 90.0 (teta) 0.0 (phi)
|
|
TRIG 100000
|
|
DEBUG 1 1
|
|
SWIT 0 (draw)
|
|
LOSS 1
|
|
HADR 0
|
|
ABAN 0
|
|
CUTS 10.0e-6 (cutgam) 10.0e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
|
|
2*10.0e-6 (bcute/m) 2*10.0e-6 (dcute/m)
|
|
TIME 2=5.
|
|
HIS1 50 0. 50.
|
|
HIS2 60 0. 1.2
|
|
HIS3 90 0. 90.
|
|
HIS4 50 0. 2.5
|
|
HIS5 50 0. 1.
|
|
HIS6 90 0. 90.
|
|
HIS7 50 0. 1.
|
|
HIS8 50 0.0 0.5
|
|
HIS9 100 -0.5 0.5
|
|
HI10 80 0.01 1.
|
|
END
|
|
+QUIT.
|