| 1 | #ifndef MARS_MHGausEvents | 
|---|
| 2 | #define MARS_MHGausEvents | 
|---|
| 3 |  | 
|---|
| 4 | #ifndef ROOT_TH1 | 
|---|
| 5 | #include <TH1.h> | 
|---|
| 6 | #endif | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef MARS_MH | 
|---|
| 9 | #include "MH.h" | 
|---|
| 10 | #endif | 
|---|
| 11 |  | 
|---|
| 12 | class TVirtualPad; | 
|---|
| 13 | class TGraph; | 
|---|
| 14 | class TArrayF; | 
|---|
| 15 | class TH1F; | 
|---|
| 16 | class TH1I; | 
|---|
| 17 | class TF1; | 
|---|
| 18 | class MHGausEvents : public MH | 
|---|
| 19 | { | 
|---|
| 20 | private: | 
|---|
| 21 |  | 
|---|
| 22 | const static Float_t  fgProbLimit;            // Default probability limit for judgement if fit is OK | 
|---|
| 23 | const static Int_t    fgNDFLimit;             // Default NDF limit for judgement if fit is OK | 
|---|
| 24 | const static Int_t    fgPowerProbabilityBins; // Default number of bins for the projected power spectrum | 
|---|
| 25 | const static Int_t    fgBinsAfterStripping;   // Default number of bins for the Gauss Histogram after stripping off the zeros at both end | 
|---|
| 26 |  | 
|---|
| 27 | Int_t    fPowerProbabilityBins;      // number of bins for the projected power spectrum | 
|---|
| 28 | Int_t    fBinsAfterStripping;        // number of bins for the Gauss Histogram after stripping off the zeros at both end | 
|---|
| 29 | Float_t  fEventFrequency;            // The event frequency in Hertz (to be set) | 
|---|
| 30 |  | 
|---|
| 31 | TH1I    *fHPowerProbability;         // Fourier transform of fEvents projected on y-axis | 
|---|
| 32 | TArrayF *fPowerSpectrum;             // Fourier transform of fEvents | 
|---|
| 33 |  | 
|---|
| 34 | TGraph  *fGraphEvents;               //! TGraph to display the event array (will not be cloned!!) | 
|---|
| 35 | TGraph  *fGraphPowerSpectrum;        //! TGraph to display the power spectrum array (will not be cloned!!) | 
|---|
| 36 |  | 
|---|
| 37 | Double_t fMean;                      //   Mean of the Gauss fit | 
|---|
| 38 | Double_t fSigma;                     //   Sigma of the Gauss fit | 
|---|
| 39 | Double_t fMeanErr;                   //   Error of the mean of the Gauss fit | 
|---|
| 40 | Double_t fSigmaErr;                  //   Error of the sigma of the Gauss fit | 
|---|
| 41 | Double_t fProb;                      //   Probability of the Gauss fit (derived from Chi-Square and NDF | 
|---|
| 42 |  | 
|---|
| 43 | enum { kGausFitOK, kExpFitOK, kFourierSpectrumOK }; // Bits to hold information about fit results | 
|---|
| 44 |  | 
|---|
| 45 | Byte_t fFlags;                       //   Byte to hold the bits fit result bits | 
|---|
| 46 |  | 
|---|
| 47 | Int_t fCurrentSize;                  //   Current size of the array fEvents | 
|---|
| 48 |  | 
|---|
| 49 | protected: | 
|---|
| 50 |  | 
|---|
| 51 | TH1F    fHGausHist;                  // Histogram which should hold the Gaussian distribution | 
|---|
| 52 | TArrayF fEvents;                     // Array which holds the entries of GausHist | 
|---|
| 53 |  | 
|---|
| 54 | TF1     *fFGausFit;                  // Gauss fit for fHGausHist | 
|---|
| 55 | TF1     *fFExpFit;                   // Exponential fit for FHPowerProbability | 
|---|
| 56 |  | 
|---|
| 57 | Float_t  fProbLimit;                 // Probability limit for judgement if fit is OK | 
|---|
| 58 | Int_t    fNDFLimit;                  // NDF limit for judgement if fit is OK | 
|---|
| 59 |  | 
|---|
| 60 | // Setters | 
|---|
| 61 | void  SetPowerProbabilityBins ( const Int_t nbins=fgPowerProbabilityBins ) { fPowerProbabilityBins = nbins;  } | 
|---|
| 62 | void  SetBinsAfterStripping   ( const Int_t nbins=fgBinsAfterStripping   ) { fBinsAfterStripping   = nbins;  } | 
|---|
| 63 |  | 
|---|
| 64 | void DrawEvents();                                  // Draw a graph of the array fEvents | 
|---|
| 65 | void DrawPowerSpectrum(TVirtualPad &pad, Int_t i);  // Draw a graph of the array fPowerSpectrum and the hist fHPowerProbability | 
|---|
| 66 |  | 
|---|
| 67 | Float_t *CreateXaxis(Int_t n);      //   Create an x-axis for the TGraphs | 
|---|
| 68 |  | 
|---|
| 69 | public: | 
|---|
| 70 |  | 
|---|
| 71 | MHGausEvents(const char* name=NULL, const char* title=NULL); | 
|---|
| 72 | ~MHGausEvents(); | 
|---|
| 73 |  | 
|---|
| 74 | virtual void Clear(Option_t *o=""); | 
|---|
| 75 | virtual void Reset(); | 
|---|
| 76 |  | 
|---|
| 77 | // Setters | 
|---|
| 78 | void  SetEventFrequency(const Float_t f=0)  {  fEventFrequency = f; } | 
|---|
| 79 |  | 
|---|
| 80 | void  SetMean    ( const Double_t d )   { fMean     = d;   } | 
|---|
| 81 | void  SetMeanErr ( const Double_t d )   { fMeanErr  = d;   } | 
|---|
| 82 | void  SetSigma   ( const Double_t d )   { fSigma    = d;   } | 
|---|
| 83 | void  SetSigmaErr( const Double_t d )   { fSigmaErr = d;   } | 
|---|
| 84 | void  SetProb    ( const Double_t d )   { fProb     = d;   } | 
|---|
| 85 |  | 
|---|
| 86 | void  SetProbLimit( const Float_t lim=fgProbLimit ) {  fProbLimit = lim; } | 
|---|
| 87 | void  SetNDFLimit(  const Int_t   lim=fgNDFLimit  ) {  fNDFLimit = lim;  } | 
|---|
| 88 |  | 
|---|
| 89 | // Setters ONLY for MC: | 
|---|
| 90 | void  SetGausFitOK(         const Bool_t b ); | 
|---|
| 91 | void  SetExpFitOK(          const Bool_t b ); | 
|---|
| 92 | void  SetFourierSpectrumOK( const Bool_t b ); | 
|---|
| 93 |  | 
|---|
| 94 | // Getters | 
|---|
| 95 | const Double_t GetMean()          const { return fMean;      } | 
|---|
| 96 | const Double_t GetMeanErr()       const { return fMeanErr;   } | 
|---|
| 97 | const Double_t GetSigma()         const { return fSigma;     } | 
|---|
| 98 | const Double_t GetSigmaErr()      const { return fSigmaErr;  } | 
|---|
| 99 | const Double_t GetChiSquare()     const; | 
|---|
| 100 | const Double_t GetProb()          const { return fProb;      } | 
|---|
| 101 | const Int_t    GetNdf()           const; | 
|---|
| 102 |  | 
|---|
| 103 | const Double_t GetSlope()        const; | 
|---|
| 104 | const Double_t GetOffset()       const; | 
|---|
| 105 | const Double_t GetExpChiSquare() const; | 
|---|
| 106 | const Double_t GetExpProb()      const; | 
|---|
| 107 | const Int_t    GetExpNdf()       const; | 
|---|
| 108 |  | 
|---|
| 109 | TH1F *GetHGausHist()                     { return &fHGausHist;     } | 
|---|
| 110 | const TH1F *GetHGausHist()         const { return &fHGausHist;     } | 
|---|
| 111 |  | 
|---|
| 112 | TArrayF *GetEvents()                     { return &fEvents;        } | 
|---|
| 113 | const TArrayF *GetEvents()         const { return &fEvents;        } | 
|---|
| 114 |  | 
|---|
| 115 | TArrayF *GetPowerSpectrum()              { return fPowerSpectrum;  } | 
|---|
| 116 | const TArrayF *GetPowerSpectrum()  const { return fPowerSpectrum;  } | 
|---|
| 117 |  | 
|---|
| 118 | TF1 *GetFGausFit()                       { return fFGausFit;       } | 
|---|
| 119 | const TF1 *GetFGausFit()           const { return fFGausFit;       } | 
|---|
| 120 |  | 
|---|
| 121 | TH1I *GetHPowerProbability()             { return fHPowerProbability; } | 
|---|
| 122 | const TH1I *GetHPowerProbability() const { return fHPowerProbability; } | 
|---|
| 123 |  | 
|---|
| 124 | TF1 *GetFExpFit()                        { return fFExpFit;        } | 
|---|
| 125 | const TF1 *GetFExpFit()            const { return fFExpFit;        } | 
|---|
| 126 |  | 
|---|
| 127 | TGraph *GetGraphEvents()                 { return fGraphEvents;    } | 
|---|
| 128 | const TGraph *GetGraphEvents()     const { return fGraphEvents;    } | 
|---|
| 129 |  | 
|---|
| 130 | TGraph *GetGraphPowerSpectrum()             { return fGraphPowerSpectrum;  } | 
|---|
| 131 | const TGraph *GetGraphPowerSpectrum() const { return fGraphPowerSpectrum;  } | 
|---|
| 132 |  | 
|---|
| 133 | const Bool_t IsGausFitOK()          const; | 
|---|
| 134 | const Bool_t IsExpFitOK()           const; | 
|---|
| 135 | const Bool_t IsEmpty()              const; | 
|---|
| 136 | const Bool_t IsFourierSpectrumOK()  const; | 
|---|
| 137 |  | 
|---|
| 138 | // Fill | 
|---|
| 139 | void FillArray(const Float_t f);            // Fill only the array fEvents | 
|---|
| 140 | Bool_t FillHist(const Float_t f);           // Fill only the histogram HGausHist | 
|---|
| 141 | Bool_t FillHistAndArray(const Float_t f);   // Fill bothe the array fEvents and the histogram HGausHist | 
|---|
| 142 |  | 
|---|
| 143 | // Fits | 
|---|
| 144 | Bool_t FitGaus(Option_t *option="RQ0", const Double_t xmin=0., const Double_t xmax=0.);     // Fit the histogram HGausHist with a Gaussian | 
|---|
| 145 |  | 
|---|
| 146 | // Draws | 
|---|
| 147 | virtual void Draw(Option_t *option="");     // Default Draw | 
|---|
| 148 |  | 
|---|
| 149 | // Prints | 
|---|
| 150 | virtual void Print(const Option_t *o="") const; // Default Print | 
|---|
| 151 |  | 
|---|
| 152 | // Miscelleaneous | 
|---|
| 153 | void CreateFourierSpectrum();             // Create the fourier spectrum out of fEvents | 
|---|
| 154 | void CreateGraphEvents();                 // Create the TGraph fGraphEvents of fEvents | 
|---|
| 155 | void CreateGraphPowerSpectrum();          // Create the TGraph fGraphPowerSpectrum out of fPowerSpectrum | 
|---|
| 156 |  | 
|---|
| 157 | ClassDef(MHGausEvents, 1)                 // Base class for events with Gaussian distributed values | 
|---|
| 158 | }; | 
|---|
| 159 |  | 
|---|
| 160 | #endif | 
|---|