*********************************************************************** c SUBROUTINE TOFDIGI c c last modified on: 05/12/2008 by I. Koenig c *********************************************************************** IMPLICIT NONE #include "geant321/gcflag.inc" #include "toftuple.inc" #include "user.inc" INTEGER NHDIM, NHMAX, NVDIM PARAMETER (NHDIM=12,NHMAX=1500,NVDIM=3) INTEGER ITRACK(NHMAX), NUMVS(NVDIM), NUMBV(NVDIM,NHMAX) INTEGER NHITS, NTUPID REAL HITS(NHDIM,NHMAX) CHARACTER*4 IUDET CHARACTER CNUM*3, A1*1, A2*2 INTEGER ISECT, I, J, L, NRODS INTEGER CUR_TR REAL X_IN, Y_IN, TOF_IN, LEN_IN, TOF_MOM DO ISECT=1,NSECT ! loop over sectors NTRK = 0 DO I=1,22+4 ! loop over Tof + Tofino scintillator packs (= modules) WRITE(CNUM,'(I3)') I + 100 READ(CNUM,'(A1,A2)') A1, A2 IF(I.LE.22) THEN ! Tof hit IUDET = 'T'//A2//'S' ENDIF NUMVS(1) = ISECT NUMVS(2) = 0 IF(I.LE.22) THEN ! Tof (8 rods) NRODS = 8 ELSE ! Tofino (2 or 3 pieces) NRODS = 3 ENDIF DO J=1,NRODS ! loop over subdivisions (= cells) IF(I.LE.22) THEN ! Tof: loop over rods NUMVS(3) = J ELSE ! Tofino: loop over pieces NUMVS(3) = 1 IF(J.EQ.1) IUDET = 'T'//A2//'U' IF(J.EQ.2) IUDET = 'T'//A2//'M' IF(J.EQ.3) IUDET = 'T'//A2//'L' ENDIF CALL GFHITS('SCIN',IUDET,NVDIM,NHDIM,NHMAX,0,NUMVS, & ITRACK,NUMBV,HITS,NHITS) IF (NHITS.GT.NHMAX) THEN ! overflow WRITE(6,*) 'ERROR: overflow in tofdigi.F (nHits>', & NHMAX,') in TOF',ISECT,I,J RETURN ENDIF DO L=1,NHITS ! loop over hits IF (HITS(8,L).EQ.0.0 .OR. HITS(11,L).EQ.1) THEN ! if Edep=0 or new volume entered, CUR_TR = HITS(7,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(12,L) ! save track length TOF_MOM = HITS(10,L) ! save total momentum ELSE IF (CUR_TR.EQ.HITS(7,L)) THEN ! still same track? IF (NTRK.LT.MAXTRKTOF) THEN NTRK = NTRK + 1 ! nb. of tracks TOFTRK(NTRK) = HITS(7,L) ! track number TOFDET(NTRK) = 8*(HITS(9,L)-1)+J ! detector number TOFE(NTRK) = HITS(8,L)*1.0e3 ! energy loss (in MeV) TOFX(NTRK) = LUNIT*(X_IN+HITS(1,L))/2. ! mean x pos in mm (or cm) TOFY(NTRK) = LUNIT*(Y_IN+HITS(2,L))/2. ! mean y pos in mm (or cm) TOFTOF(NTRK) = 0.5*(TOF_IN+HITS(4,L))*1.0e9 ! mean tof (in ns) TOFLEN(NTRK) = LUNIT*(LEN_IN+HITS(12,L))/2. ! track length in mm TOFMOM(NTRK) = TOF_MOM*1.0e3 ! momentum (in MeV/c) ELSE WRITE(6,*) 'ERROR: too many hits (>', & MAXTRKTOF,') in TOF',ISECT,I RETURN ENDIF ENDIF ENDDO ! end hit loop ENDDO ! end subdivision loop ENDDO ! end pack loop IF(IROOT.EQ.0) THEN CALL HFNT(5000+ISECT) ELSE CALL FILLTOF(ISECT) ENDIF ENDDO ! end sector loop RETURN END