*********************************************************************** c SUBROUTINE FRPCDIGI c c last modified on: 30/11/2015 by I. Koenig c *********************************************************************** IMPLICIT NONE #include "geant321/gcflag.inc" #include "frpctuple.inc" #include "user.inc" INTEGER NHDIM, NVDIM, NHMAX PARAMETER (NHDIM=17,NVDIM=6,NHMAX=10000) INTEGER ITRACK(NHMAX), NUMVS(NVDIM), NUMBV(NVDIM,NHMAX) DATA NUMVS /0, 0, 0, 0, 0, 0/ !mod, layer, d-mod, block, tube, gas INTEGER NHITS, NTUPID REAL HITS(NHDIM,NHMAX) CHARACTER*2 SENSVOL(2) DATA SENSVOL /'SV', 'HV'/ CHARACTER*4 IUDET INTEGER IMOD, VMOD, L, N_T, SC REAL CUR_TR, X_IN, Y_IN, Z_IN, PX_IN, PY_IN, PZ_IN REAL TOF_IN, LEN_IN, PTOT NTRK = 0 DO IMOD=1,NMAXMOD ! loop over modules DO VMOD=1,2 ! sens vol index IUDET='B'//CHAR(IMOD+48)//SENSVOL(VMOD) CALL GFHITS('FRPC',IUDET,NVDIM,NHDIM,NHMAX,0,NUMVS, & ITRACK,NUMBV,HITS,NHITS) IF (NHITS.GT.NHMAX) THEN ! overflow WRITE(6,*) 'ERROR: overflow in frpcdigi.F (nHits>', & NHMAX,') in FRpc cell',IMOD RETURN ENDIF DO L=1,NHITS ! loop over hits ! check for short straws in Straw detector SC = HITS(13,L) IF (HITS(17,L).EQ.1 .OR. HITS(9,L).EQ.0.0 ) THEN ! new volume entered or new track CUR_TR = HITS(14,L) ! save current track X_IN = (HITS(1,L)+HITS(1,L+1))/2.0 ! save parameters at entrance Y_IN = (HITS(2,L)+HITS(2,L+1))/2.0 Z_IN = (HITS(3,L)+HITS(3,L+1))/2.0 PX_IN = HITS(4,L) PY_IN = HITS(5,L) PZ_IN = HITS(6,L) TOF_IN = (HITS(7,L)+HITS(7,L+1))/2.0 LEN_IN = HITS(8,L) c write(6,*) IMOD, HITS(7,L), HITS(7,L+1) ELSE IF (HITS(14,L).EQ.CUR_TR .AND. ! same track and energy loss > 0 & HITS(9,L).GT.0.0) THEN IF (NTRK.LT.MAXTRKFRPC) THEN NTRK = NTRK + 1 ! number of tracks FRPCTRK(NTRK) = CUR_TR ! track number FRPCPART(NTRK) = HITS(15,L) ! particle id FRPCMOD(NTRK) = HITS(10,L) ! module number FRPCLAY(NTRK) = HITS(11,L) ! layer * VMOD FRPCCELL(NTRK) = HITS(12,L) ! cell number FRPCSUB(NTRK) = SC FRPCX(NTRK) = LUNIT*X_IN ! x pos at entrance (in mm) FRPCY(NTRK) = LUNIT*Y_IN ! y pos at entrance (in mm) FRPCZ(NTRK) = LUNIT*Z_IN ! z pos at entrance (in mm) PTOT = HITS(16,L)*1.0e3 ! total momentum of the particle (in MeV/c) FRPCPX(NTRK) = PX_IN*PTOT ! x component of momentum (in MeV/c) FRPCPY(NTRK) = PY_IN*PTOT ! y component of momentum (in MeV/c) FRPCPZ(NTRK) = PZ_IN*PTOT ! z component of momentum (in MeV/c) FRPCTOF(NTRK) = TOF_IN*1.0e9 ! time of flight at entrance (in ns) FRPCLEN(NTRK) = LUNIT*LEN_IN ! track length (in mm) FRPCE(NTRK) = HITS(9,L)*1.0e3 ! energy loss (in MeV) ELSE WRITE(6,*) 'ERROR: too many hits (>', & MAXTRKFRPC,') in FRpc',IMOD RETURN ENDIF ENDIF ENDDO ! end hit loop ENDDO ! end vol loop ENDDO ! end module loop IF(IROOT.EQ.1) THEN CALL FILLFRPC ENDIF RETURN END