ROOT logo
#include "AliAnalysisMuMuBinning.h"

//
// AliAnalysisMuMuBinning.h : a class to hold bins of various sizes
//
// The idea behind this class is to store it together with
// the histograms (corresponding to the bins)
// so we can then loop easily on all bins afterwards.
// 
// author: L. Aphecetche (Subatech)
//

#include "AliLog.h"
#include "Riostream.h"
#include "TMap.h"
#include "TMath.h"
#include "TObjArray.h"
#include "TObjString.h"
#include <cassert>

ClassImp(AliAnalysisMuMuBinning::Range)
ClassImp(AliAnalysisMuMuBinning)

//______________________________________________________________________________
AliAnalysisMuMuBinning::AliAnalysisMuMuBinning(const char* name, const char* title)
: TNamed(name,title), fBins(0x0)
{
  // default ctor
}

//______________________________________________________________________________
AliAnalysisMuMuBinning::AliAnalysisMuMuBinning(const AliAnalysisMuMuBinning& rhs)
: TNamed(), fBins(0x0)
{
  // copy ctor
  TObjArray* bins = rhs.CreateBinObjArray();
  TIter next(bins);
  AliAnalysisMuMuBinning::Range* b;
  
  while ( ( b = static_cast<AliAnalysisMuMuBinning::Range*>(next()) ) )
  {
    AddBin(*b);
  }
}

//______________________________________________________________________________
AliAnalysisMuMuBinning& AliAnalysisMuMuBinning::operator=(const AliAnalysisMuMuBinning& rhs)
{
  // assignment  operator
  
  if ( this != &rhs )
  {
    delete fBins;
    fBins = 0x0;
    TObjArray* bins = rhs.CreateBinObjArray();
    TIter next(bins);
    AliAnalysisMuMuBinning::Range* b;
  
    while ( ( b = static_cast<AliAnalysisMuMuBinning::Range*>(next()) ) )
    {
      AddBin(*b);
    }
  }
  return *this;
}

//______________________________________________________________________________
AliAnalysisMuMuBinning::~AliAnalysisMuMuBinning()
{
  // dtor
  delete fBins;
}

//______________________________________________________________________________
void AliAnalysisMuMuBinning::AddBin(const AliAnalysisMuMuBinning::Range& bin)
{
  /// add one bin
  AddBin(bin.What().Data(),bin.Quantity().Data(),
         bin.Xmin(),bin.Xmax(),
         bin.Ymin(),bin.Ymax(),bin.Flavour());
}

//______________________________________________________________________________
void AliAnalysisMuMuBinning::AddBin(const char* what, const char* quantity,
                                    Double_t xmin, Double_t xmax,
                                    Double_t ymin, Double_t ymax,
                                    const char* flavour)
{
  /// Add a bin
  /// Note that what and Quantity are not case sensitive.
  if (!fBins)
  {
    fBins = new TMap;
    fBins->SetOwnerKeyValue(kTRUE,kTRUE);
  }
  
  TString swhat(what);
  swhat.ToUpper();
  
  TString sQuantity(quantity);
  sQuantity.ToUpper();
  
  TObjArray* b = static_cast<TObjArray*>(fBins->GetValue(swhat.Data()));
  if (!b)
  {
    b = new TObjArray;
    b->SetOwner(kTRUE);
    fBins->Add(new TObjString(swhat),b);
  }

  Range* r = new Range(swhat.Data(),sQuantity.Data(),xmin,xmax,ymin,ymax,flavour);
  
  if ( b->FindObject(r) )
  {
    AliDebug(1,Form("Trying to add an already existing bin : %s. Not doing it.",r->AsString().Data()));
    delete r;
  }
  else
  {
    b->Add(r);
    
    TString bQuantity(Form("%s-%s",swhat.Data(),sQuantity.Data()));
    
    TString name(GetName());
    
    if ( !name.Contains(bQuantity) )
    {
      if (name.Length()>0)
      {
        name += " ";
      }
        
      name += bQuantity;
      SetName(name);
    }
  }
  
  b->Sort();
}

//______________________________________________________________________________
Double_t* AliAnalysisMuMuBinning::CreateBinArray() const
{
  /// Create a (variable) bin array suitable for TH1 constructor
  /// The returned array must be deleted by the user
  /// (using delete[] )
  
  TObjArray* binArray = CreateBinObjArray();
  if (!binArray) return 0x0;
  Double_t* bins = new Double_t[binArray->GetEntries()+1];
  TIter next(binArray);
  AliAnalysisMuMuBinning::Range* b;
  Int_t i(0);
  while ( ( b = static_cast<AliAnalysisMuMuBinning::Range*>(next()) ) )
  {
    bins[i] = b->Xmin();
    ++i;
  }

  b = static_cast<AliAnalysisMuMuBinning::Range*>(binArray->At(binArray->GetEntries()-1));
  
  bins[i] = b->Xmax();
  
  delete binArray;
  return bins;
}

//______________________________________________________________________________
TObjArray* AliAnalysisMuMuBinning::CreateBinObjArray() const
{
  /// Get the list of all the bins
  /// The returned array must be deleted by the user
  
  TObjArray* a = new TObjArray;
  a->SetOwner(kTRUE);

  TIter nextwhat(fBins);
  TObjString* what;
  
  while ( ( what = static_cast<TObjString*>(nextwhat()) ) )
  {
    TObjArray* b = static_cast<TObjArray*>(fBins->GetValue(what->String().Data()));
    TIter next(b);
    Range* r;
  
    while ( ( r = static_cast<Range*>(next()) ) )
    {
      a->Add(r->Clone());
    }
  }
  
  if ( a->GetLast() < 0 )
  {
    delete a;
    a = 0x0;
  }
  return a;
}

//______________________________________________________________________________
TObjArray* AliAnalysisMuMuBinning::CreateBinObjArray(const char* what) const
{
  /// Get the list of bins for a given what 
  /// The returned array must be deleted by the user
  
  if (!fBins) return 0x0;
  
  TObjArray* a = new TObjArray;
  a->SetOwner(kTRUE);
  
  TString swhat(what);
  swhat.ToUpper();
  
  TObjArray* b = static_cast<TObjArray*>(fBins->GetValue(swhat.Data()));
  if (!b) return 0x0;
  
  TIter next(b);
  Range* r;
  
  while ( ( r = static_cast<Range*>(next()) ) )
  {
    a->Add(r->Clone());
  }
  
  if ( a->GetLast() < 0 )
  {
    delete a;
    a = 0x0;
  }
  return a;
}


//______________________________________________________________________________
TObjArray* AliAnalysisMuMuBinning::CreateBinObjArray(const char* what, const char* quantity, const char* flavour) const
{
  /// Get the list of bins for a given what and given Quantity
  /// The returned array must be deleted by the user
  /// Quantity can be a single Quantity or several Quantitys separated by comma
  
  TObjArray* a = new TObjArray;
  a->SetOwner(kTRUE);
  
  TString swhat(what);
  swhat.ToUpper();

  TObjArray* b = static_cast<TObjArray*>(fBins->GetValue(swhat.Data()));
  if (!b) return 0x0;
  
  TIter next(b);
  Range* r;

  TString sQuantity(quantity);
  sQuantity.ToUpper();

  TString sflavour(flavour);
  
  TObjArray* Quantitys = sQuantity.Tokenize(",");
  TObjString* oneQuantity;
  TIter nextQuantity(Quantitys);
  
  while ( ( r = static_cast<Range*>(next()) ) )
  {
    nextQuantity.Reset();
    while ( ( oneQuantity = static_cast<TObjString*>(nextQuantity()) ) )
    {
      if ( r->Quantity() == oneQuantity->String() &&
          ( ( sflavour.Length() > 0 && r->Flavour() == sflavour.Data() ) || sflavour.Length()==0 ) )
      {
        a->Add(r->Clone());
      }
    }
  }
  
  if ( a->GetLast() < 0 )
  {
    delete a;
    a = 0x0;
  }
  
  delete Quantitys;
  return a;
}

//______________________________________________________________________________
Double_t* AliAnalysisMuMuBinning::CreateBinArrayY() const
{
  /// Create a TObjArray with 2 (variable) bin array with x and y binning, suitable for TH1
  /// The returned array must be deleted by the user
  /// (using delete[] )
  
  TObjArray* binArray = CreateBinObjArray();
  if (!binArray) return 0x0;
  
  AliAnalysisMuMuBinning::Range* firstBin = static_cast<AliAnalysisMuMuBinning::Range*>(binArray->First());
  
  Double_t* binsY = new Double_t[binArray->GetEntries()+1];
  
  Double_t minY = firstBin->Ymin();
  Double_t maxY = firstBin->Ymax();
  
  if ( !(minY < maxY))
  {
    std::cout << "No 2D binning" << std::endl;
    delete binsY;
    delete binArray;
    return 0x0;
  }
  
  TIter next(binArray);
  AliAnalysisMuMuBinning::Range* b;
  Int_t i(0);
  while ( ( b = static_cast<AliAnalysisMuMuBinning::Range*>(next()) ) )
  {
    if ( (i != 0) && (minY == b->Ymin()) ) break;
    
    binsY[i] = b->Ymin();
    ++i;
  }
  
  b = static_cast<AliAnalysisMuMuBinning::Range*>(binArray->At(i-1));
  
  binsY[i] = b->Ymax();
  
  Double_t* bins = new Double_t[i + 1];
  
  for (Int_t j = 0 ; j < (i+1) ; j++)
  {
    bins[j] = binsY[j];
  }
  
  delete binArray;
  delete[] binsY;
  return bins;
}

