Skip to content
Snippets Groups Projects
THcShowerPlane.h 6.84 KiB
Newer Older
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
#ifndef ROOT_THcShowerPlane
#define ROOT_THcShowerPlane
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed

//////////////////////////////////////////////////////////////////////////////
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
// THcShowerPlane
//
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
//
// May want to later inherit from a THcPlane class if there are similarities
// in what a plane is shared with other detector types (shower, etc.)
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
//////////////////////////////////////////////////////////////////////////////

#include "THaSubDetector.h"
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
#include "TClonesArray.h"

Carlos Yero's avatar
Carlos Yero committed
#include <vector>
Carlos Yero's avatar
Carlos Yero committed
using namespace std;

Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
class THaEvData;
class THaSignalHit;
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed

class THcShowerPlane : public THaSubDetector {
public:
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
  THcShowerPlane( const char* name, const char* description,
			Int_t planenum, THaDetectorBase* parent = NULL);
  virtual ~THcShowerPlane();

  virtual void    Clear( Option_t* opt="" );
  virtual Int_t Decode( const THaEvData& );
  virtual EStatus Init( const TDatime& run_time );

  virtual Int_t CoarseProcess( TClonesArray& tracks );
  virtual Int_t FineProcess( TClonesArray& tracks );
  Bool_t   IsTracking() { return kFALSE; }
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
  virtual Bool_t   IsPid()      { return kFALSE; }

  virtual Int_t ProcessHits(TClonesArray* rawhits, Int_t nexthit);
  virtual Int_t CoarseProcessHits();
  virtual Int_t AccumulatePedestals(TClonesArray* rawhits, Int_t nexthit);
  virtual void  CalculatePedestals( );
  //  Double_t fSpacing;   not used
  //  TClonesArray* fParentHitList;  not used
  Double_t GetEplane_pos() {
    return fEplane_pos;
  };

  Double_t GetEplane_neg() {
    return fEplane_neg;
  };

  Double_t GetEpos(Int_t i) {
    return fEpos[i];
  };

  Double_t GetEneg(Int_t i) {
    return fEneg[i];
  };

Carlos Yero's avatar
Carlos Yero committed
    return fGoodPosAdcPulseInt[i];
Carlos Yero's avatar
Carlos Yero committed
    return fGoodNegAdcPulseInt[i];
Carlos Yero's avatar
Carlos Yero committed
    return fGoodPosAdcPulseIntRaw[i];
Carlos Yero's avatar
Carlos Yero committed
    return fGoodNegAdcPulseIntRaw[i];
    return fPosThresh[i];
  };

    return fNegThresh[i];
  };

    return fPosPed[i];
  };

    return fNegPed[i];
  };

  Int_t AccumulateStat(TClonesArray& tracks);

protected:
  THaDetectorBase* fParent;
  THcCherenkov* fCherenkov;

  // Flash ADC parameters
  Int_t fUsingFADC;		// != 0 if using FADC in sample mode
   //  1 == Use the pulse int - pulse ped
    //  2 == Use the sample integral - known ped
    //  3 == Use the sample integral - sample ped
  static const Int_t kADCStandard=0;
  static const Int_t kADCDynamicPedestal=1;
  static const Int_t kADCSampleIntegral=2;
  static const Int_t kADCSampIntDynPed=3;
Carlos Yero's avatar
Carlos Yero committed
  Int_t fDebugAdc;              // fADC debug flag
  Int_t fPedSampLow;		// Sample range for
  Int_t fPedSampHigh;		// dynamic pedestal
  Int_t fDataSampLow;		// Sample range for
  Int_t fDataSampHigh;		// sample integration
  Double_t fAdcNegThreshold;		//
  Double_t fAdcPosThreshold;		//
Carlos Yero's avatar
Carlos Yero committed
  //counting variables
  Int_t     fTotNumPosAdcHits;
  Int_t     fTotNumNegAdcHits;
  Int_t     fTotNumAdcHits;
Carlos Yero's avatar
Carlos Yero committed
  Int_t     fTotNumGoodPosAdcHits;
  Int_t     fTotNumGoodNegAdcHits;
  Int_t     fTotNumGoodAdcHits;

   //individual pmt data objects
  vector<Int_t>    fNumGoodPosAdcHits;
  vector<Int_t>    fNumGoodNegAdcHits;

  vector<Double_t>      fGoodPosAdcPed;
  vector<Double_t>      fGoodPosAdcPulseInt;
  vector<Double_t>      fGoodPosAdcPulseAmp;
  vector<Double_t>      fGoodPosAdcPulseTime;
  vector<Double_t>      fGoodPosAdcTdcDiffTime;
