ROOT logo
#include "AliAnalysisMuMuGraphUtil.h"

#include "TAxis.h"
#include "TCanvas.h"
#include "TPad.h"
#include "TGraphErrors.h"
#include "TString.h"
#include <vector>
#include <map>
#include "TMath.h"
#include "TObjArray.h"
#include "AliLog.h"
#include "TLegend.h"
#include "TH2F.h"
#include "TStyle.h"
#include "AliAnalysisTriggerScalers.h"
#include <set>
#include "AliAnalysisMuMuResult.h"

ClassImp(AliAnalysisMuMuGraphUtil)

//____________________________________________________________________________
AliAnalysisMuMuGraphUtil::AliAnalysisMuMuGraphUtil(const char* ocdbpath) : TObject(),
fOCDBPath(ocdbpath),
fAttLine(),
fAttMarker(),
fAttFill(),
fAttXaxis(),
fAttYaxis(),
fDrawOptions(),
fShouldDrawPeriods(kFALSE)
{
  // default ctor
  DefaultStyle();
}

//____________________________________________________________________________
TGraphErrors* AliAnalysisMuMuGraphUtil::Combine(TObjArray& graphs, Bool_t compact)
{
  // make one graph out of several
  // x axis is supposed to be run numbers and will end up ordered in the
  // returned graph
  
  std::map<int, std::vector<double> > values;
  std::map<int, std::vector<double> >::const_iterator it;

  TIter next(&graphs);
  TGraph* g;
  
  while ( ( g = static_cast<TGraph*>(next())) )
  {
    TGraphErrors* ge = dynamic_cast<TGraphErrors*>(g);
    
    for ( Int_t i = 0; i < g->GetN(); ++i )
    {
      Int_t runNumber = GetRunNumber(*g,i); // by doing this we "de-compact" the graph

      it = values.find(runNumber);
      if ( it != values.end() )
      {
        AliErrorClass(Form("Already got values for run %d !",runNumber));
        StdoutToAliErrorClass(graphs.Print(););
        return 0x0;
      }

      std::vector<double> quartet;
    
      quartet.push_back(runNumber);
      quartet.push_back(g->GetY()[i]);
      
      if ( ge )
      {
        quartet.push_back(ge->GetEX()[i]);
        quartet.push_back(ge->GetEY()[i]);
      }
      else
      {
        quartet.push_back(0.0);
        quartet.push_back(0.0);
      }
      
      values.insert( std::make_pair(runNumber,quartet));      
    }
  }
  
  TGraphErrors* rv(0x0);
  
  if ( values.size() )
  {
    std::vector<double> vx;
    std::vector<double> vy;
    std::vector<double> vxerr;
    std::vector<double> vyerr;
    
    for ( it = values.begin(); it != values.end(); ++it )
    {
      const std::vector<double>& q = it->second;
      
      vx.push_back(q[0]);
      vy.push_back(q[1]);
      vxerr.push_back(q[2]);
      vyerr.push_back(q[3]);
    }
    
    rv = new TGraphErrors(values.size(),&vx[0],&vy[0],&vxerr[0],&vyerr[0]);
    rv->GetXaxis()->SetNoExponent();
    
    g = static_cast<TGraph*>(graphs.At(0));
    
    rv->SetName(g->GetName());
    rv->SetTitle(g->GetTitle());
    
    if ( compact || IsCompact(*g) )
    {
      Compact(*rv);
    }
  }
  
  return rv;
}

//____________________________________________________________________________
void AliAnalysisMuMuGraphUtil::DefaultStyle()
{
  // Define default color/styles to be used, for at least 2 graphs
  // (here 5)
  
  Int_t colors[] = { 1, kGray+1, 4, 2, 6 };
  
  for ( Int_t i = 0; i < 5; ++i )
  {
    Int_t color = colors[i];
    
    fAttLine.push_back(TAttLine(color,1,1));
    fAttFill.push_back(TAttFill(color,1001));
    fAttMarker.push_back(TAttMarker(color,20+i,1));
    fAttXaxis.push_back(TAttAxis());
    
    TAttAxis a;
    
    a.ResetAttAxis();
    
    a.SetLabelColor(color);
    a.SetTitleColor(color);
    
    fAttYaxis.push_back(a);
    
    fDrawOptions.push_back("LP");
  }
}

//____________________________________________________________________________
TCanvas* AliAnalysisMuMuGraphUtil::DrawWith2Scales(TGraph& g1, TGraph& g2, const char* canvasName)
{
  TCanvas* c1 = new TCanvas(canvasName,canvasName);
  c1->Draw();
  
  TPad* pad1 = new TPad("pad1","",0,0,1,1);
  TPad* pad2 = new TPad("pad2","",0,0,1,1);
  
  g2.GetYaxis()->SetTitle(g2.GetTitle());
  g1.GetYaxis()->SetTitle(g1.GetTitle());
  
  pad1->SetFillStyle(4000);
  pad1->SetFrameFillStyle(0); //  transparent pad
  
  pad2->Draw();
  pad2->cd();
  
  StyleGraph(g2,1);
  
  g2.Draw("abxy+");
  
  pad1->Draw();
  pad1->cd();
  
  StyleGraph(g1,0);
  
  g1.Draw("alp");
  
  return c1;
}