//______________________________________________________________________________
Int_t AliAnalysisMuMuBinning::GetNBinsX() const
{
  /// Gets the number of x bins, suitable for TH1
  
  
  TObjArray* binArray = CreateBinObjArray();
  if (!binArray) return 0;
  
  Double_t binsX(0);
  
  
  TIter next(binArray);
  AliAnalysisMuMuBinning::Range* b;
  Int_t i(0);
  while ( ( b = static_cast<AliAnalysisMuMuBinning::Range*>(next()) ) )
  {
    if ( (i != 0) && (binsX == b->Xmin()) ) continue;
    
    binsX = b->Xmin();
    ++i;
  }
  
  delete binArray;
  return i;
}

//______________________________________________________________________________
Int_t AliAnalysisMuMuBinning::GetNBinsY() const
{
  /// Gets the number of x bins, suitable for TH1
  
  
  TObjArray* binArray = CreateBinObjArray();
  if (!binArray) return 0x0;
  
  Double_t binsY(0);
  
  AliAnalysisMuMuBinning::Range* firstBin = static_cast<AliAnalysisMuMuBinning::Range*>(binArray->First());
  
  Double_t minY = firstBin->Ymin();
  Double_t maxY = firstBin->Ymax();
  
  if ( !(minY < maxY))
  {
    std::cout << "No 2D binning" << std::endl;
    delete binArray;
    return 0;
  }
  
  TIter next(binArray);
  AliAnalysisMuMuBinning::Range* b;
  Int_t i(0);
  while ( ( b = static_cast<AliAnalysisMuMuBinning::Range*>(next()) ) )
  {
    if ( (i != 0) && (minY == b->Ymin()) ) break;
    
    binsY = b->Ymin();
    ++i;
  }
  
  delete binArray;
  return i;
}

//______________________________________________________________________________
Double_t* AliAnalysisMuMuBinning::CreateBinArrayX() const
{
  /// Create a TObjArray with 2 (variable) bin array with x and y binning , suitable for TH1
  /// The returned array must be deleted by the user
  /// (using delete[] )
  
  TObjArray* binArray = CreateBinObjArray();
  if (!binArray) return 0x0;
  
  Double_t* binsX = new Double_t[binArray->GetEntries()+1];
  
  
  TIter next(binArray);
  AliAnalysisMuMuBinning::Range* b;
  Int_t i(0);
  while ( ( b = static_cast<AliAnalysisMuMuBinning::Range*>(next()) ) )
  {
    if ( (i != 0) && (binsX[i-1] == b->Xmin()) ) continue;
    
    binsX[i] = b->Xmin();
    ++i;
  }
  
  b = static_cast<AliAnalysisMuMuBinning::Range*>(binArray->At(binArray->GetEntries()-1));
  
  binsX[i] = b->Xmax();
  
  Double_t* bins = new Double_t[i + 1];
  
  for (Int_t j = 0 ; j < (i+1) ; j++)
  {
    bins[j] = binsX[j];
  }
  
  delete binArray;
  delete[] binsX;
  return bins;
}

//______________________________________________________________________________
void AliAnalysisMuMuBinning::CreateMesh(const char* what,
                                        const char* quantity1, const char* quantity2,
                                        const char* flavour,
                                        Bool_t remove12)
{
  /// Create 2D bins from existing 1d ones of Quantity1 and Quantity2
  TObjArray* a1 = CreateBinObjArray(what,quantity1,flavour);
  if (!a1)
  {
    AliError(Form("No bin for Quantity %s. Done nothing.",quantity1));
    return;
  }
  TObjArray* a2 = CreateBinObjArray(what,quantity2,flavour);
  if (!a2)
  {
    AliError(Form("No bin for Quantity %s. Done nothing.",quantity2));
    return;
  }
  
  TString meshQuantity(Form("%s VS %s - %s",quantity1,quantity2,flavour));
  
  for ( Int_t i1 = 0; i1 <= a1->GetLast(); ++i1 )
  {
    Range* r1 = static_cast<Range*>(a1->At(i1));

    for ( Int_t i2 = 0; i2 <= a2->GetLast(); ++i2 )
    {
      Range* r2 = static_cast<Range*>(a2->At(i2));
      
      AddBin(what,meshQuantity,r2->Xmin(),r2->Xmax(),r1->Xmin(),r1->Xmax(),Form("%s VS %s",r1->Flavour().Data(),r2->Flavour().Data()));
    }
  }
  
  delete a1;
  delete a2;

  if ( remove12 )
  {
    TObjArray* b = static_cast<TObjArray*>(fBins->GetValue(what));
    TIter next(b);
    Range* r;
    TString sQuantity1(quantity1);
    TString sQuantity2(quantity2);

    sQuantity1.ToUpper();
    sQuantity2.ToUpper();
    
    while ( ( r = static_cast<Range*>(next())) )
    {
      if ( r->Quantity() == quantity1 ||
           r->Quantity() == quantity2 )
      {
        b->Remove(r);
      }
    }
  }
}

//______________________________________________________________________________
TObjArray* AliAnalysisMuMuBinning::CreateWhatArray() const
{
  /// Create a TObjString array with the names of the what we're holding results for
  /// Returned array must be delete by user
  
  TObjArray* whatArray(0x0);
  
  TIter nextwhat(fBins);
  TObjString* what;

  while ( ( what = static_cast<TObjString*>(nextwhat()) ) )
  {
    if (!whatArray)
    {
      whatArray = new TObjArray;
      whatArray->SetOwner(kTRUE);
    }
    whatArray->Add(new TObjString(*what));
  }
  return whatArray;
}

//______________________________________________________________________________
TObjArray* AliAnalysisMuMuBinning::CreateQuantityArray() const
{
  /// Create a TObjString array with the names of the binning Quantitys
  /// Returned array must be delete by user

  TObjArray* QuantityArray(0x0);
  
  TIter nextwhat(fBins);
  TObjString* what;
  
  while ( ( what = static_cast<TObjString*>(nextwhat()) ) )
  {
    TObjArray* whats = static_cast<TObjArray*>(fBins->GetValue(what->String()));
    
    TIter next(whats);
    Range* r;
    
    while ( ( r = static_cast<Range*>(next())) )
    {
      if (!QuantityArray)
      {
        QuantityArray = new TObjArray;
        QuantityArray->SetOwner(kTRUE);
      }
      if ( !QuantityArray->FindObject(r->Quantity()) )
      {
        QuantityArray->Add(new TObjString(r->Quantity()));
      }
    }
  }
  return QuantityArray;
}

//______________________________________________________________________________
Bool_t AliAnalysisMuMuBinning::IsEqual(const TObject* obj) const
{
  /// Return kTRUE if obj is an AliAnalysisMuMuBinning object and is
  /// equal to *this
  
  if ( obj->IsA() == AliAnalysisMuMuBinning::Class() )
  {
    const AliAnalysisMuMuBinning* other = static_cast<const AliAnalysisMuMuBinning*>(obj);
    
    TIter nextOther(other->fBins);
    TObjString* str;
    
    while ( ( str = static_cast<TObjString*>(nextOther()) ) )
    {
      TObject* o = fBins->GetValue(str->String());
      if (!o) return kFALSE;
      if (o->IsA() != TObjArray::Class()) return kFALSE;

      TObjArray* thisArray = static_cast<TObjArray*>(o);

      o = other->fBins->GetValue(str->String());
      if (!o) return kFALSE;
      if (o->IsA() != TObjArray::Class()) return kFALSE;
      
      TObjArray* otherArray = static_cast<TObjArray*>(o);
      
      Int_t n = thisArray->GetEntries();
      
      if ( n != otherArray->GetEntries() ) return kFALSE;
      
      for ( Int_t i = 0; i < n; ++i )
      {
        Range* thisRange = static_cast<Range*>(thisArray->At(i));
        Range* otherRange = static_cast<Range*>(otherArray->At(i));
        
        if ( !thisRange->IsEqual(otherRange) ) return kFALSE;
      }
    }
    return kTRUE;
  }
  
  return kFALSE;
}


//______________________________________________________________________________
Long64_t AliAnalysisMuMuBinning::Merge(TCollection* list)
{
  /// Merge method
  
  // Merge a list of AliAnalysisMuMuBinning objects with this
  // Returns the number of merged objects (including this).
  
  if (!list) return 0;
  
  if (list->IsEmpty()) return 1;
  
  TIter next(list);
  TObject* currObj;
  Int_t count(0);
  
  while ( ( currObj = next() ) )
  {
    AliAnalysisMuMuBinning* binning = dynamic_cast<AliAnalysisMuMuBinning*>(currObj);
    if (!binning)
    {
      AliFatal(Form("object named \"%s\" is a %s instead of an AliAnalysisMuMuBinning!", currObj->GetName(), currObj->ClassName()));
      continue;
    }
    
    if ( IsEqual(binning) )
    {
      // nothing to do if we have the same binning already ;-)
    }
    else
    {
      AliWarning("Implement me!");
      std::cout << ">>>> this=" << std::endl;
      Print();
      std::cout << ">>>> other=" << std::endl;
      binning->Print();
    }
    ++count;
  }
  
  return count+1;
}

