*********************************************************************** c SUBROUTINE WALLDIGI c c last modified on 05/12/2008 by I. Koenig c *********************************************************************** IMPLICIT NONE #include "geant321/gcflag.inc" #include "walltuple.inc" #include "user.inc" INTEGER NHDIM, NHMAX, NVDIM PARAMETER (NHDIM=11,NHMAX=1500,NVDIM=2) INTEGER ITRACK(NHMAX), NUMVS(NVDIM), NUMBV(NVDIM,NHMAX) INTEGER NHITS, NTUPID REAL HITS(NHDIM,NHMAX) CHARACTER*4 IUDET CHARACTER CNUM*3 INTEGER J, L, NRODS INTEGER CUR_TR REAL X_IN, Y_IN, TOF_IN, LEN_IN, WALL_MOM NTRK = 0 NRODS = 302 ! loop over all cells DO J=1,NRODS ! loop over subdivisions (= cells) NUMVS(1)=0 NUMVS(2)=J !position number of cell !AS IN APR07 GEOMETRY IF(J.LE.144) THEN IUDET ='W001' ELSE IF (J.GE.145 .AND. J.LE.208) THEN IUDET = 'W002' ELSE IF (J.GE.211) THEN IUDET='W003' ENDIF CALL GFHITS('WLSC',IUDET,NVDIM,NHDIM,NHMAX,0,NUMVS, & ITRACK,NUMBV,HITS,NHITS) IF (NHITS.GT.NHMAX) THEN ! overflow WRITE(6,*) 'ERROR: overflow in walldigi.F (nHits>', & NHMAX,') in WALL',j RETURN ENDIF DO L=1,NHITS ! loop over hits IF (HITS(7,L).EQ.0.0 .OR. HITS(10,L).EQ.1) THEN ! if Edep=0 or new volume entered, CUR_TR = HITS(6,L) ! save current track X_IN = HITS(1,L) ! save x position on entrance Y_IN = HITS(2,L) ! save y position on entrance TOF_IN = HITS(4,L) ! save tof on entrance LEN_IN = HITS(11,L) ! save track length WALL_MOM = HITS(9,L) ! save total momentum ELSE IF (CUR_TR.EQ.HITS(6,L)) THEN ! still same track? IF (NTRK.LT.MAXTRKWALL) THEN NTRK = NTRK + 1 ! nb. of tracks WLTRK(NTRK) = HITS(6,L) ! track number ! detector number is module number 1,2 or 3 IF(HITS(8,L).EQ.0) THEN ! Module numer is zero WLMOD(NTRK) = 0 WLCELL(NTRK) = J ENDIF WLE(NTRK) = HITS(7,L)*1.0e3 ! energy loss (in MeV) WLX(NTRK) = LUNIT*(X_IN+HITS(1,L))/2. ! mean x pos in mm (or cm) WLY(NTRK) = LUNIT*(Y_IN+HITS(2,L))/2. ! mean y pos in mm (or cm) WLTOF(NTRK) = 0.5*(TOF_IN+HITS(4,L))*1.0e9 ! mean tof (in ns) WLLEN(NTRK) = LUNIT*(LEN_IN+HITS(11,L))/2. ! track length in mm WLMOM(NTRK) = WALL_MOM*1.0e3 ! momentum (in MeV/c) ELSE WRITE(6,*) 'ERROR: too many hits (>', & MAXTRKWALL,') in WALL' RETURN ENDIF ENDIF ENDDO ! end hit loop ENDDO ! end loop over all cells IF(IROOT.EQ.0) THEN CALL HFNT(5000+1) ELSE CALL FILLWALL ENDIF RETURN END