PROGRAM TPCanalyzer USE IOunits USE Threshold USE TPCdata USE MYanalyzer USE DataFormats USE TPCpaw USE TPCio USE TPCcalcAmplitude INTEGER :: IERR,IOS,i,Event_first,Event_last,nEvents,maxEvent,lastEvent REAL :: CPUbeg,CPUend INTEGER,DIMENSION(50) :: eventList CHARACTER(LEN=80) :: ChDate,ChComment CHARACTER(LEN=*),PARAMETER :: ChVersion = "2.4, January 2005" ! see how long it takes CALL cpu_time(CPUbeg) ! initialize the files CALL IOinitialize(ChVersion,Event_first,Event_last,nEvents,eventList) ! open the MIDAS/DD file CALL OPENData(IERR) ! read the header of MIDAS/DD/MC/.. data CALL ReadHeader(ChComment,ChDate) CALL PAW_book() CALL MY_book() IF( Lcalib)THEN CALL PiniCal() ELSE CALL readCalibData() ENDIF IF( nEvents /= 0 ) maxEvent = maxval(eventList) RunLoop: DO PRINT*,"Run:",RunNumber," - ",trim(chDate)," / ",trim(ChComment) i = 0 lastEvent = 0 IF( LDData ) CALL WriteDenseHeader(ChComment,ChDate) EventLoop: DO CALL ReadEvent(IERR) IF( IERR /= 0 ) EXIT EventLoop i = i+1 ! is this event to be processed? IF( nEvents /= 0 )THEN ! event list IF( EventNumber > maxEvent ) THEN i = i-1 EXIT EventLoop ENDIF IF( all(EventNumber/=eventList) ) CYCLE EventLoop ELSEIF( Event_first/=0 .OR. Event_last/=0 )THEN IF( i < Event_first ) CYCLE EventLoop IF( i > Event_last ) THEN i = i-1 EXIT EventLoop ENDIF ENDIF lastEvent = EventNumber IF( MODULO(i,100) == 0 ) THEN ! where am I? OPEN(UNIT=IOBatch,FILE="TPC.wo",STATUS="REPLACE",ACTION="WRITE",& ACCESS="SEQUENTIAL",FORM="FORMATTED",POSITION="REWIND",IOSTAT=IOS) IF( IOS==0 )THEN WRITE(UNIT=IOBatch,FMT=*) "Event: ",i,EventNumber," Run:",RunNumber CLOSE(UNIT=IOBatch) ENDIF ENDIF ! Calculate Pedestal CALL calcPedestal() ! Subtract Pedestal from ADC CALL subPedestal() IF( Lcalib )THEN CALL Calibrate() ELSEIF( LDData )THEN CALL DenseData() ELSE ! USER routine - main analysis - MYanalyzer CALL analyzEvent(i) ENDIF ENDDO EventLoop IF( LDData ) CALL WriteEndOfRun() PRINT*,"Run: ",RunNumber,"; total number of events: ",i & ,"; last event:",lastEvent ! close/open the MIDAS/DD file CALL OPENData(IERR) IF( IERR /=0 ) EXIT RunLoop ! read the header of MIDAS/DD data CALL ReadHeader(ChComment,ChDate) ENDDO RunLoop CALL IOEND() ! see how long it takes CALL cpu_time(CPUend) PRINT*,"Used CPU:", i," events,",CPUend-CPUbeg," sec" PRINT*,"ByeBye..." END PROGRAM TPCanalyzer