Carlos Yero's avatar
Carlos Yero committed
  vector<Double_t>      fGoodNegAdcPed;
  vector<Double_t>      fGoodNegAdcPulseInt;
  vector<Double_t>      fGoodNegAdcPulseAmp;
  vector<Double_t>      fGoodNegAdcPulseTime;
 vector<Double_t>       fGoodNegAdcTdcDiffTime;
Carlos Yero's avatar
Carlos Yero committed
  vector<Double_t>      fGoodPosAdcPulseIntRaw;
  vector<Double_t>      fGoodNegAdcPulseIntRaw;
  
  vector<Double_t> fGoodPosAdcMult;
  vector<Double_t> fGoodNegAdcMult;
Carlos Yero's avatar
Carlos Yero committed


  vector<Double_t>      fEpos;        // [fNelem] energy depositions seen by positive PMTs
  vector<Double_t>      fEneg;        // [fNelem] energy depositions seen by negative PMTs
  vector<Double_t>      fEmean;        // [fNelem] mean energy depositions (pos + neg)

  Double_t  fEplane_pos;   // Energy deposition in the plane from positive PMTs
  Double_t  fEplane_neg;   // Energy deposition in the plane from negative PMTs
Carlos Yero's avatar
Carlos Yero committed
  Double_t  fEplane;
  // These lists are not used actively for now.
  TClonesArray* fPosADCHits;    // List of positive ADC hits
  TClonesArray* fNegADCHits;    // List of negative ADC hits
  Int_t fLayerNum;		// Layer # 1-4
  Int_t fNPedestalEvents;	/* Pedestal event counter */
  Int_t fMinPeds;		/* Only analyze/update if num events > */
  Int_t *fPosPedSum;		/* Accumulators for pedestals */
  Int_t *fPosPedSum2;
  Int_t *fPosPedLimit;          // Analyze pedestal if ADC signal < PedLimit
  Int_t *fPosPedCount;          // [fNelem] counter of pedestal analysis
  Int_t *fNegPedSum;
  Int_t *fNegPedSum2;
  Int_t *fNegPedLimit;          // Analyze pedestal if ADC signal < PedLimit
  Int_t *fNegPedCount;          // [fNelem] counter of pedestal analysis

  Float_t *fPosPed;             // [fNelem] pedestal positions
  Float_t *fPosSig;             // [fNelem] pedestal rms-s
  Float_t *fPosThresh;          // [fNelem] ADC thresholds
  Float_t *fNegPed;
  Float_t *fNegSig;
  Float_t *fNegThresh;
  TClonesArray* frPosAdcErrorFlag;
  TClonesArray* frPosAdcPedRaw;
Carlos Yero's avatar
Carlos Yero committed
  TClonesArray* frPosAdcThreshold;
  TClonesArray* frPosAdcPulseIntRaw;
  TClonesArray* frPosAdcPulseAmpRaw;
  TClonesArray* frPosAdcPulseTimeRaw;

  TClonesArray* frPosAdcPed;
  TClonesArray* frPosAdcPulseInt;
  TClonesArray* frPosAdcPulseAmp;
  TClonesArray* frPosAdcPulseTime;
  TClonesArray* frNegAdcErrorFlag;
  TClonesArray* frNegAdcPedRaw;
Carlos Yero's avatar
Carlos Yero committed
  TClonesArray* frNegAdcThreshold;
  TClonesArray* frNegAdcPulseIntRaw;
  TClonesArray* frNegAdcPulseAmpRaw;
  TClonesArray* frNegAdcPulseTimeRaw;

  TClonesArray* frNegAdcPed;
  TClonesArray* frNegAdcPulseInt;
  TClonesArray* frNegAdcPulseAmp;
  TClonesArray* frNegAdcPulseTime;
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
  virtual Int_t  ReadDatabase( const TDatime& date );
  virtual Int_t  DefineVariables( EMode mode = kDefine );
  virtual void  InitializePedestals( );
  virtual void  FillADC_DynamicPedestal( );
  virtual void  FillADC_SampleIntegral( );
  virtual void  FillADC_SampIntDynPed( );
  virtual void  FillADC_Standard( );

  //Quatitites for efficiency calculations.

  Double_t fStatCerMin;
  Double_t fStatSlop;
  Double_t fStatMaxChi2;
  vector<Int_t> fStatNumTrk;
  vector<Int_t> fStatNumHit;
  Int_t fTotStatNumTrk;
  Int_t fTotStatNumHit;

 THcHodoscope* fglHod;		// Hodoscope to get start time
  ClassDef(THcShowerPlane,0); // Calorimeter bars in a plane
Simon Zhamkochyan's avatar
Simon Zhamkochyan committed
};
#endif