MODULE MYanalyzer USE IOunits USE Threshold USE TPCdata USE TPCpaw USE TPCcalcAmplitude USE TPCtrack USE Space PRIVATE PUBLIC :: DenseData PUBLIC :: analyzEvent,MY_book PRIVATE :: NF_analysis,HF_test CONTAINS SUBROUTINE analyzEvent(iEvent) INTEGER,INTENT(IN) :: iEvent INTEGER :: IVETO,IERR REAL,DIMENSION(100) :: Xdata TYPE(Line_type) :: ZTrack,seedTrack ! TYPE(Line_type) :: fitTrack TYPE(XYTrack_type) :: fitTrack REAL(KIND=spPrec) :: X0Start,PhiStart,X0Fit,PhiFit,invRad,Width,Z,theta REAL :: time0,deltaT,dX INTEGER,DIMENSION(2) :: iGroupV=(/16,48/) INTEGER,DIMENSION(2) :: iRowSeed1=(/1,2/),iRowSeed2=(/9,10/) INTEGER,DIMENSION(8) :: iRowT=(/1,2,4,5,6,7,9,10/) INTEGER,DIMENSION(1) :: iRowF ! Where am I? ! IF( MODULO(iEvent,50) == 0 ) & ! PRINT*,"Event: ",iEvent,EventNumber," Run:",RunNumber ! get the signal amplitudes, choose one of ! CALL calcAmplitudePad() CALL calcAmplitudeRow() ! CALL calcAmplitudeFoil() CALL HF_amplitude(iRowT) ! correct the gain ! CALL correctGain() ! plain event dispay and plot pulse shapes CALL NF_event() CALL plotPulseEvent() ! preselection CALL eventVeto(iGroupV,iRowSeed1,iRowSeed2,iRowT,IVETO) CALL HF_veto(IVETO) IF( IVETO /= 0 )RETURN ! find seed track and NF for event display CALL findSeedTrack(iRowSeed1,iRowSeed2,iRowT,seedTrack,IERR) CALL HF_seedTrack(IERR+1) ! CALL NF_event(seedTrack) IF( IERR /= 0 ) RETURN ! possibility to de-multiplex data and NF for event display ! CALL deMultiplex(seedTrack) ! CALL NF_event(seedTrack) ! improved T0 and amplitude determination - CPU consuming ! CALL fitAllPulses() ! Z-Y track, linear regression or fit ! returns time bins CALL TimeLine(iRowT,time0,deltaT) ! returns a line in Z-Y, drift velocity must be given CALL TrackFitZ(iRowT,ZTrack) CALL getLine(ZTrack,Z,THETA) ! get the track width from the ZTrack at a given Y (row position) ! parameters must be given Width = trackWidth(ZTrack,0.0) ! track fit without radius ! fitTrack = seedTrack ! track fit with radius, start value 1/R=0 fitTrack = XYTrack(seedTrack,0.0) ! X-Y track, with or without variable track width, NF for event display ! fit 3 parameters ! CALL TrackFitWidth(iRowT,fitTrack,Width) ! fit 2 parameters, calculate width from time0 or ZTrack ! CALL TrackFitXY(iRowT,time0,fitTrack) CALL TrackFitXY(iRowT,ZTrack,fitTrack) CALL NF_event(fitTrack,Width) ! resolution fit iRowF(1) = 5 ! difference dX of position determined in row(s) iRowF and fitTrack ! assuming width, angle (and radius) as for fitTrack ! CALL TrackFitX(iRowF,Width,fitTrack,dX) ! width is calculated from ZTrack CALL TrackFitX(iRowF,ZTrack,fitTrack,dX) ! fill ntuple for analysis CALL getLine(seedTrack,X0Start,PhiStart) ! CALL getLine(fitTrack,X0Fit,PhiFit) CALL getXYTrack(fitTrack,X0Fit,PhiFit,invRad) Xdata = -1.0E6 Xdata(1) = RunNumber Xdata(2) = EventNumber Xdata(3) = X0Start Xdata(4) = PhiStart Xdata(5) = X0Fit Xdata(6) = PhiFit Xdata(7) = Width Xdata(8) = time0 Xdata(9) = deltaT Xdata(10) = Z Xdata(11) = theta Xdata(12) = dX CALL NF_analysis(Xdata) END SUBROUTINE analyzEvent SUBROUTINE MY_book() ! book histograms & Ntuples for analyzEvent CHARACTER(LEN=8),DIMENSION(1000) :: CHtag INTEGER :: ntag ! Histograms, numbers >1039 CALL HBOOK1(1040,"test",100,0.0,10.0,0.0) CHtag(1) = "RUN" CHtag(2) = "EVENT" CHtag(3) = "X0START" CHtag(4) = "PHISTART" CHtag(5) = "X0FIT" CHtag(6) = "PHIFIT" CHtag(7) = "SIGMAFIT" CHtag(8) = "T0" CHtag(9) = "TSLOPE" CHtag(10) = "Z" CHtag(11) = "THETA" CHtag(12) = "DX" ntag = 12 CALL NT_book(951,"Analysis",ntag,CHtag) END SUBROUTINE MY_book ! NTUPLE fill ********************************************** SUBROUTINE NF_analysis(Xdata) REAL,DIMENSION(:),INTENT(IN) :: Xdata CALL HFN(951,Xdata) END SUBROUTINE NF_analysis ! HISTOGRAM fill ********************************************** SUBROUTINE HF_test(x,y,w) REAL,INTENT(IN) :: x,y,w CALL HFILL(1040,x,y,w) END SUBROUTINE HF_test ! >>>> WRITE DENSE DATA >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SUBROUTINE DenseData() USE DataFormats, only : WriteDenseData ! INTEGER :: IVETO ! get the signal amplitudes CALL calcAmplitudeFoil() ! preselection ! CALL eventVeto(IVETO) ! IF( IVETO /= 0 )RETURN CALL WriteDenseData() END SUBROUTINE DenseData END MODULE MYanalyzer