Skip to content
Snippets Groups Projects
THcCherenkov.h 3.67 KiB
Newer Older
#ifndef ROOT_THcCherenkov
#define ROOT_THcCherenkov

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Cherenkov                                                                 //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "TClonesArray.h"
#include "THaNonTrackingDetector.h"
#include "THcHitList.h"
#include "THcCherenkovHit.h"
class THcCherenkov : public hcana::ConfigLogging<THaNonTrackingDetector>, public THcHitList {
  using vec = std::vector<Double_t>;

 public:
  THcCherenkov(const char* name, const char* description = "", THaApparatus* a = NULL);
  virtual ~THcCherenkov();
  virtual void 	  Clear(Option_t* opt="");
  virtual void    Print(const Option_t* opt) const;
  virtual void    AccumulatePedestals(TClonesArray* rawhits);
  virtual void    CalculatePedestals();
  virtual Int_t   Decode(const THaEvData&);
  virtual Int_t   ReadDatabase(const TDatime& date);
  virtual Int_t   DefineVariables(EMode mode = kDefine);
  virtual Int_t   CoarseProcess(TClonesArray& tracks);
  virtual Int_t   FineProcess(TClonesArray& tracks);
  virtual Int_t   ApplyCorrections( void );
  virtual EStatus Init(const TDatime& run_time);

  void  InitArrays();
  void  DeleteArrays();
  Int_t GetIndex(Int_t nRegion, Int_t nValue);
  //  Double_t GetCerNPE() { return fNPEsum;}
  Double_t GetCerNPE();

  // Vector/TClonesArray length parameters
  static const Int_t MaxNumCerPmt   = 4;
  static const Int_t MaxNumAdcPulse = 4;

  THcCherenkov();  // for ROOT I/O
 protected:
  Int_t     fAnalyzePedestals;
  Int_t     fDebugAdc;
  Double_t* fWidth;

  Int_t     fADC_RefTimeCut;

  Int_t     fNhits;
  Int_t     fTotNumAdcHits;
  Int_t     fTotNumGoodAdcHits;
  Int_t     fTotNumTracksMatched;
  Int_t     fTotNumTracksFired;
  Double_t  fNpeSum;
  Double_t* fGain;

  vector<Int_t>    fNumAdcHits;
  vector<Int_t>    fNumGoodAdcHits;
  vector<Int_t>    fNumTracksMatched;
  vector<Int_t>    fNumTracksFired;
  vec fGoodAdcPed;
  vec fGoodAdcMult;
  vec fGoodAdcHitUsed;
  vec fGoodAdcPulseInt;
  vec fGoodAdcPulseIntRaw;
  vec fGoodAdcPulseAmp;
  vec fGoodAdcPulseTime;
  vec fGoodAdcTdcDiffTime;
  vec fNpe;

  Int_t     fNRegions;
  Int_t     fRegionsValueMax;
  Double_t  fRedChi2Min;
  Double_t  fRedChi2Max;
  Double_t  fBetaMin;
  Double_t  fBetaMax;
  Double_t  fENormMin;
  Double_t  fENormMax;
  Double_t  fDpMin;
  Double_t  fDpMax;
  Double_t  fXAtCer;
  Double_t  fYAtCer;
  Double_t*  fAdcTimeWindowMin;
  Double_t*  fAdcTimeWindowMax;
  Double_t* fRegionValue;

  // 6 Gev pedestal variables
  Int_t     fNPedestalEvents;
  Int_t     fMinPeds;
  Int_t*    fPedSum;	  /* Accumulators for pedestals */
  Int_t*    fPedSum2;
  Int_t*    fPedLimit;
  Int_t*    fPedCount;
  Double_t* fPedMean; 	  /* Can be supplied in parameters and then */
  Double_t* fPed;
  Double_t* fThresh;

  // 12 Gev FADC variables
  TClonesArray* frAdcPedRaw;
  TClonesArray* frAdcPulseIntRaw;
  TClonesArray* frAdcPulseAmpRaw;
  TClonesArray* frAdcPulseTimeRaw;
  TClonesArray* frAdcPed;
  TClonesArray* frAdcPulseInt;
  TClonesArray* frAdcPulseAmp;
  TClonesArray* frAdcPulseTime;
  TClonesArray* fAdcErrorFlag;
  void Setup(const char* name, const char* description);
  virtual void  InitializePedestals( );
 THcHodoscope* fglHod;		// Hodoscope to get start time
Zafar's avatar
Zafar committed
  ClassDef(THcCherenkov,0)        // Generic cherenkov class