Newer
Older
#ifndef ROOT_THcAerogel
#define ROOT_THcAerogel
///////////////////////////////////////////////////////////////////////////////
// //
// //
///////////////////////////////////////////////////////////////////////////////
#include "TClonesArray.h"
#include "THaNonTrackingDetector.h"
#include "THcHitList.h"
#include "THcAerogelHit.h"
class THcHodoscope;
class THcAerogel : public THaNonTrackingDetector, public THcHitList {
THcAerogel(const char* name, const char* description = "", THaApparatus* a = NULL);
virtual ~THcAerogel();
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);
Int_t End(THaRunBase* run=0);
Int_t GetIndex(Int_t nRegion, Int_t nValue);
THcAerogel(); // for ROOT I/O
// Event information
Int_t fNhits;
Bool_t* fPresentP;
// 12 GeV variables
// Vector/TClonesArray length parameters
static const Int_t MaxNumAdcPulse = 4;
// Tracking variables
Int_t fNRegions;
Int_t fRegionsValueMax;
Int_t fDebugAdc;
Double_t fRedChi2Min;
Double_t fRedChi2Max;
Double_t fBetaMin;
Double_t fBetaMax;
Double_t fENormMin;
Double_t fENormMax;
Double_t fDiffBoxZPos;
Double_t fXAtAero;
Double_t fYAtAero;
Double_t fNpeThresh;
//// Double_t fAdcTimeWindowMin;
//// Double_t fAdcTimeWindowMax;
Double_t *fAdcPosTimeWindowMin;
Double_t *fAdcPosTimeWindowMax;
Double_t *fAdcNegTimeWindowMin;
Double_t *fAdcNegTimeWindowMax;
Double_t fAdcTdcOffset;
Double_t *fRegionValue;
// Counting variables
Int_t fTotNumAdcHits;
Int_t fTotNumGoodAdcHits;
Int_t fTotNumPosAdcHits;
Int_t fTotNumGoodPosAdcHits;
Int_t fTotNumNegAdcHits;
Int_t fTotNumGoodNegAdcHits;
Int_t fTotNumTracksMatched;
Int_t fTotNumTracksFired;
// NPE variables
Double_t fPosNpeSum;
Double_t fNegNpeSum;
Double_t fNpeSum;
Double_t *fPosGain;
Double_t *fNegGain;
// FADC data objects
TClonesArray* frPosAdcPedRaw;
TClonesArray* frPosAdcPulseIntRaw;
TClonesArray* frPosAdcPulseAmpRaw;
TClonesArray* frPosAdcPulseTimeRaw;
TClonesArray* frPosAdcPed;
TClonesArray* frPosAdcPulseInt;
TClonesArray* frPosAdcPulseAmp;
TClonesArray* frNegAdcPedRaw;
TClonesArray* frNegAdcPulseIntRaw;
TClonesArray* frNegAdcPulseAmpRaw;
TClonesArray* frNegAdcPulseTimeRaw;
TClonesArray* frNegAdcPed;
TClonesArray* frNegAdcPulseInt;
TClonesArray* frNegAdcPulseAmp;
TClonesArray* fPosAdcErrorFlag;
TClonesArray* fNegAdcErrorFlag;
// Individual PMT data objects
vector<Int_t> fNumPosAdcHits;
vector<Int_t> fNumNegAdcHits;
vector<Int_t> fNumGoodPosAdcHits;
vector<Int_t> fNumGoodNegAdcHits;
vector<Int_t> fNumTracksMatched;
vector<Int_t> fNumTracksFired;
vector<Double_t> fPosNpe;
vector<Double_t> fNegNpe;
vector<Double_t> fGoodPosAdcPed;
vector<Double_t> fGoodPosAdcPulseInt;
vector<Double_t> fGoodPosAdcPulseIntRaw;
vector<Double_t> fGoodPosAdcPulseAmp;
vector<Double_t> fGoodPosAdcPulseTime;
vector<Double_t> fGoodPosAdcTdcDiffTime;
vector<Double_t> fGoodNegAdcPed;
vector<Double_t> fGoodNegAdcPulseInt;
vector<Double_t> fGoodNegAdcPulseIntRaw;
vector<Double_t> fGoodNegAdcPulseAmp;
vector<Double_t> fGoodNegAdcPulseTime;
vector<Double_t> fGoodNegAdcTdcDiffTime;
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
// 6 GeV era variables
Int_t fAnalyzePedestals;
Int_t fSixGevData;
Int_t fNGoodHits;
Int_t fNADCPosHits;
Int_t fNADCNegHits;
Int_t fNTDCPosHits;
Int_t fNTDCNegHits;
Int_t fTdcOffset; /* Global TDC offset */
Int_t fNPedestalEvents;
Int_t fMinPeds;
Double_t fPosNpeSumSixGev;
Double_t fNegNpeSumSixGev;
Double_t fNpeSumSixGev;
Int_t *fPosPedSum; /* Accumulators for pedestals */
Int_t *fPosPedSum2;
Int_t *fPosPedLimit;
Int_t *fPosPedCount;
Int_t *fNegPedSum;
Int_t *fNegPedSum2;
Int_t *fNegPedLimit;
Int_t *fNegPedCount;
Float_t *fA_Pos; // [fNelem] Array of ADC amplitudes
Float_t *fA_Neg; // [fNelem] Array of ADC amplitudes
Float_t *fA_Pos_p; // [fNelem] Array of ped-subtracted ADC amplitudes
Float_t *fA_Neg_p; // [fNelem] Array of ped-subtracted ADC amplitudes
Float_t *fT_Pos; // [fNelem] Array of TDCs
Float_t *fT_Neg; // [fNelem] Array of TDCs
Double_t *fPosPed;
Double_t *fPosSig;
Double_t *fPosThresh;
Double_t *fNegPed;
Double_t *fNegSig;
Double_t *fNegThresh;
Double_t *fPosPedMean; /* Can be supplied in parameters and then */
Double_t *fNegPedMean; /* be overwritten from ped analysis */
TClonesArray *fPosTDCHits;
TClonesArray *fNegTDCHits;
TClonesArray *fPosADCHits;
TClonesArray *fNegADCHits;
vector<Double_t> fPosNpeSixGev;
vector<Double_t> fNegNpeSixGev;
void Setup(const char* name, const char* description);
void DeleteArrays();
void DeletePedestalArrays();
virtual void InitializePedestals( );
THcHodoscope* fglHod; // Hodoscope to get start time
ClassDef(THcAerogel,0) // Generic aerogel class