//____________________________________________________________________________
void AliAnalysisMuMuGraphUtil::Compact(TGraph& g)
{
  /// Compact (i.e. get the equivalent of 1 bin = 1 run number for an histogram)
  /// the graph.
  /// Only works if the x content of this graph represents run numbers. Otherwise
  /// result is unpredictable ;-)
  
  if ( !g.GetN() ) return;
  
  Double_t x,y;
  
  std::vector<int> runs;
  std::vector<double> bins;
  
  Int_t i(0);
  
  for ( i = 0; i < g.GetN(); ++i )
  {
    g.GetPoint(i,x,y);
    runs.push_back(TMath::Nint(x));
    bins.push_back(i);
    g.SetPoint(i,i+0.5,y);
  }
  
  bins.push_back(i);
  
  TAxis* axis = g.GetXaxis();
  
  axis->Set(g.GetN(),&bins[0]);
  
  for ( std::vector<int>::size_type j = 0; j < runs.size(); ++j )
  {
    axis->SetBinLabel(j+1,TString::Format("%d",runs[j]).Data());
  }
  
  axis->LabelsOption("v");
}

//_____________________________________________________________________________
Int_t AliAnalysisMuMuGraphUtil::GetRunNumber(const TGraph& g, Int_t i)
{
  // get the run number associated with bin i+1
  // if graph is not compacted then run number = x-value
  // otherwise we get it from the axis label
 
  Int_t runNumber = TMath::Nint(g.GetX()[i]);

  TString runLabel = g.GetXaxis()->GetBinLabel(i+1);
  
  if ( runLabel.Length() )
  {
    runNumber = runLabel.Atoi();
  }

  return runNumber;
}

//_____________________________________________________________________________
void AliAnalysisMuMuGraphUtil::GetRuns(std::set<int>& runs, TGraph& graph) const
{
  // extract the list of runs in graph's x-axis
  
  for ( Int_t i = 0; i < graph.GetN(); ++i )
  {
    runs.insert(GetRunNumber(graph,i));
  }
}

//_____________________________________________________________________________
void AliAnalysisMuMuGraphUtil::GetYMinAndMax(TGraph& graph, Double_t& ymin, Double_t& ymax)
{
  // find graph y-range
  // note that ymin and ymax *must* be initialized correctly outside
  // (this is done this way so that this method can be used easily
  // to get the range of a set of graphs)
  
  Double_t x,y;
  
  for ( Int_t i = 0; i < graph.GetN(); ++i )
  {
    graph.GetPoint(i,x,y);
    ymin = TMath::Min(ymin,y);
    ymax = TMath::Max(ymax,y);
  }
  
}

//_____________________________________________________________________________
Bool_t AliAnalysisMuMuGraphUtil::IsCompact(TGraph& g)
{
  // whether the graph is compact or not
  Double_t delta(0.0);
  
  for ( Int_t i = 1; i < g.GetN(); ++i )
  {
    delta = TMath::Max(delta,g.GetX()[i] - g.GetX()[i-1]);
  }
  
  Bool_t hasLabels(kFALSE);

  for ( Int_t i = 1; ( i <= g.GetN() ) && ( !hasLabels ); ++i )
  {
    TString label(g.GetXaxis()->GetBinLabel(i));
    if ( label.Length() ) hasLabels = kTRUE;
  }
  
  return hasLabels && delta == 1.0;
}

//_____________________________________________________________________________
void AliAnalysisMuMuGraphUtil::PlotSameWithLegend(TObjArray& a,
                                                  Double_t ymin, Double_t ymax) const
{
  // plot on same canvas
  if (!gPad) new TCanvas;
  
  Double_t xmin = TMath::Limits<Double_t>::Max();
  Double_t xmax = TMath::Limits<Double_t>::Min();
  
  TIter next(&a);
  TGraph* g;
  
  while ( ( g = static_cast<TGraph*>(next())))
  {
    xmin = TMath::Min(xmin,g->GetX()[0]);

    xmax = TMath::Max(xmax,g->GetX()[g->GetN()-1]);

  }

  TH2* hframe = new TH2F("hframe","hframe",100,xmin,xmax,100,ymin,ymax);
  
  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);

  hframe->GetXaxis()->SetNoExponent();

//  if ( IsCompact(g1) )
//  {
//    (*(hframe->GetXaxis()))=(*(g1.GetXaxis()));
//  }

  hframe->Draw();

  if ( fShouldDrawPeriods )
  {
    std::set<int> runs;
  
    next.Reset();
    
    while ( ( g = static_cast<TGraph*>(next())))
    {
      GetRuns(runs,*g);
    }
    
    AliAnalysisTriggerScalers ts(runs,fOCDBPath);
  
    ts.DrawPeriods(ymin,ymax,kGray);
    
    hframe->Draw("axissame");
  }

  next.Reset();
  
  Int_t i(0);
  TLegend* l = new TLegend(0.5,0.7,0.9,0.9); // fixme: how to get the legend position/size ?
  l->SetFillColor(0);
  
  while ( ( g = static_cast<TGraph*>(next())))
  {
    StyleGraph(*g,i);
    g->Draw(fDrawOptions[i].c_str());
    ++i;
    l->AddEntry(g,g->GetName(),fDrawOptions[0].c_str());
  }
  
  l->Draw();  

}

