1 #ifndef ALIANALYSISMUMUBINNING_H
2 #define ALIANALYSISMUMUBINNING_H
9 // AliAnalysisMuMuBinning :
10 // helper class to store the various bins used
12 // author: L. Aphecetche (Subatech)
19 class AliAnalysisMuMuBinning : public TNamed
25 AliAnalysisMuMuBinning(const char* name="", const char* title="");
26 AliAnalysisMuMuBinning(const AliAnalysisMuMuBinning& rhs);
27 AliAnalysisMuMuBinning& operator=(const AliAnalysisMuMuBinning& rhs);
29 virtual ~AliAnalysisMuMuBinning();
31 void AddBin(const AliAnalysisMuMuBinning::Range& bin);
33 void AddBin(const char* what, const char* quantity,
34 Double_t xmin=TMath::Limits<Double_t>::Max(),
35 Double_t xmax=TMath::Limits<Double_t>::Max(),
36 const char* flavour="")
37 { AddBin(what,quantity,xmin,xmax,TMath::Limits<Double_t>::Max(),TMath::Limits<Double_t>::Max(),flavour); }
39 void AddBin(const char* what, const char* quantity,
44 const char* flavour="");
46 TObjArray* CreateWhatArray() const;
48 TObjArray* CreateQuantityArray() const;
50 Double_t* CreateBinArray() const;
51 Double_t* CreateBinArrayY() const;
52 Double_t* CreateBinArrayX() const;
54 TObjArray* CreateBinObjArray() const;
55 TObjArray* CreateBinObjArray(const char* what) const;
56 TObjArray* CreateBinObjArray(const char* what, const char* quantity, const char* flavour) const;
58 Int_t GetNBinsX() const;
59 Int_t GetNBinsY() const;
61 AliAnalysisMuMuBinning* Project(const char* what, const char* quantity, const char* flavour="") const;
63 virtual void Print(Option_t* opt="") const;
65 void CreateMesh(const char* what, const char* quantity1, const char* quantity2, const char* flavour="", Bool_t remove12=kFALSE);
67 Long64_t Merge(TCollection* list);
69 Bool_t IsEqual(const TObject* obj) const;
71 class Range : public TObject {
75 Range(const char* what="",const char* quantity="",
76 Double_t xmin=TMath::Limits<Double_t>::Max(),
77 Double_t xmax=TMath::Limits<Double_t>::Max(),
78 Double_t ymin=TMath::Limits<Double_t>::Max(),
79 Double_t ymax=TMath::Limits<Double_t>::Max(),
80 const char* version="");
82 virtual Int_t Compare(const TObject* obj) const;
83 Bool_t IsEqual(const TObject* obj) const { return Compare(obj)==0; }
84 Bool_t IsSortable() const { return kTRUE; }
86 virtual TObject* Clone(const char* /*newname*/ = "") const { return new Range(*this); }
88 bool operator==(const Range& other) const { return Compare(&other)==0; }
90 bool operator!=(const Range& other) const { return !(*this==other); }
92 Bool_t IsIntegrated() const;
94 TString Quantity() const { return fQuantity; }
95 TString What() const { return fWhat; }
96 Double_t Xmin() const { return fXmin; }
97 Double_t Xmax() const { return fXmax; }
98 Double_t Ymin() const { return fYmin; }
99 Double_t Ymax() const { return fYmax; }
101 Double_t WidthX() const { return TMath::Abs(fXmin-fXmax); }
103 Double_t WidthY() const { return TMath::Abs(fYmin-fYmax); }
105 Bool_t Is2D() const { return fYmax > fYmin; }
107 const char* GetName() const { return What().Data(); }
109 TString AsString() const;
111 virtual void Print(Option_t* opt="") const;
113 Bool_t IsInRange(Double_t x, Double_t y=TMath::Limits<Double_t>::Max()) const;
115 TString Flavour() const { return fFlavour; }
118 TString fWhat; // what this range is about (e.g. J/psi particle, event, etc...)
119 TString fQuantity; // binning type (e.g. pt, y, phi)
120 Double_t fXmin; // x-min of the range
121 Double_t fXmax; // x-max of the range
122 Double_t fYmin; // x-min of the range
123 Double_t fYmax; // x-max of the range
124 TString fFlavour; // flavour (if any) this range, e.g. coarse, fine, etc...
126 ClassDef(AliAnalysisMuMuBinning::Range,3)
132 TMap* fBins; // list of bins (what -> list of bins) = (TObjString -> TObjArray)
134 ClassDef(AliAnalysisMuMuBinning,2) // custom binning for MuMu analysis