ROOT logo
#ifndef ALIANALYSISMUMUBINNING_H
#define ALIANALYSISMUMUBINNING_H

#include "TNamed.h"
#include "TString.h"
#include "TMath.h"

//
// AliAnalysisMuMuBinning :
// helper class to store the various bins used
//
// author: L. Aphecetche (Subatech)
//

class TMap;
class TObjArray;


class AliAnalysisMuMuBinning : public TNamed
{
public:
  
  class Range;
  
  AliAnalysisMuMuBinning(const char* name="", const char* title="");
  AliAnalysisMuMuBinning(const AliAnalysisMuMuBinning& rhs);
  AliAnalysisMuMuBinning& operator=(const AliAnalysisMuMuBinning& rhs);
  
  virtual ~AliAnalysisMuMuBinning();
  
  void AddBin(const AliAnalysisMuMuBinning::Range& bin);

  void AddBin(const char* what, const char* quantity,
              Double_t xmin=TMath::Limits<Double_t>::Max(),
              Double_t xmax=TMath::Limits<Double_t>::Max(),
              const char* flavour="")
  { AddBin(what,quantity,xmin,xmax,TMath::Limits<Double_t>::Max(),TMath::Limits<Double_t>::Max(),flavour); }

  void AddBin(const char* what, const char* quantity,
              Double_t xmin,
              Double_t xmax,
              Double_t ymin,
              Double_t ymax,
              const char* flavour="");

  TObjArray* CreateWhatArray() const;

  TObjArray* CreateQuantityArray() const;
  
  Double_t* CreateBinArray() const;
  Double_t* CreateBinArrayY() const;
  Double_t* CreateBinArrayX() const;

  TObjArray* CreateBinObjArray() const;
  TObjArray* CreateBinObjArray(const char* what) const;
  TObjArray* CreateBinObjArray(const char* what, const char* quantity, const char* flavour) const;
  
  Int_t GetNBinsX() const;
  Int_t GetNBinsY() const;
  
  AliAnalysisMuMuBinning* Project(const char* what, const char* quantity, const char* flavour="") const;
  
  virtual void Print(Option_t* opt="") const;
  
  void CreateMesh(const char* what, const char* quantity1, const char* quantity2, const char* flavour="", Bool_t remove12=kFALSE);

  Long64_t Merge(TCollection* list);

  Bool_t IsEqual(const TObject* obj) const;
  
  class Range : public TObject {
    
  public:
    
    Range(const char* what="",const char* quantity="",
          Double_t xmin=TMath::Limits<Double_t>::Max(),
          Double_t xmax=TMath::Limits<Double_t>::Max(),
          Double_t ymin=TMath::Limits<Double_t>::Max(),
          Double_t ymax=TMath::Limits<Double_t>::Max(),
          const char* version="");
    
    virtual Int_t	Compare(const TObject* obj) const;
    Bool_t IsEqual(const TObject* obj) const { return Compare(obj)==0; }
    Bool_t IsSortable() const { return kTRUE; }
    
    virtual TObject* Clone(const char* /*newname*/ = "") const { return new Range(*this); }
    
    bool operator==(const Range& other) const { return Compare(&other)==0; }

    bool operator!=(const Range& other) const { return !(*this==other); }

    Bool_t IsIntegrated() const;

    TString Quantity() const { return fQuantity; }
    TString What() const { return fWhat; }
    Double_t Xmin() const { return fXmin; }
    Double_t Xmax() const { return fXmax; }
    Double_t Ymin() const { return fYmin; }
    Double_t Ymax() const { return fYmax; }
    
    Double_t WidthX() const { return TMath::Abs(fXmin-fXmax); }
    
    Double_t WidthY() const { return TMath::Abs(fYmin-fYmax); }
    
    Bool_t Is2D() const { return fYmax > fYmin; }
    
    const char* GetName() const { return What().Data(); }
    
    TString AsString() const;
    