//_____________________________________________________________________________
TGraph* AliAnalysisMuMuGraphUtil::RelDif(TGraph& ga, TGraph& gb)
{
  // compute the relative difference between two graphs
  
  std::vector<double> vx;
  std::vector<double> vxerr;
  std::vector<double> vy;
  std::vector<double> vyerr;

  for ( Int_t i = 0; i < ga.GetN(); ++i )
  {
    Double_t xa,xb,ya,yb;
  
    ga.GetPoint(i,xa,ya);
    gb.GetPoint(i,xb,yb);
  
    if ( xa != xb )
    {
      AliErrorClass(Form("Incompatible graphs : got xa=%e and xb=%e",xa,xb));
      return 0x0;
    }
  
    Double_t newvalue = 0.0;
  
    if ( TMath::Abs(xa) > 1E-12 )
    {
      newvalue = 100.0*( yb - ya ) / ya;
    }
  
    Double_t yerr = 0.0;
    
    if ( dynamic_cast<TGraphErrors*>(&ga) && dynamic_cast<TGraphErrors*>(&gb) )
    {
        yerr = newvalue*AliAnalysisMuMuResult::ErrorAB(ya,ga.GetEY()[i],
                                                       yb,gb.GetEY()[i]);
    }
  
    vx.push_back(xa);
    vxerr.push_back(0.5);
    vy.push_back(newvalue);
    vyerr.push_back(yerr);
  }
  
  
  return new TGraphErrors(vx.size(),&vx[0],&vy[0],&vxerr[0],&vyerr[0]);
}

//_____________________________________________________________________________
void AliAnalysisMuMuGraphUtil::StyleGraph(TGraph& g, UInt_t index) const
{
  if ( index >= fAttFill.size() ) index = 0;
  
  static_cast<TAttFill&>(g) = fAttFill[index];
  static_cast<TAttLine&>(g) = fAttLine[index];
  static_cast<TAttMarker&>(g) = fAttMarker[index];
  
  g.GetYaxis()->SetLabelColor(fAttYaxis[index].GetLabelColor());
  g.GetYaxis()->SetTitleColor(fAttYaxis[index].GetTitleColor());
  
  //static_cast<TAttAxis&>((*g.GetYaxis())) = fAttYaxis[index];
}

