Update master to aliroot
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliTRDNDFast.h
1 // Author: Daniel.Lohner@cern.ch
2
3 #ifndef ALIROOT_AliTRDNDFast
4 #define ALIROOT_AliTRDNDFast
5
6 #ifndef ROOT_TH1
7 #include "TH1F.h"
8 #endif
9 #ifndef ROOT_TArrayF
10 #include "TArrayF.h"
11 #endif
12 #ifndef ROOT_TF2
13 #include "TF1.h"
14 #endif
15 #ifndef ROOT_TMath
16 #include "TMath.h"
17 #endif
18 #ifndef ROOT_TRandom
19 #include "TRandom.h"
20 #endif
21
22 using namespace std;
23
24 extern Double_t langaufun(Double_t *x,Double_t *par);
25
26 class AliTRDNDFast : public TObject {
27
28 public:
29     static const Int_t kNpar = 5;
30
31     AliTRDNDFast();
32     AliTRDNDFast(const char *name,Int_t ndim,Int_t nbins,Double_t xlow,Double_t xup);
33     AliTRDNDFast(const AliTRDNDFast&);
34     AliTRDNDFast &operator=(const AliTRDNDFast &ref);
35     virtual ~AliTRDNDFast();
36     
37     TF1 *FitLandau(TString name,TH1F *htemp,Double_t range[2],TString option);
38
39     void Build(TH1F **hdEdx,TString path="");
40     void Build(Double_t **pars);
41     Double_t Eval(Double_t *point) const;
42     void Random(Double_t *point) const;
43     Int_t GetNDim(){return fNDim;};
44     Double_t GetParam(Int_t dim,Int_t par){if((dim>=0)&&(dim<fNDim)&&(par>=0)&&(par<kNpar)){return fPars[par].GetAt(dim);}else{return 0;}};
45     void PrintPars();
46     static void Random(Double_t *point,AliTRDNDFast *nd0,AliTRDNDFast *nd1,Double_t w0,Double_t w1);
47
48 private:
49
50     void ScaleLangauFun(TF1 *func,Double_t mpv);
51     TF1 *GetLangauFun(TString funcname,Double_t range[2],Double_t scalefactor=1);
52     void BuildHistos();
53     void Init();
54     void Cleanup();
55     
56     static Int_t BinarySearchInterpolation(Int_t start,Int_t end,Double_t *a0,Double_t *a1,Double_t w0,Double_t w1,Double_t val);
57     static Double_t GetRandomInterpolation(TH1F *hist0,TH1F *hist1,Double_t w0,Double_t w1);
58
59     Int_t fNDim; // Dimensions
60     TString fTitle; //title
61     TF1 **fFunc; //! functions, do not store
62     TH1F **fHistos; //[fNDim] Histograms
63     TArrayF fPars[kNpar]; // parameters
64
65     ClassDef(AliTRDNDFast,1)  //Fast TRD ND class
66 };
67
68 #endif