    virtual void Print(Option_t* opt="") const;
    
    Bool_t IsInRange(Double_t x, Double_t y=TMath::Limits<Double_t>::Max()) const;
    
    TString Flavour() const { return fFlavour; }
    
  private:
    TString fWhat; // what this range is about (e.g. J/psi particle, event, etc...)
    TString fQuantity; // binning type (e.g. pt, y, phi)
    Double_t fXmin; // x-min of the range
    Double_t fXmax; // x-max of the range
    Double_t fYmin; // x-min of the range
    Double_t fYmax; // x-max of the range
    TString fFlavour; // flavour (if any) this range, e.g. coarse, fine, etc...
    
    ClassDef(AliAnalysisMuMuBinning::Range,3)
  };
  

 private:

  TMap* fBins; // list of bins (what -> list of bins) = (TObjString -> TObjArray)
  
  ClassDef(AliAnalysisMuMuBinning,2) // custom binning for MuMu analysis
};

#endif
 AliAnalysisMuMuBinning.h:1
 AliAnalysisMuMuBinning.h:2
 AliAnalysisMuMuBinning.h:3
 AliAnalysisMuMuBinning.h:4
 AliAnalysisMuMuBinning.h:5
 AliAnalysisMuMuBinning.h:6
 AliAnalysisMuMuBinning.h:7
 AliAnalysisMuMuBinning.h:8
 AliAnalysisMuMuBinning.h:9
 AliAnalysisMuMuBinning.h:10
 AliAnalysisMuMuBinning.h:11
 AliAnalysisMuMuBinning.h:12
 AliAnalysisMuMuBinning.h:13
 AliAnalysisMuMuBinning.h:14
 AliAnalysisMuMuBinning.h:15
 AliAnalysisMuMuBinning.h:16
 AliAnalysisMuMuBinning.h:17
 AliAnalysisMuMuBinning.h:18
 AliAnalysisMuMuBinning.h:19
 AliAnalysisMuMuBinning.h:20
 AliAnalysisMuMuBinning.h:21
 AliAnalysisMuMuBinning.h:22
 AliAnalysisMuMuBinning.h:23
 AliAnalysisMuMuBinning.h:24
 AliAnalysisMuMuBinning.h:25
 AliAnalysisMuMuBinning.h:26
 AliAnalysisMuMuBinning.h:27
 AliAnalysisMuMuBinning.h:28
 AliAnalysisMuMuBinning.h:29
 AliAnalysisMuMuBinning.h:30
 AliAnalysisMuMuBinning.h:31
 AliAnalysisMuMuBinning.h:32
 AliAnalysisMuMuBinning.h:33
 AliAnalysisMuMuBinning.h:34
 AliAnalysisMuMuBinning.h:35
 AliAnalysisMuMuBinning.h:36
 AliAnalysisMuMuBinning.h:37
 AliAnalysisMuMuBinning.h:38
 AliAnalysisMuMuBinning.h:39
 AliAnalysisMuMuBinning.h:40
 AliAnalysisMuMuBinning.h:41
 AliAnalysisMuMuBinning.h:42
 AliAnalysisMuMuBinning.h:43
 AliAnalysisMuMuBinning.h:44
 AliAnalysisMuMuBinning.h:45
 AliAnalysisMuMuBinning.h:46
 AliAnalysisMuMuBinning.h:47
 AliAnalysisMuMuBinning.h:48
 AliAnalysisMuMuBinning.h:49
 AliAnalysisMuMuBinning.h:50
 AliAnalysisMuMuBinning.h:51
 AliAnalysisMuMuBinning.h:52
 AliAnalysisMuMuBinning.h:53
 AliAnalysisMuMuBinning.h:54
 AliAnalysisMuMuBinning.h:55
 AliAnalysisMuMuBinning.h:56
 AliAnalysisMuMuBinning.h:57
 AliAnalysisMuMuBinning.h:58
 AliAnalysisMuMuBinning.h:59
 AliAnalysisMuMuBinning.h:60
 AliAnalysisMuMuBinning.h:61
 AliAnalysisMuMuBinning.h:62
 AliAnalysisMuMuBinning.h:63
 AliAnalysisMuMuBinning.h:64
 AliAnalysisMuMuBinning.h:65
 AliAnalysisMuMuBinning.h:66
 AliAnalysisMuMuBinning.h:67
 AliAnalysisMuMuBinning.h:68
 AliAnalysisMuMuBinning.h:69
 AliAnalysisMuMuBinning.h:70
 AliAnalysisMuMuBinning.h:71
 AliAnalysisMuMuBinning.h:72
 AliAnalysisMuMuBinning.h:73
 AliAnalysisMuMuBinning.h:74
 AliAnalysisMuMuBinning.h:75
 AliAnalysisMuMuBinning.h:76
 AliAnalysisMuMuBinning.h:77
 AliAnalysisMuMuBinning.h:78
 AliAnalysisMuMuBinning.h:79
 AliAnalysisMuMuBinning.h:80
 AliAnalysisMuMuBinning.h:81
 AliAnalysisMuMuBinning.h:82
 AliAnalysisMuMuBinning.h:83
 AliAnalysisMuMuBinning.h:84
 AliAnalysisMuMuBinning.h:85
 AliAnalysisMuMuBinning.h:86
 AliAnalysisMuMuBinning.h:87
 AliAnalysisMuMuBinning.h:88
 AliAnalysisMuMuBinning.h:89
 AliAnalysisMuMuBinning.h:90
 AliAnalysisMuMuBinning.h:91
 AliAnalysisMuMuBinning.h:92
 AliAnalysisMuMuBinning.h:93
 AliAnalysisMuMuBinning.h:94
 AliAnalysisMuMuBinning.h:95
 AliAnalysisMuMuBinning.h:96
 AliAnalysisMuMuBinning.h:97
 AliAnalysisMuMuBinning.h:98
 AliAnalysisMuMuBinning.h:99
 AliAnalysisMuMuBinning.h:100
 AliAnalysisMuMuBinning.h:101
 AliAnalysisMuMuBinning.h:102
 AliAnalysisMuMuBinning.h:103
 AliAnalysisMuMuBinning.h:104
 AliAnalysisMuMuBinning.h:105
 AliAnalysisMuMuBinning.h:106
 AliAnalysisMuMuBinning.h:107
 AliAnalysisMuMuBinning.h:108
 AliAnalysisMuMuBinning.h:109
 AliAnalysisMuMuBinning.h:110
 AliAnalysisMuMuBinning.h:111
 AliAnalysisMuMuBinning.h:112
 AliAnalysisMuMuBinning.h:113
 AliAnalysisMuMuBinning.h:114
 AliAnalysisMuMuBinning.h:115
 AliAnalysisMuMuBinning.h:116
 AliAnalysisMuMuBinning.h:117
 AliAnalysisMuMuBinning.h:118
 AliAnalysisMuMuBinning.h:119
 AliAnalysisMuMuBinning.h:120
 AliAnalysisMuMuBinning.h:121
 AliAnalysisMuMuBinning.h:122
 AliAnalysisMuMuBinning.h:123
 AliAnalysisMuMuBinning.h:124
 AliAnalysisMuMuBinning.h:125
 AliAnalysisMuMuBinning.h:126
 AliAnalysisMuMuBinning.h:127
 AliAnalysisMuMuBinning.h:128
 AliAnalysisMuMuBinning.h:129
 AliAnalysisMuMuBinning.h:130
 AliAnalysisMuMuBinning.h:131
 AliAnalysisMuMuBinning.h:132
 AliAnalysisMuMuBinning.h:133
 AliAnalysisMuMuBinning.h:134
 AliAnalysisMuMuBinning.h:135
 AliAnalysisMuMuBinning.h:136
 AliAnalysisMuMuBinning.h:137