//______________________________________________________________________________
AliAnalysisMuMuBinning*
AliAnalysisMuMuBinning::Project(const char* what, const char* quantity, const char* flavour) const
{
  /// Create a sub-binning object with only the bins pertaining to (what,Quantity)
  
  TObjArray* bins = CreateBinObjArray(what,quantity,flavour);
  if (!bins) return 0x0;
  AliAnalysisMuMuBinning* p = new AliAnalysisMuMuBinning;
  TIter next(bins);
  AliAnalysisMuMuBinning::Range* bin;
  TString sQuantity(quantity);
  sQuantity.ToUpper();
  
  while ( ( bin = static_cast<AliAnalysisMuMuBinning::Range*>(next())) )
  {
    if  (bin->Quantity()!=sQuantity || bin->Flavour()!=flavour)
    {
      AliDebug(1,Form("sQuantity=%s flavour=%s bin=%s => skip",sQuantity.Data(),flavour,bin->AsString().Data()));
      continue;
    }
    {
      p->AddBin(what,bin->Quantity(),bin->Xmin(),bin->Xmax(),bin->Ymin(),bin->Ymax(),bin->Flavour().Data());
    }
  }
  
  delete bins;
  
  return p;
}

//______________________________________________________________________________
void AliAnalysisMuMuBinning::Print(Option_t* /*opt*/) const
{
  /// Print the bins
  
  if (!fBins)
  {
    std::cout << "Empty object. No bin defined. " << std::endl;
    return;
  }
  
  TIter nextwhat(fBins);
  TObjString* str;
  
  while ( ( str = static_cast<TObjString*>(nextwhat()) ) )
  {
    std::cout << "what : " << str->String().Data() << std::endl;
    TObjArray* b = static_cast<TObjArray*>(fBins->GetValue(str->String()));
    TIter next(b);
    Range* r(0x0);
    next.Reset();
    Int_t i(1);
    while ( ( r = static_cast<Range*>(next()) ) )
    {
      std::cout << Form("BIN %3d ",i++);
      r->Print();
    }
  }
}

//______________________________________________________________________________
//______________________________________________________________________________
//______________________________________________________________________________
//______________________________________________________________________________

//______________________________________________________________________________
AliAnalysisMuMuBinning::Range::Range(const char* what, const char* quantity,
                                     Double_t xmin, Double_t xmax,
                                     Double_t ymin, Double_t ymax,
                                     const char* flavour)
: TObject(), fWhat(what), fQuantity(quantity),
  fXmin(xmin), fXmax(xmax), fYmin(ymin), fYmax(ymax),
  fFlavour(flavour)
{
  /// ctor
  fWhat.ToUpper();
  fQuantity.ToUpper();
}

//______________________________________________________________________________
TString AliAnalysisMuMuBinning::Range::AsString() const
{
  /// Return a string representation of this range
  
  if ( IsIntegrated()) return Quantity().Data();
  
  TString s;
  
  if ( fFlavour.Length() > 0 )
  {
    s.Form("%s_%s_%05.2f_%05.2f",Quantity().Data(),Flavour().Data(),Xmin(),Xmax());
  }
  else
  {
    s.Form("%s_%05.2f_%05.2f",Quantity().Data(),Xmin(),Xmax());
  }
  
  if (Is2D())
  {
    s += TString::Format("_%06.2f_%06.2f",Ymin(),Ymax());
  }

  s.ReplaceAll(" ","");
  s.ReplaceAll("+","");
  s.ReplaceAll("-","m");

  return s;
}

//______________________________________________________________________________
Int_t	AliAnalysisMuMuBinning::Range::Compare(const TObject* obj) const
{
  //  Must return -1 if this is smaller
  // than obj, 0 if objects are equal and 1 if this is larger than obj.
  const Range* other = static_cast<const Range*>(obj);
  
  int s = strcmp(What().Data(),other->What().Data());
  
  if ( s ) return s;
  
  s = strcmp(Quantity().Data(),other->Quantity().Data());
  
  if (s) return s;
  
  s = strcmp(Flavour().Data(),other->Flavour().Data());
  
  if (s) return s;
  
//  if ( IsIntegrated() && other->IsIntegrated() ) return 0;
  
  if ( Xmin() < other->Xmin() )
  {
    return -1;
  }
  else if ( Xmin() > other->Xmin() )
  {
    return 1;
  }
  else
  {
    if  ( Xmax() < other->Xmax() )
    {
      return -1;
    }
    else if ( Xmax() > other->Xmax() )
    {
      return 1;
    }
    else {
      if ( Ymin() < other->Ymin() )
      {
        return -1;
      }
      else if ( Ymin() > other->Ymin() )
      {
        return 1;
      }
      else
      {
        if ( Ymax() < other->Ymax() )
        {
          return -1;
        }
        else if ( Ymax() > other->Ymax() )
        {
          return 1;
        }
      }
    }
  }
  return 0;
}

//______________________________________________________________________________
Bool_t AliAnalysisMuMuBinning::Range::IsInRange(Double_t x, Double_t y) const
{
  /// If Range is 1D, returns true if x is in range
  /// If Range is 2D, returns true if (x,y) is in range
  
  if ( IsIntegrated() )
  {
    return kTRUE;
  }
  else
  {
    if ( Is2D() )
    {
      return ( x >= Xmin() && x < Xmax() && y >= Ymin() && y < Ymax());
    }
    else
    {
      return ( x >= Xmin() && x < Xmax() );
    }
  }
}

//______________________________________________________________________________
Bool_t AliAnalysisMuMuBinning::Range::IsIntegrated() const
{
  /// Whether we're a null object (aka integrated) or not
  return
  Xmin() >= TMath::Limits<Double_t>::Max() &&
  Ymin() >= TMath::Limits<Double_t>::Max() &&
  Xmax() >= TMath::Limits<Double_t>::Max() &&
  Ymax() >= TMath::Limits<Double_t>::Max() ;
}


