// ESAF : Euso Simulation and Analysis Framework // $Id: EsafSpectrum.hh,v 1.8 2005/04/26 15:38:55 thea Exp $ // R.Pesce created Oct, 31 2003 // // spectrum facility // Able to generate random number according to the defined distribution // Use Float_t arrays // #ifndef __EUSOSPECTRUM_HH_ #define __EUSOSPECTRUM_HH_ #include "euso.hh" #include "TH1.h" #include "TF1.h" #include "TAxis.h" #include "TFormula.h" #include "TGraph.h" #include "TString.h" #include "EsafMsgSource.hh" class EsafSpectrum: public EsafMsgSource { public: EsafSpectrum(); EsafSpectrum(Float_t wl); EsafSpectrum(Float_t wlmin, Float_t wlmax); EsafSpectrum(const char* name); EsafSpectrum(const TH1F* histo); EsafSpectrum(const TF1* func); EsafSpectrum(TFormula* formula, Int_t nbins, Float_t xmin, Float_t xmax); // copy ctor EsafSpectrum(const EsafSpectrum&); virtual ~EsafSpectrum(); void Copy(EsafSpectrum&) const; void Reset(Float_t wl); void Reset(Float_t wlmin, Float_t wlmax); void Reset(const TH1F* histo); void Reset(const TF1* func); void Reset(TFormula* formula, Int_t nbins, Float_t xmin, Float_t xmax); Float_t GetLambda() const; Float_t GetLambda(Int_t i) const; inline Float_t GetLambdaMin() const {return (Float_t)fAxis.GetXmin();} inline Float_t GetLambdaMax() const {return (Float_t)fAxis.GetXmax();} inline Float_t GetLambdaEntry(Int_t i) const { return (Float_t)fAxis.GetBinCenter(i+1); } // GetMember methods inline const TAxis& GetAxis() const {return fAxis;} inline const TGraph* GetGraph() const {return fGraph;} inline const TString& GetString() const {return fName;} inline const Float_t* GetSpec() const {return fSpectrum.GetArray();} inline const Float_t* GetIntegral() const {return fIntegral.GetArray();} inline const char* GetName() const {return fName.Data();} // return the " fSpectrum[i]*binwidth[i] " inline Float_t GetWeight(Int_t i) const {return (i == 0) ? fIntegral[0] : fIntegral[i] - fIntegral[i-1];} // fill all the bins with the given value void Clear(Float_t val = 1); void Draw(); // convolute the spectrum with the given table of coefficients // spectrum is renormalized (integration equal to one) // and the normalization value is returned Float_t ConvoluteAndNormalize(const Double_t*); // idem ConvoluteAndNormalize() method, but WITHOUT renormalization void Convolute(const Double_t*); private: void BuildMono(Float_t wl); void BuildFlat(Float_t wlmin, Float_t wlmax); void BuildHisto(const TH1F* histo); void BuildFunction(const TF1* func); void BuildFormula(TFormula* formula, Int_t nbins, Float_t xmin, Float_t xmax); void BuildTest(); inline void SetArraysSize( Int_t ); TArrayF fSpectrum; TArrayF fIntegral; TAxis fAxis; TGraph *fGraph; TString fName; ClassDef(EsafSpectrum,0) }; // inline functions inline void EsafSpectrum::SetArraysSize( Int_t size ) { fSpectrum.Set(size); fIntegral.Set(size+2); } #endif /* __EUSOSPECTRUM_HH_ */