//_____________________________________________________________________________
void AliAnalysisMuMuGraphUtil::UnCompact(TGraph& g)
{
  /// Reverse operation of the Compact method
  /// Only works if the labels of this graph represents run numbers. Otherwise
  /// result is unpredictable ;-)
  
  if ( !g.GetN() ) return;
  
  //  Int_t run1 = TString(g.GetXaxis()->GetBinLabel(1)).Atoi();
  //  Int_t run2 = TString(g.GetXaxis()->GetBinLabel(g.GetN())).Atoi();
  
  std::vector<double> runs;
  Int_t runNumber(-1);
  
  for ( Int_t i = 0; i < g.GetN(); ++i )
  {
    runNumber = TString(g.GetXaxis()->GetBinLabel(i+1)).Atoi();
    runs.push_back(runNumber*1.0);
  }
  
  runs.push_back(runNumber+1);
  
  g.GetXaxis()->Set(g.GetN(),&runs[0]);
  
  for ( Int_t i = 0; i < g.GetN(); ++i )
  {
    g.SetPoint(i,runs[i],g.GetY()[i]);
  }
  
  g.GetXaxis()->SetNoExponent();
  
}


 AliAnalysisMuMuGraphUtil.cxx:1
 AliAnalysisMuMuGraphUtil.cxx:2
 AliAnalysisMuMuGraphUtil.cxx:3
 AliAnalysisMuMuGraphUtil.cxx:4
 AliAnalysisMuMuGraphUtil.cxx:5
 AliAnalysisMuMuGraphUtil.cxx:6
 AliAnalysisMuMuGraphUtil.cxx:7
 AliAnalysisMuMuGraphUtil.cxx:8
 AliAnalysisMuMuGraphUtil.cxx:9
 AliAnalysisMuMuGraphUtil.cxx:10
 AliAnalysisMuMuGraphUtil.cxx:11
 AliAnalysisMuMuGraphUtil.cxx:12
 AliAnalysisMuMuGraphUtil.cxx:13
 AliAnalysisMuMuGraphUtil.cxx:14
 AliAnalysisMuMuGraphUtil.cxx:15
 AliAnalysisMuMuGraphUtil.cxx:16
 AliAnalysisMuMuGraphUtil.cxx:17
 AliAnalysisMuMuGraphUtil.cxx:18
 AliAnalysisMuMuGraphUtil.cxx:19
 AliAnalysisMuMuGraphUtil.cxx:20
 AliAnalysisMuMuGraphUtil.cxx:21
 AliAnalysisMuMuGraphUtil.cxx:22
 AliAnalysisMuMuGraphUtil.cxx:23
 AliAnalysisMuMuGraphUtil.cxx:24
 AliAnalysisMuMuGraphUtil.cxx:25
 AliAnalysisMuMuGraphUtil.cxx:26
 AliAnalysisMuMuGraphUtil.cxx:27
 AliAnalysisMuMuGraphUtil.cxx:28
 AliAnalysisMuMuGraphUtil.cxx:29
 AliAnalysisMuMuGraphUtil.cxx:30
 AliAnalysisMuMuGraphUtil.cxx:31
 AliAnalysisMuMuGraphUtil.cxx:32
 AliAnalysisMuMuGraphUtil.cxx:33
 AliAnalysisMuMuGraphUtil.cxx:34
 AliAnalysisMuMuGraphUtil.cxx:35
 AliAnalysisMuMuGraphUtil.cxx:36
 AliAnalysisMuMuGraphUtil.cxx:37
 AliAnalysisMuMuGraphUtil.cxx:38
 AliAnalysisMuMuGraphUtil.cxx:39
 AliAnalysisMuMuGraphUtil.cxx:40
 AliAnalysisMuMuGraphUtil.cxx:41
 AliAnalysisMuMuGraphUtil.cxx:42
 AliAnalysisMuMuGraphUtil.cxx:43
 AliAnalysisMuMuGraphUtil.cxx:44
 AliAnalysisMuMuGraphUtil.cxx:45
 AliAnalysisMuMuGraphUtil.cxx:46
 AliAnalysisMuMuGraphUtil.cxx:47
 AliAnalysisMuMuGraphUtil.cxx:48
 AliAnalysisMuMuGraphUtil.cxx:49
 AliAnalysisMuMuGraphUtil.cxx:50
 AliAnalysisMuMuGraphUtil.cxx:51
 AliAnalysisMuMuGraphUtil.cxx:52
 AliAnalysisMuMuGraphUtil.cxx:53
 AliAnalysisMuMuGraphUtil.cxx:54
 AliAnalysisMuMuGraphUtil.cxx:55
 AliAnalysisMuMuGraphUtil.cxx:56
 AliAnalysisMuMuGraphUtil.cxx:57
 AliAnalysisMuMuGraphUtil.cxx:58
 AliAnalysisMuMuGraphUtil.cxx:59
 AliAnalysisMuMuGraphUtil.cxx:60
 AliAnalysisMuMuGraphUtil.cxx:61
 AliAnalysisMuMuGraphUtil.cxx:62
 AliAnalysisMuMuGraphUtil.cxx:63
 AliAnalysisMuMuGraphUtil.cxx:64
 AliAnalysisMuMuGraphUtil.cxx:65
 AliAnalysisMuMuGraphUtil.cxx:66
 AliAnalysisMuMuGraphUtil.cxx:67
 AliAnalysisMuMuGraphUtil.cxx:68
 AliAnalysisMuMuGraphUtil.cxx:69
 AliAnalysisMuMuGraphUtil.cxx:70
 AliAnalysisMuMuGraphUtil.cxx:71
 AliAnalysisMuMuGraphUtil.cxx:72
 AliAnalysisMuMuGraphUtil.cxx:73
 AliAnalysisMuMuGraphUtil.cxx:74
 AliAnalysisMuMuGraphUtil.cxx:75
 AliAnalysisMuMuGraphUtil.cxx:76
 AliAnalysisMuMuGraphUtil.cxx:77
 AliAnalysisMuMuGraphUtil.cxx:78
 AliAnalysisMuMuGraphUtil.cxx:79
 AliAnalysisMuMuGraphUtil.cxx:80
 AliAnalysisMuMuGraphUtil.cxx:81
 AliAnalysisMuMuGraphUtil.cxx:82
 AliAnalysisMuMuGraphUtil.cxx:83
 AliAnalysisMuMuGraphUtil.cxx:84
 AliAnalysisMuMuGraphUtil.cxx:85
 AliAnalysisMuMuGraphUtil.cxx:86
 AliAnalysisMuMuGraphUtil.cxx:87
 AliAnalysisMuMuGraphUtil.cxx:88
 AliAnalysisMuMuGraphUtil.cxx:89
 AliAnalysisMuMuGraphUtil.cxx:90
 AliAnalysisMuMuGraphUtil.cxx:91
 AliAnalysisMuMuGraphUtil.cxx:92
 AliAnalysisMuMuGraphUtil.cxx:93
 AliAnalysisMuMuGraphUtil.cxx:94
 AliAnalysisMuMuGraphUtil.cxx:95
 AliAnalysisMuMuGraphUtil.cxx:96
 AliAnalysisMuMuGraphUtil.cxx:97
 AliAnalysisMuMuGraphUtil.cxx:98
 AliAnalysisMuMuGraphUtil.cxx:99
 AliAnalysisMuMuGraphUtil.cxx:100
 AliAnalysisMuMuGraphUtil.cxx:101
 AliAnalysisMuMuGraphUtil.cxx:102
 AliAnalysisMuMuGraphUtil.cxx:103
 AliAnalysisMuMuGraphUtil.cxx:104
 AliAnalysisMuMuGraphUtil.cxx:105
 AliAnalysisMuMuGraphUtil.cxx:106
 AliAnalysisMuMuGraphUtil.cxx:107
 AliAnalysisMuMuGraphUtil.cxx:108
 AliAnalysisMuMuGraphUtil.cxx:109
 AliAnalysisMuMuGraphUtil.cxx:110
 AliAnalysisMuMuGraphUtil.cxx:111
 AliAnalysisMuMuGraphUtil.cxx:112
 AliAnalysisMuMuGraphUtil.cxx:113
 AliAnalysisMuMuGraphUtil.cxx:114
 AliAnalysisMuMuGraphUtil.cxx:115
 AliAnalysisMuMuGraphUtil.cxx:116
 AliAnalysisMuMuGraphUtil.cxx:117
 AliAnalysisMuMuGraphUtil.cxx:118
 AliAnalysisMuMuGraphUtil.cxx:119
 AliAnalysisMuMuGraphUtil.cxx:120
 AliAnalysisMuMuGraphUtil.cxx:121
 AliAnalysisMuMuGraphUtil.cxx:122
 AliAnalysisMuMuGraphUtil.cxx:123
 AliAnalysisMuMuGraphUtil.cxx:124
 AliAnalysisMuMuGraphUtil.cxx:125
 AliAnalysisMuMuGraphUtil.cxx:126
 AliAnalysisMuMuGraphUtil.cxx:127
 AliAnalysisMuMuGraphUtil.cxx:128
 AliAnalysisMuMuGraphUtil.cxx:129
 AliAnalysisMuMuGraphUtil.cxx:130
 AliAnalysisMuMuGraphUtil.cxx:131
 AliAnalysisMuMuGraphUtil.cxx:132
 AliAnalysisMuMuGraphUtil.cxx:133
 AliAnalysisMuMuGraphUtil.cxx:134
 AliAnalysisMuMuGraphUtil.cxx:135
 AliAnalysisMuMuGraphUtil.cxx:136
 AliAnalysisMuMuGraphUtil.cxx:137
 AliAnalysisMuMuGraphUtil.cxx:138
 AliAnalysisMuMuGraphUtil.cxx:139
 AliAnalysisMuMuGraphUtil.cxx:140
 AliAnalysisMuMuGraphUtil.cxx:141
 AliAnalysisMuMuGraphUtil.cxx:142
 AliAnalysisMuMuGraphUtil.cxx:143
 AliAnalysisMuMuGraphUtil.cxx:144
 AliAnalysisMuMuGraphUtil.cxx:145
 AliAnalysisMuMuGraphUtil.cxx:146
 AliAnalysisMuMuGraphUtil.cxx:147
 AliAnalysisMuMuGraphUtil.cxx:148
 AliAnalysisMuMuGraphUtil.cxx:149
 AliAnalysisMuMuGraphUtil.cxx:150
 AliAnalysisMuMuGraphUtil.cxx:151
 AliAnalysisMuMuGraphUtil.cxx:152
 AliAnalysisMuMuGraphUtil.cxx:153
 AliAnalysisMuMuGraphUtil.cxx:154
 AliAnalysisMuMuGraphUtil.cxx:155
 AliAnalysisMuMuGraphUtil.cxx:156
 AliAnalysisMuMuGraphUtil.cxx:157
 AliAnalysisMuMuGraphUtil.cxx:158
 AliAnalysisMuMuGraphUtil.cxx:159
 AliAnalysisMuMuGraphUtil.cxx:160
 AliAnalysisMuMuGraphUtil.cxx:161
 AliAnalysisMuMuGraphUtil.cxx:162
 AliAnalysisMuMuGraphUtil.cxx:163
 AliAnalysisMuMuGraphUtil.cxx:164
 AliAnalysisMuMuGraphUtil.cxx:165
 AliAnalysisMuMuGraphUtil.cxx:166
 AliAnalysisMuMuGraphUtil.cxx:167
 AliAnalysisMuMuGraphUtil.cxx:168
 AliAnalysisMuMuGraphUtil.cxx:169
 AliAnalysisMuMuGraphUtil.cxx:170
 AliAnalysisMuMuGraphUtil.cxx:171
 AliAnalysisMuMuGraphUtil.cxx:172
 AliAnalysisMuMuGraphUtil.cxx:173
 AliAnalysisMuMuGraphUtil.cxx:174
 AliAnalysisMuMuGraphUtil.cxx:175
 AliAnalysisMuMuGraphUtil.cxx:176
 AliAnalysisMuMuGraphUtil.cxx:177
 AliAnalysisMuMuGraphUtil.cxx:178
 AliAnalysisMuMuGraphUtil.cxx:179
 AliAnalysisMuMuGraphUtil.cxx:180
 AliAnalysisMuMuGraphUtil.cxx:181
 AliAnalysisMuMuGraphUtil.cxx:182
 AliAnalysisMuMuGraphUtil.cxx:183
 AliAnalysisMuMuGraphUtil.cxx:184
 AliAnalysisMuMuGraphUtil.cxx:185
 AliAnalysisMuMuGraphUtil.cxx:186
 AliAnalysisMuMuGraphUtil.cxx:187
 AliAnalysisMuMuGraphUtil.cxx:188
 AliAnalysisMuMuGraphUtil.cxx:189
 AliAnalysisMuMuGraphUtil.cxx:190
 AliAnalysisMuMuGraphUtil.cxx:191
 AliAnalysisMuMuGraphUtil.cxx:192
 AliAnalysisMuMuGraphUtil.cxx:193
 AliAnalysisMuMuGraphUtil.cxx:194
 AliAnalysisMuMuGraphUtil.cxx:195
 AliAnalysisMuMuGraphUtil.cxx:196
 AliAnalysisMuMuGraphUtil.cxx:197
 AliAnalysisMuMuGraphUtil.cxx:198
 AliAnalysisMuMuGraphUtil.cxx:199
 AliAnalysisMuMuGraphUtil.cxx:200
 AliAnalysisMuMuGraphUtil.cxx:201
 AliAnalysisMuMuGraphUtil.cxx:202
 AliAnalysisMuMuGraphUtil.cxx:203
 AliAnalysisMuMuGraphUtil.cxx:204
 AliAnalysisMuMuGraphUtil.cxx:205
 AliAnalysisMuMuGraphUtil.cxx:206
 AliAnalysisMuMuGraphUtil.cxx:207
 AliAnalysisMuMuGraphUtil.cxx:208
 AliAnalysisMuMuGraphUtil.cxx:209
 AliAnalysisMuMuGraphUtil.cxx:210
 AliAnalysisMuMuGraphUtil.cxx:211
 AliAnalysisMuMuGraphUtil.cxx:212
 AliAnalysisMuMuGraphUtil.cxx:213
 AliAnalysisMuMuGraphUtil.cxx:214
 AliAnalysisMuMuGraphUtil.cxx:215
 AliAnalysisMuMuGraphUtil.cxx:216
 AliAnalysisMuMuGraphUtil.cxx:217
 AliAnalysisMuMuGraphUtil.cxx:218
 AliAnalysisMuMuGraphUtil.cxx:219
 AliAnalysisMuMuGraphUtil.cxx:220
 AliAnalysisMuMuGraphUtil.cxx:221
 AliAnalysisMuMuGraphUtil.cxx:222
 AliAnalysisMuMuGraphUtil.cxx:223
 AliAnalysisMuMuGraphUtil.cxx:224
 AliAnalysisMuMuGraphUtil.cxx:225
 AliAnalysisMuMuGraphUtil.cxx:226
 AliAnalysisMuMuGraphUtil.cxx:227
 AliAnalysisMuMuGraphUtil.cxx:228
 AliAnalysisMuMuGraphUtil.cxx:229
 AliAnalysisMuMuGraphUtil.cxx:230
 AliAnalysisMuMuGraphUtil.cxx:231
 AliAnalysisMuMuGraphUtil.cxx:232
 AliAnalysisMuMuGraphUtil.cxx:233
 AliAnalysisMuMuGraphUtil.cxx:234
 AliAnalysisMuMuGraphUtil.cxx:235
 AliAnalysisMuMuGraphUtil.cxx:236
 AliAnalysisMuMuGraphUtil.cxx:237
 AliAnalysisMuMuGraphUtil.cxx:238
 AliAnalysisMuMuGraphUtil.cxx:239
 AliAnalysisMuMuGraphUtil.cxx:240
 AliAnalysisMuMuGraphUtil.cxx:241
 AliAnalysisMuMuGraphUtil.cxx:242
 AliAnalysisMuMuGraphUtil.cxx:243
 AliAnalysisMuMuGraphUtil.cxx:244
 AliAnalysisMuMuGraphUtil.cxx:245
 AliAnalysisMuMuGraphUtil.cxx:246
 AliAnalysisMuMuGraphUtil.cxx:247
 AliAnalysisMuMuGraphUtil.cxx:248
 AliAnalysisMuMuGraphUtil.cxx:249
 AliAnalysisMuMuGraphUtil.cxx:250
 AliAnalysisMuMuGraphUtil.cxx:251
 AliAnalysisMuMuGraphUtil.cxx:252
 AliAnalysisMuMuGraphUtil.cxx:253
 AliAnalysisMuMuGraphUtil.cxx:254
 AliAnalysisMuMuGraphUtil.cxx:255
 AliAnalysisMuMuGraphUtil.cxx:256
 AliAnalysisMuMuGraphUtil.cxx:257
 AliAnalysisMuMuGraphUtil.cxx:258
 AliAnalysisMuMuGraphUtil.cxx:259
 AliAnalysisMuMuGraphUtil.cxx:260
 AliAnalysisMuMuGraphUtil.cxx:261
 AliAnalysisMuMuGraphUtil.cxx:262
 AliAnalysisMuMuGraphUtil.cxx:263
 AliAnalysisMuMuGraphUtil.cxx:264
 AliAnalysisMuMuGraphUtil.cxx:265
 AliAnalysisMuMuGraphUtil.cxx:266
 AliAnalysisMuMuGraphUtil.cxx:267
 AliAnalysisMuMuGraphUtil.cxx:268
 AliAnalysisMuMuGraphUtil.cxx:269
 AliAnalysisMuMuGraphUtil.cxx:270
 AliAnalysisMuMuGraphUtil.cxx:271
 AliAnalysisMuMuGraphUtil.cxx:272
 AliAnalysisMuMuGraphUtil.cxx:273
 AliAnalysisMuMuGraphUtil.cxx:274
 AliAnalysisMuMuGraphUtil.cxx:275
 AliAnalysisMuMuGraphUtil.cxx:276
 AliAnalysisMuMuGraphUtil.cxx:277
 AliAnalysisMuMuGraphUtil.cxx:278
 AliAnalysisMuMuGraphUtil.cxx:279
 AliAnalysisMuMuGraphUtil.cxx:280
 AliAnalysisMuMuGraphUtil.cxx:281
 AliAnalysisMuMuGraphUtil.cxx:282
 AliAnalysisMuMuGraphUtil.cxx:283
 AliAnalysisMuMuGraphUtil.cxx:284
 AliAnalysisMuMuGraphUtil.cxx:285
 AliAnalysisMuMuGraphUtil.cxx:286
 AliAnalysisMuMuGraphUtil.cxx:287
 AliAnalysisMuMuGraphUtil.cxx:288
 AliAnalysisMuMuGraphUtil.cxx:289
 AliAnalysisMuMuGraphUtil.cxx:290
 AliAnalysisMuMuGraphUtil.cxx:291
 AliAnalysisMuMuGraphUtil.cxx:292
 AliAnalysisMuMuGraphUtil.cxx:293
 AliAnalysisMuMuGraphUtil.cxx:294
 AliAnalysisMuMuGraphUtil.cxx:295
 AliAnalysisMuMuGraphUtil.cxx:296
 AliAnalysisMuMuGraphUtil.cxx:297
 AliAnalysisMuMuGraphUtil.cxx:298
 AliAnalysisMuMuGraphUtil.cxx:299
 AliAnalysisMuMuGraphUtil.cxx:300
 AliAnalysisMuMuGraphUtil.cxx:301
 AliAnalysisMuMuGraphUtil.cxx:302
 AliAnalysisMuMuGraphUtil.cxx:303
 AliAnalysisMuMuGraphUtil.cxx:304
 AliAnalysisMuMuGraphUtil.cxx:305
 AliAnalysisMuMuGraphUtil.cxx:306
 AliAnalysisMuMuGraphUtil.cxx:307
 AliAnalysisMuMuGraphUtil.cxx:308
 AliAnalysisMuMuGraphUtil.cxx:309
 AliAnalysisMuMuGraphUtil.cxx:310
 AliAnalysisMuMuGraphUtil.cxx:311
 AliAnalysisMuMuGraphUtil.cxx:312
 AliAnalysisMuMuGraphUtil.cxx:313
 AliAnalysisMuMuGraphUtil.cxx:314
 AliAnalysisMuMuGraphUtil.cxx:315
 AliAnalysisMuMuGraphUtil.cxx:316
 AliAnalysisMuMuGraphUtil.cxx:317
 AliAnalysisMuMuGraphUtil.cxx:318
 AliAnalysisMuMuGraphUtil.cxx:319
 AliAnalysisMuMuGraphUtil.cxx:320
 AliAnalysisMuMuGraphUtil.cxx:321
 AliAnalysisMuMuGraphUtil.cxx:322
 AliAnalysisMuMuGraphUtil.cxx:323
 AliAnalysisMuMuGraphUtil.cxx:324
 AliAnalysisMuMuGraphUtil.cxx:325
 AliAnalysisMuMuGraphUtil.cxx:326
 AliAnalysisMuMuGraphUtil.cxx:327
 AliAnalysisMuMuGraphUtil.cxx:328
 AliAnalysisMuMuGraphUtil.cxx:329
 AliAnalysisMuMuGraphUtil.cxx:330
 AliAnalysisMuMuGraphUtil.cxx:331
 AliAnalysisMuMuGraphUtil.cxx:332
 AliAnalysisMuMuGraphUtil.cxx:333
 AliAnalysisMuMuGraphUtil.cxx:334
 AliAnalysisMuMuGraphUtil.cxx:335
 AliAnalysisMuMuGraphUtil.cxx:336
 AliAnalysisMuMuGraphUtil.cxx:337
 AliAnalysisMuMuGraphUtil.cxx:338
 AliAnalysisMuMuGraphUtil.cxx:339
 AliAnalysisMuMuGraphUtil.cxx:340
 AliAnalysisMuMuGraphUtil.cxx:341
 AliAnalysisMuMuGraphUtil.cxx:342
 AliAnalysisMuMuGraphUtil.cxx:343
 AliAnalysisMuMuGraphUtil.cxx:344
 AliAnalysisMuMuGraphUtil.cxx:345
 AliAnalysisMuMuGraphUtil.cxx:346
 AliAnalysisMuMuGraphUtil.cxx:347
 AliAnalysisMuMuGraphUtil.cxx:348
 AliAnalysisMuMuGraphUtil.cxx:349
 AliAnalysisMuMuGraphUtil.cxx:350
 AliAnalysisMuMuGraphUtil.cxx:351
 AliAnalysisMuMuGraphUtil.cxx:352
 AliAnalysisMuMuGraphUtil.cxx:353
 AliAnalysisMuMuGraphUtil.cxx:354
 AliAnalysisMuMuGraphUtil.cxx:355
 AliAnalysisMuMuGraphUtil.cxx:356
 AliAnalysisMuMuGraphUtil.cxx:357
 AliAnalysisMuMuGraphUtil.cxx:358
 AliAnalysisMuMuGraphUtil.cxx:359
 AliAnalysisMuMuGraphUtil.cxx:360
 AliAnalysisMuMuGraphUtil.cxx:361
 AliAnalysisMuMuGraphUtil.cxx:362
 AliAnalysisMuMuGraphUtil.cxx:363
 AliAnalysisMuMuGraphUtil.cxx:364
 AliAnalysisMuMuGraphUtil.cxx:365
 AliAnalysisMuMuGraphUtil.cxx:366
 AliAnalysisMuMuGraphUtil.cxx:367
 AliAnalysisMuMuGraphUtil.cxx:368
 AliAnalysisMuMuGraphUtil.cxx:369
 AliAnalysisMuMuGraphUtil.cxx:370
 AliAnalysisMuMuGraphUtil.cxx:371
 AliAnalysisMuMuGraphUtil.cxx:372
 AliAnalysisMuMuGraphUtil.cxx:373
 AliAnalysisMuMuGraphUtil.cxx:374
 AliAnalysisMuMuGraphUtil.cxx:375
 AliAnalysisMuMuGraphUtil.cxx:376
 AliAnalysisMuMuGraphUtil.cxx:377
 AliAnalysisMuMuGraphUtil.cxx:378
 AliAnalysisMuMuGraphUtil.cxx:379
 AliAnalysisMuMuGraphUtil.cxx:380
 AliAnalysisMuMuGraphUtil.cxx:381
 AliAnalysisMuMuGraphUtil.cxx:382
 AliAnalysisMuMuGraphUtil.cxx:383
 AliAnalysisMuMuGraphUtil.cxx:384
 AliAnalysisMuMuGraphUtil.cxx:385
 AliAnalysisMuMuGraphUtil.cxx:386
 AliAnalysisMuMuGraphUtil.cxx:387
 AliAnalysisMuMuGraphUtil.cxx:388
 AliAnalysisMuMuGraphUtil.cxx:389
 AliAnalysisMuMuGraphUtil.cxx:390
 AliAnalysisMuMuGraphUtil.cxx:391
 AliAnalysisMuMuGraphUtil.cxx:392
 AliAnalysisMuMuGraphUtil.cxx:393
 AliAnalysisMuMuGraphUtil.cxx:394
 AliAnalysisMuMuGraphUtil.cxx:395
 AliAnalysisMuMuGraphUtil.cxx:396
 AliAnalysisMuMuGraphUtil.cxx:397
 AliAnalysisMuMuGraphUtil.cxx:398
 AliAnalysisMuMuGraphUtil.cxx:399
 AliAnalysisMuMuGraphUtil.cxx:400
 AliAnalysisMuMuGraphUtil.cxx:401
 AliAnalysisMuMuGraphUtil.cxx:402
 AliAnalysisMuMuGraphUtil.cxx:403
 AliAnalysisMuMuGraphUtil.cxx:404
 AliAnalysisMuMuGraphUtil.cxx:405
 AliAnalysisMuMuGraphUtil.cxx:406
 AliAnalysisMuMuGraphUtil.cxx:407
 AliAnalysisMuMuGraphUtil.cxx:408
 AliAnalysisMuMuGraphUtil.cxx:409
 AliAnalysisMuMuGraphUtil.cxx:410
 AliAnalysisMuMuGraphUtil.cxx:411
 AliAnalysisMuMuGraphUtil.cxx:412
 AliAnalysisMuMuGraphUtil.cxx:413
 AliAnalysisMuMuGraphUtil.cxx:414
 AliAnalysisMuMuGraphUtil.cxx:415
 AliAnalysisMuMuGraphUtil.cxx:416
 AliAnalysisMuMuGraphUtil.cxx:417
 AliAnalysisMuMuGraphUtil.cxx:418
 AliAnalysisMuMuGraphUtil.cxx:419
 AliAnalysisMuMuGraphUtil.cxx:420
 AliAnalysisMuMuGraphUtil.cxx:421
 AliAnalysisMuMuGraphUtil.cxx:422
 AliAnalysisMuMuGraphUtil.cxx:423
 AliAnalysisMuMuGraphUtil.cxx:424
 AliAnalysisMuMuGraphUtil.cxx:425
 AliAnalysisMuMuGraphUtil.cxx:426
 AliAnalysisMuMuGraphUtil.cxx:427
 AliAnalysisMuMuGraphUtil.cxx:428
 AliAnalysisMuMuGraphUtil.cxx:429
 AliAnalysisMuMuGraphUtil.cxx:430
 AliAnalysisMuMuGraphUtil.cxx:431
 AliAnalysisMuMuGraphUtil.cxx:432
 AliAnalysisMuMuGraphUtil.cxx:433
 AliAnalysisMuMuGraphUtil.cxx:434
 AliAnalysisMuMuGraphUtil.cxx:435
 AliAnalysisMuMuGraphUtil.cxx:436
 AliAnalysisMuMuGraphUtil.cxx:437
 AliAnalysisMuMuGraphUtil.cxx:438
 AliAnalysisMuMuGraphUtil.cxx:439
 AliAnalysisMuMuGraphUtil.cxx:440
 AliAnalysisMuMuGraphUtil.cxx:441
 AliAnalysisMuMuGraphUtil.cxx:442
 AliAnalysisMuMuGraphUtil.cxx:443
 AliAnalysisMuMuGraphUtil.cxx:444
 AliAnalysisMuMuGraphUtil.cxx:445
 AliAnalysisMuMuGraphUtil.cxx:446
 AliAnalysisMuMuGraphUtil.cxx:447
 AliAnalysisMuMuGraphUtil.cxx:448
 AliAnalysisMuMuGraphUtil.cxx:449
 AliAnalysisMuMuGraphUtil.cxx:450
 AliAnalysisMuMuGraphUtil.cxx:451
 AliAnalysisMuMuGraphUtil.cxx:452
 AliAnalysisMuMuGraphUtil.cxx:453
 AliAnalysisMuMuGraphUtil.cxx:454
 AliAnalysisMuMuGraphUtil.cxx:455
 AliAnalysisMuMuGraphUtil.cxx:456
 AliAnalysisMuMuGraphUtil.cxx:457
 AliAnalysisMuMuGraphUtil.cxx:458
 AliAnalysisMuMuGraphUtil.cxx:459
 AliAnalysisMuMuGraphUtil.cxx:460
 AliAnalysisMuMuGraphUtil.cxx:461
 AliAnalysisMuMuGraphUtil.cxx:462