Skip to content
Snippets Groups Projects
THcScalerEvtHandler.h 2.88 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef THcScalerEvtHandler_
    #define THcScalerEvtHandler_
    
    /////////////////////////////////////////////////////////////////////
    //
    //   THcScalerEvtHandler
    //   Class to handle Hall C scaler events (type 0)
    //   author  Edward Brash (brash@jlab.org)
    //   based on THaScalerEvtHandler by Robert Michaels (rom@jlab.org)
    //
    /////////////////////////////////////////////////////////////////////
    
    #include "THaEvtTypeHandler.h"
    #include "Decoder.h"
    #include <string>
    #include <vector>
    
    #include <cstring>
    
    
    Stephen A. Wood's avatar
    Stephen A. Wood committed
    class HCScalerLoc { // Utility class used by THaScalerEvtHandler
    
    Mark Jones's avatar
    Mark Jones committed
     HCScalerLoc(TString nm, TString desc, UInt_t isc, UInt_t ich, UInt_t iki) :
    
       name(nm), description(desc), iscaler(isc), ichan(ich), ikind(iki) { };
    
    Stephen A. Wood's avatar
    Stephen A. Wood committed
      ~HCScalerLoc();
    
      TString name, description;
      UInt_t iscaler, ichan, ivar, ikind;
    };
    
    class THcScalerEvtHandler : public THaEvtTypeHandler {
    
    public:
    
       THcScalerEvtHandler(const char*, const char*);
       virtual ~THcScalerEvtHandler();
    
       Int_t Analyze(THaEvData *evdata);
    
       Int_t AnalyzeBuffer(UInt_t *rdata, Bool_t onlysync);
    
       virtual EStatus Init( const TDatime& run_time);
    
       virtual Int_t   ReadDatabase(const TDatime& date );
    
       virtual Int_t End( THaRunBase* r=0 );
    
       virtual void SetUseFirstEvent(Bool_t b = kFALSE) {fUseFirstEvent = b;}
    
       virtual void SetDelayedType(int evtype);
    
       virtual void SetOnlyBanks(Bool_t b = kFALSE) {fOnlyBanks = b;fRocSet.clear();}
    
       virtual void SetOnlyUseSyncEvents(Bool_t b=kFALSE) {fOnlySyncEvents = b;}
    
    Mark Jones's avatar
    Mark Jones committed
       void AddVars(TString name, TString desc, UInt_t iscal, UInt_t ichan, UInt_t ikind);
    
       void DefVars();
       static size_t FindNoCase(const std::string& sdata, const std::string& skey);
    
       std::vector<Decoder::GenScaler*> scalers;
    
    Stephen A. Wood's avatar
    Stephen A. Wood committed
       std::vector<HCScalerLoc*> scalerloc;
    
       Int_t fNumBCMs;
       Double_t *fBCM_Gain;
       Double_t *fBCM_Offset;
    
    Mark Jones's avatar
    Mark Jones committed
       Double_t *fBCM_delta_charge;
       Double_t fTotalTime;
       Double_t fDeltaTime;
       Double_t fPrevTotalTime;
       Double_t fbcm_Current_Threshold;
       Double_t fClockFreq;
       Int_t fbcm_Current_Threshold_Index;
    
       std::vector <std::string> fBCM_Name;
    
       UInt_t evcount;
       Double_t evcountR;
    
       UInt_t evNumber;
       Double_t evNumberR;
    
       Int_t Nvars, ifound, fNormIdx, nscalers;
       Double_t *dvars;
    
       UInt_t *dvars_prev_read;
       std::vector<UInt_t> scal_prev_read;
       std::vector<UInt_t> scal_present_read;
       std::vector<UInt_t> scal_overflows;
    
       Double_t *dvarsFirst;
    
       Bool_t fUseFirstEvent;
    
       Bool_t fOnlySyncEvents;
    
       Int_t fClockChan;
       UInt_t fLastClock;
       Int_t fClockOverflows;
    
       std::vector<UInt_t*> fDelayedEvents;
    
       std::set<UInt_t> fRocSet;
       std::set<UInt_t> fModuleSet;
    
    
       THcScalerEvtHandler(const THcScalerEvtHandler& fh);
       THcScalerEvtHandler& operator=(const THcScalerEvtHandler& fh);
    
       ClassDef(THcScalerEvtHandler,0)  // Scaler Event handler
    
    };
    
    #endif