00001 #ifndef GESPECTRUM_H_ 00002 #define GESPECTRUM_H_ 00003 00004 #include "BaseModule.h" 00005 #include "TAPAlgorithms.h" 00006 #include "IdChannel.h" 00007 00008 class TGlobalData; 00009 class TSetupData; 00010 namespace modules {class options;} 00011 00012 class TH1; 00013 class TH2; 00014 class TF1; 00015 00016 #include <cmath> 00017 00034 class GeSpectrum : public BaseModule { 00035 00036 private: 00037 // Histograms 00038 TH1* fHist_ADC; 00039 TH1* fHist_Energy; 00040 TH1* fHist_Time; 00041 TH1* fHist_MoreTime; 00042 TH1* fHist_ADCOOT; 00043 TH1* fHist_EnergyOOT; 00044 TH1* fHist_ADCFarOOT; 00045 TH1* fHist_EnergyFarOOT; 00046 TH1* fHist_TimeOOT; 00047 TH1* fHist_TimeFarOOT; 00048 TH2* fHist_TimeADC; 00049 TH2* fHist_TimeEnergy; 00050 TH1* fHist_MeanTOffset; 00051 00052 // Algorithms 00053 const Algorithm::MaxBinAmplitude fMBAmpGe; 00054 const Algorithm::MaxBinAmplitude fMBAmpMuSc; 00055 const Algorithm::ConstantFractionTime fCFTimeGe, fCFTimeMuSc; 00056 TF1* fADC2Energy; 00057 // Time cuts 00058 const double fTimeWindow_Small; // ns 00059 const double fTimeWindow_Big; // ns 00060 const double fPileupProtectionWindow; 00061 00062 // Channels 00063 static const IDs::channel fGeS; 00064 static const IDs::channel fGeF; 00065 static const IDs::channel fMuSc; 00066 00067 00068 public: 00073 GeSpectrum(modules::options* opts); 00076 ~GeSpectrum(); 00077 00078 private: 00086 virtual int ProcessEntry(TGlobalData *gData, const TSetupData *gSetup); 00093 virtual int BeforeFirstEntry(TGlobalData* gData, const TSetupData *setup); 00100 virtual int AfterLastEntry(TGlobalData* gData, const TSetupData *setup); 00101 00109 std::vector<double> CalculateTimes(const IDs::channel& chan, const std::vector<TPulseIsland*>& tpis); 00112 std::vector<double> CalculateEnergies(const IDs::channel& chan, const std::vector<TPulseIsland*>& tpis); 00113 00114 void ThrowIfInputsInsane(const modules::options*); 00115 void ThrowIfGeInsane(const std::vector<TPulseIsland*>& ge_fasts, const std::vector<TPulseIsland*>& ge_slows); 00116 void RemovePileupMuScPulses(std::vector<double>& time, std::vector<double>& energy); 00117 00118 }; 00119 00120 #endif //GESPECTRUM_H_