ALICE version of the Universal Correlation analysis package UNICOR.
[u/mrichter/AliRoot.git] / UNICOR / AliDHN.h
1 // Author: Dariusz Miskowiec <mailto:d.miskowiec@gsi.de> 2007
2
3 #ifndef AliDHN_H
4 #define AliDHN_H
5
6 #include <TH1.h>
7 class TH2D;
8 class TAxis;
9
10 const Int_t fMaxNdim=10;                     // maximum number of dimensions
11
12 //=============================================================================
13 class AliDHN : public TH1D {
14
15  public:
16   AliDHN() : TH1D(), fNdim(0)                  {printf("AliDHN object created\n");}
17   AliDHN(Char_t *nam, Int_t ndim, TAxis **ax); // constructor from scratch
18   AliDHN(Char_t *filename, Char_t *name);      // constructor from file
19   virtual ~AliDHN()                            {printf("AliDHN object %s deleted\n",GetName());}
20   Int_t GetNdim() const                     {return fNdim;}
21   TAxis *GetAxis(Int_t i)                   {return &fAxis[i];}
22   void Fill(Double_t *xx, Double_t y=1);    // fill histo
23   void Fill(Double_t x0=0, Double_t x1=0, 
24             Double_t x2=0, Double_t x3=0, 
25             Double_t x4=0, Double_t x5=0, 
26             Double_t x6=0, Double_t x7=0, 
27             Double_t x8=0, Double_t x9=0,
28             Double_t x10=0) {               // fill histo; fNdim-th arg is weight
29     Double_t xx[fMaxNdim+1] = {x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10};
30     Fill(xx,xx[fNdim]);}
31   Int_t Write();                            // save histo and axis on file 
32   Int_t Write(const char *, Int_t, Int_t)   {return Write();} 
33   // project along (integrate over) one axis
34   AliDHN  *ProjectAlong(char *nam, Int_t dim, Int_t first=-1, Int_t last=-1);  
35   // project on 1-dim histogram
36   TH1D *ProjectOn(char *nam, Int_t dim, Int_t *first=0, Int_t *last=0);
37   // project on 1-dim histogram
38   TH1D *ProjectOn(char *nam, Int_t dim, Double_t *first, Double_t *last);
39   // project on 2-dim histogram
40   TH2D *ProjectOn(char *nam, Int_t dim0, Int_t dim1, Int_t *first=0, Int_t *last=0);
41
42  protected:
43
44   Int_t       fNdim;                        // number of dimensions
45   TAxis       fAxis[fMaxNdim];              // axes
46   Int_t       fNbins[fMaxNdim];             // {fAxis[0]->GetNbins(),fAxis[1]->...
47   Int_t       fMbins[fMaxNdim];             // {...[fNdim-2]*fNbins[fNdim-1],fNbins[fNdim-1],1}
48
49   static Int_t Albins(Int_t n, TAxis **ax); // product of nbins of ax[0]...ax[n-1]
50   Int_t MulToOne(Int_t *k) const;           // calc 1-dim index from n-dim indices
51   Int_t MulToOne(Double_t *x);              // calc 1-dim index from n-dim vector
52   void  OneToMul(Int_t n, Int_t *k);        // calc n-dim indices from 1-dim index
53
54   ClassDef(AliDHN,1)
55 };
56 //=============================================================================
57 #endif