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;
52 TObjArray* CreateBinObjArray() const;
53 TObjArray* CreateBinObjArray(const char* what) const;
54 TObjArray* CreateBinObjArray(const char* what, const char* quantity, const char* flavour) const;
56 AliAnalysisMuMuBinning* Project(const char* what, const char* quantity, const char* flavour="") const;
58 virtual void Print(Option_t* opt="") const;
60 void CreateMesh(const char* what, const char* quantity1, const char* quantity2, const char* flavour="", Bool_t remove12=kFALSE);
62 Long64_t Merge(TCollection* list);
64 Bool_t IsEqual(const TObject* obj) const;
66 class Range : public TObject {
70 Range(const char* what="",const char* quantity="",
71 Double_t xmin=TMath::Limits<Double_t>::Max(),
72 Double_t xmax=TMath::Limits<Double_t>::Max(),
73 Double_t ymin=TMath::Limits<Double_t>::Max(),
74 Double_t ymax=TMath::Limits<Double_t>::Max(),
75 const char* version="");
77 virtual Int_t Compare(const TObject* obj) const;
78 Bool_t IsEqual(const TObject* obj) const { return Compare(obj)==0; }
79 Bool_t IsSortable() const { return kTRUE; }
81 virtual TObject* Clone(const char* /*newname*/ = "") const { return new Range(*this); }
83 bool operator==(const Range& other) const { return Compare(&other)==0; }
85 bool operator!=(const Range& other) const { return !(*this==other); }
87 Bool_t IsIntegrated() const;
89 TString Quantity() const { return fQuantity; }
90 TString What() const { return fWhat; }
91 Double_t Xmin() const { return fXmin; }
92 Double_t Xmax() const { return fXmax; }
93 Double_t Ymin() const { return fYmin; }
94 Double_t Ymax() const { return fYmax; }
96 Double_t WidthX() const { return TMath::Abs(fXmin-fXmax); }
98 Double_t WidthY() const { return TMath::Abs(fYmin-fYmax); }
100 Bool_t Is2D() const { return fYmax > fYmin; }
102 const char* GetName() const { return What().Data(); }
104 TString AsString() const;
106 virtual void Print(Option_t* opt="") const;
108 Bool_t IsInRange(Double_t x, Double_t y=TMath::Limits<Double_t>::Max()) const;
110 TString Flavour() const { return fFlavour; }
113 TString fWhat; // what this range is about (e.g. J/psi particle, event, etc...)
114 TString fQuantity; // binning type (e.g. pt, y, phi)
115 Double_t fXmin; // x-min of the range
116 Double_t fXmax; // x-max of the range
117 Double_t fYmin; // x-min of the range
118 Double_t fYmax; // x-max of the range
119 TString fFlavour; // flavour (if any) this range, e.g. coarse, fine, etc...
121 ClassDef(AliAnalysisMuMuBinning::Range,3)
127 TMap* fBins; // list of bins (what -> list of bins) = (TObjString -> TObjArray)
129 ClassDef(AliAnalysisMuMuBinning,2) // custom binning for MuMu analysis