| 1 | #ifndef MARS_MHFlux | 
|---|
| 2 | #define MARS_MHFlux | 
|---|
| 3 |  | 
|---|
| 4 | #ifndef MARS_MH | 
|---|
| 5 | #include "MH.h" | 
|---|
| 6 | #endif | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef MARS_MParContainer | 
|---|
| 9 | #include "MParContainer.h" | 
|---|
| 10 | #endif | 
|---|
| 11 |  | 
|---|
| 12 | #ifndef ROOT_TH1 | 
|---|
| 13 | #include <TH1.h> | 
|---|
| 14 | #endif | 
|---|
| 15 |  | 
|---|
| 16 | #ifndef ROOT_TH2 | 
|---|
| 17 | #include <TH2.h> | 
|---|
| 18 | #endif | 
|---|
| 19 |  | 
|---|
| 20 | class TH2D; | 
|---|
| 21 |  | 
|---|
| 22 | class MHGamma; | 
|---|
| 23 | class MHEffOnTime; | 
|---|
| 24 | class MHThetabarTheta; | 
|---|
| 25 |  | 
|---|
| 26 | // base class MH is used because it defines "MakeDefCanvas" | 
|---|
| 27 | // if base class MH is used one has to define the member function Fill | 
|---|
| 28 | //                          because in MH Fill is set to zero | 
|---|
| 29 | class MHFlux : public MH | 
|---|
| 30 | { | 
|---|
| 31 | private: | 
|---|
| 32 |  | 
|---|
| 33 | TString fVarname; | 
|---|
| 34 | TString fUnit; | 
|---|
| 35 |  | 
|---|
| 36 | TH2D fHOrig;       // original distribution of E-est | 
|---|
| 37 | TH2D fHUnfold;     // unfolded distribution of E-unfold | 
|---|
| 38 | TH2D fHFlux;       // absolute differential photon flux versus E-unfold | 
|---|
| 39 | // all these plots for different bins of the variable (Theta or time) | 
|---|
| 40 |  | 
|---|
| 41 | void CalcEffCol(const TAxis &axex, TH2D &aeff, Int_t n, Double_t aeffbar[], Double_t daeffbar[]); | 
|---|
| 42 | Double_t ParabInterpolCos(const TAxis &axe, const TH2D *aeff, Int_t j, Int_t k3, Double_t val) const; | 
|---|
| 43 | void FindBins(const TAxis &axe, const Double_t bar, Int_t &k3, Int_t &k0) const; | 
|---|
| 44 | void CalcAbsGammaFlux(const TH1D &teff, const TH2D &fHAeff); | 
|---|
| 45 | Double_t ParabInterpolLog(const TAxis &axe, Int_t j, | 
|---|
| 46 | Double_t y[], Double_t Ebar) const; | 
|---|
| 47 |  | 
|---|
| 48 | public: | 
|---|
| 49 | MHFlux(const TH2D &h2d, const TString varname, const TString unit); | 
|---|
| 50 | MHFlux(const MHGamma &h2d, const TString varname, const TString unit); | 
|---|
| 51 |  | 
|---|
| 52 | void Unfold(); | 
|---|
| 53 | void CalcFlux(const TH1D *teff, const TProfile *thetabar, | 
|---|
| 54 | const TH2D *aeff); | 
|---|
| 55 |  | 
|---|
| 56 | void CalcFlux(const MHEffOnTime &teff, | 
|---|
| 57 | const MHThetabarTheta &thetabar, | 
|---|
| 58 | const TH2D *aeff); | 
|---|
| 59 |  | 
|---|
| 60 | void Draw(Option_t *option=""); | 
|---|
| 61 |  | 
|---|
| 62 | void DrawFluxProjectionX(Option_t *opt="") const; | 
|---|
| 63 | void DrawOrigProjectionX(Option_t *opt="") const; | 
|---|
| 64 |  | 
|---|
| 65 | const TH2D *GetHOrig()       { return &fHOrig; } | 
|---|
| 66 | const TH2D *GetHUnfold()     { return &fHUnfold; } | 
|---|
| 67 | const TH2D *GetHFlux()       { return &fHFlux; } | 
|---|
| 68 |  | 
|---|
| 69 | static Bool_t Parab(double x1, double x2, double x3, | 
|---|
| 70 | double y1, double y2, double y3, | 
|---|
| 71 | double *a, double *b, double *c); | 
|---|
| 72 |  | 
|---|
| 73 | static Double_t Parab(double x1, double x2, double x3, | 
|---|
| 74 | double y1, double y2, double y3, | 
|---|
| 75 | double val); | 
|---|
| 76 |  | 
|---|
| 77 | ClassDef(MHFlux, 0) //2D-plots (original, unfolded, flux) | 
|---|
| 78 | }; | 
|---|
| 79 |  | 
|---|
| 80 | #endif | 
|---|
| 81 |  | 
|---|
| 82 |  | 
|---|
| 83 |  | 
|---|
| 84 |  | 
|---|
| 85 |  | 
|---|
| 86 |  | 
|---|
| 87 |  | 
|---|
| 88 |  | 
|---|
| 89 |  | 
|---|
| 90 |  | 
|---|
| 91 |  | 
|---|
| 92 |  | 
|---|