//______________________________________________________________________________
void AliAnalysisMuMuBinning::Range::Print(Option_t* /*opt*/) const
{
  /// Output to stdout
  
  if (IsIntegrated())
  {
    std::cout << Form("%s : %s : INTEGRATED",What().Data(),Quantity().Data()) << std::endl;
  
    return;
  }
  
  std::cout << Form("%s : %s : %5.2f : %5.2f",What().Data(),Quantity().Data(),Xmin(),Xmax());
  
  if (Is2D())
  {
    std::cout << Form(" ; %5.2f : %5.2f",Ymin(),Ymax());
  }
  
  if (Flavour().Length()>0)
  {
    std::cout << " - " << Flavour().Data();
  }
  
  std::cout << "->" << AsString().Data() << std::endl;
  
}


 AliAnalysisMuMuBinning.cxx:1
 AliAnalysisMuMuBinning.cxx:2
 AliAnalysisMuMuBinning.cxx:3
 AliAnalysisMuMuBinning.cxx:4
 AliAnalysisMuMuBinning.cxx:5
 AliAnalysisMuMuBinning.cxx:6
 AliAnalysisMuMuBinning.cxx:7
 AliAnalysisMuMuBinning.cxx:8
 AliAnalysisMuMuBinning.cxx:9
 AliAnalysisMuMuBinning.cxx:10
 AliAnalysisMuMuBinning.cxx:11
 AliAnalysisMuMuBinning.cxx:12
 AliAnalysisMuMuBinning.cxx:13
 AliAnalysisMuMuBinning.cxx:14
 AliAnalysisMuMuBinning.cxx:15
 AliAnalysisMuMuBinning.cxx:16
 AliAnalysisMuMuBinning.cxx:17
 AliAnalysisMuMuBinning.cxx:18
 AliAnalysisMuMuBinning.cxx:19
 AliAnalysisMuMuBinning.cxx:20
 AliAnalysisMuMuBinning.cxx:21
 AliAnalysisMuMuBinning.cxx:22
 AliAnalysisMuMuBinning.cxx:23
 AliAnalysisMuMuBinning.cxx:24
 AliAnalysisMuMuBinning.cxx:25
 AliAnalysisMuMuBinning.cxx:26
 AliAnalysisMuMuBinning.cxx:27
 AliAnalysisMuMuBinning.cxx:28
 AliAnalysisMuMuBinning.cxx:29
 AliAnalysisMuMuBinning.cxx:30
 AliAnalysisMuMuBinning.cxx:31
 AliAnalysisMuMuBinning.cxx:32
 AliAnalysisMuMuBinning.cxx:33
 AliAnalysisMuMuBinning.cxx:34
 AliAnalysisMuMuBinning.cxx:35
 AliAnalysisMuMuBinning.cxx:36
 AliAnalysisMuMuBinning.cxx:37
 AliAnalysisMuMuBinning.cxx:38
 AliAnalysisMuMuBinning.cxx:39
 AliAnalysisMuMuBinning.cxx:40
 AliAnalysisMuMuBinning.cxx:41
 AliAnalysisMuMuBinning.cxx:42
 AliAnalysisMuMuBinning.cxx:43
 AliAnalysisMuMuBinning.cxx:44
 AliAnalysisMuMuBinning.cxx:45
 AliAnalysisMuMuBinning.cxx:46
 AliAnalysisMuMuBinning.cxx:47
 AliAnalysisMuMuBinning.cxx:48
 AliAnalysisMuMuBinning.cxx:49
 AliAnalysisMuMuBinning.cxx:50
 AliAnalysisMuMuBinning.cxx:51
 AliAnalysisMuMuBinning.cxx:52
 AliAnalysisMuMuBinning.cxx:53
 AliAnalysisMuMuBinning.cxx:54
 AliAnalysisMuMuBinning.cxx:55
 AliAnalysisMuMuBinning.cxx:56
 AliAnalysisMuMuBinning.cxx:57
 AliAnalysisMuMuBinning.cxx:58
 AliAnalysisMuMuBinning.cxx:59
 AliAnalysisMuMuBinning.cxx:60
 AliAnalysisMuMuBinning.cxx:61
 AliAnalysisMuMuBinning.cxx:62
 AliAnalysisMuMuBinning.cxx:63
 AliAnalysisMuMuBinning.cxx:64
 AliAnalysisMuMuBinning.cxx:65
 AliAnalysisMuMuBinning.cxx:66
 AliAnalysisMuMuBinning.cxx:67
 AliAnalysisMuMuBinning.cxx:68
 AliAnalysisMuMuBinning.cxx:69
 AliAnalysisMuMuBinning.cxx:70
 AliAnalysisMuMuBinning.cxx:71
 AliAnalysisMuMuBinning.cxx:72
 AliAnalysisMuMuBinning.cxx:73
 AliAnalysisMuMuBinning.cxx:74
 AliAnalysisMuMuBinning.cxx:75
 AliAnalysisMuMuBinning.cxx:76
 AliAnalysisMuMuBinning.cxx:77
 AliAnalysisMuMuBinning.cxx:78
 AliAnalysisMuMuBinning.cxx:79
 AliAnalysisMuMuBinning.cxx:80
 AliAnalysisMuMuBinning.cxx:81
 AliAnalysisMuMuBinning.cxx:82
 AliAnalysisMuMuBinning.cxx:83
 AliAnalysisMuMuBinning.cxx:84
 AliAnalysisMuMuBinning.cxx:85
 AliAnalysisMuMuBinning.cxx:86
 AliAnalysisMuMuBinning.cxx:87
 AliAnalysisMuMuBinning.cxx:88
 AliAnalysisMuMuBinning.cxx:89
 AliAnalysisMuMuBinning.cxx:90
 AliAnalysisMuMuBinning.cxx:91
 AliAnalysisMuMuBinning.cxx:92
 AliAnalysisMuMuBinning.cxx:93
 AliAnalysisMuMuBinning.cxx:94
 AliAnalysisMuMuBinning.cxx:95
 AliAnalysisMuMuBinning.cxx:96
 AliAnalysisMuMuBinning.cxx:97
 AliAnalysisMuMuBinning.cxx:98
 AliAnalysisMuMuBinning.cxx:99
 AliAnalysisMuMuBinning.cxx:100
 AliAnalysisMuMuBinning.cxx:101
 AliAnalysisMuMuBinning.cxx:102
 AliAnalysisMuMuBinning.cxx:103
 AliAnalysisMuMuBinning.cxx:104
 AliAnalysisMuMuBinning.cxx:105
 AliAnalysisMuMuBinning.cxx:106
 AliAnalysisMuMuBinning.cxx:107
 AliAnalysisMuMuBinning.cxx:108
 AliAnalysisMuMuBinning.cxx:109
 AliAnalysisMuMuBinning.cxx:110
 AliAnalysisMuMuBinning.cxx:111
 AliAnalysisMuMuBinning.cxx:112
 AliAnalysisMuMuBinning.cxx:113
 AliAnalysisMuMuBinning.cxx:114
 AliAnalysisMuMuBinning.cxx:115
 AliAnalysisMuMuBinning.cxx:116
 AliAnalysisMuMuBinning.cxx:117
 AliAnalysisMuMuBinning.cxx:118
 AliAnalysisMuMuBinning.cxx:119
 AliAnalysisMuMuBinning.cxx:120
 AliAnalysisMuMuBinning.cxx:121
 AliAnalysisMuMuBinning.cxx:122
 AliAnalysisMuMuBinning.cxx:123
 AliAnalysisMuMuBinning.cxx:124
 AliAnalysisMuMuBinning.cxx:125
 AliAnalysisMuMuBinning.cxx:126
 AliAnalysisMuMuBinning.cxx:127
 AliAnalysisMuMuBinning.cxx:128
 AliAnalysisMuMuBinning.cxx:129
 AliAnalysisMuMuBinning.cxx:130
 AliAnalysisMuMuBinning.cxx:131
 AliAnalysisMuMuBinning.cxx:132
 AliAnalysisMuMuBinning.cxx:133
 AliAnalysisMuMuBinning.cxx:134
 AliAnalysisMuMuBinning.cxx:135
 AliAnalysisMuMuBinning.cxx:136
 AliAnalysisMuMuBinning.cxx:137
 AliAnalysisMuMuBinning.cxx:138
 AliAnalysisMuMuBinning.cxx:139
 AliAnalysisMuMuBinning.cxx:140
 AliAnalysisMuMuBinning.cxx:141
 AliAnalysisMuMuBinning.cxx:142
 AliAnalysisMuMuBinning.cxx:143
 AliAnalysisMuMuBinning.cxx:144
 AliAnalysisMuMuBinning.cxx:145
 AliAnalysisMuMuBinning.cxx:146
 AliAnalysisMuMuBinning.cxx:147
 AliAnalysisMuMuBinning.cxx:148
 AliAnalysisMuMuBinning.cxx:149
 AliAnalysisMuMuBinning.cxx:150
 AliAnalysisMuMuBinning.cxx:151
 AliAnalysisMuMuBinning.cxx:152
 AliAnalysisMuMuBinning.cxx:153
 AliAnalysisMuMuBinning.cxx:154
 AliAnalysisMuMuBinning.cxx:155
 AliAnalysisMuMuBinning.cxx:156
 AliAnalysisMuMuBinning.cxx:157
 AliAnalysisMuMuBinning.cxx:158
 AliAnalysisMuMuBinning.cxx:159
 AliAnalysisMuMuBinning.cxx:160
 AliAnalysisMuMuBinning.cxx:161
 AliAnalysisMuMuBinning.cxx:162
 AliAnalysisMuMuBinning.cxx:163
 AliAnalysisMuMuBinning.cxx:164
 AliAnalysisMuMuBinning.cxx:165
 AliAnalysisMuMuBinning.cxx:166
 AliAnalysisMuMuBinning.cxx:167
 AliAnalysisMuMuBinning.cxx:168
 AliAnalysisMuMuBinning.cxx:169
 AliAnalysisMuMuBinning.cxx:170
 AliAnalysisMuMuBinning.cxx:171
 AliAnalysisMuMuBinning.cxx:172
 AliAnalysisMuMuBinning.cxx:173
 AliAnalysisMuMuBinning.cxx:174
 AliAnalysisMuMuBinning.cxx:175
 AliAnalysisMuMuBinning.cxx:176
 AliAnalysisMuMuBinning.cxx:177
 AliAnalysisMuMuBinning.cxx:178
 AliAnalysisMuMuBinning.cxx:179
 AliAnalysisMuMuBinning.cxx:180
 AliAnalysisMuMuBinning.cxx:181
 AliAnalysisMuMuBinning.cxx:182
 AliAnalysisMuMuBinning.cxx:183
 AliAnalysisMuMuBinning.cxx:184
 AliAnalysisMuMuBinning.cxx:185
 AliAnalysisMuMuBinning.cxx:186
 AliAnalysisMuMuBinning.cxx:187
 AliAnalysisMuMuBinning.cxx:188
 AliAnalysisMuMuBinning.cxx:189
 AliAnalysisMuMuBinning.cxx:190
 AliAnalysisMuMuBinning.cxx:191
 AliAnalysisMuMuBinning.cxx:192
 AliAnalysisMuMuBinning.cxx:193
 AliAnalysisMuMuBinning.cxx:194
 AliAnalysisMuMuBinning.cxx:195
 AliAnalysisMuMuBinning.cxx:196
 AliAnalysisMuMuBinning.cxx:197
 AliAnalysisMuMuBinning.cxx:198
 AliAnalysisMuMuBinning.cxx:199
 AliAnalysisMuMuBinning.cxx:200
 AliAnalysisMuMuBinning.cxx:201
 AliAnalysisMuMuBinning.cxx:202
 AliAnalysisMuMuBinning.cxx:203
 AliAnalysisMuMuBinning.cxx:204
 AliAnalysisMuMuBinning.cxx:205
 AliAnalysisMuMuBinning.cxx:206
 AliAnalysisMuMuBinning.cxx:207
 AliAnalysisMuMuBinning.cxx:208
 AliAnalysisMuMuBinning.cxx:209
 AliAnalysisMuMuBinning.cxx:210
 AliAnalysisMuMuBinning.cxx:211
 AliAnalysisMuMuBinning.cxx:212
 AliAnalysisMuMuBinning.cxx:213
 AliAnalysisMuMuBinning.cxx:214
 AliAnalysisMuMuBinning.cxx:215
 AliAnalysisMuMuBinning.cxx:216
 AliAnalysisMuMuBinning.cxx:217
 AliAnalysisMuMuBinning.cxx:218
 AliAnalysisMuMuBinning.cxx:219
 AliAnalysisMuMuBinning.cxx:220
 AliAnalysisMuMuBinning.cxx:221
 AliAnalysisMuMuBinning.cxx:222
 AliAnalysisMuMuBinning.cxx:223
 AliAnalysisMuMuBinning.cxx:224
 AliAnalysisMuMuBinning.cxx:225
 AliAnalysisMuMuBinning.cxx:226
 AliAnalysisMuMuBinning.cxx:227
 AliAnalysisMuMuBinning.cxx:228
 AliAnalysisMuMuBinning.cxx:229
 AliAnalysisMuMuBinning.cxx:230
 AliAnalysisMuMuBinning.cxx:231
 AliAnalysisMuMuBinning.cxx:232
 AliAnalysisMuMuBinning.cxx:233
 AliAnalysisMuMuBinning.cxx:234
 AliAnalysisMuMuBinning.cxx:235
 AliAnalysisMuMuBinning.cxx:236
 AliAnalysisMuMuBinning.cxx:237
 AliAnalysisMuMuBinning.cxx:238
 AliAnalysisMuMuBinning.cxx:239
 AliAnalysisMuMuBinning.cxx:240
 AliAnalysisMuMuBinning.cxx:241
 AliAnalysisMuMuBinning.cxx:242
 AliAnalysisMuMuBinning.cxx:243
 AliAnalysisMuMuBinning.cxx:244
 AliAnalysisMuMuBinning.cxx:245
 AliAnalysisMuMuBinning.cxx:246
 AliAnalysisMuMuBinning.cxx:247
 AliAnalysisMuMuBinning.cxx:248
 AliAnalysisMuMuBinning.cxx:249
 AliAnalysisMuMuBinning.cxx:250
 AliAnalysisMuMuBinning.cxx:251
 AliAnalysisMuMuBinning.cxx:252
 AliAnalysisMuMuBinning.cxx:253
 AliAnalysisMuMuBinning.cxx:254
 AliAnalysisMuMuBinning.cxx:255
 AliAnalysisMuMuBinning.cxx:256
 AliAnalysisMuMuBinning.cxx:257
 AliAnalysisMuMuBinning.cxx:258
 AliAnalysisMuMuBinning.cxx:259
 AliAnalysisMuMuBinning.cxx:260
 AliAnalysisMuMuBinning.cxx:261
 AliAnalysisMuMuBinning.cxx:262
 AliAnalysisMuMuBinning.cxx:263
 AliAnalysisMuMuBinning.cxx:264
 AliAnalysisMuMuBinning.cxx:265
 AliAnalysisMuMuBinning.cxx:266
 AliAnalysisMuMuBinning.cxx:267
 AliAnalysisMuMuBinning.cxx:268
 AliAnalysisMuMuBinning.cxx:269
 AliAnalysisMuMuBinning.cxx:270
 AliAnalysisMuMuBinning.cxx:271
 AliAnalysisMuMuBinning.cxx:272
 AliAnalysisMuMuBinning.cxx:273
 AliAnalysisMuMuBinning.cxx:274
 AliAnalysisMuMuBinning.cxx:275
 AliAnalysisMuMuBinning.cxx:276
 AliAnalysisMuMuBinning.cxx:277
 AliAnalysisMuMuBinning.cxx:278
 AliAnalysisMuMuBinning.cxx:279
 AliAnalysisMuMuBinning.cxx:280
 AliAnalysisMuMuBinning.cxx:281
 AliAnalysisMuMuBinning.cxx:282
 AliAnalysisMuMuBinning.cxx:283
 AliAnalysisMuMuBinning.cxx:284
 AliAnalysisMuMuBinning.cxx:285
 AliAnalysisMuMuBinning.cxx:286
 AliAnalysisMuMuBinning.cxx:287
 AliAnalysisMuMuBinning.cxx:288
 AliAnalysisMuMuBinning.cxx:289
 AliAnalysisMuMuBinning.cxx:290
 AliAnalysisMuMuBinning.cxx:291
 AliAnalysisMuMuBinning.cxx:292
 AliAnalysisMuMuBinning.cxx:293
 AliAnalysisMuMuBinning.cxx:294
 AliAnalysisMuMuBinning.cxx:295
 AliAnalysisMuMuBinning.cxx:296
 AliAnalysisMuMuBinning.cxx:297
 AliAnalysisMuMuBinning.cxx:298
 AliAnalysisMuMuBinning.cxx:299
 AliAnalysisMuMuBinning.cxx:300
 AliAnalysisMuMuBinning.cxx:301
 AliAnalysisMuMuBinning.cxx:302
 AliAnalysisMuMuBinning.cxx:303
 AliAnalysisMuMuBinning.cxx:304
 AliAnalysisMuMuBinning.cxx:305
 AliAnalysisMuMuBinning.cxx:306
 AliAnalysisMuMuBinning.cxx:307
 AliAnalysisMuMuBinning.cxx:308
 AliAnalysisMuMuBinning.cxx:309
 AliAnalysisMuMuBinning.cxx:310
 AliAnalysisMuMuBinning.cxx:311
 AliAnalysisMuMuBinning.cxx:312
 AliAnalysisMuMuBinning.cxx:313
 AliAnalysisMuMuBinning.cxx:314
 AliAnalysisMuMuBinning.cxx:315
 AliAnalysisMuMuBinning.cxx:316
 AliAnalysisMuMuBinning.cxx:317
 AliAnalysisMuMuBinning.cxx:318
 AliAnalysisMuMuBinning.cxx:319
 AliAnalysisMuMuBinning.cxx:320
 AliAnalysisMuMuBinning.cxx:321
 AliAnalysisMuMuBinning.cxx:322
 AliAnalysisMuMuBinning.cxx:323
 AliAnalysisMuMuBinning.cxx:324
 AliAnalysisMuMuBinning.cxx:325
 AliAnalysisMuMuBinning.cxx:326
 AliAnalysisMuMuBinning.cxx:327
 AliAnalysisMuMuBinning.cxx:328
 AliAnalysisMuMuBinning.cxx:329
 AliAnalysisMuMuBinning.cxx:330
 AliAnalysisMuMuBinning.cxx:331
 AliAnalysisMuMuBinning.cxx:332
 AliAnalysisMuMuBinning.cxx:333
 AliAnalysisMuMuBinning.cxx:334
 AliAnalysisMuMuBinning.cxx:335
 AliAnalysisMuMuBinning.cxx:336
 AliAnalysisMuMuBinning.cxx:337
 AliAnalysisMuMuBinning.cxx:338
 AliAnalysisMuMuBinning.cxx:339
 AliAnalysisMuMuBinning.cxx:340
 AliAnalysisMuMuBinning.cxx:341
 AliAnalysisMuMuBinning.cxx:342
 AliAnalysisMuMuBinning.cxx:343
 AliAnalysisMuMuBinning.cxx:344
 AliAnalysisMuMuBinning.cxx:345
 AliAnalysisMuMuBinning.cxx:346
 AliAnalysisMuMuBinning.cxx:347
 AliAnalysisMuMuBinning.cxx:348
 AliAnalysisMuMuBinning.cxx:349
 AliAnalysisMuMuBinning.cxx:350
 AliAnalysisMuMuBinning.cxx:351
 AliAnalysisMuMuBinning.cxx:352
 AliAnalysisMuMuBinning.cxx:353
 AliAnalysisMuMuBinning.cxx:354
 AliAnalysisMuMuBinning.cxx:355
 AliAnalysisMuMuBinning.cxx:356
 AliAnalysisMuMuBinning.cxx:357
 AliAnalysisMuMuBinning.cxx:358
 AliAnalysisMuMuBinning.cxx:359
 AliAnalysisMuMuBinning.cxx:360
 AliAnalysisMuMuBinning.cxx:361
 AliAnalysisMuMuBinning.cxx:362
 AliAnalysisMuMuBinning.cxx:363
 AliAnalysisMuMuBinning.cxx:364
 AliAnalysisMuMuBinning.cxx:365
 AliAnalysisMuMuBinning.cxx:366
 AliAnalysisMuMuBinning.cxx:367
 AliAnalysisMuMuBinning.cxx:368
 AliAnalysisMuMuBinning.cxx:369
 AliAnalysisMuMuBinning.cxx:370
 AliAnalysisMuMuBinning.cxx:371
 AliAnalysisMuMuBinning.cxx:372
 AliAnalysisMuMuBinning.cxx:373
 AliAnalysisMuMuBinning.cxx:374
 AliAnalysisMuMuBinning.cxx:375
 AliAnalysisMuMuBinning.cxx:376
 AliAnalysisMuMuBinning.cxx:377
 AliAnalysisMuMuBinning.cxx:378
 AliAnalysisMuMuBinning.cxx:379
 AliAnalysisMuMuBinning.cxx:380
 AliAnalysisMuMuBinning.cxx:381
 AliAnalysisMuMuBinning.cxx:382
 AliAnalysisMuMuBinning.cxx:383
 AliAnalysisMuMuBinning.cxx:384
 AliAnalysisMuMuBinning.cxx:385
 AliAnalysisMuMuBinning.cxx:386
 AliAnalysisMuMuBinning.cxx:387
 AliAnalysisMuMuBinning.cxx:388
 AliAnalysisMuMuBinning.cxx:389
 AliAnalysisMuMuBinning.cxx:390
 AliAnalysisMuMuBinning.cxx:391
 AliAnalysisMuMuBinning.cxx:392
 AliAnalysisMuMuBinning.cxx:393
 AliAnalysisMuMuBinning.cxx:394
 AliAnalysisMuMuBinning.cxx:395
 AliAnalysisMuMuBinning.cxx:396
 AliAnalysisMuMuBinning.cxx:397
 AliAnalysisMuMuBinning.cxx:398
 AliAnalysisMuMuBinning.cxx:399
 AliAnalysisMuMuBinning.cxx:400
 AliAnalysisMuMuBinning.cxx:401
 AliAnalysisMuMuBinning.cxx:402
 AliAnalysisMuMuBinning.cxx:403
 AliAnalysisMuMuBinning.cxx:404
 AliAnalysisMuMuBinning.cxx:405
 AliAnalysisMuMuBinning.cxx:406
 AliAnalysisMuMuBinning.cxx:407
 AliAnalysisMuMuBinning.cxx:408
 AliAnalysisMuMuBinning.cxx:409
 AliAnalysisMuMuBinning.cxx:410
 AliAnalysisMuMuBinning.cxx:411
 AliAnalysisMuMuBinning.cxx:412
 AliAnalysisMuMuBinning.cxx:413
 AliAnalysisMuMuBinning.cxx:414
 AliAnalysisMuMuBinning.cxx:415
 AliAnalysisMuMuBinning.cxx:416
 AliAnalysisMuMuBinning.cxx:417
 AliAnalysisMuMuBinning.cxx:418
 AliAnalysisMuMuBinning.cxx:419
 AliAnalysisMuMuBinning.cxx:420
 AliAnalysisMuMuBinning.cxx:421
 AliAnalysisMuMuBinning.cxx:422
 AliAnalysisMuMuBinning.cxx:423
 AliAnalysisMuMuBinning.cxx:424
 AliAnalysisMuMuBinning.cxx:425
 AliAnalysisMuMuBinning.cxx:426
 AliAnalysisMuMuBinning.cxx:427
 AliAnalysisMuMuBinning.cxx:428
 AliAnalysisMuMuBinning.cxx:429
 AliAnalysisMuMuBinning.cxx:430
 AliAnalysisMuMuBinning.cxx:431
 AliAnalysisMuMuBinning.cxx:432
 AliAnalysisMuMuBinning.cxx:433
 AliAnalysisMuMuBinning.cxx:434
 AliAnalysisMuMuBinning.cxx:435
 AliAnalysisMuMuBinning.cxx:436
 AliAnalysisMuMuBinning.cxx:437
 AliAnalysisMuMuBinning.cxx:438
 AliAnalysisMuMuBinning.cxx:439
 AliAnalysisMuMuBinning.cxx:440
 AliAnalysisMuMuBinning.cxx:441
 AliAnalysisMuMuBinning.cxx:442
 AliAnalysisMuMuBinning.cxx:443
 AliAnalysisMuMuBinning.cxx:444
 AliAnalysisMuMuBinning.cxx:445
 AliAnalysisMuMuBinning.cxx:446
 AliAnalysisMuMuBinning.cxx:447
 AliAnalysisMuMuBinning.cxx:448
 AliAnalysisMuMuBinning.cxx:449
 AliAnalysisMuMuBinning.cxx:450
 AliAnalysisMuMuBinning.cxx:451
 AliAnalysisMuMuBinning.cxx:452
 AliAnalysisMuMuBinning.cxx:453
 AliAnalysisMuMuBinning.cxx:454
 AliAnalysisMuMuBinning.cxx:455
 AliAnalysisMuMuBinning.cxx:456
 AliAnalysisMuMuBinning.cxx:457
 AliAnalysisMuMuBinning.cxx:458
 AliAnalysisMuMuBinning.cxx:459
 AliAnalysisMuMuBinning.cxx:460
 AliAnalysisMuMuBinning.cxx:461
 AliAnalysisMuMuBinning.cxx:462
 AliAnalysisMuMuBinning.cxx:463
 AliAnalysisMuMuBinning.cxx:464
 AliAnalysisMuMuBinning.cxx:465
 AliAnalysisMuMuBinning.cxx:466
 AliAnalysisMuMuBinning.cxx:467
 AliAnalysisMuMuBinning.cxx:468
 AliAnalysisMuMuBinning.cxx:469
 AliAnalysisMuMuBinning.cxx:470
 AliAnalysisMuMuBinning.cxx:471
 AliAnalysisMuMuBinning.cxx:472
 AliAnalysisMuMuBinning.cxx:473
 AliAnalysisMuMuBinning.cxx:474
 AliAnalysisMuMuBinning.cxx:475
 AliAnalysisMuMuBinning.cxx:476
 AliAnalysisMuMuBinning.cxx:477
 AliAnalysisMuMuBinning.cxx:478
 AliAnalysisMuMuBinning.cxx:479
 AliAnalysisMuMuBinning.cxx:480
 AliAnalysisMuMuBinning.cxx:481
 AliAnalysisMuMuBinning.cxx:482
 AliAnalysisMuMuBinning.cxx:483
 AliAnalysisMuMuBinning.cxx:484
 AliAnalysisMuMuBinning.cxx:485
 AliAnalysisMuMuBinning.cxx:486
 AliAnalysisMuMuBinning.cxx:487
 AliAnalysisMuMuBinning.cxx:488
 AliAnalysisMuMuBinning.cxx:489
 AliAnalysisMuMuBinning.cxx:490
 AliAnalysisMuMuBinning.cxx:491
 AliAnalysisMuMuBinning.cxx:492
 AliAnalysisMuMuBinning.cxx:493
 AliAnalysisMuMuBinning.cxx:494
 AliAnalysisMuMuBinning.cxx:495
 AliAnalysisMuMuBinning.cxx:496
 AliAnalysisMuMuBinning.cxx:497
 AliAnalysisMuMuBinning.cxx:498
 AliAnalysisMuMuBinning.cxx:499
 AliAnalysisMuMuBinning.cxx:500
 AliAnalysisMuMuBinning.cxx:501
 AliAnalysisMuMuBinning.cxx:502
 AliAnalysisMuMuBinning.cxx:503
 AliAnalysisMuMuBinning.cxx:504
 AliAnalysisMuMuBinning.cxx:505
 AliAnalysisMuMuBinning.cxx:506
 AliAnalysisMuMuBinning.cxx:507
 AliAnalysisMuMuBinning.cxx:508
 AliAnalysisMuMuBinning.cxx:509
 AliAnalysisMuMuBinning.cxx:510
 AliAnalysisMuMuBinning.cxx:511
 AliAnalysisMuMuBinning.cxx:512
 AliAnalysisMuMuBinning.cxx:513
 AliAnalysisMuMuBinning.cxx:514
 AliAnalysisMuMuBinning.cxx:515
 AliAnalysisMuMuBinning.cxx:516
 AliAnalysisMuMuBinning.cxx:517
 AliAnalysisMuMuBinning.cxx:518
 AliAnalysisMuMuBinning.cxx:519
 AliAnalysisMuMuBinning.cxx:520
 AliAnalysisMuMuBinning.cxx:521
 AliAnalysisMuMuBinning.cxx:522
 AliAnalysisMuMuBinning.cxx:523
 AliAnalysisMuMuBinning.cxx:524
 AliAnalysisMuMuBinning.cxx:525
 AliAnalysisMuMuBinning.cxx:526
 AliAnalysisMuMuBinning.cxx:527
 AliAnalysisMuMuBinning.cxx:528
 AliAnalysisMuMuBinning.cxx:529
 AliAnalysisMuMuBinning.cxx:530
 AliAnalysisMuMuBinning.cxx:531
 AliAnalysisMuMuBinning.cxx:532
 AliAnalysisMuMuBinning.cxx:533
 AliAnalysisMuMuBinning.cxx:534
 AliAnalysisMuMuBinning.cxx:535
 AliAnalysisMuMuBinning.cxx:536
 AliAnalysisMuMuBinning.cxx:537
 AliAnalysisMuMuBinning.cxx:538
 AliAnalysisMuMuBinning.cxx:539
 AliAnalysisMuMuBinning.cxx:540
 AliAnalysisMuMuBinning.cxx:541
 AliAnalysisMuMuBinning.cxx:542
 AliAnalysisMuMuBinning.cxx:543
 AliAnalysisMuMuBinning.cxx:544
 AliAnalysisMuMuBinning.cxx:545
 AliAnalysisMuMuBinning.cxx:546
 AliAnalysisMuMuBinning.cxx:547
 AliAnalysisMuMuBinning.cxx:548
 AliAnalysisMuMuBinning.cxx:549
 AliAnalysisMuMuBinning.cxx:550
 AliAnalysisMuMuBinning.cxx:551
 AliAnalysisMuMuBinning.cxx:552
 AliAnalysisMuMuBinning.cxx:553
 AliAnalysisMuMuBinning.cxx:554
 AliAnalysisMuMuBinning.cxx:555
 AliAnalysisMuMuBinning.cxx:556
 AliAnalysisMuMuBinning.cxx:557
 AliAnalysisMuMuBinning.cxx:558
 AliAnalysisMuMuBinning.cxx:559
 AliAnalysisMuMuBinning.cxx:560
 AliAnalysisMuMuBinning.cxx:561
 AliAnalysisMuMuBinning.cxx:562
 AliAnalysisMuMuBinning.cxx:563
 AliAnalysisMuMuBinning.cxx:564
 AliAnalysisMuMuBinning.cxx:565
 AliAnalysisMuMuBinning.cxx:566
 AliAnalysisMuMuBinning.cxx:567
 AliAnalysisMuMuBinning.cxx:568
 AliAnalysisMuMuBinning.cxx:569
 AliAnalysisMuMuBinning.cxx:570
 AliAnalysisMuMuBinning.cxx:571
 AliAnalysisMuMuBinning.cxx:572
 AliAnalysisMuMuBinning.cxx:573
 AliAnalysisMuMuBinning.cxx:574
 AliAnalysisMuMuBinning.cxx:575
 AliAnalysisMuMuBinning.cxx:576
 AliAnalysisMuMuBinning.cxx:577
 AliAnalysisMuMuBinning.cxx:578
 AliAnalysisMuMuBinning.cxx:579
 AliAnalysisMuMuBinning.cxx:580
 AliAnalysisMuMuBinning.cxx:581
 AliAnalysisMuMuBinning.cxx:582
 AliAnalysisMuMuBinning.cxx:583
 AliAnalysisMuMuBinning.cxx:584
 AliAnalysisMuMuBinning.cxx:585
 AliAnalysisMuMuBinning.cxx:586
 AliAnalysisMuMuBinning.cxx:587
 AliAnalysisMuMuBinning.cxx:588
 AliAnalysisMuMuBinning.cxx:589
 AliAnalysisMuMuBinning.cxx:590
 AliAnalysisMuMuBinning.cxx:591
 AliAnalysisMuMuBinning.cxx:592
 AliAnalysisMuMuBinning.cxx:593
 AliAnalysisMuMuBinning.cxx:594
 AliAnalysisMuMuBinning.cxx:595
 AliAnalysisMuMuBinning.cxx:596
 AliAnalysisMuMuBinning.cxx:597
 AliAnalysisMuMuBinning.cxx:598
 AliAnalysisMuMuBinning.cxx:599
 AliAnalysisMuMuBinning.cxx:600
 AliAnalysisMuMuBinning.cxx:601
 AliAnalysisMuMuBinning.cxx:602
 AliAnalysisMuMuBinning.cxx:603
 AliAnalysisMuMuBinning.cxx:604
 AliAnalysisMuMuBinning.cxx:605
 AliAnalysisMuMuBinning.cxx:606
 AliAnalysisMuMuBinning.cxx:607
 AliAnalysisMuMuBinning.cxx:608
 AliAnalysisMuMuBinning.cxx:609
 AliAnalysisMuMuBinning.cxx:610
 AliAnalysisMuMuBinning.cxx:611
 AliAnalysisMuMuBinning.cxx:612
 AliAnalysisMuMuBinning.cxx:613
 AliAnalysisMuMuBinning.cxx:614
 AliAnalysisMuMuBinning.cxx:615
 AliAnalysisMuMuBinning.cxx:616
 AliAnalysisMuMuBinning.cxx:617
 AliAnalysisMuMuBinning.cxx:618
 AliAnalysisMuMuBinning.cxx:619
 AliAnalysisMuMuBinning.cxx:620
 AliAnalysisMuMuBinning.cxx:621
 AliAnalysisMuMuBinning.cxx:622
 AliAnalysisMuMuBinning.cxx:623
 AliAnalysisMuMuBinning.cxx:624
 AliAnalysisMuMuBinning.cxx:625
 AliAnalysisMuMuBinning.cxx:626
 AliAnalysisMuMuBinning.cxx:627
 AliAnalysisMuMuBinning.cxx:628
 AliAnalysisMuMuBinning.cxx:629
 AliAnalysisMuMuBinning.cxx:630
 AliAnalysisMuMuBinning.cxx:631
 AliAnalysisMuMuBinning.cxx:632
 AliAnalysisMuMuBinning.cxx:633
 AliAnalysisMuMuBinning.cxx:634
 AliAnalysisMuMuBinning.cxx:635
 AliAnalysisMuMuBinning.cxx:636
 AliAnalysisMuMuBinning.cxx:637
 AliAnalysisMuMuBinning.cxx:638
 AliAnalysisMuMuBinning.cxx:639
 AliAnalysisMuMuBinning.cxx:640
 AliAnalysisMuMuBinning.cxx:641
 AliAnalysisMuMuBinning.cxx:642
 AliAnalysisMuMuBinning.cxx:643
 AliAnalysisMuMuBinning.cxx:644
 AliAnalysisMuMuBinning.cxx:645
 AliAnalysisMuMuBinning.cxx:646
 AliAnalysisMuMuBinning.cxx:647
 AliAnalysisMuMuBinning.cxx:648
 AliAnalysisMuMuBinning.cxx:649
 AliAnalysisMuMuBinning.cxx:650
 AliAnalysisMuMuBinning.cxx:651
 AliAnalysisMuMuBinning.cxx:652
 AliAnalysisMuMuBinning.cxx:653
 AliAnalysisMuMuBinning.cxx:654
 AliAnalysisMuMuBinning.cxx:655
 AliAnalysisMuMuBinning.cxx:656
 AliAnalysisMuMuBinning.cxx:657
 AliAnalysisMuMuBinning.cxx:658
 AliAnalysisMuMuBinning.cxx:659
 AliAnalysisMuMuBinning.cxx:660
 AliAnalysisMuMuBinning.cxx:661
 AliAnalysisMuMuBinning.cxx:662
 AliAnalysisMuMuBinning.cxx:663
 AliAnalysisMuMuBinning.cxx:664
 AliAnalysisMuMuBinning.cxx:665
 AliAnalysisMuMuBinning.cxx:666
 AliAnalysisMuMuBinning.cxx:667
 AliAnalysisMuMuBinning.cxx:668
 AliAnalysisMuMuBinning.cxx:669
 AliAnalysisMuMuBinning.cxx:670
 AliAnalysisMuMuBinning.cxx:671
 AliAnalysisMuMuBinning.cxx:672
 AliAnalysisMuMuBinning.cxx:673
 AliAnalysisMuMuBinning.cxx:674
 AliAnalysisMuMuBinning.cxx:675
 AliAnalysisMuMuBinning.cxx:676
 AliAnalysisMuMuBinning.cxx:677
 AliAnalysisMuMuBinning.cxx:678
 AliAnalysisMuMuBinning.cxx:679
 AliAnalysisMuMuBinning.cxx:680
 AliAnalysisMuMuBinning.cxx:681
 AliAnalysisMuMuBinning.cxx:682
 AliAnalysisMuMuBinning.cxx:683
 AliAnalysisMuMuBinning.cxx:684
 AliAnalysisMuMuBinning.cxx:685
 AliAnalysisMuMuBinning.cxx:686
 AliAnalysisMuMuBinning.cxx:687
 AliAnalysisMuMuBinning.cxx:688
 AliAnalysisMuMuBinning.cxx:689
 AliAnalysisMuMuBinning.cxx:690
 AliAnalysisMuMuBinning.cxx:691
 AliAnalysisMuMuBinning.cxx:692
 AliAnalysisMuMuBinning.cxx:693
 AliAnalysisMuMuBinning.cxx:694
 AliAnalysisMuMuBinning.cxx:695
 AliAnalysisMuMuBinning.cxx:696
 AliAnalysisMuMuBinning.cxx:697
 AliAnalysisMuMuBinning.cxx:698
 AliAnalysisMuMuBinning.cxx:699
 AliAnalysisMuMuBinning.cxx:700
 AliAnalysisMuMuBinning.cxx:701
 AliAnalysisMuMuBinning.cxx:702
 AliAnalysisMuMuBinning.cxx:703
 AliAnalysisMuMuBinning.cxx:704
 AliAnalysisMuMuBinning.cxx:705
 AliAnalysisMuMuBinning.cxx:706
 AliAnalysisMuMuBinning.cxx:707
 AliAnalysisMuMuBinning.cxx:708
 AliAnalysisMuMuBinning.cxx:709
 AliAnalysisMuMuBinning.cxx:710
 AliAnalysisMuMuBinning.cxx:711
 AliAnalysisMuMuBinning.cxx:712
 AliAnalysisMuMuBinning.cxx:713
 AliAnalysisMuMuBinning.cxx:714
 AliAnalysisMuMuBinning.cxx:715
 AliAnalysisMuMuBinning.cxx:716
 AliAnalysisMuMuBinning.cxx:717
 AliAnalysisMuMuBinning.cxx:718
 AliAnalysisMuMuBinning.cxx:719
 AliAnalysisMuMuBinning.cxx:720
 AliAnalysisMuMuBinning.cxx:721
 AliAnalysisMuMuBinning.cxx:722
 AliAnalysisMuMuBinning.cxx:723
 AliAnalysisMuMuBinning.cxx:724
 AliAnalysisMuMuBinning.cxx:725
 AliAnalysisMuMuBinning.cxx:726
 AliAnalysisMuMuBinning.cxx:727
 AliAnalysisMuMuBinning.cxx:728
 AliAnalysisMuMuBinning.cxx:729
 AliAnalysisMuMuBinning.cxx:730
 AliAnalysisMuMuBinning.cxx:731
 AliAnalysisMuMuBinning.cxx:732
 AliAnalysisMuMuBinning.cxx:733
 AliAnalysisMuMuBinning.cxx:734
 AliAnalysisMuMuBinning.cxx:735
 AliAnalysisMuMuBinning.cxx:736
 AliAnalysisMuMuBinning.cxx:737
 AliAnalysisMuMuBinning.cxx:738
 AliAnalysisMuMuBinning.cxx:739
 AliAnalysisMuMuBinning.cxx:740
 AliAnalysisMuMuBinning.cxx:741
 AliAnalysisMuMuBinning.cxx:742
 AliAnalysisMuMuBinning.cxx:743
 AliAnalysisMuMuBinning.cxx:744
 AliAnalysisMuMuBinning.cxx:745
 AliAnalysisMuMuBinning.cxx:746
 AliAnalysisMuMuBinning.cxx:747
 AliAnalysisMuMuBinning.cxx:748
 AliAnalysisMuMuBinning.cxx:749
 AliAnalysisMuMuBinning.cxx:750
 AliAnalysisMuMuBinning.cxx:751
 AliAnalysisMuMuBinning.cxx:752
 AliAnalysisMuMuBinning.cxx:753
 AliAnalysisMuMuBinning.cxx:754
 AliAnalysisMuMuBinning.cxx:755
 AliAnalysisMuMuBinning.cxx:756
 AliAnalysisMuMuBinning.cxx:757
 AliAnalysisMuMuBinning.cxx:758
 AliAnalysisMuMuBinning.cxx:759
 AliAnalysisMuMuBinning.cxx:760
 AliAnalysisMuMuBinning.cxx:761
 AliAnalysisMuMuBinning.cxx:762
 AliAnalysisMuMuBinning.cxx:763
 AliAnalysisMuMuBinning.cxx:764
 AliAnalysisMuMuBinning.cxx:765
 AliAnalysisMuMuBinning.cxx:766
 AliAnalysisMuMuBinning.cxx:767
 AliAnalysisMuMuBinning.cxx:768
 AliAnalysisMuMuBinning.cxx:769
 AliAnalysisMuMuBinning.cxx:770
 AliAnalysisMuMuBinning.cxx:771
 AliAnalysisMuMuBinning.cxx:772
 AliAnalysisMuMuBinning.cxx:773
 AliAnalysisMuMuBinning.cxx:774
 AliAnalysisMuMuBinning.cxx:775
 AliAnalysisMuMuBinning.cxx:776
 AliAnalysisMuMuBinning.cxx:777
 AliAnalysisMuMuBinning.cxx:778
 AliAnalysisMuMuBinning.cxx:779
 AliAnalysisMuMuBinning.cxx:780
 AliAnalysisMuMuBinning.cxx:781
 AliAnalysisMuMuBinning.cxx:782
 AliAnalysisMuMuBinning.cxx:783
 AliAnalysisMuMuBinning.cxx:784
 AliAnalysisMuMuBinning.cxx:785
 AliAnalysisMuMuBinning.cxx:786
 AliAnalysisMuMuBinning.cxx:787
 AliAnalysisMuMuBinning.cxx:788
 AliAnalysisMuMuBinning.cxx:789
 AliAnalysisMuMuBinning.cxx:790
 AliAnalysisMuMuBinning.cxx:791
 AliAnalysisMuMuBinning.cxx:792
 AliAnalysisMuMuBinning.cxx:793
 AliAnalysisMuMuBinning.cxx:794
 AliAnalysisMuMuBinning.cxx:795
 AliAnalysisMuMuBinning.cxx:796
 AliAnalysisMuMuBinning.cxx:797
 AliAnalysisMuMuBinning.cxx:798
 AliAnalysisMuMuBinning.cxx:799
 AliAnalysisMuMuBinning.cxx:800
 AliAnalysisMuMuBinning.cxx:801
 AliAnalysisMuMuBinning.cxx:802
 AliAnalysisMuMuBinning.cxx:803
 AliAnalysisMuMuBinning.cxx:804
 AliAnalysisMuMuBinning.cxx:805
 AliAnalysisMuMuBinning.cxx:806
 AliAnalysisMuMuBinning.cxx:807
 AliAnalysisMuMuBinning.cxx:808
 AliAnalysisMuMuBinning.cxx:809
 AliAnalysisMuMuBinning.cxx:810
 AliAnalysisMuMuBinning.cxx:811
 AliAnalysisMuMuBinning.cxx:812
 AliAnalysisMuMuBinning.cxx:813
 AliAnalysisMuMuBinning.cxx:814
 AliAnalysisMuMuBinning.cxx:815
 AliAnalysisMuMuBinning.cxx:816
 AliAnalysisMuMuBinning.cxx:817
 AliAnalysisMuMuBinning.cxx:818
 AliAnalysisMuMuBinning.cxx:819
 AliAnalysisMuMuBinning.cxx:820
 AliAnalysisMuMuBinning.cxx:821
 AliAnalysisMuMuBinning.cxx:822
 AliAnalysisMuMuBinning.cxx:823
 AliAnalysisMuMuBinning.cxx:824
 AliAnalysisMuMuBinning.cxx:825
 AliAnalysisMuMuBinning.cxx:826
 AliAnalysisMuMuBinning.cxx:827
 AliAnalysisMuMuBinning.cxx:828
 AliAnalysisMuMuBinning.cxx:829
 AliAnalysisMuMuBinning.cxx:830
 AliAnalysisMuMuBinning.cxx:831
 AliAnalysisMuMuBinning.cxx:832
 AliAnalysisMuMuBinning.cxx:833
 AliAnalysisMuMuBinning.cxx:834
 AliAnalysisMuMuBinning.cxx:835
 AliAnalysisMuMuBinning.cxx:836
 AliAnalysisMuMuBinning.cxx:837
 AliAnalysisMuMuBinning.cxx:838
 AliAnalysisMuMuBinning.cxx:839
 AliAnalysisMuMuBinning.cxx:840
 AliAnalysisMuMuBinning.cxx:841
 AliAnalysisMuMuBinning.cxx:842
 AliAnalysisMuMuBinning.cxx:843
 AliAnalysisMuMuBinning.cxx:844
 AliAnalysisMuMuBinning.cxx:845
 AliAnalysisMuMuBinning.cxx:846
 AliAnalysisMuMuBinning.cxx:847
 AliAnalysisMuMuBinning.cxx:848
 AliAnalysisMuMuBinning.cxx:849
 AliAnalysisMuMuBinning.cxx:850
 AliAnalysisMuMuBinning.cxx:851
 AliAnalysisMuMuBinning.cxx:852
 AliAnalysisMuMuBinning.cxx:853
 AliAnalysisMuMuBinning.cxx:854
 AliAnalysisMuMuBinning.cxx:855
 AliAnalysisMuMuBinning.cxx:856
 AliAnalysisMuMuBinning.cxx:857
 AliAnalysisMuMuBinning.cxx:858
 AliAnalysisMuMuBinning.cxx:859
 AliAnalysisMuMuBinning.cxx:860
 AliAnalysisMuMuBinning.cxx:861
 AliAnalysisMuMuBinning.cxx:862
 AliAnalysisMuMuBinning.cxx:863
 AliAnalysisMuMuBinning.cxx:864
 AliAnalysisMuMuBinning.cxx:865
 AliAnalysisMuMuBinning.cxx:866
 AliAnalysisMuMuBinning.cxx:867
 AliAnalysisMuMuBinning.cxx:868
 AliAnalysisMuMuBinning.cxx:869
 AliAnalysisMuMuBinning.cxx:870
 AliAnalysisMuMuBinning.cxx:871
 AliAnalysisMuMuBinning.cxx:872
 AliAnalysisMuMuBinning.cxx:873
 AliAnalysisMuMuBinning.cxx:874
 AliAnalysisMuMuBinning.cxx:875
 AliAnalysisMuMuBinning.cxx:876
 AliAnalysisMuMuBinning.cxx:877
 AliAnalysisMuMuBinning.cxx:878
 AliAnalysisMuMuBinning.cxx:879
 AliAnalysisMuMuBinning.cxx:880
 AliAnalysisMuMuBinning.cxx:881
 AliAnalysisMuMuBinning.cxx:882
 AliAnalysisMuMuBinning.cxx:883
 AliAnalysisMuMuBinning.cxx:884