1 | #ifndef MARS_MHCalibrationChargeBlindPix
|
---|
2 | #define MARS_MHCalibrationChargeBlindPix
|
---|
3 |
|
---|
4 | #ifndef MARS_MHCalibrationPix
|
---|
5 | #include "MHCalibrationPix.h"
|
---|
6 | #endif
|
---|
7 |
|
---|
8 | #include <TMath.h>
|
---|
9 |
|
---|
10 | #ifndef ROOT_TF1
|
---|
11 | #include <TF1.h>
|
---|
12 | #endif
|
---|
13 |
|
---|
14 | #ifndef ROOT_TVector
|
---|
15 | #include <TVector.h>
|
---|
16 | #endif
|
---|
17 |
|
---|
18 | class TH1F;
|
---|
19 | class TPaveText;
|
---|
20 | class TText;
|
---|
21 | class MExtractedSignalBlindPixel;
|
---|
22 | class MRawEvtPixelIter;
|
---|
23 |
|
---|
24 | class MHCalibrationChargeBlindPix : public MHCalibrationPix
|
---|
25 | {
|
---|
26 | private:
|
---|
27 |
|
---|
28 | static const Float_t fgNumSinglePheLimit; //! Default for fNumSinglePheLimit (now set to: 50)
|
---|
29 | static const Float_t gkSignalInitializer; //! Signal initializer (-9999.)
|
---|
30 |
|
---|
31 | static const Double_t gkElectronicAmp; // Electronic Amplification after the PMT (in FADC counts/N_e)
|
---|
32 | static const Double_t gkElectronicAmpErr; // Error of the electronic amplification
|
---|
33 |
|
---|
34 | Float_t fSinglePheCut; // Value of summed FADC slices upon which event considered as single-phe
|
---|
35 | Float_t fNumSinglePheLimit; // Minimum number of single-phe events
|
---|
36 |
|
---|
37 | // TVector fASinglePheFADCSlices; //! Averaged FADC slice entries supposed single-phe events
|
---|
38 | // TVector fAPedestalFADCSlices; //! Averaged FADC slice entries supposed pedestal events
|
---|
39 |
|
---|
40 | TF1 *fSinglePheFit; // Single Phe Fit (Gaussians convoluted with Poisson)
|
---|
41 |
|
---|
42 | UInt_t fNumSinglePhes; // Number of entries in fASinglePheFADCSlices
|
---|
43 | UInt_t fNumPedestals; // Number of entries in fAPedestalFADCSlices
|
---|
44 |
|
---|
45 | Double_t fLambda; // Poisson mean from Single-phe fit
|
---|
46 | Double_t fLambdaCheck; // Poisson mean from Pedestal fit alone
|
---|
47 | Double_t fMu0; // Mean of the pedestal
|
---|
48 | Double_t fMu1; // Mean of single-phe peak
|
---|
49 | Double_t fSigma0; // Sigma of the pedestal
|
---|
50 | Double_t fSigma1; // Sigma of single-phe peak
|
---|
51 | Double_t fLambdaErr; // Error of Poisson mean from Single-phe fit
|
---|
52 | Double_t fLambdaCheckErr; // Error of Poisson mean from Pedestal fit alone
|
---|
53 | Double_t fMu0Err; // Error of Mean of the pedestal
|
---|
54 | Double_t fMu1Err; // Error of Mean of single-phe peak
|
---|
55 | Double_t fSigma0Err; // Error of Sigma of the pedestal
|
---|
56 | Double_t fSigma1Err; // Error of Sigma of single-phe peak
|
---|
57 | Double_t fChisquare; // Chisquare of single-phe fit
|
---|
58 | Int_t fNDF; // Ndof of single-phe fit
|
---|
59 | Double_t fProb; // Probability of singleo-phe fit
|
---|
60 |
|
---|
61 | Byte_t fFlags; // Bit-field for the flags
|
---|
62 | enum { kSinglePheFitOK, kPedestalFitOK }; // Possible bits to be set
|
---|
63 |
|
---|
64 | static Double_t FitFuncMichele(Double_t *x, Double_t *par);
|
---|
65 | static Double_t PoissonKto4(Double_t *x, Double_t *par);
|
---|
66 | static Double_t PoissonKto5(Double_t *x, Double_t *par);
|
---|
67 | static Double_t PoissonKto6(Double_t *x, Double_t *par);
|
---|
68 | static Double_t Polya(Double_t *x, Double_t *par);
|
---|
69 |
|
---|
70 | public:
|
---|
71 |
|
---|
72 | enum FitFunc_t { kEPoisson4, kEPoisson5,
|
---|
73 | kEPoisson6, kEPoisson7,
|
---|
74 | kEPolya, kEMichele }; // Possible fit functions types
|
---|
75 |
|
---|
76 | private:
|
---|
77 |
|
---|
78 | FitFunc_t fFitFunc;
|
---|
79 |
|
---|
80 | TPaveText *fFitLegend; //! Some legend to display the fit results
|
---|
81 | TH1F *fHSinglePheFADCSlices; // A histogram created and deleted only in Draw()
|
---|
82 | TH1F *fHPedestalFADCSlices; // A histogram created and deleted only in Draw()
|
---|
83 |
|
---|
84 | // Fit
|
---|
85 | Bool_t InitFit();
|
---|
86 | void ExitFit();
|
---|
87 |
|
---|
88 | void DrawLegend(Option_t *opt="");
|
---|
89 |
|
---|
90 | public:
|
---|
91 |
|
---|
92 | MHCalibrationChargeBlindPix(const char *name=NULL, const char *title=NULL);
|
---|
93 | ~MHCalibrationChargeBlindPix();
|
---|
94 |
|
---|
95 | void Clear(Option_t *o="");
|
---|
96 | void Reset() {}
|
---|
97 |
|
---|
98 | // Getters
|
---|
99 | const Double_t GetLambda () const { return fLambda; }
|
---|
100 | const Double_t GetLambdaCheck () const { return fLambdaCheck; }
|
---|
101 | const Double_t GetMu0 () const { return fMu0; }
|
---|
102 | const Double_t GetMu1 () const { return fMu1; }
|
---|
103 | const Double_t GetSigma0 () const { return fSigma0; }
|
---|
104 | const Double_t GetSigma1 () const { return fSigma1; }
|
---|
105 | const Double_t GetLambdaErr () const { return fLambdaErr; }
|
---|
106 | const Double_t GetLambdaCheckErr() const { return fLambdaCheckErr; }
|
---|
107 | const Double_t GetMu0Err () const { return fMu0Err; }
|
---|
108 | const Double_t GetMu1Err () const { return fMu1Err; }
|
---|
109 | const Double_t GetSigma0Err () const { return fSigma0Err; }
|
---|
110 | const Double_t GetSigma1Err () const { return fSigma1Err; }
|
---|
111 | const Float_t GetSinglePheCut () const { return fSinglePheCut; }
|
---|
112 |
|
---|
113 | // TVector &GetASinglePheFADCSlices() { return fASinglePheFADCSlices; }
|
---|
114 | // const TVector &GetASinglePheFADCSlices() const { return fASinglePheFADCSlices; }
|
---|
115 |
|
---|
116 | // TVector &GetAPedestalFADCSlices() { return fAPedestalFADCSlices; }
|
---|
117 | // const TVector &GetAPedestalFADCSlices() const { return fAPedestalFADCSlices; }
|
---|
118 |
|
---|
119 | const Bool_t IsSinglePheFitOK() const;
|
---|
120 | const Bool_t IsPedestalFitOK() const;
|
---|
121 |
|
---|
122 | // Setters
|
---|
123 | void SetFitFunc ( const FitFunc_t func ) { fFitFunc = func; }
|
---|
124 | void SetSinglePheCut ( const Float_t cut = 0. ) { fSinglePheCut = cut; }
|
---|
125 | void SetNumSinglePheLimit ( const Float_t lim =fgNumSinglePheLimit ) { fNumSinglePheLimit = lim; }
|
---|
126 |
|
---|
127 | void SetSinglePheFitOK ( const Bool_t b=kTRUE);
|
---|
128 | void SetPedestalFitOK ( const Bool_t b=kTRUE);
|
---|
129 |
|
---|
130 | // Fill histos
|
---|
131 | // void FillSinglePheFADCSlices(const MRawEvtPixelIter &iter);
|
---|
132 | // void FillPedestalFADCSlices( const MRawEvtPixelIter &iter);
|
---|
133 | // void FinalizeSinglePheSpectrum();
|
---|
134 |
|
---|
135 | // Draws
|
---|
136 | void Draw(Option_t *opt="");
|
---|
137 |
|
---|
138 | // Fits
|
---|
139 | Bool_t FitSinglePhe (Option_t *opt="RL0+Q");
|
---|
140 | void FitPedestal (Option_t *opt="RL0+Q");
|
---|
141 |
|
---|
142 | // Simulation
|
---|
143 | Bool_t SimulateSinglePhe(const Double_t lambda,
|
---|
144 | const Double_t mu0, const Double_t mu1,
|
---|
145 | const Double_t sigma0, const Double_t sigma1);
|
---|
146 |
|
---|
147 | ClassDef(MHCalibrationChargeBlindPix, 1) // Histogram class for Charge Blind Pixel Calibration
|
---|
148 | };
|
---|
149 |
|
---|
150 | #endif /* MARS_MHCalibrationChargeBlindPix */
|
---|