ROOT logo
/* $Id$ */

//
// plots for the note about multplicity measurements
//

#if !defined(__CINT__) || defined(__MAKECINT__)

#include <TCanvas.h>
#include <TPad.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TH3F.h>
#include <TLine.h>
#include <TF1.h>
#include <TSystem.h>
#include <TFile.h>
#include <TLegend.h>
#include <TStopwatch.h>
#include <TROOT.h>
#include <TGraph.h>
#include <TMath.h>
#include <TPaveText.h>
#include <TImage.h>
#include <TLatex.h>

#include "AliMultiplicityCorrection.h"
#include "AliCorrection.h"
#include "AliCorrectionMatrix3D.h"

#endif

const char* correctionFile = "multiplicityMC.root";
const char* measuredFile   = "multiplicityESD.root";
Int_t etaRange = 1;
Int_t displayRange = 80; // axis range
Int_t ratioRange = 151;   // range to calculate difference
Int_t longDisplayRange = 120;

const char* correctionFileTPC = "multiplicityMC_TPC_1.4M.root";
const char* measuredFileTPC   = "multiplicityMC_TPC_0.6M.root";
Int_t etaRangeTPC = 1;

void loadlibs()
{
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libPWG0base");
}

void SetTPC()
{
  correctionFile = correctionFileTPC;
  measuredFile = measuredFileTPC;
  etaRange = etaRangeTPC;
  displayRange = 100;
  ratioRange = 76;
  longDisplayRange = 100;
}

const char* GetMultLabel(Int_t etaR = -1, Bool_t trueM = kTRUE)
{
	if (etaR == -1)
		etaR = etaRange;
		
	TString tmpStr((trueM) ? "True " : "Measured ");

        tmpStr += "multiplicity";
        //return Form("%s", tmpStr.Data());
		
	if (etaR == 4)
	{
		tmpStr += " (full phase space)";
	}
	else if (etaR == 2)
	{
		tmpStr += " in |#eta| < 1.3";
	}
	else
		tmpStr += Form(" in |#eta| < %.1f", (etaR+1)* 0.5);
	return Form("%s", tmpStr.Data());
}

void Smooth(TH1* hist, Int_t windowWidth = 20)
{
  TH1* clone = (TH1*) hist->Clone("clone");
  for (Int_t bin=2; bin<=clone->GetNbinsX(); ++bin)
  {
    Int_t min = TMath::Max(2, bin-windowWidth);
    Int_t max = TMath::Min(clone->GetNbinsX(), bin+windowWidth);
    Float_t average = clone->Integral(min, max) / (max - min + 1);

    hist->SetBinContent(bin, average);
    hist->SetBinError(bin, 0);
  }

  delete clone;
}

TH1* responseMatrixPlot(const char* fileName = 0, const char* folder = "Multiplicity")
{
  loadlibs();

  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection(folder, folder);

  if (fileName == 0)
    fileName = correctionFile;
  
  TFile::Open(fileName);
  mult->LoadHistograms();

  // empty under/overflow bins in x, otherwise Project3D takes them into account
  TH2* hist = (TH2*) mult->GetCorrelation(etaRange);
  for (Int_t y=0; y<=hist->GetYaxis()->GetNbins()+1; ++y)
  {
    for (Int_t z=0; z<=hist->GetZaxis()->GetNbins()+1; ++z)
    {
      hist->SetBinContent(0, y, z, 0);
      hist->SetBinContent(hist->GetXaxis()->GetNbins()+1, y, z, 0);
    }
  }
  
  hist = (TH2*) (((TH3*) mult->GetCorrelation(etaRange))->Project3D("zy"));
  hist->SetStats(kFALSE);
  
  if (0)
  {
    // normalize
    // normalize correction for given nPart
    for (Int_t i=1; i<=hist->GetNbinsX(); ++i)
    {
      Double_t sum = hist->Integral(i, i, 1, hist->GetNbinsY());
      if (sum <= 0)
        continue;

      for (Int_t j=1; j<=hist->GetNbinsY(); ++j)
      {
        // npart sum to 1
        hist->SetBinContent(i, j, hist->GetBinContent(i, j) / sum);// * correlation->GetXaxis()->GetBinWidth(i));
        hist->SetBinError(i, j, hist->GetBinError(i, j) / sum);
      }
    }
  }
  
  hist->SetTitle(Form(";%s;%s;Entries", GetMultLabel(), GetMultLabel(etaRange, kFALSE)));
  hist->GetXaxis()->SetRangeUser(0, longDisplayRange);
  hist->GetYaxis()->SetRangeUser(0, longDisplayRange);
  
  hist->GetYaxis()->SetTitleOffset(1.3);
  hist->GetZaxis()->SetTitleOffset(1.2);

  TCanvas* canvas = new TCanvas("c1", "c1", 600, 600);
  canvas->SetRightMargin(0.15);
  canvas->SetTopMargin(0.05);

  gPad->SetLogz();
  hist->Draw("COLZ");

  canvas->SaveAs("responsematrix.eps");
  
  return hist;
}

void multPythiaPhojet()
{
  loadlibs();
  
  TFile::Open("LHC08c11_10TeV_0.5T/mb1/spd/multiplicity.root");
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");
  hist1 = mult->GetMultiplicityINEL(1)->ProjectionY();
  hist1->Sumw2();
  
  TFile::Open("LHC08c15_10TeV_0.5T_Phojet/mb1/spd/multiplicity.root");
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");
  hist2 = mult->GetMultiplicityINEL(1)->ProjectionY();
  hist2->Sumw2();
  
  legend = new TLegend(0.6, 0.7, 0.9, 0.9);
  legend->SetFillColor(0);
  legend->SetTextSize(0.04);
  legend->AddEntry(hist1, "Pythia", "L");
  legend->AddEntry(hist2, "Phojet", "L");

  c1 = new TCanvas("c", "c", 600, 600);
  c1->SetTopMargin(0.05);
  c1->SetRightMargin(0.05);
  c1->SetLeftMargin(0.12);
  c1->SetGridx();
  c1->SetGridy(); 
  c1->SetLogy();
  
  //hist1->SetMarkerStyle(20);
  //hist2->SetMarkerStyle(24);
  //hist2->SetMarkerColor(2);
  hist1->SetLineWidth(2);
  hist2->SetLineWidth(2);
  hist2->SetLineStyle(2);
  hist2->SetLineColor(2);
  
  hist1->Scale(1.0 / hist1->Integral());
  hist2->Scale(1.0 / hist2->Integral());
  
  hist1->SetStats(0);
  hist1->GetYaxis()->SetTitleOffset(1.3);
  hist1->GetXaxis()->SetRangeUser(0, 100);
  hist1->SetTitle(";N_{ch};P(N_{ch})");
  
  hist1->Draw("");
  hist2->Draw("SAME");
  legend->Draw();
  
  c1->SaveAs("mult_pythia_phojet.eps");
}

TCanvas* DrawResultRatio(TH1* mcHist, TH1* result, TString epsName)
{
  // normalize unfolded result to mc hist
  result->Scale(1.0 / result->Integral(2, displayRange));
  result->Scale(mcHist->Integral(2, displayRange));

  TCanvas* canvas = new TCanvas(epsName, epsName, 800, 600);
  canvas->Range(0, 0, 1, 1);

  TPad* pad1 = new TPad(Form("%s_pad1", epsName.Data()), "", 0, 0.5, 0.98, 0.98);
  pad1->Draw();

  TPad* pad2 = new TPad(Form("%s_pad2", epsName.Data()), "", 0, 0.02, 0.98, 0.5);
  pad2->Draw();

  pad1->SetRightMargin(0.05);
  pad2->SetRightMargin(0.05);

  // no border between them
  pad1->SetBottomMargin(0);
  pad2->SetTopMargin(0);

  pad1->cd();
  pad1->SetGridx();
  pad1->SetGridy();

  mcHist->GetXaxis()->SetLabelSize(0.06);
  mcHist->GetYaxis()->SetLabelSize(0.06);
  mcHist->GetXaxis()->SetTitleSize(0.06);
  mcHist->GetYaxis()->SetTitleSize(0.06);
  mcHist->GetYaxis()->SetTitleOffset(0.6);

  mcHist->GetXaxis()->SetRangeUser(0, displayRange);

  mcHist->SetTitle(Form(";%s;Entries", GetMultLabel()));
  mcHist->SetStats(kFALSE);

  mcHist->DrawCopy("HIST E");
  gPad->SetLogy();

  result->SetLineColor(2);
  result->SetMarkerColor(2);
  result->SetMarkerStyle(5);
  result->DrawCopy("SAME PE");

  TLegend* legend = new TLegend(0.6, 0.65, 0.95, 0.9);
  legend->AddEntry(mcHist, "True distribution");
  legend->AddEntry(result, "Unfolded distribution", "P");
  legend->SetFillColor(0);
  legend->Draw();

  pad2->cd();
  pad2->SetBottomMargin(0.15);

  // calculate ratio
  mcHist->Sumw2();
  TH1* ratio = (TH1*) mcHist->Clone("ratio");
  result->Sumw2();
  ratio->Divide(ratio, result, 1, 1, "");
  ratio->GetYaxis()->SetTitle("Ratio (true / unfolded)");
  ratio->GetYaxis()->SetRangeUser(0.55, 1.45);

  ratio->DrawCopy();

  // get average of ratio
  Float_t sum = 0;
  for (Int_t i=2; i<=ratioRange; ++i)
  {
    sum += TMath::Abs(ratio->GetBinContent(i) - 1);
  }
  sum /= ratioRange-1;

  printf("Average (2..%d) of |ratio - 1| is %f\n", ratioRange, sum);

  TLine* line = new TLine(0, 1, displayRange, 1);
  line->SetLineWidth(2);
  line->Draw();

  line = new TLine(0, 1.1, displayRange, 1.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();
  line = new TLine(0, 0.9, displayRange, 0.9);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();

  canvas->Modified();

  canvas->SaveAs(epsName);

  return canvas;
}

TCanvas* Draw2ResultRatio(TH1* mcHist, TH1* result1, TH1* result2, TString epsName)
{
  // draws the 3 plots in the upper plot
  // draws the ratio between result1 and result2 in the lower plot

  // normalize unfolded result to mc hist
  result1->Scale(1.0 / result1->Integral(2, displayRange));
  result1->Scale(mcHist->Integral(2, displayRange));
  result2->Scale(1.0 / result2->Integral(2, displayRange));
  result2->Scale(mcHist->Integral(2, displayRange));

  TCanvas* canvas = new TCanvas(epsName, epsName, 800, 600);
  canvas->Range(0, 0, 1, 1);

  TPad* pad1 = new TPad(Form("%s_pad1", epsName.Data()), "", 0, 0.5, 0.98, 0.98);
  pad1->Draw();

  TPad* pad2 = new TPad(Form("%s_pad2", epsName.Data()), "", 0, 0.02, 0.98, 0.5);
  pad2->Draw();

  pad1->SetRightMargin(0.05);
  pad2->SetRightMargin(0.05);

  // no border between them
  pad1->SetBottomMargin(0);
  pad2->SetTopMargin(0);

  pad1->cd();
  gPad->SetGridx();
  gPad->SetGridy();

  mcHist->GetXaxis()->SetLabelSize(0.06);
  mcHist->GetYaxis()->SetLabelSize(0.06);
  mcHist->GetXaxis()->SetTitleSize(0.06);
  mcHist->GetYaxis()->SetTitleSize(0.06);
  mcHist->GetYaxis()->SetTitleOffset(0.6);

  mcHist->GetXaxis()->SetRangeUser(0, displayRange);

  mcHist->SetTitle(";true multiplicity;Entries");
  mcHist->SetStats(kFALSE);

  mcHist->DrawCopy("HIST E");
  gPad->SetLogy();

  result1->SetLineColor(2);
  result1->SetMarkerStyle(24);
  result1->DrawCopy("SAME HISTE");

  result2->SetLineColor(4);
  result2->SetMarkerColor(4);
  result2->DrawCopy("SAME HISTE");

  TLegend* legend = new TLegend(0.5, 0.6, 0.95, 0.9);
  legend->AddEntry(mcHist, "True distribution");
  legend->AddEntry(result1, "Unfolded distribution (syst)", "P");
  legend->AddEntry(result2, "Unfolded distribution (normal)", "P");
  legend->SetFillColor(0);
  legend->SetTextSize(0.06);
  legend->Draw();

  pad2->cd();
  pad2->SetBottomMargin(0.15);
  //gPad->SetGridx();
  //gPad->SetGridy();

  result1->GetXaxis()->SetLabelSize(0.06);
  result1->GetYaxis()->SetLabelSize(0.06);
  result1->GetXaxis()->SetTitleSize(0.06);
  result1->GetYaxis()->SetTitleSize(0.06);
  result1->GetYaxis()->SetTitleOffset(0.6);

  result1->GetXaxis()->SetRangeUser(0, displayRange);

  result1->SetTitle(Form(";%s;Entries", GetMultLabel()));
  result1->SetStats(kFALSE);

  // calculate ratio
  result1->Sumw2();
  TH1* ratio = (TH1*) result1->Clone("ratio");
  result2->Sumw2();
  ratio->Divide(ratio, result2, 1, 1, "");
  ratio->SetLineColor(1);
  ratio->SetMarkerColor(1);
  ratio->SetMarkerStyle(0);
  ratio->GetYaxis()->SetTitle("Ratio (syst / normal)");
  ratio->GetYaxis()->SetRangeUser(0.55, 1.45);

  ratio->DrawCopy();

  // get average of ratio
  Float_t sum = 0;
  for (Int_t i=2; i<=ratioRange; ++i)
  {
    sum += TMath::Abs(ratio->GetBinContent(i) - 1);
  }
  sum /= ratioRange-1;

  printf("Average (2..%d) of |ratio - 1| is %f\n", ratioRange, sum);

  TLine* line = new TLine(0, 1, displayRange, 1);
  line->SetLineWidth(2);
  line->Draw();

  line = new TLine(0, 1.1, displayRange, 1.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();
  line = new TLine(0, 0.9, displayRange, 0.9);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();

  canvas->Modified();

  canvas->SaveAs(epsName);

  return canvas;
}

TCanvas* Draw2ResultRatios(TH1* mcHist, TH1* result1, TH1* result2, TH1* ratio2, TH1* ratio3, TString epsName)
{
  // draws the 3 plots in the upper plot
  // draws the ratio between result1 and result2 in the lower plot
  // also draws ratio2 and ratio3 in the lower plot, uses their name for the legend

  // normalize unfolded result to mc hist
  result1->Scale(1.0 / result1->Integral(2, 200));
  result1->Scale(mcHist->Integral(2, 200));
  result2->Scale(1.0 / result2->Integral(2, 200));
  result2->Scale(mcHist->Integral(2, 200));

  TCanvas* canvas = new TCanvas(epsName, epsName, 800, 600);
  canvas->Range(0, 0, 1, 1);

  TPad* pad1 = new TPad(Form("%s_pad1", epsName.Data()), "", 0, 0.5, 0.98, 0.98);
  pad1->Draw();

  TPad* pad2 = new TPad(Form("%s_pad2", epsName.Data()), "", 0, 0.02, 0.98, 0.5);
  pad2->Draw();

  pad1->SetRightMargin(0.05);
  pad2->SetRightMargin(0.05);

  // no border between them
  pad1->SetBottomMargin(0);
  pad2->SetTopMargin(0);

  pad1->cd();
  gPad->SetGridx();
  gPad->SetGridy();

  mcHist->GetXaxis()->SetLabelSize(0.06);
  mcHist->GetYaxis()->SetLabelSize(0.06);
  mcHist->GetXaxis()->SetTitleSize(0.06);
  mcHist->GetYaxis()->SetTitleSize(0.06);
  mcHist->GetYaxis()->SetTitleOffset(0.6);

  mcHist->GetXaxis()->SetRangeUser(0, displayRange);

  mcHist->SetTitle(";True multiplicity;Entries");
  mcHist->SetStats(kFALSE);

  mcHist->DrawCopy("HIST E");
  gPad->SetLogy();

  result1->SetLineColor(2);
  result1->SetMarkerColor(2);
  result1->SetMarkerStyle(24);
  result1->DrawCopy("SAME HISTE");

  result2->SetLineColor(4);
  result2->SetMarkerColor(4);
  result2->SetMarkerStyle(5);
  result2->DrawCopy("SAME HISTE");

  TLegend* legend = new TLegend(0.55, 0.6, 0.95, 0.9);
  legend->AddEntry(mcHist, "True distribution");
  legend->AddEntry(result1, "Unfolded distribution (5%)", "P");
  legend->AddEntry(result2, "Unfolded distribution (normal)", "P");
  legend->SetFillColor(0);
  legend->SetTextSize(0.06);
  legend->Draw();

  pad2->cd();
  pad2->SetBottomMargin(0.15);
  //gPad->SetGridx();
  //gPad->SetGridy();

  result1->GetXaxis()->SetLabelSize(0.06);
  result1->GetYaxis()->SetLabelSize(0.06);
  result1->GetXaxis()->SetTitleSize(0.06);
  result1->GetYaxis()->SetTitleSize(0.06);
  result1->GetYaxis()->SetTitleOffset(0.6);

  result1->GetXaxis()->SetRangeUser(0, displayRange);

  result1->SetTitle(Form(";%s;Entries", GetMultLabel()));
  result1->SetStats(kFALSE);

  // calculate ratio
  result1->Sumw2();
  TH1* ratio = (TH1*) result1->Clone("ratio");
  result2->Sumw2();
  ratio->Divide(ratio, result2, 1, 1, "");
  ratio->SetLineColor(1);
  ratio->SetMarkerColor(1);
  ratio->SetMarkerStyle(24);
  ratio->GetYaxis()->SetTitle("Ratio (change / normal)");
  ratio->GetYaxis()->SetRangeUser(0.55, 1.45);

  ratio2->SetLineColor(2);
  ratio2->SetMarkerColor(2);
  ratio2->SetMarkerStyle(25);

  ratio3->SetLineColor(4);
  ratio3->SetMarkerColor(4);
  ratio3->SetMarkerStyle(26);
  
  ratio->DrawCopy();
  ratio2->DrawCopy("SAME");
  ratio3->DrawCopy("SAME");
  
  legend2 = new TLegend(0.3, 0.8, 0.8, 0.95);
  legend2->SetNColumns(3);
  legend2->SetFillColor(0);
  legend2->SetTextSize(0.06);
  legend2->AddEntry(ratio, "5% change", "P");
  legend2->AddEntry(ratio2, "2% change", "P");
  legend2->AddEntry(ratio3, "1% change", "P");
  legend2->Draw();

  // get average of ratio
  Float_t sum = 0;
  for (Int_t i=2; i<=ratioRange; ++i)
  {
    sum += TMath::Abs(ratio->GetBinContent(i) - 1);
  }
  sum /= ratioRange-1;

  printf("Average (2..%d) of |ratio - 1| is %f\n", ratioRange, sum);

  TLine* line = new TLine(0, 1, displayRange, 1);
  line->SetLineWidth(2);
  line->Draw();

  line = new TLine(0, 1.1, displayRange, 1.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();
  line = new TLine(0, 0.9, displayRange, 0.9);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();

  canvas->Modified();

  canvas->SaveAs(epsName);

  return canvas;
}

void DrawEfficiencyChange()
{
  loadlibs();

  const char* fileName = "chi2a_inel.root";

  base = AliMultiplicityCorrection::Open(Form("spd/%s", fileName));
  low = AliMultiplicityCorrection::Open(Form("spd-loweff/%s", fileName));
  high = AliMultiplicityCorrection::Open(Form("spd-higheff/%s", fileName));
  
  const char* legendStrings[] = { "low efficiency", "high efficiency" };
  
  file = TFile::Open("systunc_detectorefficiency.root", "RECREATE");
  
  for (Int_t etaR = 1; etaR < 2; etaR++)
  {
    base->GetMultiplicityESDCorrected(etaR)->Scale(1.0 / base->GetMultiplicityESDCorrected(etaR)->Integral(2, base->GetMultiplicityESDCorrected(etaR)->GetNbinsX()));
  
    TH1* hists[2];
    hists[0] = low->GetMultiplicityESDCorrected(etaR);
    hists[0]->Scale(1.0 / hists[0]->Integral(2, hists[0]->GetNbinsX()));

    if (high)
    {
      hists[1] = high->GetMultiplicityESDCorrected(etaR);
      hists[1]->Scale(1.0 / hists[1]->Integral(2, hists[1]->GetNbinsX()));
    }
    
    largestError = (TH1*) hists[0]->Clone(Form("detectorefficiency_%d", etaR));
    largestError->Reset();
  
    DrawRatio(base->GetMultiplicityESDCorrected(etaR), (high) ? 2 : 1, hists, Form("eff_%d.png", etaR), kFALSE, legendStrings, kFALSE, largestError);
    
    largestError->Write();
    
    new TCanvas;
    largestError->DrawCopy();
  }
  
  file->Close();
}

TCanvas* DrawRatio(TH1* result, Int_t nResultSyst, TH1** resultSyst, TString epsName, Bool_t firstMarker = kFALSE, const char** legendStrings = 0, Bool_t errors = kFALSE, TH1* largestErrorLow = 0, TH1* largestErrorHigh = 0)
{
  // compares n results with first results. E.g. one gained with the default response, another with a changed one to study
  // a systematic effect

  // normalize results
  //result->Scale(1.0 / result->Integral(1, 200));

  TCanvas* canvas = new TCanvas(epsName, epsName, 800, 500);
  canvas->SetTopMargin(0.05);
  canvas->SetRightMargin(0.05);
  canvas->SetGridx();
  canvas->SetGridy();

  result->GetXaxis()->SetRangeUser(0, displayRange);
  result->GetYaxis()->SetRangeUser(0.55, 1.45);
  result->SetStats(kFALSE);

  // to get the axis how we want it
  TH1* dummy = (TH1*) result->Clone("dummy");
  dummy->Reset();
  dummy->SetTitle(Form(";%s;Ratio", GetMultLabel()));
  dummy->DrawCopy();
  delete dummy;

  Int_t colors[] = {1, 2, 4, 6, 7, 8, 9, 10};

  TLegend* legend = new TLegend(0.2, 0.7, 0.7, 0.93);
  legend->SetFillColor(0);
  //legend->SetTextSize(0.04);
  if (nResultSyst > 6)
    legend->SetNColumns(2);

  for (Int_t n=0; n<nResultSyst; ++n)
  {
    //resultSyst[n]->Scale(1.0 / resultSyst[n]->Integral(1, 200));

    // calculate ratio
    TH1* ratio = (TH1*) result->Clone("ratio");
    ratio->Divide(ratio, resultSyst[n], 1, 1, "");
    ratio->GetXaxis()->SetRangeUser(0, displayRange);

    if (firstMarker)
      ratio->SetMarkerStyle(5);

    ratio->SetLineColor(colors[n / 2]);
    if ((n % 2))
      ratio->SetLineStyle(2);

    TString drawStr("SAME HIST");
    if (n == 0 && firstMarker)
      drawStr = "SAME P";
    if (errors)
      drawStr += " E";

    ratio->DrawCopy(drawStr);

    if (legendStrings && legendStrings[n])
      legend->AddEntry(ratio, legendStrings[n], "L");
      
    /*
    s = new TSpline3(ratio);
    s->SetNpx(5);
    s->SetLineColor(kRed);
    s->Draw("same");
    */
    
    if (largestErrorLow && largestErrorHigh)
      for (Int_t i=1; i<=ratio->GetNbinsX(); ++i)
      {
        if (ratio->GetBinContent(i) - 1 > 0)
          largestErrorHigh->SetBinContent(i, TMath::Max(ratio->GetBinContent(i) - 1, largestErrorHigh->GetBinContent(i)));
        if (ratio->GetBinContent(i) - 1 < 0)
          largestErrorLow->SetBinContent(i, TMath::Min(ratio->GetBinContent(i) - 1, largestErrorLow->GetBinContent(i)));
      }

    if (largestErrorLow && !largestErrorHigh)
      for (Int_t i=1; i<=ratio->GetNbinsX(); ++i)
        largestErrorLow->SetBinContent(i, TMath::Max(TMath::Abs(ratio->GetBinContent(i) - 1), largestErrorLow->GetBinContent(i)));

    // get average of ratio
    Float_t sum = 0;
    for (Int_t i=2; i<=ratioRange; ++i)
      sum += TMath::Abs(ratio->GetBinContent(i) - 1);
    sum /= ratioRange-1;

    printf("%d) Average (2..%d) of |ratio - 1| is %f\n", n, ratioRange, sum);
  }

  if (legendStrings)
    legend->Draw();

  TLine* line = new TLine(-0.5, 1, displayRange, 1);
  line->SetLineWidth(2);
  line->Draw();

  line = new TLine(-0.5, 1.1, displayRange, 1.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();
  line = new TLine(-0.5, 0.9, displayRange, 0.9);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();

  canvas->SaveAs(epsName);

  return canvas;
}

TCanvas* DrawRatio(Int_t nResultSyst, TH1** mc, TH1** result, TString epsName, Bool_t smooth = kFALSE, Bool_t dashed = kFALSE)
{
  // draws the ratios of each mc to the corresponding result

  TCanvas* canvas = new TCanvas(epsName, epsName, 800, 400);
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);

  for (Int_t n=0; n<nResultSyst; ++n)
  {
    // normalize
    result[n]->Scale(1.0 / result[n]->Integral(2, 200));
    mc[n]->Scale(1.0 / mc[n]->Integral(2, 200));

    result[n]->GetXaxis()->SetRangeUser(0, displayRange);
    result[n]->SetStats(kFALSE);

    // calculate ratio
    TH1* ratio = (TH1*) result[n]->Clone("ratio");
    ratio->Divide(mc[n], ratio, 1, 1, "B");

    // SetRangeUser(1, ...) would be the same, but the 0 should be still on the axis...
    ratio->SetBinContent(1, 1); ratio->SetBinError(1, 0);

    if (smooth)
      Smooth(ratio);

    ratio->SetTitle(Form(";true multiplicity;Ratio (true / unfolded)%s", ((smooth) ? " (smoothed)" : "")));
    ratio->GetYaxis()->SetRangeUser(0.55, 1.45);

    if (dashed)
    {
      ratio->SetLineColor((n/2)+1);
      ratio->SetLineStyle((n%2)+1);
    }
    else
      ratio->SetLineColor(n+1);

    ratio->DrawCopy((n == 0) ? "HIST" : "SAME HIST");

    // get average of ratio
    Float_t sum = 0;
    for (Int_t i=2; i<=ratioRange; ++i)
      sum += TMath::Abs(ratio->GetBinContent(i) - 1);
    sum /= ratioRange-1;

    printf("%d) Average (2..%d) of |ratio - 1| is %f\n", n, ratioRange, sum);
  }

  TLine* line = new TLine(0, 1, displayRange, 1);
  line->SetLineWidth(2);
  line->Draw();

  line = new TLine(0, 1.1, displayRange, 1.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();
  line = new TLine(0, 0.9, displayRange, 0.9);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();

  canvas->Modified();

  canvas->SaveAs(epsName);
  canvas->SaveAs(Form("%s.gif", epsName.Data()));

  return canvas;
}

TCanvas* DrawRatioDeduct(TH1* mcBase, TH1* resultBase, Int_t nResultSyst, TH1** mc, TH1** result, TString epsName)
{
  // draws the ratios of each mc to the corresponding result
  // deducts from each ratio the ratio of mcBase / resultBase

  // normalize
  resultBase->Scale(1.0 / resultBase->Integral(2, 200));
  mcBase->Scale(1.0 / mcBase->Integral(2, 200));

  // calculate ratio
  TH1* ratioBase = (TH1*) resultBase->Clone("ratioBase");
  ratioBase->Divide(mcBase, ratioBase, 1, 1, "B");

  TCanvas* canvas = new TCanvas(epsName, epsName, 800, 400);
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);

  for (Int_t n=0; n<nResultSyst; ++n)
  {
    // normalize
    result[n]->Scale(1.0 / result[n]->Integral(2, 200));
    mc[n]->Scale(1.0 / mc[n]->Integral(2, 200));

    result[n]->GetXaxis()->SetRangeUser(0, displayRange);
    result[n]->SetStats(kFALSE);

    // calculate ratio
    TH1* ratio = (TH1*) result[n]->Clone("ratio");
    ratio->Divide(mc[n], ratio, 1, 1, "B");
    ratio->Add(ratioBase, -1);

    ratio->SetTitle(";true multiplicity;Ratio_{syst} (t/u) - Ratio (t/u)");
    ratio->GetYaxis()->SetRangeUser(-1, 1);
    ratio->SetLineColor(n+1);
    ratio->DrawCopy((n == 0) ? "HIST" : "SAME HIST");

    // get average of ratio
    Float_t sum = 0;
    for (Int_t i=2; i<=ratioRange; ++i)
      sum += TMath::Abs(ratio->GetBinContent(i));
    sum /= ratioRange-1;

    printf("%d) Average (2..%d) of |ratio - ratioBase| is %f\n", n, ratioRange, sum);
  }

  TLine* line = new TLine(0, 0, displayRange, 0);
  line->SetLineWidth(2);
  line->Draw();

  line = new TLine(0, 0.1, displayRange, 0.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();
  line = new TLine(0, -0.1, displayRange, -0.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();

  canvas->Modified();

  canvas->SaveAs(epsName);
  canvas->SaveAs(Form("%s.gif", epsName.Data()));

  return canvas;
}

TCanvas* DrawRatioDeductSmooth(TH1* mcBase, TH1* resultBase, Int_t nResultSyst, TH1** mc, TH1** result, TString epsName)
{
  // draws the ratios of each mc to the corresponding result
  // deducts from each ratio the ratio of mcBase / resultBase
  // smoothens the ratios by a sliding window

  // normalize
  resultBase->Scale(1.0 / resultBase->Integral(2, 200));
  mcBase->Scale(1.0 / mcBase->Integral(2, 200));

  // calculate ratio
  TH1* ratioBase = (TH1*) resultBase->Clone("ratioBase");
  ratioBase->Divide(mcBase, ratioBase, 1, 1, "B");

  TCanvas* canvas = new TCanvas(epsName, epsName, 800, 400);
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);

  for (Int_t n=0; n<nResultSyst; ++n)
  {
    // normalize
    result[n]->Scale(1.0 / result[n]->Integral(2, 200));
    mc[n]->Scale(1.0 / mc[n]->Integral(2, 200));

    result[n]->GetXaxis()->SetRangeUser(0, displayRange);
    result[n]->SetStats(kFALSE);

    // calculate ratio
    TH1* ratio = (TH1*) result[n]->Clone("ratio");
    ratio->Divide(mc[n], ratio, 1, 1, "B");
    ratio->Add(ratioBase, -1);

    //new TCanvas; ratio->DrawCopy();
    // clear 0 bin
    ratio->SetBinContent(1, 0); ratio->SetBinError(1, 0);

    Smooth(ratio);

    //ratio->SetLineColor(1); ratio->DrawCopy("SAME");

    canvas->cd();
    ratio->SetTitle(";true multiplicity;Ratio_{syst} (t/u) - Ratio (t/u) (smoothed)");
    ratio->GetYaxis()->SetRangeUser(-0.3, 0.3);
    ratio->SetLineColor((n / 2)+1);
    ratio->SetLineStyle((n % 2)+1);
    ratio->DrawCopy((n == 0) ? "HIST" : "SAME HIST");

    // get average of ratio
    Float_t sum = 0;
    for (Int_t i=2; i<=150; ++i)
      sum += TMath::Abs(ratio->GetBinContent(i));
    sum /= 149;

    printf("%d) Average (2..150) of |ratio - ratioBase| is %f\n", n, sum);
  }

  TLine* line = new TLine(0, 0, displayRange, 0);
  line->SetLineWidth(2);
  line->Draw();

  line = new TLine(0, 0.1, displayRange, 0.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();
  line = new TLine(0, -0.1, displayRange, -0.1);
  line->SetLineWidth(2);
  line->SetLineStyle(2);
  line->Draw();

  canvas->Modified();

  canvas->SaveAs(epsName);
  canvas->SaveAs(Form("%s.gif", epsName.Data()));

  return canvas;
}

void DrawResiduals(const char* fileName, const char* epsName)
{
  loadlibs();

  AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open(fileName);

  TH1* measured = mult->GetMultiplicityESD(etaRange)->ProjectionY("myesd", 1, 1);
  
  if (0)
  {
    // test how far we are from a normal exponential in the unfolded
    corrected = mult->GetMultiplicityESDCorrected(etaRange);
    new TCanvas; corrected->DrawCopy(); gPad->SetLogy();
    
    expo = new TF1("exp", "expo(0)", 0, 50);
    //expo->SetParameters(10, -0.18);
    expo->SetParameters(9.96, -0.176);
    expo->Draw("SAME");  
    
    for (Int_t i=21; i<=50; i++)
      corrected->SetBinContent(i, expo->Eval(corrected->GetXaxis()->GetBinCenter(i)));
    
    corrected->SetLineColor(2);
    corrected->Draw("SAME");
  }
  
  TH1* unfoldedFolded = mult->GetConvoluted(etaRange, AliMultiplicityCorrection::kINEL);
  //mult->CalculateMultiplicityESD(mult->GetMultiplicityESDCorrected(etaRange), etaRange)->ProjectionY("myfolded", 1, 1);
  
  // normalize
  //unfoldedFolded->Scale(1.0 / unfoldedFolded->Integral(2, displayRange+1));
  //unfoldedFolded->Scale(measured->Integral(2, displayRange+1));

  TCanvas* canvas = new TCanvas(epsName, epsName, 800, 600);
  canvas->Range(0, 0, 1, 1);

  TPad* pad1 = new TPad(Form("%s_pad1", epsName), "", 0, 0.5, 1, 1);
  pad1->Draw();
  pad1->SetGridx();
  pad1->SetGridy();

  TPad* pad2 = new TPad(Form("%s_pad2", epsName), "", 0, 0.02, 1, 0.5);
  pad2->Draw();
  pad2->SetGridx();
  pad2->SetGridy();

  TPad* pad3 = new TPad(Form("%s_pad3", epsName), "", 0.15, 0.5, 0.35, 0.75);
  pad3->SetGridx();
  pad3->SetGridy();
  pad3->SetRightMargin(0.05);
  pad3->SetTopMargin(0.05);
  pad3->Draw();

  pad1->SetRightMargin(0.05);
  pad2->SetRightMargin(0.05);

  // no border between them
  pad1->SetBottomMargin(0);
  pad2->SetTopMargin(0);

  pad1->cd();

  measured->GetXaxis()->SetLabelSize(0.06);
  measured->GetYaxis()->SetLabelSize(0.06);
  measured->GetXaxis()->SetTitleSize(0.06);
  measured->GetYaxis()->SetTitleSize(0.06);
  measured->GetYaxis()->SetTitleOffset(0.6);

  measured->GetXaxis()->SetRangeUser(0, displayRange);

  measured->SetTitle(Form(";%s;Entries", GetMultLabel(etaRange, kFALSE)));
  measured->SetStats(kFALSE);

  measured->DrawCopy("HIST");
  gPad->SetLogy();

  unfoldedFolded->SetMarkerStyle(5);
  unfoldedFolded->SetMarkerColor(2);
  unfoldedFolded->SetLineColor(2);
  unfoldedFolded->DrawCopy("SAME PHIST");

  TLegend* legend = new TLegend(0.6, 0.65, 0.95, 0.9);
  legend->AddEntry(measured, "Measured distribution", "L");
  legend->AddEntry(unfoldedFolded, "R #otimes unfolded distribution", "P");
  legend->SetFillColor(0);
  legend->SetTextSize(0.06);
  legend->Draw();

  pad2->cd();
  pad2->SetBottomMargin(0.15);

  // calculate ratio
  measured->Sumw2();
  TH1* residual = (TH1*) measured->Clone("residual");
  unfoldedFolded->Sumw2();

  residual->Add(unfoldedFolded, -1);

  // projection
  TH1* residualHist = new TH1F("residualHist", ";", 16, -3, 3);
  residualHist->Sumw2();

  Float_t chi2 = 0;
  Float_t chi2_hump = 0;
  
  for (Int_t i=1; i<=displayRange+1; ++i)
  {
    if (measured->GetBinError(i) > 0)
    {
      residual->SetBinContent(i, residual->GetBinContent(i) / measured->GetBinError(i));
      residual->SetBinError(i, 1);

      residualHist->Fill(residual->GetBinContent(i));
      if (i >= 15 && i <= 23)
        chi2_hump += residual->GetBinContent(i) * residual->GetBinContent(i);

      chi2 += residual->GetBinContent(i) * residual->GetBinContent(i);
    }
    else
    {
      residual->SetBinContent(i, 0);
      residual->SetBinError(i, 0);
    }
  }
  
  Printf("chi2 / ndf = %f / %d = %f", chi2, displayRange+1, chi2 / (displayRange+1));
  Printf("chi2 (hump) / ndf = %f / %d = %f", chi2_hump, 23-15+1, chi2_hump / (23-15+1));

  residual->GetYaxis()->SetTitle("Residuals:   (1/e) (M - R  #otimes U)");
  residual->GetYaxis()->SetRangeUser(-4.5, 4.5);
  residual->DrawCopy();

  TLine* line = new TLine(-0.5, 0, displayRange + 0.5, 0);
  line->SetLineWidth(2);
  line->Draw();

  pad3->cd();
  residualHist->SetStats(kFALSE);
  residualHist->SetLabelSize(0.08, "xy");
  residualHist->Fit("gaus");
  residualHist->Draw("HIST");
  residualHist->FindObject("gaus")->Draw("SAME");

  canvas->Modified();
  canvas->SaveAs(canvas->GetName());

  //const char* epsName2 = "proj.eps";
  //TCanvas* canvas = new TCanvas(epsName2, epsName2, 800, 600);
  //canvas->SetGridx();
  //canvas->SetGridy();

  //canvas->SaveAs(canvas->GetName());
}

void chi2FluctuationResult()
{
  loadlibs();

  TFile::Open("chi2_noregularization.root");
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  TH1* mcHist = mult->GetMultiplicityVtx(etaRange)->ProjectionY("mymc", 1, 1);

  mult->DrawComparison("MinuitChi2", etaRange, kFALSE, kTRUE, mcHist, kTRUE);

  TCanvas* canvas = (TCanvas*) gROOT->FindObject("MinuitChi2_DrawComparison_1");
  ((TH1*) canvas->FindObject("proj"))->GetXaxis()->SetRangeUser(0, displayRange);
  ((TH1*) canvas->FindObject("fCurrentESD"))->GetXaxis()->SetRangeUser(0, displayRange);
  //((TH1*) canvas->FindObject("proj"))->GetXaxis()->SetTitle(GetMultTitle());
  //((TH1*) canvas->FindObject("fCurrentESD"))->GetXaxis()->->SetTitle(GetMultTitle(etaRange, kFALSE));
  canvas->SaveAs("chi2FluctuationResult.eps");
}

void DrawUnfolded(const char* fileName, const char* eps)
{
  loadlibs();
  
  TFile::Open(fileName);

  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  TH1* mcHist = mult->GetMultiplicityVtx(etaRange)->ProjectionY("mymc", 1, mult->GetMultiplicityVtx(etaRange)->GetNbinsX());
  TH1* result = mult->GetMultiplicityESDCorrected(etaRange);

  DrawResultRatio(mcHist, result, eps);
}

void minimizationInfluenceAlpha()
{
  loadlibs();

  TFile::Open(measuredFile);
  AliMultiplicityCorrection* mult2 = new AliMultiplicityCorrection("Multiplicity2", "Multiplicity2");
  mult2->LoadHistograms("Multiplicity");

  TH1* mcHist = mult2->GetMultiplicityVtx(etaRange)->ProjectionY("mymc", 1, mult2->GetMultiplicityVtx(etaRange)->GetNbinsX());
  mcHist->Scale(1.0 / mcHist->Integral());
  mcHist->SetStats(kFALSE);
  mcHist->SetTitle(";True multiplicity n in |#eta| < 1.0;P(n)");

  TCanvas* canvas = new TCanvas("minimizationInfluenceAlpha", "minimizationInfluenceAlpha", 1000, 350);
  canvas->Divide(3, 1, 0.005);

  TFile::Open("chi2compare-influencealpha/EvaluateChi2Method.root");
  
  TH1* hist1 = (TH1*) gFile->Get("MinuitChi2_00_2_3.162278");
  TH1* hist2 = (TH1*) gFile->Get("MinuitChi2_07_2_10000.000000");
  TH1* hist3 = (TH1*) gFile->Get("MinuitChi2_13_2_10000000.000000");

  /*mcHist->Rebin(2);  mcHist->Scale(0.5);
  hist1->Rebin(2);   hist1->Scale(0.5);
  hist2->Rebin(2);   hist2->Scale(0.5);
  hist3->Rebin(2);   hist3->Scale(0.5);*/

  mcHist->GetXaxis()->SetRangeUser(0, displayRange);
  mcHist->SetLabelSize(0.06, "xy");
  mcHist->SetTitleSize(0.06, "xy");
  mcHist->GetYaxis()->SetTitleOffset(1.5);
  
  canvas->cd(1);
  
  gPad->SetLogy();
  gPad->SetRightMargin(0.03);
  gPad->SetLeftMargin(0.19);
  gPad->SetTopMargin(0.05);
  gPad->SetBottomMargin(0.13);
  gPad->SetGridx();
  gPad->SetGridy();
  mcHist->Draw();
  hist1->SetMarkerStyle(5);
  hist1->SetMarkerColor(2);
  hist1->Draw("SAME PE");

  canvas->cd(2);
  gPad->SetRightMargin(0.03);
  gPad->SetLeftMargin(0.19);
  gPad->SetTopMargin(0.05);
  gPad->SetBottomMargin(0.13);
  gPad->SetLogy();
  gPad->SetGridx();
  gPad->SetGridy();
  mcHist->Draw();
  hist2->SetMarkerStyle(5);
  hist2->SetMarkerColor(2);
  hist2->Draw("SAME PE");

  canvas->cd(3);
  gPad->SetRightMargin(0.03);
  gPad->SetLeftMargin(0.19);
  gPad->SetTopMargin(0.05);
  gPad->SetBottomMargin(0.13);
  gPad->SetLogy();
  gPad->SetGridx();
  gPad->SetGridy();
  mcHist->Draw();
  hist3->SetMarkerStyle(5);
  hist3->SetMarkerColor(2);
  hist3->Draw("SAME PE");

  canvas->SaveAs("minimizationInfluenceAlpha.eps");
}

void NBDFit()
{
  gSystem->Load("libPWG0base");

  TFile::Open(correctionFile);
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  TH1* fCurrentESD = mult->GetMultiplicityVtx(etaRange)->ProjectionY();
  fCurrentESD->Sumw2();
  fCurrentESD->Scale(1.0 / fCurrentESD->Integral());

  TF1* func = new TF1("nbd", "[0] * TMath::Binomial([2]+TMath::Nint(x)-1, [2]-1) * pow([1] / ([1]+[2]), TMath::Nint(x)) * pow(1 + [1]/[2], -[2])");
  func->SetParNames("scaling", "averagen", "k");
  func->SetParLimits(0, 0.001, fCurrentESD->GetMaximum() * 1000);
  func->SetParLimits(1, 0.001, 1000);
  func->SetParLimits(2, 0.001, 1000);
  func->SetParameters(fCurrentESD->GetMaximum() * 100, 10, 2);

  TF1* lognormal = new TF1("lognormal", "[0]*exp(-(log(x)-[1])^2/(2*[2]^2))/(x*[2]*TMath::Sqrt(2*TMath::Pi()))", 0.01, 500);
  lognormal->SetParNames("scaling", "mean", "sigma");
  lognormal->SetParameters(1, 1, 1);
  lognormal->SetParLimits(0, 0, 10);
  lognormal->SetParLimits(1, 0, 100);
  lognormal->SetParLimits(2, 1e-3, 10);

  TCanvas* canvas = new TCanvas("c1", "c1", 700, 400);
  fCurrentESD->SetStats(kFALSE);
  fCurrentESD->GetYaxis()->SetTitleOffset(1.3);
  fCurrentESD->SetTitle(";true multiplicity (N);P_{N}");
  fCurrentESD->Draw("HIST");
  fCurrentESD->GetXaxis()->SetRangeUser(0, 200);
  fCurrentESD->Fit(func, "W0", "", 0, 50);
  func->SetRange(0, 100);
  func->Draw("SAME");
  printf("chi2 = %f\n", func->GetChisquare());

  fCurrentESD->Fit(lognormal, "W0", "", 0.01, 100);
  lognormal->SetLineColor(2);
  lognormal->SetLineStyle(2);
  lognormal->SetRange(0, 100);
  lognormal->Draw("SAME");

  canvas->SaveAs("NBDFit.eps");
}

void StartingConditions()
{
  // data generated by runMultiplicitySelector.C StartingConditions

  const char* name = "StartingConditions";

  TFile* file = TFile::Open(Form("%s.root", name));

  TCanvas* canvas = new TCanvas(name, name, 1200, 600);
  canvas->Divide(2, 1);

  TH1* mc = (TH1*) file->Get("mc");
  mc->Sumw2();
  mc->Scale(1.0 / mc->Integral(2, displayRange));

  //Int_t marker[] = {24, 25, 26, 27, 28, 2, 3, 4, 5};

  TLegend* legend = new TLegend(0.6, 0.7, 0.99, 0.99);
  legend->SetFillColor(0);
  legend->SetTextSize(0.04);
  
  const char* names[] = { "True", "Measured 1", "Measured 2", "Measured 3", "NBD", "Flat" };

  for (Int_t i=0; i<6; ++i)
  {
    Int_t id = i;
    if (id > 2)
      id += 2;

    TH1* chi2Result = (TH1*) file->Get(Form("chi2Result_%d", id));
    TH1* bayesResult = (TH1*) file->Get(Form("bayesResult_%d", id));
    
    chi2Result->Scale(1.0 / chi2Result->Integral(2, displayRange));
    bayesResult->Scale(1.0 / bayesResult->Integral(2, displayRange));

    chi2Result->Divide(mc, chi2Result, 1, 1, "");
    bayesResult->Divide(mc, bayesResult, 1, 1, "");

    chi2Result->SetTitle(Form("a) #chi^{2}-minimization;%s;MC / unfolded", GetMultLabel()));
    chi2Result->GetXaxis()->SetRangeUser(0, displayRange);
    chi2Result->GetYaxis()->SetRangeUser(0.7, 1.3);
    chi2Result->GetYaxis()->SetTitleOffset(1.7);
    //chi2Result->SetMarkerStyle(marker[i]);
    chi2Result->SetLineColor(i+1);
    chi2Result->SetMarkerColor(i+1);
    chi2Result->SetStats(kFALSE);

    bayesResult->SetTitle(Form("b) Bayesian unfolding;%s;MC / unfolded", GetMultLabel()));
    bayesResult->GetXaxis()->SetRangeUser(0, displayRange);
    bayesResult->GetYaxis()->SetRangeUser(0.7, 1.3);
    bayesResult->GetYaxis()->SetTitleOffset(1.7);
    bayesResult->SetStats(kFALSE);
    //bayesResult->SetLineColor(2);
    bayesResult->SetLineColor(i+1);

    canvas->cd(1);
    gPad->SetRightMargin(0.05);
    gPad->SetLeftMargin(0.12);
    gPad->SetGridx();
    gPad->SetGridy();
    chi2Result->DrawCopy((i == 0) ? "HIST" : "HIST SAME");

    canvas->cd(2);
    gPad->SetRightMargin(0.05);
    gPad->SetLeftMargin(0.12);
    gPad->SetGridx();
    gPad->SetGridy();
    bayesResult->DrawCopy((i == 0) ? "HIST" : "HIST SAME");

    //TLine* line = new TLine(0, 1, 150, 1);
    //line->Draw();

    legend->AddEntry(chi2Result, names[i]);
  }

  canvas->cd(1);
  legend->Draw();
  canvas->cd(2);
  legend->Draw();
  canvas->SaveAs(Form("%s.eps", canvas->GetName()));
}

void StatisticsPlot()
{
  const char* name = "StatisticsPlot";

  TFile* file = TFile::Open(Form("%s.root", name));

  TCanvas* canvas = new TCanvas(name, name, 600, 400);

  TGraph* fitResultsChi2 = (TGraph*) file->Get("fitResultsChi2");
  fitResultsChi2->SetTitle(";number of measured events;P_{1}");
  fitResultsChi2->GetYaxis()->SetRangeUser(0, 2);
  fitResultsChi2->Draw("AP");

  TF1* f = new TF1("f", "[0]/x", 1, 1e4);
  fitResultsChi2->Fit(f);

  canvas->SaveAs(Form("%s.eps", canvas->GetName()));

  TH1* mc[5];
  TH1* result[5];

  const char* plotname = "chi2Result";

  name = "StatisticsPlotRatios";
  canvas = new TCanvas(name, name, 600, 400);

  for (Int_t i=0; i<5; ++i)
  {
    mc[i] = (TH1*) file->Get(Form("mc_%d", i));
    result[i] = (TH1*) file->Get(Form("%s_%d", plotname, i));

    result[i]->SetLineColor(i+1);
    result[i]->Draw(((i == 0) ? "" : "SAME"));
  }
}

void Draw2Unfolded(const char* file1, const char* file2, const char* output)
{
  loadlibs();
  
  TFile::Open(file1);
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  // result with systematic effect
  TFile::Open(file2);
  AliMultiplicityCorrection* mult2 = new AliMultiplicityCorrection("Multiplicity2", "Multiplicity2");
  mult2->LoadHistograms("Multiplicity");

  TH1* mcHist = mult2->GetMultiplicityVtx(etaRange)->ProjectionY("mymc", 1, 1);
  TH1* result1 = (TH1*) mult2->GetMultiplicityESDCorrected(etaRange)->Clone("result1"); // from file2 (with syst)
  TH1* result2 = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone("result2");  // from file1 (without syst)

  DrawResultRatio(mcHist, result1, "tmp1.eps");
  DrawResultRatio(mcHist, result2, "tmp2.eps");
  Draw2ResultRatio(mcHist, result1, result2, output);
}

void PythiaPhojet()
{
  loadlibs();
  
  displayRange = 55;
  Draw2Unfolded("self.root", "pythia.root", "test.eps");
  
  canvas = (TCanvas*) gROOT->GetListOfCanvases()->Last();
  pad1 = (TCanvas*)canvas->GetListOfPrimitives()->First();
  pad2 = (TCanvas*)canvas->GetListOfPrimitives()->Last();
  legend = (TLegend*)pad1->GetListOfPrimitives()->Last();
  
  ((TH1*)pad2->GetListOfPrimitives()->At(1))->GetYaxis()->SetTitle("Ratio (Pythia / Phojet)");
  ((TLegendEntry*)legend->GetListOfPrimitives()->At(1))->SetLabel("Unfolded distribution (Pythia)");
  ((TLegendEntry*)legend->GetListOfPrimitives()->At(2))->SetLabel("Unfolded distribution (Phojet)");
  canvas->SaveAs("PythiaPhojet.eps");
}

void Misalignment()
{
  loadlibs();
  
  Draw2Unfolded("chi2_ideal.root", "chi2_misaligned.root", "test.eps");
  
  canvas = (TCanvas*) gROOT->GetListOfCanvases()->Last();
  pad1 = (TCanvas*)canvas->GetListOfPrimitives()->First();
  pad2 = (TCanvas*)canvas->GetListOfPrimitives()->Last();
  legend = (TLegend*)pad1->GetListOfPrimitives()->Last();

  ((TH1*)pad2->GetListOfPrimitives()->At(1))->GetYaxis()->SetTitle("Ratio (misaligned / realigned)");
  ((TLegendEntry*)legend->GetListOfPrimitives()->At(1))->SetLabel("Unfolded distribution (misaligned)");
  ((TLegendEntry*)legend->GetListOfPrimitives()->At(2))->SetLabel("Unfolded distribution (realigned)");
  canvas->SaveAs("SystematicMisalignment.eps");
}

void SystematicLowEfficiency()
{
  Draw2Unfolded("chi2.root", "chi2_loweff_5.root", "SystematicLowEfficiency.eps");
}

void SystematicLowEfficiency2()
{
  loadlibs();
  
  AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open("chi2.root");
  TH1* result2 = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone("result2");
  TH1* mcHist = mult->GetMultiplicityVtx(etaRange)->ProjectionY("mymc", 1, 1);
  result2->Scale(1.0 / result2->Integral(2, displayRange));
  result2->Scale(mcHist->Integral(2, displayRange));
  
  mult = AliMultiplicityCorrection::Open("chi2_loweff_5.root");
  TH1* result1 = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone("result1");
  
  mult = AliMultiplicityCorrection::Open("chi2_loweff_2.root");
  TH1* ratio2 = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone("ratio2");
  ratio2->Scale(1.0 / ratio2->Integral(2, displayRange));
  ratio2->Scale(mcHist->Integral(2, displayRange));
  ratio2->Divide(result2);
  
  mult = AliMultiplicityCorrection::Open("chi2_loweff_1.root");
  TH1* ratio3 = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone("ratio3");
  ratio3->Scale(1.0 / ratio3->Integral(2, displayRange));
  ratio3->Scale(mcHist->Integral(2, displayRange));
  ratio3->Divide(result2);
  
  Draw2ResultRatios(mcHist, result1, result2, ratio2, ratio3, "SystematicLowEfficiency2.eps");
}

void SystematicMisalignment()
{
  gSystem->Load("libPWG0base");

  TFile::Open(correctionFile);
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  TFile::Open("multiplicityMC_100k_fullmis.root");
  AliMultiplicityCorrection* mult2 = new AliMultiplicityCorrection("Multiplicity2", "Multiplicity2");
  mult2->LoadHistograms("Multiplicity");

  mult->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));
  mult->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 10000);
  mult->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);

  TH1* mcHist = mult2->GetMultiplicityVtx(etaRange)->ProjectionY("mymc");
  TH1* result = mult->GetMultiplicityESDCorrected(etaRange);

  DrawResultRatio(mcHist, result, "SystematicMisalignment.eps");
}

void SystematicMisalignmentTPC()
{
  gSystem->Load("libPWG0base");

  SetTPC();

  TFile::Open(correctionFile);
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  TFile::Open("multiplicityMC_TPC_100k_fullmis.root");
  AliMultiplicityCorrection* mult2 = new AliMultiplicityCorrection("Multiplicity2", "Multiplicity2");
  mult2->LoadHistograms("Multiplicity");

  mult->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));
  mult->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 10000);
  mult->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);

  TH1* mcHist = mult2->GetMultiplicityVtx(etaRange)->ProjectionY("mymc");
  TH1* result = mult->GetMultiplicityESDCorrected(etaRange);

  DrawResultRatio(mcHist, result, "SystematicMisalignmentTPC.eps");
}

void LowMomentumEffectSPD()
{
  // this function increases/reduces the correction as function of pt between 0 and 0.2 gev by +-50% to 0% and checks the effect on the overall correction factor
  // only a normal acceptance region is considered to not get a bias by the edges
  
  loadlibs();
  TFile::Open("multiplicity.root");
  
    
  AliCorrection* correction[8];
  Float_t values[3];
  
  for (Int_t loop=0; loop<3; loop++)
  {
    Float_t sumGen = 0;
    Float_t sumMeas = 0;
    
    Printf("loop %d", loop);
    for (Int_t i=0; i<4; ++i)
    {
      Printf("correction %d", i);
  
      TString name; name.Form("correction_%d", i);
      correction[i] = new AliCorrection(name, name);
      correction[i]->LoadHistograms();
      
      TH3* gene = correction[i]->GetTrackCorrection()->GetGeneratedHistogram();
      TH3* meas = correction[i]->GetTrackCorrection()->GetMeasuredHistogram();
  
      Float_t vtxRange = 5.9;
      gene->GetXaxis()->SetRangeUser(-vtxRange, vtxRange);
      meas->GetXaxis()->SetRangeUser(-vtxRange, vtxRange);
      
      Float_t etaRange = 0.99;
      gene->GetYaxis()->SetRangeUser(-etaRange, etaRange);
      meas->GetYaxis()->SetRangeUser(-etaRange, etaRange);
  
      TH1* genePt = gene->Project3D(Form("z_%d", i));
      TH1* measPt = meas->Project3D(Form("z_%d", i));
  
      if (loop > 0)
      {
        for (Int_t x=1; x<=genePt->GetNbinsX(); x++)
        {
          Float_t pt = genePt->GetXaxis()->GetBinCenter(x);
          //Printf("%f", pt);
          if (pt < 0.2)
          {
            Float_t factor = 1;
            if (loop == 1)
              factor = 1.5 - pt / 0.2 * 0.5;
            if (loop == 2)
              factor = 0.5 + pt / 0.2 * 0.5;
            //Printf("%f", factor);
            genePt->SetBinContent(x, genePt->GetBinContent(x) * factor);
            measPt->SetBinContent(x, measPt->GetBinContent(x) * factor);
          }
        }
      }
      
      //new TCanvas; genePt->DrawCopy(); measPt->DrawCopy("SAME");
  
      sumGen += genePt->Integral();
      sumMeas += measPt->Integral();  
      
      Float_t average = measPt->Integral() / genePt->Integral();
      
      Printf("The average efficiency of this correction is %f", average);
    }
    
    Float_t average = sumMeas / sumGen;
      
    Printf("The average efficiency of all corrections is %f", average);
    values[loop] = average;
  }
  
  Printf("relative is %f and %f", values[1] / values[0], values[2] / values[0]);
}
  

void EfficiencySpecies(Bool_t addDecayStopped = kFALSE)
{
  loadlibs();

  Int_t marker[] = {24, 25, 26, 27};
  Int_t color[] = {1, 2, 4, 3};

  // SPD TPC
  //const char* fileName[] = { "multiplicityMC_400k_syst.root", "multiplicityMC_TPC_4kfiles_syst.root" };
  //const char* fileName[] = { "LHC09b9_0.9TeV_0T/mb1/spd/multiplicity.root", "LHC09b8_0.9TeV_0.5T/mb1/tpc/multiplicity.root" };
  //const char* fileName[] = { "spd/multiplicity.root", "tpc/multiplicity.root" };
  const char* fileName[] = { "multiplicity.root", "multiplicity.root" };
  Float_t etaRangeArr[] = {0.49, 0.9};
  const char* titles[] = { "SPD Tracklets", "TPC Tracks" };

  TCanvas* canvas = new TCanvas("EfficiencySpecies", "EfficiencySpecies", 1000, 500);
  canvas->Divide(2, 1);

  TCanvas* canvas3 = new TCanvas("EfficiencySpecies_comb", "EfficiencySpecies_comb", 600, 600);
  gPad->SetGridx();
  gPad->SetGridy();
  gPad->SetRightMargin(0.05);
  gPad->SetTopMargin(0.05);
  
  TLegend* legends[2];
  
  TH1* effGlobal = 0;
  
  for (Int_t loop=0; loop<1; ++loop)
  {
    Printf("%s", fileName[loop]);

    TCanvas* canvas2 = new TCanvas(Form("EfficiencySpecies_%d", loop), Form("EfficiencySpecies_%d", loop), 600, 600);
    gPad->SetGridx();
    gPad->SetGridy();
    gPad->SetRightMargin(0.05);
    gPad->SetTopMargin(0.05);
    
    AliCorrection* correction[8];

    canvas->cd(loop+1);

    gPad->SetGridx();
    gPad->SetGridy();
    gPad->SetRightMargin(0.05);

    TLegend* legend = new TLegend(0.6, 0.4, 0.85, 0.6);
    legend->SetFillColor(0);
    legend->SetEntrySeparation(0.2);
    legend->SetTextSize(gStyle->GetTextSize());
    
    legends[loop] = new TLegend(0.4+loop*0.3, 0.2, 0.6+loop*0.3, 0.5);
    legends[loop]->SetFillColor(0);
    legends[loop]->SetEntrySeparation(0.2);
    legends[loop]->SetTextSize(gStyle->GetTextSize());
    legends[loop]->SetHeader((loop == 0) ? "SPD" : "TPC");

    Float_t below = 0;
    Float_t total = 0;

    TFile* file = TFile::Open(fileName[loop]);
    if (!file)
    {
      Printf("Could not open %s", fileName[loop]);
      return;
    }

    Float_t sumGen = 0;
    Float_t sumMeas = 0;

    Float_t sumGenAbove02 = 0;
    Float_t sumMeasAbove02 = 0;
    
    for (Int_t i=0; i<3; ++i)
    {
      Printf("correction %d", i);

      TString name; name.Form("correction_%d", i);
      correction[i] = new AliCorrection(name, name);
      correction[i]->LoadHistograms();
      
      TH3* gene = correction[i]->GetTrackCorrection()->GetGeneratedHistogram();
      TH3* meas = correction[i]->GetTrackCorrection()->GetMeasuredHistogram();

      // limit vtx axis
      Float_t vtxRange = 3.9;
      gene->GetXaxis()->SetRangeUser(-vtxRange, vtxRange);
      meas->GetXaxis()->SetRangeUser(-vtxRange, vtxRange);

      // empty over/underflow bin in eta, setting range to +-2 is not enough because this is the maximum range, Project3D takes them into account then (might be a bug)
      /*for (Int_t x = 1; x <= gene->GetNbinsX(); x++)
        for (Int_t z = 1; z <= gene->GetNbinsZ(); z++)
        {
          gene->SetBinContent(x, 0, z, 0);
          gene->SetBinContent(x, gene->GetNbinsY()+1, z, 0);
          meas->SetBinContent(x, 0, z, 0);
          meas->SetBinContent(x, gene->GetNbinsY()+1, z, 0);
        }*/

      // limit eta axis
      Float_t etaBegin = -etaRangeArr[loop];
      Float_t etaEnd   = etaRangeArr[loop];
      //etaBegin = 0.01;
      //etaEnd = -0.01;
      gene->GetYaxis()->SetRangeUser(etaBegin, etaEnd);
      meas->GetYaxis()->SetRangeUser(etaBegin, etaEnd);

      TH1* genePt = gene->Project3D(Form("z_%d", i));
      TH1* measPt = meas->Project3D(Form("z_%d", i));
      
//       if (i == 2)
//       {
//         Printf("WARNING: Rebinning for protons!");
//         genePt->Rebin(2);
//         measPt->Rebin(2);
//       }

      genePt->Sumw2();
      measPt->Sumw2();
      
      for (Int_t x=0; x<=genePt->GetNbinsX()+1; x++)
      {
      	genePt->SetBinError(x, TMath::Sqrt(genePt->GetBinContent(x)));
      	measPt->SetBinError(x, TMath::Sqrt(measPt->GetBinContent(x)));
      }
      
      sumGen += genePt->Integral();
      sumMeas += measPt->Integral();

      sumGenAbove02 += genePt->Integral(genePt->GetXaxis()->FindBin(0.21), genePt->GetNbinsX());
      sumMeasAbove02 += measPt->Integral(genePt->GetXaxis()->FindBin(0.21), genePt->GetNbinsX());
      
      TH1* effPt = (TH1*) genePt->Clone(Form("effPt_%d", i));
      effPt->Reset();
      effPt->Divide(measPt, genePt, 1, 1, "B");
      if (i == 0)
        effGlobal = effPt;

      Int_t bin = 0;
      for (bin=20; bin>=1; bin--)
      {
        if (effPt->GetBinContent(bin) < 0.5)
          break;
      }

      Printf("Eff. below 50%% at bin %d, i.e. %.3f GeV/c", bin, effPt->GetXaxis()->GetBinUpEdge(bin));

      Float_t fraction = genePt->Integral(1, bin) / genePt->Integral();
      Printf("%.4f of the particles are below that momentum", fraction);

      below += genePt->Integral(1, bin);
      total += genePt->Integral();
      
      effPt->SetLineColor(color[i]);
      effPt->SetMarkerColor(color[i]);
      effPt->SetMarkerStyle(marker[i]);
      effPt->SetMarkerSize(2);

      effPt->GetXaxis()->SetRangeUser(0, 1);
      effPt->GetYaxis()->SetRangeUser(0.001, 1);

      effPt->GetXaxis()->SetTitleOffset(1.1);
      effPt->GetYaxis()->SetTitleOffset(1.2);
      
      effPt->GetXaxis()->SetTitle("p_{T} (GeV/c)");

      effPt->SetStats(kFALSE);
      effPt->SetTitle(titles[loop]);
      effPt->GetYaxis()->SetTitle("Efficiency");

      canvas->cd(loop+1);
      effPt->DrawCopy((i == 0) ? "" : "SAME");
 
      canvas2->cd();
      effPt->SetTitle("");
      effPt->DrawCopy((i == 0) ? "" : "SAME");
      
      canvas3->cd();
      effPtClone = (TH1*) effPt->Clone("effPtClone");
      effPtClone->SetMarkerStyle(marker[i]-4*loop);
      effPtClone->DrawCopy((i == 0 && loop == 0) ? "" : "SAME");

      legend->AddEntry(effPt, ((i == 0) ? "#pi^{#pm}" : ((i == 1) ? "K^{#pm}" : "p,#bar{p}")), "P");
      legends[loop]->AddEntry(effPtClone, ((i == 0) ? "#pi^{#pm}" : ((i == 1) ? "K^{#pm}" : "p,#bar{p}")), "P");
      //legend2->AddEntry(effPt, Form("%s %s", (loop == 0) ? "SPD" : "TPC", ((i == 0) ? "#pi^{#pm}" : ((i == 1) ? "K^{#pm}" : "p,#bar{p}"))), "P");

      if (addDecayStopped)
      {
        name.Form("correction_%d", i+4);
        corr = new AliCorrection(name, name);
        corr->LoadHistograms();
        
        TH3* gene = corr->GetTrackCorrection()->GetGeneratedHistogram();
        TH3* meas = corr->GetTrackCorrection()->GetMeasuredHistogram();
        
        // limit axes
        gene->GetXaxis()->SetRangeUser(-vtxRange, vtxRange);
        meas->GetXaxis()->SetRangeUser(-vtxRange, vtxRange);
        gene->GetYaxis()->SetRangeUser(-etaRangeArr[loop], etaRangeArr[loop]);
        meas->GetYaxis()->SetRangeUser(-etaRangeArr[loop], etaRangeArr[loop]);
        
        TH1* decayed = gene->Project3D(Form("z_%d", i+4));
        TH1* stopped = meas->Project3D(Form("z_%d", i+4));
        
        Printf("%d: %d decayed, %d stopped, out of %d", i, (Int_t) decayed->Integral(), (Int_t) stopped->Integral(), (Int_t) genePt->Integral());
        
        decayed->Divide(decayed, genePt, 1, 1, "B");
        stopped->Divide(stopped, genePt, 1, 1, "B");
        
        decayed->SetMarkerStyle(20);
        stopped->SetMarkerStyle(21);
        stopped->SetMarkerColor(2);
        
        new TCanvas(Form("all_%d_%d", loop, i), Form("all_%d_%d", loop, i), 600, 600);
        effPt->DrawCopy();
        decayed->DrawCopy("SAME");
        stopped->DrawCopy("SAME");
        
        decayed->Add(stopped);
        decayed->Add(effPt);
        decayed->SetMarkerStyle(22);
        decayed->SetMarkerColor(4);
        decayed->DrawCopy("SAME");
      }
      
    }

    Printf("In total %.4f of the particles are below their effective pt cut off", (Float_t) below / total);

    Printf("%f measured, %f generated, effiency: %f", sumGen, sumMeas, sumMeas / sumGen);
    Printf("Above 0.2 GeV/c: %f measured, %f generated, effiency: %f", sumGenAbove02, sumMeasAbove02, sumMeasAbove02 / sumGenAbove02);

    canvas->cd(loop+1);
    legend->Draw();
  
    canvas2->cd();
    legend->Draw();
    canvas2->SaveAs(Form("%s.eps", canvas2->GetName()));  
  }
  
  TH1* pt = 0;
  for (Int_t i=0; i<3; ++i)
  {
    TH3* gene = correction[i]->GetTrackCorrection()->GetGeneratedHistogram();
    
    // limit axes
    gene->GetXaxis()->SetRangeUser(-vtxRange, vtxRange);
    gene->GetYaxis()->SetRangeUser(-0.49, 0.49);
    
    if (!pt)
      pt = gene->Project3D(Form("z_pt_%d", i));
    else
      pt->Add(gene->Project3D(Form("z_pt_%d", i)));
  }
  
  new TCanvas;
  
  Float_t sum = 0;
  for (Int_t i=1; i<30; i++)
  {
    Float_t tmpCorr = 100.0 * pt->GetBinContent(i) / pt->Integral() * (0.532348 - effGlobal->GetBinContent(i)) / 0.532348;
    Printf("Yield in %d bin: %.1f%%, efficiency %.1f%%, correction: %.2f%%", i, 100.0 * pt->GetBinContent(i) / pt->Integral(), 100.0 * effGlobal->GetBinContent(i), tmpCorr);
    sum += tmpCorr;
  }
  
  Printf("%f", sum);
  
  
  AliPWG0Helper::NormalizeToBinWidth(pt);
  pt->Draw();
            
  
  return;

  canvas->cd();
  canvas->SaveAs(Form("%s.eps", canvas->GetName()));

  canvas3->cd();
  legends[0]->Draw();
  legends[1]->Draw();
  canvas3->SaveAs(Form("%s.eps", canvas3->GetName()));
}

void DrawpTCutOff()
{
/*
aliroot -b -q $ALICE_ROOT/PWG0/multiplicity/correct.C'("multiplicityMC_pt_ref.root", "Multiplicity", "multiplicityESD.root", kTRUE)'
mv unfolded.root chi2_ptref.root
aliroot -b -q $ALICE_ROOT/PWG0/multiplicity/correct.C'("multiplicityMC_pt0.root", "Multiplicity", "multiplicityESD.root", kTRUE)'
mv unfolded.root chi2_pt0.root
aliroot -b -q $ALICE_ROOT/PWG0/multiplicity/correct.C'("multiplicityMC_pt1.root", "Multiplicity", "multiplicityESD.root", kTRUE)'
mv unfolded.root chi2_pt1.root
aliroot -b -q $ALICE_ROOT/PWG0/multiplicity/correct.C'("multiplicityMC_pt0_25.root", "Multiplicity", "multiplicityESD.root", kTRUE)'
mv unfolded.root chi2_pt0_25.root
aliroot -b -q $ALICE_ROOT/PWG0/multiplicity/correct.C'("multiplicityMC_pt1_25.root", "Multiplicity", "multiplicityESD.root", kTRUE)'
mv unfolded.root chi2_pt1_25.root
*/

  loadlibs();
  
  TH1* results[10];
  const char* files[] = { "chi2_ptref.root", "chi2_pt0.root", "chi2_pt1.root", "chi2_pt0_25.root", "chi2_pt1_25.root"};
  
  Int_t nMax = 5;
  for (Int_t i = 0; i<nMax; ++i)
  {
    AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open(files[i]);
    results[i] = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone(Form("result_%d", i));
  }
  
  const char* legendStrings[] = { "Reduced 50%", "Enhanced 50%", "Reduced 25%", "Enhanced 25%" };
  DrawRatio(results[0], nMax-1, results+1, "LowMomentumSyst.eps", kFALSE, legendStrings);
}

void ParticleSpeciesComparison()
{
  loadlibs();

  TH1* results[10];
  TH1* mc = 0;
  
  // loop over cases (normal, enhanced/reduced ratios)
  Int_t nMax = 7;
  for (Int_t i = 0; i<nMax; ++i)
  {
    AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open(Form("chi2a_inel_species_%d.root", i), "Multiplicity");
    results[i] = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone(Form("result_%d", i));
  }

  for (Int_t i=1; i<=results[0]->GetNbinsX(); i++)
    results[0]->SetBinError(i, 0);

  const char* legendStrings[] = { "K #times 0.7", "K #times 1.3", "p #times 0.7", "p #times 1.3", "others #times 0.7", "others #times 1.3",  };

  DrawRatio(results[0], nMax-1, results+1, "ParticleSpeciesComparison1_2.eps", kFALSE, legendStrings);
}

/*void ParticleSpeciesComparison2()
{
  gSystem->Load("libPWG0base");

  const char* fileNameMC = "multiplicityMC_400k_syst.root";
  const char* fileNameESD = "out.root"; // based on multiplicityMC_100k_syst.root
  Bool_t chi2 = 0;

  TFile::Open(fileNameMC);
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms();

  TH1* mc[10];
  TH1* results[10];

  // loop over cases (normal, enhanced/reduced ratios)
  Int_t nMax = 7;
  for (Int_t i = 0; i<nMax; ++i)
  {
    TString folder;
    folder.Form("Multiplicity_%d", i);

    AliMultiplicityCorrection* mult2 = new AliMultiplicityCorrection(folder, folder);

    TFile::Open(fileNameESD);
    mult2->LoadHistograms();

    mult->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));

    if (chi2)
    {
      mult->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 1e4);
      mult->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx, kFALSE);
      //mult->DrawComparison(Form("ParticleSpeciesComparison_MinuitChi2_%d", i), etaRange, kFALSE, kTRUE, hist2->ProjectionY("mymchist"));
    }
    else
    {
      mult->ApplyBayesianMethod(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx, 1, 100);
      //mult->DrawComparison(Form("ParticleSpeciesComparison_Bayesian_%d", i), etaRange, kFALSE, kTRUE, hist2->ProjectionY("mymchist2"));
    }

    //Float_t averageRatio = 0;
    //mult->GetComparisonResults(0, 0, 0, &averageRatio);

    results[i] = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone(Form("result_%d", i));

    TH2F* hist2 = mult2->GetMultiplicityVtx(etaRange);
    mc[i] = (TH1*) hist2->ProjectionY(Form("mymchist_%d", i), -1, -1, "e");

    //TString fileName; fileName.Form("ParticleSpeciesComparison2_%d.eps", i);
    //DrawResultRatio(hist2->ProjectionY("mymchist", -1, -1, "e"), results[i], fileName);

    //Printf("Case %d. Average ratio is %f", i, averageRatio);
  }

  DrawRatio(nMax, mc, results, "ParticleSpeciesComparison2.eps");
}*/

TH1* Invert(TH1* eff)
{
  // calculate corr = 1 / eff

  TH1* corr = (TH1*) eff->Clone(Form("%s_invert", eff->GetName()));
  corr->Reset();

  for (Int_t i=1; i<=eff->GetNbinsX(); i++)
  {
    if (eff->GetBinContent(i) > 0)
    {
      corr->SetBinContent(i, 1.0 / eff->GetBinContent(i));
      corr->SetBinError(i, eff->GetBinError(i) / eff->GetBinContent(i) * corr->GetBinContent(i));
    }
  }

  return corr;
}

void CompareVertexRecoEfficiencies()
{
  loadlibs();
  
  const char* file1 = "LHC10a12_run10482X";
  const char* file2 = "LHC10a14_run10482X_Phojet";
  
  const char* suffix = "/all/spd/multiplicityMC_xsection.root";
  
  hist1 = AliMultiplicityCorrection::Open(Form("%s%s", file1, suffix))->GetEfficiency(etaRange, AliMultiplicityCorrection::kMB);
  hist2 = AliMultiplicityCorrection::Open(Form("%s%s", file2, suffix))->GetEfficiency(etaRange, AliMultiplicityCorrection::kMB);
  
  ratio = (TH1*) hist1->Clone("ratio");
  ratio->Divide(hist2);
  
  new TCanvas;
  hist1->Draw();
  hist2->SetLineColor(2);
  hist2->Draw("SAME");
  
  new TCanvas;
  ratio->Draw();
}

void TriggerVertexCorrection()
{
  //
  // plots the correction performed on the unfolded spectrum to gain the spectrum for the full inelastic sample
  //

  loadlibs();

  TFile::Open(correctionFile);
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  TH1* corrINEL = Invert(mult->GetEfficiency(etaRange, AliMultiplicityCorrection::kINEL));
  TH1* corrNSD = Invert(mult->GetEfficiency(etaRange, AliMultiplicityCorrection::kNSD));
  TH1* corrMB   = Invert(mult->GetEfficiency(etaRange, AliMultiplicityCorrection::kMB));
  
  TH1* triggerEff = Invert(mult->GetTriggerEfficiency(etaRange, AliMultiplicityCorrection::kNSD));

  TCanvas* canvas = new TCanvas("TriggerVertexCorrection", "TriggerVertexCorrection", 800, 500);
  gPad->SetGridx();
  gPad->SetGridy();
  gPad->SetTopMargin(0.05);
  gPad->SetRightMargin(0.05);

  corrINEL->SetStats(kFALSE);
  corrINEL->GetXaxis()->SetRangeUser(0, 12);
  corrINEL->GetYaxis()->SetRangeUser(0, 8);
  corrINEL->SetTitle(Form(";%s;Correction factor", GetMultLabel()));
  corrINEL->SetMarkerStyle(22);
  corrINEL->Draw("PE");

  corrMB->SetStats(kFALSE);
  corrMB->SetLineColor(2);
  corrMB->SetMarkerStyle(25);
  corrMB->SetMarkerColor(2);
  corrMB->Draw("SAME PE");
  
  corrNSD->SetLineColor(4);
  corrNSD->SetMarkerStyle(24);
  corrNSD->SetMarkerColor(4);
  corrNSD->Draw("SAME PE");
  
  triggerEff->SetLineColor(6);
  triggerEff->SetMarkerStyle(25);
  triggerEff->SetMarkerColor(6);
  //triggerEff->Draw("SAME PE");
  
  Printf("       MB  INEL  NSD  TRIGINEL");
  Printf("bin 0: %.2f %.2f %.2f %.2f", corrMB->GetBinContent(1), corrINEL->GetBinContent(1), corrNSD->GetBinContent(1), triggerEff->GetBinContent(1));
  Printf("bin 1: %.2f %.2f %.2f %.2f", corrMB->GetBinContent(2), corrINEL->GetBinContent(2), corrNSD->GetBinContent(2), triggerEff->GetBinContent(2));

  TLegend* legend = new TLegend(0.3, 0.6, 0.85, 0.85);
  legend->SetFillColor(0);
  legend->AddEntry(corrINEL, "Correction to inelastic sample");
  legend->AddEntry(corrNSD, "Correction to NSD sample");
  legend->AddEntry(corrMB, "Correction to triggered sample");
  legend->SetTextSize(0.04);

  legend->Draw();

  canvas->SaveAs(Form("%s.eps", canvas->GetName()));
}

void DrawStatisticalUncertainty(const char* fileName = "StatisticalUncertainty.root")
{
  TFile::Open(fileName);
  
  errorResponse = (TH1*) gFile->Get("errorResponse");
  errorMeasured = (TH1*) gFile->Get("errorMeasured");
  errorBoth = (TH1*) gFile->Get("errorBoth");
  
  TCanvas* canvas = new TCanvas("StatisticalUncertainty", "StatisticalUncertainty", 600, 400);
  canvas->SetGridx();
  canvas->SetGridy();
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);

  errorResponse->SetLineColor(1);
  errorResponse->GetXaxis()->SetRangeUser(0, longDisplayRange);
  errorResponse->GetYaxis()->SetRangeUser(0, 1);
  errorResponse->SetStats(kFALSE);
  errorResponse->SetTitle(";true multiplicity;Uncertainty");

  errorResponse->Draw();

  errorMeasured->SetLineColor(2);
  errorMeasured->Draw("SAME");

  errorBoth->SetLineColor(4);
  errorBoth->Draw("SAME");

  errorResponse->Scale(1.0 / sqrt(2));
  errorMeasured->Scale(1.0 / sqrt(2));
  errorBoth->Scale(1.0 / sqrt(2));
  
  Printf("Average errorResponse: %f", errorResponse->Integral(2, displayRange) / (displayRange - 1));
  Printf("Average errorMeasured: %f", errorMeasured->Integral(2, displayRange) /  (displayRange - 1));
  Printf("Average errorBoth: %f", errorBoth->Integral(2, displayRange) /  (displayRange - 1));

  canvas->SaveAs(Form("%s.eps", canvas->GetName()));
}

void StatisticalUncertaintyCompare(const char* det = "SPD")
{
  TFile* file1 = TFile::Open(Form("StatisticalUncertainty%sBayesian.root", det));
  TH1* errorResponse = (TH1*) file1->Get("errorResponse");
  TH1* errorMeasured = (TH1*) file1->Get("errorMeasured");
  TH1* errorBoth = (TH1*) file1->Get("errorBoth");

  TString str;
  str.Form("StatisticalUncertaintyCompare%s", det);

  TCanvas* canvas = new TCanvas(str, str, 800, 500);
  canvas->SetGridx();
  canvas->SetGridy();
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);
  
  errorResponse->Scale(1.0 / sqrt(2));
  errorMeasured->Scale(1.0 / sqrt(2));
  errorBoth->Scale(1.0 / sqrt(2));

  errorResponse->SetLineColor(1);
  errorResponse->GetXaxis()->SetRangeUser(0, displayRange);
  errorResponse->GetYaxis()->SetRangeUser(0, 0.18);
  errorResponse->SetStats(kFALSE);
  errorResponse->GetYaxis()->SetTitleOffset(1.2);
  errorResponse->SetTitle(Form(";%s;#sqrt{2}^{-1} #sigma(unfolded - unfolded_{0}) / unfolded_{0}", GetMultLabel()));

  errorResponse->Draw();

  errorMeasured->SetLineColor(2);
  errorMeasured->Draw("SAME");

  errorBoth->SetLineColor(4);
  errorBoth->Draw("SAME");

  TFile* file2 = TFile::Open(Form("StatisticalUncertainty%sChi2.root", det));
  TH1* errorResponse2 = (TH1*) file2->Get("errorResponse");
  TH1* errorMeasured2 = (TH1*) file2->Get("errorMeasured");
  TH1* errorBoth2 = (TH1*) file2->Get("errorBoth");

  errorResponse2->Scale(1.0 / sqrt(2));
  errorMeasured2->Scale(1.0 / sqrt(2));
  errorBoth2->Scale(1.0 / sqrt(2));
  
  errorResponse2->SetLineStyle(2);
  errorResponse2->Draw("SAME");
  
  errorMeasured2->SetLineColor(2);
  errorMeasured2->SetLineStyle(2);
  errorMeasured2->Draw("SAME");
  
  errorBoth2->SetLineColor(4);
  errorBoth2->SetLineStyle(2);
  errorBoth2->Draw("SAME");

  TLegend* legend = new TLegend(0.2, 0.5, 0.8, 0.9);
  legend->SetFillColor(0);
  legend->SetTextSize(0.04);
  legend->AddEntry(errorBoth, "Both (Bayesian unfolding)");
  legend->AddEntry(errorMeasured, "Measured (Bayesian unfolding)");
  legend->AddEntry(errorResponse, "Response matrix (Bayesian unfolding)");
  legend->AddEntry(errorBoth2, "Both (#chi^{2}-minimization)");
  legend->AddEntry(errorMeasured2, "Measured (#chi^{2}-minimization)");
  legend->AddEntry(errorResponse2, "Response matrix (#chi^{2}-minimization)");
  legend->Draw();

  canvas->SaveAs(Form("%s.eps", canvas->GetName()));
}

void EfficiencyComparison(Int_t eventType = 2, Bool_t uncertainty = kTRUE)
{
 const char* files[] = { "multiplicityMC_nd.root", "multiplicityMC_sd.root", "multiplicityMC_dd.root", "multiplicityMC_xsection.root" };

  loadlibs();

  TCanvas* canvas = new TCanvas("EfficiencyComparison", "EfficiencyComparison", 800, 600);
  canvas->SetGridx();
  canvas->SetGridy();
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);

  AliMultiplicityCorrection* data[4];
  TH1* effArray[4];
  TH1* effErrorArray[2];

  Int_t markers[] = { 24, 25, 26, 5 };
  //Int_t markers[] = { 2, 25, 24, 5 };
  Int_t colors[] = { 1, 2, 4, 6 };
  //Int_t colors[] = { 1, 1, 1, 1 };

  //TLegend* legend = new TLegend(0.45, 0.45, 0.9, 0.7);
  TLegend* legend = new TLegend(0.3, 0.3, 0.9, 0.6);
  legend->SetTextSize(0.04);
  legend->SetFillColor(0);
 
  for (Int_t i=0; i<4; ++i)
  {
    TString name;
    name.Form("Multiplicity_%d", i);

    TFile::Open(files[i]);
    data[i] = new AliMultiplicityCorrection(name, name);

    if (i < 3)
    {
      data[i]->LoadHistograms("Multiplicity");
    }
    else
      data[i]->LoadHistograms("Multiplicity_0");

    TH1* eff = 0;
    if (eventType == -1)
    {
      eff = (TH1*) data[i]->GetTriggerEfficiency(etaRange)->Clone(Form("eff_%d", i));
    }
    else
      eff = (TH1*) data[i]->GetEfficiency(etaRange, (AliMultiplicityCorrection::EventType) eventType)->Clone(Form("eff_%d", i));
    effArray[i] = eff;

    eff->GetXaxis()->SetRangeUser(0, 15);
    eff->GetYaxis()->SetRangeUser(0, 1.19);
    eff->SetStats(kFALSE);
    eff->GetXaxis()->SetTitle(GetMultLabel());
    eff->GetYaxis()->SetTitle("Efficiency");
    eff->SetTitle("");
    eff->SetLineColor(colors[i]);
    eff->SetMarkerColor(colors[i]);
    eff->SetMarkerStyle(markers[i]);

    if (i == 3)
    {
      // once for INEL, once for NSD
      for (AliMultiplicityCorrection::EventType eventType2 = AliMultiplicityCorrection::kINEL; eventType2 <= AliMultiplicityCorrection::kNSD; eventType2++)
      {
        effDiff = (TH1*) data[i]->GetEfficiency(etaRange, eventType2)->Clone(Form("effDiff_%d", i));
        
        for (Int_t bin=1; bin<=effDiff->GetNbinsX(); bin++)
          effDiff->SetBinError(bin, 0);
  
        // loop over cross section combinations
        for (Int_t j=1; j<7; ++j)
        {
          AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multtmp", "Multtmp");
          mult->LoadHistograms(Form("Multiplicity_%d", j));
  
          TH1* eff2 = mult->GetEfficiency(etaRange, eventType2);
  
          for (Int_t bin=1; bin<=effDiff->GetNbinsX(); bin++)
          {
            // TODO we could also do asymmetric errors here
            Float_t deviation = TMath::Abs(effDiff->GetBinContent(bin) - eff2->GetBinContent(bin));
  
            effDiff->SetBinError(bin, TMath::Max(effDiff->GetBinError(bin), (Double_t) deviation));
          }
        }
  
        for (Int_t bin=1; bin<=effDiff->GetNbinsX(); bin++)
        {
          //if (eventType2 == AliMultiplicityCorrection::kINEL)
            //eff->SetBinError(bin, 0);
            //eff->SetBinError(bin, effDiff->GetBinError(bin));
          if (bin < 20 && effDiff->GetBinContent(bin) > 0)
            Printf("Bin %d: Error: %.2f", bin, 100.0 * effDiff->GetBinError(bin) / effDiff->GetBinContent(bin));
        }
        
        if (uncertainty) {
	        TH1* effError = (TH1*) effDiff->Clone(Form("effError_%s", (eventType2 == AliMultiplicityCorrection::kINEL) ? "INEL" : "NSD"));
          effErrorArray[eventType2 - AliMultiplicityCorrection::kINEL] = effError;
	        effError->Reset();
        
	        for (Int_t bin=1; bin<=effDiff->GetNbinsX(); bin++)
	          if (effDiff->GetBinContent(bin) > 0)
	            effError->SetBinContent(bin, 1.0 * effDiff->GetBinError(bin) / effDiff->GetBinContent(bin));
        
	        effError->SetLineColor(1);
	        effError->SetMarkerStyle(1);
	        
          if (eventType2 == AliMultiplicityCorrection::kNSD)
            effError->SetLineStyle(2);
          
          effError->DrawCopy("SAME HIST");
        }
      }
    }

    canvas->cd();
    if (i == 0)
    {
      eff->DrawCopy("P");
    }
    else
      eff->DrawCopy("SAME P");

    legend->AddEntry(eff, (((i == 0) ? "Non-diffractive" : ((i == 1) ? "Single-diffractive" : ((i == 2) ? "Double-diffractive" : "Pythia combined")))));
  }

  if (uncertainty)
  {
    legend->AddEntry(effErrorArray[0], "Relative syst. uncertainty: inelastic");
    legend->AddEntry(effErrorArray[1], "Relative syst. uncertainty: NSD");
  
    file = TFile::Open("uncertainty_xsection.root", "RECREATE");
    effErrorArray[0]->Write();
    effErrorArray[1]->Write();
    file->Close();
  }

  legend->Draw();

  canvas->SaveAs(Form("%s.eps", canvas->GetName()));
}

void ModelDependencyPlot()
{
  loadlibs();

  TFile::Open("multiplicityMC.root");
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");
  
  hist = mult->GetCorrelation(etaRange);
  
  for (Int_t y=0; y<=hist->GetYaxis()->GetNbins()+1; ++y)
  {
    for (Int_t z=0; z<=hist->GetZaxis()->GetNbins()+1; ++z)
    {
      hist->SetBinContent(0, y, z, 0);
      hist->SetBinContent(hist->GetXaxis()->GetNbins()+1, y, z, 0);
    }
  }

  TH2* proj = (TH2*) hist->Project3D("zy");

  TCanvas* canvas = new TCanvas("ModelDependencyPlot", "ModelDependencyPlot", 1200, 600);

  canvas->Divide(2, 1);

  canvas->cd(2);
  gPad->SetLogy();
  gPad->SetGridx();
  gPad->SetGridy();
  gPad->SetTopMargin(0.05);
  gPad->SetRightMargin(0.05);
 
  Int_t selectedMult = 30;
  Int_t yMax = 9e4;

  TH1* full = proj->ProjectionX("full");
  TH1* selected = proj->ProjectionY("selected", proj->GetXaxis()->FindBin(selectedMult), proj->GetXaxis()->FindBin(selectedMult)); 

  full->SetStats(kFALSE);
  full->GetXaxis()->SetRangeUser(0, displayRange);
  full->GetYaxis()->SetRangeUser(5, yMax);
  full->SetTitle(";Multiplicity;Entries");

  selected->SetLineColor(0);
  selected->SetMarkerColor(2);
  selected->SetMarkerStyle(5);

  full->Draw();
  selected->Draw("SAME P");

  TLegend* legend = new TLegend(0.5, 0.65, 0.85, 0.85);
  legend->SetFillColor(0);
  legend->AddEntry(full, "True");
  legend->AddEntry(selected, "Measured");
  legend->Draw();
 
  TLine* line = new TLine(selectedMult, 5, selectedMult, yMax);
  line->SetLineWidth(2);
  line->Draw();

  canvas->cd(1);
  gPad->SetLogy();
  gPad->SetGridx();
  gPad->SetGridy();
  gPad->SetTopMargin(0.05);
  gPad->SetRightMargin(0.05);

  full = proj->ProjectionY("full2");
  selected = proj->ProjectionX("selected2", proj->GetYaxis()->FindBin(selectedMult), proj->GetYaxis()->FindBin(selectedMult));

  full->SetStats(kFALSE);
  full->GetXaxis()->SetRangeUser(0, displayRange);
  full->GetYaxis()->SetRangeUser(5, yMax);
  full->SetTitle(";Multiplicity;Entries");

  full->SetLineColor(0);
  full->SetMarkerColor(2);
  full->SetMarkerStyle(5);

  full->Draw("P");
  selected->Draw("SAME");

  legend->Draw();

  line = new TLine(selectedMult, 5, selectedMult, yMax);
  line->SetLineWidth(2);
  line->Draw();

  canvas->SaveAs(Form("%s.eps", canvas->GetName()));
}

void SystematicpTSpectrum()
{
  gSystem->Load("libPWG0base");

  TFile::Open("multiplicityMC_400k_syst_ptspectrum.root");
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  TFile::Open("multiplicityMC_100k_syst.root");
  AliMultiplicityCorrection* mult2 = new AliMultiplicityCorrection("Multiplicity2", "Multiplicity2");
  mult2->LoadHistograms("Multiplicity");

  mult->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));
  mult->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 10000);
  mult->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);

  TH1* mcHist = mult2->GetMultiplicityVtx(etaRange)->ProjectionY("mymc");
  TH1* result = mult->GetMultiplicityESDCorrected(etaRange);

  DrawResultRatio(mcHist, result, "SystematicpTSpectrum.eps");
}

void FitPt(const char* fileName)
{
  // needs a MC file from the dNdEta analysis

  TFile::Open(fileName);

  TH1* genePt = (TH1*) gFile->Get("fdNdpT");
  
  genePt->SetTitle(";p_{T} (GeV/c);1/p_{T} dN_{ch}/dp_{T} (GeV/c)^{-2}");
  // number of events
  genePt->Scale(1.0 / 287800);
  // bin width
  genePt->Scale(1.0 / genePt->GetXaxis()->GetBinWidth(1));
  
  genePt->GetXaxis()->SetRangeUser(0, 0.4);

  TF1* func = new TF1("func", "[1]*x*exp(x*[0])");
  func->SetParameters(-1, 1);

  genePt->SetMarkerStyle(25);
  genePt->SetTitle("");
  genePt->SetStats(kFALSE);

  new TCanvas;
  genePt->DrawCopy("P");
  func->DrawCopy("SAME");
  gPad->SetLogy();

  genePt->Fit(func, "0", "", 0, 0.25);
  genePt->Fit(func, "0", "", 0, 0.25);

  TCanvas* canvas = new TCanvas("FitPt", "FitPt", 600, 600);

  gPad->SetGridx();
  gPad->SetGridy();
  gPad->SetLeftMargin(0.13);
  gPad->SetRightMargin(0.05);
  gPad->SetTopMargin(0.05);

  //genePt->GetXaxis()->SetRangeUser(0, 1);
  genePt->GetYaxis()->SetRangeUser(2, 200);
  genePt->GetYaxis()->SetTitleOffset(1.4);
  genePt->GetXaxis()->SetTitleOffset(1.1);
  genePt->DrawCopy("P");
  //func->SetRange(0, 0.3);
  func->DrawCopy("SAME");
  gPad->SetLogy();

  canvas->SaveAs(Form("%s.eps", canvas->GetName()));
  
  TH1* first = (TH1*) func->GetHistogram()->Clone("first");

  TCanvas* canvas2 = new TCanvas("FitPt2", "FitPt2", 600, 400);

  TFile* file = TFile::Open("ptspectrum_fit.root", "RECREATE");

  for (Int_t param=0; param<2; param++)
  {
    for (Int_t sign=0; sign<2; sign++)
    {
      TF1* func2 = (TF1*) func->Clone(Form("func_%d_%d", param, sign));  // new TF1(Form("func_%d_%d", param, sign), &FitPtFunc, 0, 2, 6);
      func2->SetParameters(func->GetParameters());
      //TF1* func2 = (TF1*) func->Clone(); // SetParameter after this does not work

      Float_t factor = ((sign == 0) ? 0.75 : 1.25);
      func2->SetParameter(param, func2->GetParameter(param) * factor);
      //func2->Print();

      canvas->cd();
      func2->SetLineWidth(2);
      func2->SetLineColor(2);
      func2->SetLineStyle(2);
      func2->DrawCopy("SAME");

      canvas2->cd();
      TH1* second = func2->GetHistogram();
      second->Divide(first);
      second->SetLineColor(param + 1);
      // set to 1 above 0.2 GeV
      for (Int_t bin=second->GetXaxis()->FindBin(0.20001); bin<=second->GetNbinsX(); bin++)
        second->SetBinContent(bin, 1);
      second->GetYaxis()->SetRangeUser(0, 2);
      second->DrawCopy((param == 0 && sign == 0) ? "" : "SAME");
      second->Clone(Form("ptspectrum_%d_%d", param, sign))->Write();
    }
  }

  canvas->SaveAs(Form("%s.eps", canvas->GetName()));
  canvas2->SaveAs(Form("%s.eps", canvas2->GetName()));

  file->Close();
}

void DrawSystematicpT()
{
  TFile* file = TFile::Open("SystematicpT.root");

  TH1* mcHist2 = (TH1*) file->Get("mymc_unity");
  TH1* result2 = (TH1*) file->Get("result_unity");

  TH1* mcHist[12];
  TH1* result[12];

  Int_t nParams = 5;

  for (Int_t id=0; id<nParams*2; ++id)
  {
    mcHist[id] = (TH1*) file->Get(Form("mymc_%d_%d.root", id / 2, id % 2));
    result[id] = (TH1*) file->Get(Form("result_%d_%d.root", id / 2, id % 2));
  }

  DrawResultRatio(mcHist2, result2, "SystematicpT_OK.eps");

  //DrawRatioDeduct(mcHist2, result2, nParams*2, mcHist, result, "SystematicpT_Summary.eps");

  DrawRatio(nParams*2, mcHist, result, "SystematicpT_Ratios.eps", kTRUE, kTRUE);

  //DrawRatioDeductSmooth(mcHist2, result2, nParams*2, mcHist, result, "SystematicpT_Summary.eps");

  // does not make sense: mc is different
  //Draw2ResultRatio(mcHist, result1, result2, "SystematicpT.eps");
}

void SystematicpT(Bool_t chi2 = 1)
{
  gSystem->Load("libPWG0base");

  TFile::Open("ptspectrum900.root");
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  AliMultiplicityCorrection* mult2 = new AliMultiplicityCorrection("Multiplicity2", "Multiplicity2");

  TH1* mcHist[12];
  TH1* result[12];

  Int_t nParams = 5;

  for (Int_t param=0; param<nParams; param++)
  {
    for (Int_t sign=0; sign<2; sign++)
    {
      // calculate result with systematic effect
      TFile::Open(Form("ptspectrum100_%d_%d.root", param, sign));
      mult2->LoadHistograms("Multiplicity");

      mult->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));

      if (chi2)
      {
        mult->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 10000);
        mult->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);
      }
      else
        mult->ApplyBayesianMethod(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx, 1, 100, 0);

      Int_t id = param * 2 + sign;

      mcHist[id] = mult2->GetMultiplicityVtx(etaRange)->ProjectionY(Form("mymc_%d_%d.root", param, sign));
      result[id] = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone(Form("result_%d_%d.root", param, sign));

      TString tmp; tmp.Form("SystematicpT_%d_%d.eps", param, sign);
      DrawResultRatio(mcHist[id], result[id], tmp);
    }
  }

  // calculate normal result
  TFile::Open("ptspectrum100_1.root");
  mult2->LoadHistograms("Multiplicity");
  TH1* mcHist2 = mult2->GetMultiplicityVtx(etaRange)->ProjectionY("mymc_unity");

  mult->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));

  if (chi2)
  {
    mult->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);
  }
  else
    mult->ApplyBayesianMethod(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx, 1, 100);

  TH1* result2 = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone("result_unity");

  TFile* file = TFile::Open("SystematicpT.root", "RECREATE");
  mcHist2->Write();
  result2->Write();
  for (Int_t id=0; id<nParams*2; ++id)
  {
    mcHist[id]->Write();
    result[id]->Write();
  }
  file->Close();

  DrawSystematicpT();
}

void DrawSystematicpT2()
{
  //displayRange = 200;

  // read from file
  TFile* file = TFile::Open("SystematicpT2.root");
  TH1* mcHist = (TH1*) file->Get("mymc");
  TH1* result[12];
  result[0] = (TH1*) file->Get("result_unity");
  Int_t nParams = 5;
  for (Int_t id=0; id<nParams*2; ++id)
    result[id+1] = (TH1*) file->Get(Form("result_%d_%d", id / 2, id % 2));

  DrawResultRatio((TH1*) mcHist->Clone(), (TH1*) result[0]->Clone(), "SystematicpT_OK.eps");
  DrawRatio(mcHist, nParams*2+1, result, "SystematicpT_Ratios_MC.eps", kTRUE);
  DrawRatio(result[0], nParams*2, result+1, "SystematicpT_Ratios.eps");
}

void SystematicpT2(Bool_t tpc = kTRUE, Bool_t chi2 = kTRUE)
{
  gSystem->Load("libPWG0base");

  if (tpc)
  {
    SetTPC();
    TFile::Open("multiplicityMC_TPC_0.6M_syst_pt_unity.root");
  }
  else
    TFile::Open("ptspectrum100_1.root");

  AliMultiplicityCorrection* measured = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  measured->LoadHistograms("Multiplicity");
  TH1* mcHist = measured->GetMultiplicityVtx(etaRange)->ProjectionY("mymc");

  TH1* result[12];

  Int_t nParams = 5;

  // -1 = unity change, 0...4 parameters
  for (Int_t id=-1; id<nParams*2; id++)
  {
    Int_t param = id / 2;
    Int_t sign = id % 2;

    TString idStr;
    if (id == -1)
    {
      idStr = "unity";
    }
    else
      idStr.Form("%d_%d", param, sign);

    // calculate result with systematic effect
    if (tpc)
    {
      TFile::Open(Form("multiplicityMC_TPC_1.3M_syst_pt_%s.root", idStr.Data()));
    }
    else
      TFile::Open(Form("ptspectrum900_%s.root", idStr.Data()));

    AliMultiplicityCorrection* response = new AliMultiplicityCorrection("Multiplicity2", "Multiplicity2");
    response->LoadHistograms("Multiplicity");

    response->SetMultiplicityESD(etaRange, measured->GetMultiplicityESD(etaRange));

    if (chi2)
    {
      response->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 10000);
      response->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);
    }
    else
      response->ApplyBayesianMethod(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx, 1, 100, 0);

    result[id+1] = (TH1*) response->GetMultiplicityESDCorrected(etaRange)->Clone(Form("result_%s", idStr.Data()));

    TString tmp; tmp.Form("SystematicpT_%s.eps", idStr.Data());
    DrawResultRatio(mcHist, result[id+1], tmp);
  }

  TFile* file = TFile::Open("SystematicpT2.root", "RECREATE");
  mcHist->Write();
  for (Int_t id=0; id<nParams*2+1; ++id)
    result[id]->Write();
  file->Close();

  DrawSystematicpT2();
}

void SystematicpTCutOff(Bool_t chi2 = kTRUE)
{
  // only needed for TPC
  SetTPC();

  gSystem->Load("libPWG0base");

  TFile::Open("multiplicityMC_TPC_1.3M_syst_pt_unity.root");
  AliMultiplicityCorrection* mult = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult->LoadHistograms("Multiplicity");

  TFile::Open("multiplicityMC_TPC_0.6M_syst_pt_unity.root");
  AliMultiplicityCorrection* mult2 = new AliMultiplicityCorrection("Multiplicity2", "Multiplicity2");
  mult2->LoadHistograms("Multiplicity");

  // "normal" result
  mult->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));

  if (chi2)
  {
    mult->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 10000);
    mult->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);
  }
  else
    mult->ApplyBayesianMethod(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx, 1, 100);

  TH1* mcHist = mult2->GetMultiplicityVtx(etaRange)->ProjectionY("mymc");
  TH1* result1 = (TH1*) mult->GetMultiplicityESDCorrected(etaRange)->Clone("result1");

  TH1* syst[2];

  // change of pt spectrum (down)
  TFile::Open("multiplicityMC_TPC_1.3M_syst_pt_red.root");
  AliMultiplicityCorrection* mult3 = new AliMultiplicityCorrection("Multiplicity3", "Multiplicity3");
  mult3->LoadHistograms("Multiplicity");
  mult3->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));
  if (chi2)
  {
    mult3->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 10000);
    mult3->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);
  }
  else
    mult3->ApplyBayesianMethod(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx, 1, 100);
  syst[0] = (TH1*) mult3->GetMultiplicityESDCorrected(etaRange)->Clone("result2");

  // change of pt spectrum (up)
  TFile::Open("multiplicityMC_TPC_1.3M_syst_pt_inc.root");
  AliMultiplicityCorrection* mult4 = new AliMultiplicityCorrection("Multiplicity4", "Multiplicity4");
  mult4->LoadHistograms("Multiplicity");
  mult4->SetMultiplicityESD(etaRange, mult2->GetMultiplicityESD(etaRange));
  if (chi2)
  {
    mult4->SetRegularizationParameters(AliMultiplicityCorrection::kPol1, 10000);
    mult4->ApplyMinuitFit(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx);
  }
  else
    mult4->ApplyBayesianMethod(etaRange, kFALSE, AliMultiplicityCorrection::kTrVtx, 1, 100);
  syst[1] = (TH1*) mult4->GetMultiplicityESDCorrected(etaRange)->Clone("result3");

  DrawRatio(result1, 2, syst, "SystematicpTCutOff.eps", kFALSE, 0, kTRUE);

  Draw2ResultRatio(mcHist, result1, syst[0], "SystematicpTCutOff1.eps");
  Draw2ResultRatio(mcHist, result1, syst[1], "SystematicpTCutOff2.eps");
}

TH1* SystematicsSummary(Bool_t tpc = 0, Bool_t nsd = kTRUE)
{
  Int_t nEffects = 7;

  TH1* effects[10];
  const char** names = 0;
  Int_t colors[] = { 1, 2, 4, 1, 2, 4 };
  Int_t styles[] = { 1, 2, 3, 1, 2, 3 };
  Int_t widths[] = { 1, 1, 1, 2, 2, 2 };
  Int_t markers[] = { 20, 21, 22, 23, 24, 25, 26 };
  
  TH1* dummy = new TH2F("dummy", Form(";%s;Uncertainty", GetMultLabel()), 202, -1.5, 200.5, 100, 0, 0.4);
  dummy->SetStats(0);

  for (Int_t i=0; i<nEffects; ++i)
    effects[i] = new TH1F("SystematicsSummary", Form(";%s;Uncertainty", GetMultLabel()), 201, -0.5, 200.5);

  if (tpc)
  {
    SetTPC();

    const char* namesTPC[] = { "Unfolding method (#chi^{2})", "Rel. cross-section", "Particle composition", "p_{t} cut off", "Track selection", "Secondaries", "p_{t} spectrum" };
    names = namesTPC;

    // method
    TFile* file = TFile::Open("StatisticalUncertaintyTPCChi2.root");
    TH1* hist = (TH1*) file->Get("errorBoth");

    // smooth a bit, but skip 0 bin
    effects[0]->SetBinContent(2, hist->GetBinContent(2));
    for (Int_t i=3; i<=200; ++i)
      effects[0]->SetBinContent(i, (hist->GetBinContent(i) + hist->GetBinContent(i+1)) / 2);

    // relative x-section
    effects[1]->SetBinContent(2, 0.005);
    effects[1]->SetBinContent(3, 0.0025);
    effects[1]->SetBinContent(4, 0.0025);

    // particle composition
    for (Int_t i=2; i<=101; ++i)
    {
      if (i < 41)
      {
        effects[2]->SetBinContent(i, 0.01);
      }
      else if (i < 76)
      {
        effects[2]->SetBinContent(i, 0.02);
      }
      else
        effects[2]->SetBinContent(i, 0.02 + 0.08 / 25 * (i - 76));
    }

    // pt cut off (only tpc)
    for (Int_t i=2; i<=101; ++i)
    {
      if (i < 11)
      {
        effects[3]->SetBinContent(i, 0.05);
      }
      else if (i < 51)
      {
        effects[3]->SetBinContent(i, 0.01);
      }
      else
        effects[3]->SetBinContent(i, 0.01 + 0.1 / 30 * (i - 51));
    }

    // track selection (only tpc)
    for (Int_t i=2; i<=101; ++i)
      effects[4]->SetBinContent(i, 0.03);

    // secondaries
    for (Int_t i=2; i<=101; ++i)
      effects[5]->SetBinContent(i, 0.01);

    // pt spectrum
    for (Int_t i=2; i<=101; ++i)
    {
      if (i < 21)
      {
        effects[6]->SetBinContent(i, 0.05);
      }
      else if (i < 51)
      {
        effects[6]->SetBinContent(i, 0.02);
      }
      else
        effects[6]->SetBinContent(i, 0.02 + 0.13 / 25 * (i - 51));
    }

  }
  else
  {
    nEffects = 5;

    //const char* namesSPD[] = { "Particle composition",  "p_{t} cut-off", "Unfolding Method (#chi^{2})", "Relative cross-sections (INEL)", "Relative cross-sections (NSD)"};
    const char* namesSPD[] = { "Unfolding Method (#chi^{2})", "Relative cross-sections (INEL)", "Relative cross-sections (NSD)", "Particle composition",  "p_{t} cut-off"};
    names = namesSPD;

    currentEffect = 0;

    // method
    TFile* file = TFile::Open("StatisticalUncertaintySPDChi2.root");
    TH1* hist = (TH1*) file->Get("errorBoth");
    hist->Scale(1.0 / sqrt(2));

    // smooth a bit, but skip 0 bin
    /*effects[currentEffect]->SetBinContent(1, hist->GetBinContent(1));
    for (Int_t i=2; i<=201; ++i)
      effects[currentEffect]->SetBinContent(i, (hist->GetBinContent(i) + hist->GetBinContent(i+1)) / 2);*/
    effects[currentEffect] = hist;

    currentEffect++;

    // relative x-section
    file = TFile::Open("uncertainty_xsection.root");
    effects[currentEffect++] = (TH1*) file->Get("effError_INEL");
    effects[currentEffect] = (TH1*) file->Get("effError_NSD");
    effects[currentEffect]->SetLineStyle(1);
    //effects[2]->SetBinContent(1, 0.20);
    //effects[2]->SetBinContent(2, 0.01);
    //effects[2]->SetBinContent(3, 0.002);
    
    currentEffect++;
    
    // particle composition
    effects[currentEffect]->SetBinContent(1, 0.16);
    for (Int_t i=2; i<=81; ++i)
    {
      effects[currentEffect]->SetBinContent(i, 0.01 + 0.05 * i / 81);
    }
    
    currentEffect++;

    // pt spectrum
    effects[currentEffect]->SetBinContent(1, 0.06);
    effects[currentEffect]->SetBinContent(2, 0.03);
    for (Int_t i=3; i<=81; ++i)
    {
      if (i <= 61)
      {
        effects[currentEffect]->SetBinContent(i, 0.01);
      }
      else if (i <= 81)
      {
        effects[currentEffect]->SetBinContent(i, 0.01 + 0.05 * (i - 61) / 20);
      }
    }
    
//     currentEffect++;
//         
//     // material budget
//     for (Int_t i=1; i<=81; ++i)
//     {
//       if (i < 5)
//         effects[currentEffect]->SetBinContent(i, 0.05 - 0.01 * i);
//       if (i > 51)
//         effects[currentEffect]->SetBinContent(i, 0.05 * (i - 50) / 30);
//     }
//         
    currentEffect++;
    
  }

  TCanvas* canvas = new TCanvas("SystematicsSummary.eps", "SystematicsSummary.eps", 800, 500);
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);
  //canvas->SetGridx();
  canvas->SetGridy();
  TLegend* legend = new TLegend(0.2, 0.4, 0.7, 0.4 + 0.5 * nEffects / 7);
  legend->SetFillColor(0);
  legend->SetTextSize(0.04);
  dummy->Draw();
  dummy->GetXaxis()->SetRangeUser(0, displayRange);

  for (Int_t i=0; i<nEffects; ++i)
  {
    TH1* current = (TH1*) effects[i]->Clone(Form("current_%d", i));
    /*current->Reset();
    for (Int_t j=0; j<nEffects-i; ++j)
      current->Add(effects[j]);*/

    current->SetLineColor(colors[i]);
    current->SetLineStyle(styles[i]);
    current->SetLineWidth(widths[i]);
    //current->SetFillColor(colors[i]);
    current->SetMarkerColor(colors[i]);
    //current->SetMarkerStyle(markers[i]);

    current->SetStats(kFALSE);
    current->GetYaxis()->SetRangeUser(0, 0.4);
    current->DrawCopy("SAME");
    legend->AddEntry(current, names[i]);

    //TLatex* text = new TLatex(displayRange+2, current->GetBinContent(displayRange+1), names[i]);
    TLatex* text = new TLatex(displayRange+2, 0.1 - i * 0.02, names[i]);
    text->SetTextSize(0.04);
    text->SetTextColor(colors[i]);
    //text->Draw();
  }

  // add total in square
  TH1* totalINEL = (TH1*) effects[0]->Clone("totalINEL");
  totalINEL->Reset();
  TH1* totalNSD = (TH1*) totalINEL->Clone("totalNSD");

  for (Int_t i=0; i<nEffects; ++i)
  {
    //Printf("%d %f", i, effects[i]->GetBinContent(20));
    effects[i]->Multiply(effects[i]);
    
    if (i != 2)
      totalINEL->Add(effects[i]);
    if (i != 1)
      totalNSD->Add(effects[i]);
  }
  
  for (Int_t i=1; i<=totalINEL->GetNbinsX(); ++i)
  {
    totalINEL->SetBinError(i, 0);
    if (totalINEL->GetBinContent(i) > 0)
      totalINEL->SetBinContent(i, TMath::Min(sqrt(totalINEL->GetBinContent(i)), 1.0));
    totalNSD->SetBinError(i, 0);
    if (totalNSD->GetBinContent(i) > 0)
      totalNSD->SetBinContent(i, TMath::Min(sqrt(totalNSD->GetBinContent(i)), 1.0));
  }

  //Printf("%f", total->GetBinContent(20));

  totalINEL->SetMarkerStyle(5);
  totalINEL->SetMarkerColor(1);
  legend->AddEntry(totalINEL, "Total (INEL)", "P");
  
  totalNSD->SetMarkerStyle(24);
  totalNSD->SetMarkerColor(2);
  legend->AddEntry(totalNSD, "Total (NSD)", "P");
  
  Printf("total in bin 0 is INEL: %f NSD: %f", totalINEL->GetBinContent(1), totalNSD->GetBinContent(1));
  totalINEL->DrawCopy("SAME P"); //->SetBinContent(1, 0);
  totalNSD->DrawCopy("SAME P"); //->SetBinContent(1, 0);

  legend->Draw();

  canvas->SaveAs(canvas->GetName());
  
  file = TFile::Open(Form("%s_syst_error.root", (tpc) ? "tpc" : "spd"), "RECREATE");
  totalINEL->Write("inel_1");
  totalNSD->Write("nsd_1");
  file->Close();

  return (nsd) ? totalNSD : totalINEL;
}

void finalPlot(Bool_t tpc = 0, Bool_t small = kFALSE)
{
  loadlibs();

  if (tpc)
    SetTPC();

  //TH1* errorNSD = SystematicsSummary(tpc, 1);

  TCanvas* canvas = new TCanvas("finalPlot.eps", "finalPlot.eps", 800, 500); 
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);
  canvas->SetGridx();
  canvas->SetGridy();
  
  legend = new TLegend(0.5, 0.6, 0.9, 0.8);
  legend->SetFillColor(0);
  legend->SetTextSize(0.04);
  
  for (AliMultiplicityCorrection::EventType eventType = AliMultiplicityCorrection::kINEL; eventType <= AliMultiplicityCorrection::kNSD; eventType++)
  {
    AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open((eventType == AliMultiplicityCorrection::kINEL) ? "chi2_inel.root" : "chi2_nsd.root");
    TH1* mcHist = mult->GetMultiplicityMC(etaRange, eventType)->ProjectionY("mymc");
    TH1* result = mult->GetMultiplicityESDCorrected(etaRange);
  
    DrawResultRatio(mcHist, result, Form("finalPlotCheck_%d.eps", (Int_t) eventType));

    // normalize result
    //result->Scale(1.0 / result->Integral(2, displayRange));
  
    result->GetXaxis()->SetRangeUser(0, displayRange);
    //result->SetBinContent(1, 0); result->SetBinError(1, 0);
    result->SetTitle(Form(";True multiplicity in |#eta| < %.1f;Entries", (etaRange+1) * 0.5));
    result->SetMarkerStyle(0);
    result->SetLineColor(1);
    result->SetStats(kFALSE);
  
    // systematic error
    TH1* error = SystematicsSummary(tpc, (eventType == AliMultiplicityCorrection::kNSD));
    
    TH1* systError = (TH1*) result->Clone("systError");
    for (Int_t i=1; i<=systError->GetNbinsX(); ++i)
      systError->SetBinError(i, systError->GetBinContent(i) * error->GetBinContent(i));
  
    // change error drawing style
    systError->SetFillColor(15);
    
    if (eventType == AliMultiplicityCorrection::kNSD)
    {
      result->SetLineColor(2);
      result->SetMarkerColor(2);
      result->SetMarkerStyle(5);
    }
    
    canvas->cd();
    systError->DrawCopy(Form("E2 ][ %s", (eventType == AliMultiplicityCorrection::kINEL) ? "" : "SAME"));
    result->DrawCopy("SAME E ][");
    canvas->SetLogy();
    
    legend->AddEntry(result, (eventType == AliMultiplicityCorrection::kINEL) ? "Inelastic cross-section" : "NSD cross-section", (eventType == AliMultiplicityCorrection::kINEL) ? "L" : "P");
  }
  
  legend->Draw();
  /*
  //TPaveText* text = new TPaveText(10, 1e-3, 50, 1e-4, "B");
  TPaveText* text = new TPaveText(0.15, 0.2, 0.5, 0.4, "B NDC");
  text->SetFillColor(0);
  text->SetTextAlign(12);
  text->AddText("Systematic errors summed quadratically");
  text->AddText("0.6 million minimum bias events");
  text->AddText("corrected to inelastic events");
  text->Draw("B");

  TPaveText* text2 = new TPaveText(0.4, 0.7, 0.6, 0.85, "B NDC");
  text2->SetFillColor(0);
  text2->SetTextAlign(12);
  text2->AddText("#sqrt{s} = 14 TeV");
  if (tpc)
  {
    text2->AddText("|#eta| < 0.9");
  }
  else
    text2->AddText("|#eta| < 2.0");
  text2->AddText("simulated data (PYTHIA)");
  text2->Draw("B");
  
  if (tpc)
  {
    TText* text3 = new TText(0.75, 0.6, "TPC - full tracking");
    text3->SetNDC();
    text3->Draw();
  }
  else
  {
    TText* text3 = new TText(0.75, 0.6, "SPD - Tracklets");
    text3->SetNDC();
    text3->Draw();
  }

  // alice logo
  TPad* pad = new TPad("pad", "pad", 0.8, 0.7, 0.9, 0.9);
  pad->Draw();
  pad->cd();
  TImage* img = TImage::Open("$HOME/alice.png");
  img->SetImageQuality(TAttImage::kImgBest);
  img->Draw();

  canvas->Modified();
  */

/*  TText* text = new TText(10, 1e-4, "Systematic errors summed quadratically");
  text->SetTextSize(0.04);
  text->DrawText(10, 5e-5, "0.6 #cdot 10^{6} minimum bias events");
  text->DrawText(10, 3e-5, "TPC tracks in |#eta| < 0.9");
  text->DrawText(10, 1e-5, "corrected to ineleastic events in |#eta| < 0.9");
  text->Draw();*/


  canvas->SaveAs(canvas->GetName());
}

void finalPlot2(Bool_t tpc = 0)
{
  loadlibs();

  if (tpc)
    SetTPC();

  //TH1* errorNSD = SystematicsSummary(tpc, 1);

  TCanvas* canvas = new TCanvas("finalPlot2.eps", "finalPlot2.eps", 800, 600); 
  canvas->SetRightMargin(0.05);
  canvas->SetTopMargin(0.05);
  canvas->SetGridx();
  canvas->SetGridy();
  canvas->SetLogy();
  
  legend = new TLegend(0.5, 0.7, 0.9, 0.9);
  legend->SetFillColor(0);
  legend->SetTextSize(0.04);
  
  Int_t displayRanges[] = { 30, 45, 65 };
  
  TH2* dummy = new TH2F("dummy", ";True multiplicity N_{ch};P(N_{ch})", 100, -0.5, displayRanges[2]+10, 1000, 5e-6, 5);
  dummy->SetStats(0);
  dummy->Draw();
  
  TList list;
  
  // get syst error
  file = TFile::Open(Form("%s_syst_error.root", (tpc) ? "tpc" : "spd"));
  TH1* totalINEL = (TH1*) file->Get("inel_1");
  TH1* totalNSD = (TH1*) file->Get("nsd_1");
  
  Int_t count = 0;
  for (AliMultiplicityCorrection::EventType eventType = AliMultiplicityCorrection::kINEL; eventType <= AliMultiplicityCorrection::kNSD; eventType++)
  {
    AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open((eventType == AliMultiplicityCorrection::kINEL) ? "chi2_inel.root" : "chi2_nsd.root");
    //TH1* mcHist = mult->GetMultiplicityMC(etaRange, eventType)->ProjectionY("mymc");
    for (Int_t etaR = 0; etaR <= 2; etaR++)
    {
      TH1* result = mult->GetMultiplicityESDCorrected(etaR);
    
      //DrawResultRatio(mcHist, result, Form("finalPlotCheck_%d.eps", (Int_t) eventType));
  
      // normalize result
      result->Scale(TMath::Power(5, etaR) / result->Integral(1, displayRanges[etaR]));
    
      result->GetXaxis()->SetRangeUser(0, displayRanges[etaR]);
      //result->SetBinContent(1, 0); result->SetBinError(1, 0);
      //result->SetTitle(Form(""));
      result->SetMarkerStyle(0);
      result->SetLineColor(1);
      result->SetLineWidth(2);
      //result->SetMarkerStyle(4);
      //result->SetStats(kFALSE);
    
      // systematic error
      //TH1* error = SystematicsSummary(tpc, (eventType == AliMultiplicityCorrection::kNSD));
      TH1* error = (eventType == AliMultiplicityCorrection::kNSD) ? totalNSD : totalINEL;
      
      TH1* systError = (TH1*) result->Clone("systError");
      // small hack until we have syst. errors for all eta ranges
      Float_t factor = 80.0 / displayRanges[etaR];
      for (Int_t i=1; i<=systError->GetNbinsX(); ++i)
      {
        systError->SetBinError(i, systError->GetBinContent(i) * error->GetBinContent(factor * i));
      }
    
      // change error drawing style
      systError->SetFillColor(15);
      
      if (eventType == AliMultiplicityCorrection::kNSD)
      {
        result->SetLineColor(2);
        result->SetMarkerColor(2);
        result->SetMarkerStyle(5);
      }
      
      canvas->cd();
      systError->GetXaxis()->SetRangeUser(0, displayRanges[etaR]);
      systError->DrawCopy("E2 ][ SAME");
      list.Add(result);
      
      if (eventType == AliMultiplicityCorrection::kINEL)
      {
        TLatex* Tl = new TLatex;
        Tl->SetTextSize(0.04);
        //Tl->SetBit(TLatex::kTextNDC);
        Tl->SetTextAlign(32);

        Float_t etaRangeArr[] = { 0.5, 1.0, 1.4 };
        TString tmpStr;
        tmpStr.Form("|#eta| < %.1f (x %d)", etaRangeArr[etaR], (Int_t) TMath::Power(5, etaR));
        if (etaR == 0)
          Tl->DrawLatex(15, result->GetBinContent(20), tmpStr);
        if (etaR == 1)
        {
          Tl->SetTextAlign(12);
          Tl->DrawLatex(40, result->GetBinContent(40), tmpStr);
        }
        if (etaR == 2)
        {
          Tl->SetTextAlign(12);
          Tl->DrawLatex(60, result->GetBinContent(50), tmpStr);
        }
      }
      
      if (etaR == 0)
        legend->AddEntry(result, (eventType == AliMultiplicityCorrection::kINEL) ? "Inelastic events" : "NSD events", (eventType == AliMultiplicityCorrection::kINEL) ? "L" : "P");
      
      count++;
    }
  }
  
  for (Int_t i=0; i<list.GetEntries(); i++)
    ((TH1*) list.At(i))->DrawCopy("SAME E ][");
  
  legend->Draw();

  canvas->SaveAs(canvas->GetName());
}

TMatrixD* NonInvertable()
{
  const Int_t kSize = 5;

  TMatrixD matrix(kSize, kSize);
  for (Int_t x=0; x<kSize; x++)
  {
    for (Int_t y=0; y<kSize; y++)
    {
      if (x == y)
      {
        if (x == 0 || x == kSize -1)
        {
          matrix(x, y) = 0.75;
        }
        else
          matrix(x, y) = 0.5;
      }
      else if (TMath::Abs(x - y) == 1)
      {
        matrix(x, y) = 0.25;
      }
    }
  }

  matrix.Print();

  //TMatrixD inverted(matrix);
  //inverted.Invert();
  
  //inverted.Print();
  
  return new TMatrixD(matrix);
}

void BlobelUnfoldingExample()
{
  const Int_t kSize = 20;

  TMatrixD matrix(kSize, kSize);
  for (Int_t x=0; x<kSize; x++)
  {
    for (Int_t y=0; y<kSize; y++)
    {
      if (x == y)
      {
        if (x == 0 || x == kSize -1)
        {
          matrix(x, y) = 0.75;
        }
        else
          matrix(x, y) = 0.5;
      }
      else if (TMath::Abs(x - y) == 1)
      {
        matrix(x, y) = 0.25;
      }
    }
  }

  //matrix.Print();

  TMatrixD inverted(matrix);
  inverted.Invert();

  //inverted.Print();

  TH1F* inputDist = new TH1F("inputDist", ";t;Entries", kSize, -0.5, (Float_t) kSize - 0.5);
  TVectorD inputDistVector(kSize);
  TH1F* unfolded = inputDist->Clone("unfolded");
  TH1F* measuredIdealDist = inputDist->Clone("measuredIdealDist");
  measuredIdealDist->SetTitle(";m;Entries");
  TH1F* measuredDist = measuredIdealDist->Clone("measuredDist");

  TF1* gaus = new TF1("func", "gaus(0)", -0.5, kSize);
  // norm: 1/(sqrt(2pi)sigma)
  gaus->SetParameters(10000 / sqrt(2 * TMath::Pi()) / ((Float_t) kSize / 8), (Float_t) kSize / 2, (Float_t) kSize / 8);
  //gaus->Print();

  for (Int_t x=1; x<=inputDist->GetNbinsX(); x++)
  {
    Float_t value = gaus->Eval(inputDist->GetBinCenter(x));
    inputDist->SetBinContent(x, value);
    inputDistVector(x-1) = value;
  }

  TVectorD measuredDistIdealVector = matrix * inputDistVector;
  
  for (Int_t x=1; x<=measuredIdealDist->GetNbinsX(); x++)
    measuredIdealDist->SetBinContent(x, measuredDistIdealVector(x-1));

  measuredDist->FillRandom(measuredIdealDist, 10000);

  // fill error matrix before scaling
  TMatrixD covarianceMatrixMeasured(kSize, kSize);
  for (Int_t x=1; x<=unfolded->GetNbinsX(); x++)
    covarianceMatrixMeasured(x-1, x-1) = TMath::Sqrt(measuredDist->GetBinContent(x));

  TMatrixD covarianceMatrix = inverted * covarianceMatrixMeasured * inverted;
  //covarianceMatrix.Print();

  TVectorD measuredDistVector(kSize);
  for (Int_t x=1; x<=measuredDist->GetNbinsX(); x++)
    measuredDistVector(x-1) = measuredDist->GetBinContent(x);

  TVectorD unfoldedVector = inverted * measuredDistVector;
  for (Int_t x=1; x<=unfolded->GetNbinsX(); x++)
    unfolded->SetBinContent(x, unfoldedVector(x-1));

  TCanvas* canvas = new TCanvas("BlobelUnfoldingExample", "BlobelUnfoldingExample", 1200, 600);
  canvas->SetTopMargin(0.05);
  canvas->Divide(2, 1);

  canvas->cd(1);
  canvas->cd(1)->SetLeftMargin(0.15);
  canvas->cd(1)->SetRightMargin(0.05);
  canvas->cd(1)->SetTopMargin(0.05);
  gPad->SetGridx();
  gPad->SetGridy();
  measuredDist->GetYaxis()->SetRangeUser(-600, 2799);
  measuredDist->GetYaxis()->SetTitleOffset(1.9);
  measuredDist->SetStats(0);
  measuredDist->DrawCopy();
  gaus->Draw("SAME");

  canvas->cd(2);
  canvas->cd(2)->SetLeftMargin(0.15);
  canvas->cd(2)->SetRightMargin(0.05);
  canvas->cd(2)->SetTopMargin(0.05);
  gPad->SetGridx();
  gPad->SetGridy();
  unfolded->GetYaxis()->SetRangeUser(-600, 2799);
  unfolded->GetYaxis()->SetTitleOffset(1.9);
  unfolded->SetStats(0);
  unfolded->DrawCopy();
  gaus->Draw("SAME");

  canvas->SaveAs("BlobelUnfoldingExample.eps");
  
  return;
  
  // now unfold this with Bayesian
  loadlibs();
  
  // fill a multiplicity object
  mult = new AliMultiplicityCorrection("mult", "mult");
  for (Int_t x=0; x<kSize; x++)
  {
    mult->GetMultiplicityVtx(0)->SetBinContent(1, x+1, inputDistVector(x));
    mult->GetMultiplicityESD(0)->SetBinContent(1, x+1, measuredDistVector(x)*10000);
    for (Int_t y=0; y<kSize; y++)
      mult->GetCorrelation(0)->SetBinContent(1, x+1, y+1, matrix(x, y));
  }
  
  //mult->DrawHistograms();
  
  mult->SetRegularizationParameters(AliMultiplicityCorrection::kPol0, 0);
  //mult->SetCreateBigBin(kFALSE);
  mult->ApplyMinuitFit(0, kFALSE, AliMultiplicityCorrection::kTrVtx, kFALSE); //hist2->ProjectionY("mymchist"));
  
  //mult->ApplyBayesianMethod(0, kFALSE, AliMultiplicityCorrection::kTrVtx, 0, -1, 0, kFALSE);
  
  mult->DrawComparison("BlobelExample", 0, kFALSE, kTRUE, mult->GetMultiplicityVtx(0)->ProjectionY("mcmchist", 1, mult->GetMultiplicityVtx(0)->GetNbinsX()));
}

void TestWithDiagonalMatrix()
{
  const Int_t kSize = 20;

  TMatrixD matrix(kSize, kSize);
  for (Int_t x=0; x<kSize; x++)
    matrix(x, x) = 1;
 
  if (1)
  { 
  for (Int_t x=0; x<kSize; x++)
  {
    for (Int_t y=0; y<kSize; y++)
    {
      if (x == y)
      {
        if (x == 0 || x == kSize -1)
        {
          matrix(x, y) = 0.75;
        }
        else
          matrix(x, y) = 0.5;
      }
      else if (TMath::Abs(x - y) == 1)
      {
        matrix(x, y) = 0.25;
      }
    }
  }
  }

  //matrix.Print();

  TH1F* inputDist = new TH1F("inputDist", ";t;Entries", kSize, -0.5, (Float_t) kSize - 0.5);
  TVectorD inputDistVector(kSize);
  
  TH1F* measuredIdealDist = inputDist->Clone("measuredIdealDist");
  measuredIdealDist->SetTitle(";m;Entries");
  TH1F* measuredDist = measuredIdealDist->Clone("measuredDist");

  TF1* gaus = new TF1("func", "gaus(0)", -0.5, kSize);
  // norm: 1/(sqrt(2pi)sigma)
  gaus->SetParameters(10000 / sqrt(2 * TMath::Pi()) / ((Float_t) kSize / 8), (Float_t) kSize / 2, (Float_t) kSize / 8);
  //gaus->Print();

  for (Int_t x=1; x<=inputDist->GetNbinsX(); x++)
  {
    Float_t value = gaus->Eval(inputDist->GetBinCenter(x));
    inputDist->SetBinContent(x, value);
    inputDistVector(x-1) = value;
  }

  TVectorD measuredDistIdealVector = matrix * inputDistVector;
  
  for (Int_t x=1; x<=measuredIdealDist->GetNbinsX(); x++)
    measuredIdealDist->SetBinContent(x, measuredDistIdealVector(x-1));

  // randomize
  //measuredDist->FillRandom(measuredIdealDist, 10000);
  measuredDist = measuredIdealDist;
  measuredDist->Sumw2();
  
  for (Int_t x=0; x<kSize; x++)
    Printf("bin %d %.2f +- %.2f", x+1, measuredDist->GetBinContent(x+1), measuredDist->GetBinError(x+1));

  // now unfold this 
  loadlibs();
  
  // fill a multiplicity object
  mult = new AliMultiplicityCorrection("mult", "mult");
  for (Int_t x=0; x<kSize; x++)
  {
    mult->GetMultiplicityVtx(0)->SetBinContent(1, x+1, inputDistVector(x));
    mult->GetMultiplicityESD(0)->SetBinContent(1, x+1, measuredDist->GetBinContent(x+1));
    for (Int_t y=0; y<kSize; y++)
      mult->GetCorrelation(0)->SetBinContent(1, x+1, y+1, matrix(x, y));
  }
  
  //mult->DrawHistograms();
  
  AliUnfolding::SetNbins(20, 20);
  AliUnfolding::SetChi2Regularization(AliUnfolding::kNone, 0);
  AliUnfolding::SetChi2Regularization(AliUnfolding::kPol1, 1e-14);
  //mult->SetCreateBigBin(kFALSE);
  mult->ApplyMinuitFit(0, kFALSE, AliMultiplicityCorrection::kTrVtx, kFALSE); //hist2->ProjectionY("mymchist"));
  
  //mult->ApplyBayesianMethod(0, kFALSE, AliMultiplicityCorrection::kTrVtx, 0, -1, 0, kFALSE);
  
  mult->DrawComparison("TestWithDiagonalMatrix", 0, kFALSE, kTRUE, mult->GetMultiplicityVtx(0)->ProjectionY("mcmchist", 1, mult->GetMultiplicityVtx(0)->GetNbinsX()));
}


void E735Fit()
{
  TH1* fCurrentESD = new TH1F("mult", "mult", 501, -0.5, 500.5);
  fCurrentESD->Sumw2();

  // Open the input stream
  ifstream in;
  in.open("e735data.txt");

  while(in.good())
  {
    Float_t x, y, ye;
    in >> x >> y >> ye;

    //Printf("%f %f %f", x, y, ye);
    fCurrentESD->SetBinContent(fCurrentESD->FindBin(x), y);
    fCurrentESD->SetBinError(fCurrentESD->FindBin(x), ye);
  }

  in.close();

  //new TCanvas; fCurrentESD->DrawCopy(); gPad->SetLogy();

  fCurrentESD->Scale(1.0 / fCurrentESD->Integral());

  TF1* func = new TF1("nbd", "[0] * TMath::Binomial([2]+TMath::Nint(x)-1, [2]-1) * pow([1] / ([1]+[2]), TMath::Nint(x)) * pow(1 + [1]/[2], -[2])");
  func->SetParNames("scaling", "averagen", "k");
  func->SetParLimits(0, 0.001, fCurrentESD->GetMaximum() * 1000);
  func->SetParLimits(1, 0.001, 1000);
  func->SetParLimits(2, 0.001, 1000);
  func->SetParameters(fCurrentESD->GetMaximum() * 100, 10, 2);

  TF1* lognormal = new TF1("lognormal", "[0]*exp(-(log(x)-[1])^2/(2*[2]^2))/(x*[2]*TMath::Sqrt(2*TMath::Pi()))", 0.01, 500);
  lognormal->SetParNames("scaling", "mean", "sigma");
  lognormal->SetParameters(1, 1, 1);
  lognormal->SetParLimits(0, 0, 10);
  lognormal->SetParLimits(1, 0, 100);
  lognormal->SetParLimits(2, 1e-3, 10);

  TCanvas* canvas = new TCanvas("c1", "c1", 700, 400);
  fCurrentESD->SetStats(kFALSE);
  fCurrentESD->SetMarkerStyle(0);
  fCurrentESD->SetLineColor(1);
  fCurrentESD->GetYaxis()->SetTitleOffset(1.3);
  fCurrentESD->SetTitle(";true multiplicity (N);P_{N}");
  fCurrentESD->Draw("");
  fCurrentESD->GetXaxis()->SetRangeUser(0, 250);
  fCurrentESD->Fit(func, "0", "", 0, 150);
  func->SetRange(0, 250);
  func->Draw("SAME");
  printf("chi2 = %f\n", func->GetChisquare());

  fCurrentESD->Fit(lognormal, "0", "", 0.01, 150);
  lognormal->SetLineColor(2);
  lognormal->SetLineStyle(2);
  lognormal->SetRange(0, 250);
  lognormal->Draw("SAME");

  gPad->SetLogy();

  canvas->SaveAs("E735Fit.eps");
}

void DifferentSamples()
{
  loadlibs();

  Int_t n = 2;
  const char* filesChi2[] = { "chi2_100k_1.root", "chi2_100k_2.root" };
  const char* filesBayesian[] = { "bayesian_100k_1.root", "bayesian_100k_2.root" };

  TCanvas* canvas = new TCanvas("DifferentSamples", "DifferentSamples", 1200, 600);
  canvas->Divide(2, 1);
  
  legend = new TLegend(0.15, 0.7, 0.65, 0.9);
  legend->SetFillColor(0);
  legend->SetTextSize(0.04);

  for (Int_t i=0; i<n; i++)
  {
    AliMultiplicityCorrection* chi2 = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
    TFile::Open(filesChi2[i]);
    chi2->LoadHistograms("Multiplicity");

    AliMultiplicityCorrection* bayesian = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
    TFile::Open(filesBayesian[i]);
    bayesian->LoadHistograms("Multiplicity");
    
    chi2Hist = chi2->GetMultiplicityESDCorrected(etaRange);
    bayesianHist = bayesian->GetMultiplicityESDCorrected(etaRange);
    
    mc = chi2->GetMultiplicityVtx(etaRange)->ProjectionY("mymc", 1, 1);
    
    // normalize and divide
    chi2Hist->Scale(1.0 / chi2Hist->Integral(2, displayRange+1) * mc->Integral(2, displayRange));
    bayesianHist->Scale(1.0 / bayesianHist->Integral(2, displayRange+1) * mc->Integral(2, displayRange));
    
    chi2Hist->Divide(mc, chi2Hist);
    bayesianHist->Divide(mc, bayesianHist);
    
    canvas->cd(i+1);
    gPad->SetTopMargin(0.05);
    gPad->SetRightMargin(0.05);
    //gPad->SetLeftMargin(0.12);
    gPad->SetGridx();
    gPad->SetGridy(); 
    
    chi2Hist->GetXaxis()->SetRangeUser(0, displayRange);
    chi2Hist->GetYaxis()->SetTitleOffset(1.3);
    chi2Hist->SetStats(0);
    chi2Hist->SetTitle(Form(";%s;MC / unfolded", GetMultLabel()));
    chi2Hist->GetYaxis()->SetRangeUser(0.2, 1.8);
    chi2Hist->Draw("HIST");
    
    for (Int_t x=1; x<=bayesianHist->GetNbinsX(); x++)
      bayesianHist->SetBinError(x, 1e-6);
    
    bayesianHist->SetLineColor(2);
    bayesianHist->SetMarkerColor(2);
    bayesianHist->SetMarkerStyle(5);
    bayesianHist->Draw("HIST E SAME");
    
    if (i == 0)
    {
      legend->AddEntry(chi2Hist, "#chi^{2}-minimization", "L");
      legend->AddEntry(bayesianHist, "Bayesian unfolding", "LP");
    }
    legend->Draw();
  }
  
  canvas->SaveAs("DifferentSamples.eps");
}

void PileUp()
{
  loadlibs();
  
  AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open("multiplicityMC.root");
  hist2d = mult->GetMultiplicityMC(etaRange, AliMultiplicityCorrection::kINEL);
  mult1 = hist2d->ProjectionY("mult1", 1, hist2d->GetNbinsX());
  
  conv = (TH1*) mult1->Clone("conv");
  conv->Reset();
  
  mult1->Scale(1.0 / mult1->Integral());
  
  for (Int_t i=1; i<=mult1->GetNbinsX(); i++)
    for (Int_t j=1; j<=mult1->GetNbinsX(); j++)
      conv->Fill(mult1->GetBinCenter(i)+mult1->GetBinCenter(j), mult1->GetBinContent(i) * mult1->GetBinContent(j));
  
  conv->Scale(1.0 / conv->Integral());
  
  c = new TCanvas("c", "c", 800, 500);
  gPad->SetLogy();
  gPad->SetTopMargin(0.05);
  gPad->SetRightMargin(0.05);
  mult1->SetTitle(Form(";%s;Probability", GetMultLabel()));
  mult1->SetStats(0);
  gPad->SetGridx();
  gPad->SetGridy();
  mult1->Draw();
  mult1->GetYaxis()->SetRangeUser(1e-7, 2 * mult1->GetMaximum());
  mult1->GetXaxis()->SetRangeUser(0, displayRange);
  mult1->GetXaxis()->SetTitleOffset(1.15);
  conv->SetLineColor(2);
  conv->SetMarkerColor(2);
  conv->SetMarkerStyle(5);
  conv->DrawCopy("SAME P");
  
  conv->Scale(0.00058);
  conv->DrawCopy("SAME P");
  
  legend = new TLegend(0.73, 0.73, 0.93, 0.93);
  legend->SetFillColor(0);
  legend->SetTextSize(0.04);
  legend->AddEntry(mult1, "1 collision");
  legend->AddEntry(conv, "2 collisions", "P");
  legend->Draw();
  
  c->SaveAs("pileup.eps");

  new TCanvas;
  conv->Divide(mult1);
  conv->Draw();
}

void TestErrorDetermination(Int_t nRandomizations)
{
  TF1* func = new TF1("nbd", "exp(log([0]) + TMath::LnGamma([2]+x) - TMath::LnGamma([2]) - TMath::LnGamma(x+1) + log([1] / ([1]+[2])) * x + log(1.0 + [1]/[2]) * -[2])", 0, 100);
  func->SetParNames("scaling", "averagen", "k");
  func->SetParameters(1, 15, 2);
  
  TF1* func2 = new TF1("nbd2", "exp(log([0]) + TMath::LnGamma([2]+x) - TMath::LnGamma([2]) - TMath::LnGamma(x+1) + log([1] / ([1]+[2])) * x + log(1.0 + [1]/[2]) * -[2])", 0, 100);
  func2->SetParNames("scaling", "averagen", "k");
  func2->SetParLimits(0, 0.5, 2);
  func2->SetParLimits(1, 1, 50);
  func2->SetParLimits(2, 1, 10);
  func2->SetParameters(1, 15, 2);
  //func2->FixParameter(0, 1);
  
  //new TCanvas; func->Draw("L");
  
  hist1 = new TH1F("hist1", "", 100, 0.5, 100.5);
  hist2 = new TH1F("hist2", "", 100, 0.5, 100.5);
  hist1->Sumw2();
  
  TH1* params[3];
  params[0] = new TH1F("param_0", Form("param_%d", 0), 100, 0.95, 1.05);
  params[1] = new TH1F("param_1", Form("param_%d", 1), 100, 14, 16);
  params[2] = new TH1F("param_2", Form("param_%d", 2), 100, 1.8, 2.2);
  
  const Int_t nTries = 1000;
  for (Int_t i=0; i<nTries; i++)
  {
    hist1->Reset();
    
    if (nRandomizations == 1)
    {
      hist1->FillRandom("nbd", 10000);
    }
    else if (nRandomizations == 2)
    {
      hist2->Reset();
      hist2->FillRandom("nbd", 10000);
      hist1->FillRandom(hist2, 10000);
    }
    else if (nRandomizations == 3)
    {
      hist2->Reset();
      hist1->FillRandom("nbd", 10000);
      hist2->FillRandom(hist1, 10000);
      hist1->Reset();
      hist1->FillRandom(hist2, 10000);
    }
    else
      return;
  
    //new TCanvas; hist1->Draw();
  
    hist1->Scale(1.0 / hist1->Integral());
    hist1->Fit(func2, "NQ");
    hist1->Fit(func2, "NQ");
    for (Int_t j=0; j<3; j++)
      params[j]->Fill(func2->GetParameter(j));
  }
  
  for (Int_t j=0; j<3; j++)
  {
    new TCanvas; params[j]->Draw();
    params[j]->Fit("gaus");
    Printf("sigma of param %d if %f", j, ((TF1*) params[j]->FindObject("gaus"))->GetParameter(2));
  }
}

void DrawRawDistributions(const char* fileName = "multiplicityESD.root")
{
  loadlibs();

  AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open(fileName);
  
  c = new TCanvas("c", "c", 600, 600);
  
  dummy = new TH2F("dummy", ";measured multiplicity", 100, -0.5, 149.5, 100, 0.5, 4e4);
  dummy->SetStats(0);
  dummy->Draw();
  gPad->SetGridx();
  gPad->SetGridy();
  gPad->SetLogy();
  
  Int_t colors[] = { 1, 2, 4 };
  
  for (Int_t i=2; i>=0; i--)
  {
    hist = mult->GetMultiplicityESD(i)->ProjectionY();
    
    hist->SetLineColor(colors[i]);
    hist->DrawCopy("SAME");
  }
  
  
}

void FindUnfoldedLimit()
{
  loadlibs();
  
  AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open("multiplicityMC.root");
  AliMultiplicityCorrection* esd = AliMultiplicityCorrection::Open("multiplicityESD.root");
  
  TH1* hist = mult->GetCorrelation(etaRange);
  for (Int_t y=0; y<=hist->GetYaxis()->GetNbins()+1; ++y)
  {
    for (Int_t z=0; z<=hist->GetZaxis()->GetNbins()+1; ++z)
    {
      hist->SetBinContent(0, y, z, 0);
      hist->SetBinContent(hist->GetXaxis()->GetNbins()+1, y, z, 0);
    }
  }
  TH2* corr = (TH2*) ((TH3*) mult->GetCorrelation(etaRange))->Project3D("zy");

  TH1* esd_proj = esd->GetMultiplicityESD(etaRange)->ProjectionY("esd_proj", 1, esd->GetMultiplicityESD(etaRange)->GetNbinsX());
  //esd_proj = corr->ProjectionY("esd_proj", 1, corr->GetNbinsX());
  
  new TCanvas; corr->Draw("COLZ");
  new TCanvas; esd_proj->DrawCopy();
  
  TH1* percentage = (TH1*) (esd_proj->Clone("percentage"));
  percentage->SetTitle("percentage");
  percentage->Reset();
  
  for (Int_t i=1; i<=esd_proj->GetNbinsX(); i++)
    if (esd_proj->GetBinContent(i) > 0)
      esd_proj->SetBinContent(i, 1);
  
  Int_t limit = -1;
  for (Int_t i=1; i<=percentage->GetNbinsX(); i++)
  {
    TH1* binResponse = corr->ProjectionY("proj", i, i);
    if (binResponse->Integral() <= 0)
      continue;
    binResponse->Scale(1.0 / binResponse->Integral());
    binResponse->Multiply(esd_proj);
    //new TCanvas; binResponse->Draw();
    Float_t value = binResponse->Integral();
    percentage->SetBinContent(i, value);
    if (limit == -1 && value < 0.9)
      limit = percentage->GetXaxis()->GetBinCenter(i-1);
    //return;
  }
  
  Printf("Limit is %d", limit);
  
  new TCanvas; percentage->Draw();
  
  new TCanvas;
  mc = esd->GetMultiplicityVtx(etaRange)->ProjectionY("mc", 1, esd->GetMultiplicityVtx(etaRange)->GetNbinsX());
  mc->SetLineColor(2);
  mc->Draw("");
}
   
void FindUnfoldedLimitAll()
{
  loadlibs();
  for (etaRange = 0; etaRange <= 2; etaRange++)
    FindUnfoldedLimit();
}
   
void CompareUnfoldedWithMC()
{
  loadlibs();
  
  AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open("unfolded.root");

  //mult->GetMultiplicityESDCorrected(etaRange)->Scale(1.0 / mult->GetMultiplicityESDCorrected(etaRange)->Integral());
  mult->GetMultiplicityESDCorrected(etaRange)->SetTitle(";multiplicity;events");
  mult->GetMultiplicityESDCorrected(etaRange)->SetStats(0);
  mult->GetMultiplicityESDCorrected(etaRange)->Draw();
  //mcHist->Scale(1.0 / mcHist->Integral()); 
  mcHist = mult->GetMultiplicityVtx(etaRange)->ProjectionY("mymc", 1, 1);
  mcHist->SetLineColor(2);
  mcHist->Draw("SAME");
  gPad->SetLogy();
}

void PaperNumbers()
{
  const char* label[] = { "SD", "DD", "ND" };
  const char* files[] = { "multiplicity_syst_sd.root", "multiplicity_syst_dd.root", "multiplicity_syst_nd.root" };
  
  loadlibs();
  
  Printf("vertex reco");
  
  Float_t oneParticle[3];
  for (Int_t i=0; i<3; i++)
  {
    AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open(files[i]);
    
    eff = mult->GetEfficiency(2, AliMultiplicityCorrection::kMB);
    //eff = mult->GetTriggerEfficiency(2);
    
    oneParticle[i] = 100.0 * eff->GetBinContent(2);
    
    Printf("%s: %.2f", label[i], oneParticle[i]);
  }
  
  Float_t ua5_SD = 0.153;
  Float_t ua5_DD = 0.080;
  Float_t ua5_ND = 0.767;
  
  Float_t vtxINELUA5 = ua5_SD * oneParticle[0] + ua5_DD * oneParticle[1] + ua5_ND * oneParticle[2];
  Float_t vtxNSDUA5  = (ua5_DD * oneParticle[1] + ua5_ND * oneParticle[2]) / (ua5_DD + ua5_ND);
  
  Printf("INEL (UA5)  = %.1f", vtxINELUA5);
  Printf("NSD (UA5)  = %.1f", vtxNSDUA5);
  
  Printf("total for >= 2 charged tracks");
  
  AliMultiplicityCorrection* mult = AliMultiplicityCorrection::Open("multiplicity.root");
  
  vtx = mult->GetMultiplicityVtx(2)->ProjectionY("vtx", 1, mult->GetMultiplicityVtx(2)->GetNbinsX(), "e");
  all = mult->GetMultiplicityINEL(2)->ProjectionY("all", 1, mult->GetMultiplicityINEL(2)->GetNbinsX(), "e"); 
  
  Int_t begin = vtx->GetXaxis()->FindBin(2);
  Int_t end = vtx->GetNbinsX();
  
  Float_t above2 = vtx->Integral(begin, end) / all->Integral(begin, end);
  
  Printf("%.1f", 100.0 * above2);
}

void DrawRawEta()
{
  TFile::Open(measuredFile);
  
  Int_t colors[] = {1, 2, 4, 6, 7, 8, 9, 10};
  
  for (Int_t i=0; i<3; i++)
  {
    hist = dynamic_cast<TH1*> (gFile->Get(Form("fEta_%d", i)));
    
    hist->GetYaxis()->SetRangeUser(0, 8);
    hist->SetLineColor(colors[i]);
    hist->SetStats(kFALSE);
    hist->Draw((i == 0) ? "HIST" : "HIST SAME");
  }   
  
  gPad->SetGridx();
  gPad->SetGridy();
}

void CrossSectionUncertainties(Int_t xsectionID, Int_t eventType)
{
  const char* files[] = { "multiplicitySD.root", "multiplicityDD.root", "multiplicityND.root" };

  loadlibs();

  AliMultiplicityCorrection* data[3];

  Float_t ref_SD = -1;
  Float_t ref_DD = -1;
  Float_t ref_ND = -1;

  Float_t error_SD = -1;
  Float_t error_DD = -1;
  Float_t error_ND = -1;

  gROOT->ProcessLine(gSystem->ExpandPathName(".L $ALICE_ROOT/PWG0/dNdEta/drawSystematics.C"));
  GetRelativeFractions(xsectionID, ref_SD, ref_DD, ref_ND, error_SD, error_DD, error_ND);
  
  TH1* unc[9*3];
  TH1* unc2[9*3];
  const char* legendStrings[8];
  
  for (Int_t i=0; i<9; i++)
  {
    Float_t factorSD = 0;
    Float_t factorDD = 0;
    
    if (i > 0 && i < 3)
      factorSD = (i % 2 == 0) ? 1 : -1;
    else if (i >= 3 && i < 5)
      factorDD = (i % 2 == 0) ? 1 : -1;
    else if (i >= 5 && i < 9)
    {
      factorSD = ((i % 2 == 0) ? 1.0 : -1.0) / TMath::Sqrt(2);
      if (i == 5 || i == 6)
        factorDD = factorSD;
      else
        factorDD = -factorSD;
    }
    
    Float_t scalesSD = ref_SD + factorSD * error_SD;
    Float_t scalesDD = ref_DD + factorDD * error_DD;
    Float_t scalesND = 1.0 - scalesDD[i] - scalesSD[i];
    
    str = new TString;
    str->Form("Case %d: SD: %.2f DD: %.2f ND: %.2f", i, scalesSD, scalesDD, scalesND);
    Printf("%s", str->Data());
    if (i > 0)
      legendStrings[i-1] = str->Data();
  
    for (Int_t j=0; j<3; ++j)
    {
      TString name;
      name.Form("Multiplicity_%d", j);
  
      TFile::Open(files[j]);
      data[j] = new AliMultiplicityCorrection(name, name);
      data[j]->LoadHistograms("Multiplicity");
    }
    
    // calculating relative
    Float_t sd = data[0]->GetMultiplicityINEL(0)->Integral(0, data[0]->GetMultiplicityINEL(0)->GetNbinsX()+1);
    Float_t dd = data[1]->GetMultiplicityINEL(0)->Integral(0, data[1]->GetMultiplicityINEL(0)->GetNbinsX()+1);
    Float_t nd = data[2]->GetMultiplicityINEL(0)->Integral(0, data[2]->GetMultiplicityINEL(0)->GetNbinsX()+1);
    Float_t total = nd + dd + sd;
    
    nd /= total;
    sd /= total;
    dd /= total;
    
    Printf("Ratios in the correction map are: ND=%f, DD=%f, SD=%f", nd, dd, sd);
    
    Float_t ratio[3];
    ratio[0] = scalesSD / sd;
    ratio[1] = scalesDD / dd;
    ratio[2] = scalesND / nd;
    
    Printf("SD=%.2f, DD=%.2f, ND=%.2f", ratio[0], ratio[1], ratio[2]);
    
    TList list;
    for (Int_t k=0; k<3; ++k)
    {
      // modify x-section
      for (Int_t j=0; j<AliMultiplicityCorrection::kMCHists; j++)
      {
        data[k]->GetMultiplicityVtx(j)->Scale(ratio[k]);
        data[k]->GetMultiplicityMB(j)->Scale(ratio[k]);
        data[k]->GetMultiplicityINEL(j)->Scale(ratio[k]);
        data[k]->GetMultiplicityNSD(j)->Scale(ratio[k]);
      }
  
      if (k > 0)
        list.Add(data[k]);
    }
  
    printf("Case %d, %s: Entries in response matrix: SD: %.2f DD: %.2f ND: %.2f", xsectionID, data[0]->GetName(), data[0]->GetCorrelation(0)->Integral(), data[1]->GetCorrelation(0)->Integral(), data[2]->GetCorrelation(0)->Integral());
  
    data[0]->Merge(&list);
    data[0]->FixTriggerEfficiencies(20);
  
    Printf(" Total: %.2f", data[0]->GetCorrelation(0)->Integral());
  
    for (Int_t etaR = 0; etaR < 3; etaR++)
    {
      unc[i+(etaR*9)] = (TH1*) data[0]->GetTriggerEfficiency(etaR, eventType)->Clone(Form("eff_%d_%d", etaR, i));
      unc2[i+(etaR*9)] = (TH1*) data[0]->GetEfficiency(etaR, eventType)->Clone(Form("eff_%d_%d", etaR, i));
    }
  }
      
  file = TFile::Open(Form("systunc_fractions_%s.root", (eventType == 2) ? "inel" : "nsd"), "RECREATE");
  
  for (Int_t etaR = 0; etaR < 3; etaR++)
  {
    largestError1 = (TH1*) unc[0]->Clone(Form("fractions_trig_%d", etaR));
    largestError1->Reset();
    largestError2 = (TH1*) unc[0]->Clone(Form("fractions_trigvtx_%d", etaR));
    largestError2->Reset();
  
    etaRange = etaR; // correct labels in DrawRatio
    DrawRatio(unc[etaR*9],  8, unc+1+etaR*9,  Form("xsections_trig%d.png", etaR),    kFALSE, legendStrings, kFALSE, largestError1);
    DrawRatio(unc2[etaR*9], 8, unc2+1+etaR*9, Form("xsections_trigvtx%d.png", etaR), kFALSE, legendStrings, kFALSE, largestError2);
    
    largestError2->SetBinContent(1, largestError1->GetBinContent(1));
    
    largestError2->GetYaxis()->UnZoom();
    largestError2->Write();
    
    new TCanvas;
    largestError2->DrawCopy();
  }
  file->Close();
}

void PythiaPhojetUncertainties()
{
  PythiaPhojetUncertainties(900, 2);
  PythiaPhojetUncertainties(900, 3);
  PythiaPhojetUncertainties(2360, 2);
  PythiaPhojetUncertainties(2360, 3);
}

void PythiaPhojetUncertainties(Int_t energy, Int_t eventType)
{
  loadlibs();
  
  AliMultiplicityCorrection* mult[2];

  const char* trigger = "all";
  if (eventType == 3)
    trigger = "v0and";
    
  if (energy == 2360)
    trigger = "spdgfobits";

  if (energy == 7000)
    trigger = "all-onepart";
  
  if (energy == 900)
    TFile::Open(Form("LHC10a12_run10482X/%s/spd/multiplicityMC_xsection.root", trigger));
  else if (energy == 2360)
    TFile::Open(Form("LHC10a10_run105054_7/%s/spd/multiplicityMC_xsection.root", trigger));
  else
    TFile::Open(Form("LHC10b2_run114931/%s/spd/multiplicity.root", trigger));
  mult[0] = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult[0]->LoadHistograms("Multiplicity");
  
  if (energy == 900)
    TFile::Open(Form("LHC10a14_run10482X_Phojet/%s/spd/multiplicityMC_xsection.root", trigger));
  else if (energy == 2360)
    TFile::Open(Form("LHC10a15_run10505X_Phojet/%s/spd/multiplicityMC_xsection.root", trigger));
  else
    TFile::Open(Form("LHC10b1_run114931/%s/spd/multiplicity.root", trigger));
  mult[1] = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  mult[1]->LoadHistograms("Multiplicity");
  
  TH1* unc[6];
  TH1* unc2[6];
  
  for (Int_t i=0; i<2; i++)
  {
    mult[i]->FixTriggerEfficiencies(20);
    for (Int_t etaR = 0; etaR < 3; etaR++)
    {
      unc[i+(etaR*2)] = (TH1*) mult[i]->GetTriggerEfficiency(etaR, eventType)->Clone(Form("eff_%d_%d", etaR, i));
      unc2[i+(etaR*2)] = (TH1*) mult[i]->GetEfficiency(etaR, eventType)->Clone(Form("eff_%d_%d", etaR, i));
    }
  }
  
  file = TFile::Open(Form("systunc_pythiaphojet_%d_%s.root", energy, (eventType == 2) ? "inel" : "nsd"), "RECREATE");
  
  for (Int_t etaR = 0; etaR < 3; etaR++)
  {
    largestError1Low = (TH1*) unc[0]->Clone(Form("pythiaphojet_trig_%d_low", etaR));
    largestError1Low->Reset();
    largestError1High = (TH1*) largestError1Low->Clone(Form("pythiaphojet_trig_%d_high", etaR));
    largestError2Low  = (TH1*) largestError1Low->Clone(Form("pythiaphojet_trigvtx_%d_low", etaR));
    largestError2High = (TH1*) largestError1Low->Clone(Form("pythiaphojet_trigvtx_%d_high", etaR));
  
    DrawRatio(unc[etaR*2], 1, unc+1+etaR*2, Form("pythiaphojet_trig%d.png", etaR), kFALSE, 0, kFALSE, largestError1Low, largestError1High);
    DrawRatio(unc2[etaR*2], 1, unc2+1+etaR*2, Form("pythiaphojet_trigvtx%d.png", etaR), kFALSE, 0, kFALSE, largestError2Low, largestError2High);
    
    largestError2Low->SetBinContent(1, largestError1Low->GetBinContent(1));
    largestError2High->SetBinContent(1, largestError1High->GetBinContent(1));
    
    largestError2Low->GetYaxis()->UnZoom();
    largestError2High->GetYaxis()->UnZoom();
    largestError2Low->Write();
    largestError2High->Write();
    
    new TCanvas;
    largestError2Low->DrawCopy();
    
    new TCanvas;
    largestError2High->DrawCopy();
  }
  file->Close();
}

void CombinatoricsAsFunctionOfN(Int_t etaR)
{
  loadlibs();
  
  mult = AliMultiplicityCorrection::Open("multiplicityESD.root");
  
  //Float_t integratedCombinatorics[] = { 0.00062, 0.00074, 0.001 }; // 900 GeV
  Float_t integratedCombinatorics[] = { 7.5e-4, 1.1e-3, 1.2e-3 };   // 2.36 TeV
    
  multHist = mult->GetMultiplicityESD(etaR)->ProjectionY();
  multHist->Scale(1.0 / multHist->Integral());
  
  Float_t integral = 0;
  Float_t tracks = 0;
  for (Int_t i=1; i<= multHist->GetNbinsX(); i++)
  {
    Float_t x = multHist->GetXaxis()->GetBinCenter(i);
    integral += x*x * multHist->GetBinContent(i+1);
    tracks += x * multHist->GetBinContent(i+1);
    Printf("%f %f %f", x, multHist->GetBinContent(i+1), integral);
  }
    
  Printf("Integral is %f; %f", integral, integral / tracks);
  Printf("alpha is %e", integratedCombinatorics[etaR] / (integral / tracks));
}

void TryCombinatoricsCorrection(Float_t etaR, Float_t alpha)
{
  loadlibs();
  
  mult = AliMultiplicityCorrection::Open("multiplicity.root");
  
  multHist = mult->GetMultiplicityESD(etaR)->ProjectionY();
  
  target = (TH1*) multHist->Clone("target");
  target->Reset();
  
  Int_t totalTracks1 = 0;
  Int_t totalTracks2 = 0;
  
  for (Int_t i=1; i<=multHist->GetNbinsX(); i++)
  {
    for (Int_t j=0; j<multHist->GetBinContent(i); j++)
    {
      Int_t origTracks = (Int_t) multHist->GetXaxis()->GetBinCenter(i);
      tracks = origTracks;
      //tracks -= gRandom->Poisson(1.3e-4 * origTracks * origTracks);
      if (gRandom->Uniform() < alpha * origTracks * origTracks)
        tracks--;
      target->Fill(tracks);
      
      totalTracks1 += origTracks;
      totalTracks2 += tracks;
    }
  }
  
  new TCanvas; multHist->Draw(); target->Draw("SAME"); target->SetLineColor(2);

  Printf("%d %d %f %f", totalTracks1, totalTracks2, 1. - (Float_t) totalTracks2 / totalTracks1, 1. - target->GetMean() / multHist->GetMean());
}

void ApplyCombinatoricsCorrection()
{
  loadlibs();
  
  mult = AliMultiplicityCorrection::Open("multiplicity.root");
  
  fractionMC = new TF1("fractionMC", "[0]+[1]*x", 0, 200);
  fractionMC->SetParameters(0.0004832, 5.82e-5); // mariella's presentation 16.04.10
  
  fractionData = new TF1("fractionData", "[0]+[1]*x", 0, 200);
  fractionData->SetParameters(0.00052, 0.0001241); // mariella's presentation 16.04.10
  
  Int_t etaR = 1;
  esd = mult->GetMultiplicityESD(etaR);
  
  for (Int_t x=1; x<=esd->GetNbinsX(); x++)
  {
    for (Int_t y=2; y<=esd->GetNbinsY(); y++)
    {
      printf("Before: %f  %f ", esd->GetBinContent(x, y-1), esd->GetBinContent(x, y));
    
      Float_t n = esd->GetYaxis()->GetBinCenter(y);
      Int_t addComb = (fractionData->Eval(n) - fractionMC->Eval(n)) * n * esd->GetBinContent(x, y);
      
      // shift addComb down one bin
      esd->SetBinContent(x, y-1, esd->GetBinContent(x, y-1) + addComb);
      esd->SetBinContent(x, y,   esd->GetBinContent(x, y) - addComb);
      
      // recalc errors
      esd->SetBinError(x, y-1, TMath::Sqrt(esd->GetBinContent(x, y-1)));
      esd->SetBinError(x, y, TMath::Sqrt(esd->GetBinContent(x, y)));
      
      Printf("comb: %d; after: %f +- %f  %f +- %f", addComb, esd->GetBinContent(x, y-1), esd->GetBinError(x, y-1), esd->GetBinContent(x, y), esd->GetBinError(x, y));
    }
  }
  
  TFile::Open("out.root", "RECREATE");
  mult->SaveHistograms();
}
 plots.C:1
 plots.C:2
 plots.C:3
 plots.C:4
 plots.C:5
 plots.C:6
 plots.C:7
 plots.C:8
 plots.C:9
 plots.C:10
 plots.C:11
 plots.C:12
 plots.C:13
 plots.C:14
 plots.C:15
 plots.C:16
 plots.C:17
 plots.C:18
 plots.C:19
 plots.C:20
 plots.C:21
 plots.C:22
 plots.C:23
 plots.C:24
 plots.C:25
 plots.C:26
 plots.C:27
 plots.C:28
 plots.C:29
 plots.C:30
 plots.C:31
 plots.C:32
 plots.C:33
 plots.C:34
 plots.C:35
 plots.C:36
 plots.C:37
 plots.C:38
 plots.C:39
 plots.C:40
 plots.C:41
 plots.C:42
 plots.C:43
 plots.C:44
 plots.C:45
 plots.C:46
 plots.C:47
 plots.C:48
 plots.C:49
 plots.C:50
 plots.C:51
 plots.C:52
 plots.C:53
 plots.C:54
 plots.C:55
 plots.C:56
 plots.C:57
 plots.C:58
 plots.C:59
 plots.C:60
 plots.C:61
 plots.C:62
 plots.C:63
 plots.C:64
 plots.C:65
 plots.C:66
 plots.C:67
 plots.C:68
 plots.C:69
 plots.C:70
 plots.C:71
 plots.C:72
 plots.C:73
 plots.C:74
 plots.C:75
 plots.C:76
 plots.C:77
 plots.C:78
 plots.C:79
 plots.C:80
 plots.C:81
 plots.C:82
 plots.C:83
 plots.C:84
 plots.C:85
 plots.C:86
 plots.C:87
 plots.C:88
 plots.C:89
 plots.C:90
 plots.C:91
 plots.C:92
 plots.C:93
 plots.C:94
 plots.C:95
 plots.C:96
 plots.C:97
 plots.C:98
 plots.C:99
 plots.C:100
 plots.C:101
 plots.C:102
 plots.C:103
 plots.C:104
 plots.C:105
 plots.C:106
 plots.C:107
 plots.C:108
 plots.C:109
 plots.C:110
 plots.C:111
 plots.C:112
 plots.C:113
 plots.C:114
 plots.C:115
 plots.C:116
 plots.C:117
 plots.C:118
 plots.C:119
 plots.C:120
 plots.C:121
 plots.C:122
 plots.C:123
 plots.C:124
 plots.C:125
 plots.C:126
 plots.C:127
 plots.C:128
 plots.C:129
 plots.C:130
 plots.C:131
 plots.C:132
 plots.C:133
 plots.C:134
 plots.C:135
 plots.C:136
 plots.C:137
 plots.C:138
 plots.C:139
 plots.C:140
 plots.C:141
 plots.C:142
 plots.C:143
 plots.C:144
 plots.C:145
 plots.C:146
 plots.C:147
 plots.C:148
 plots.C:149
 plots.C:150
 plots.C:151
 plots.C:152
 plots.C:153
 plots.C:154
 plots.C:155
 plots.C:156
 plots.C:157
 plots.C:158
 plots.C:159
 plots.C:160
 plots.C:161
 plots.C:162
 plots.C:163
 plots.C:164
 plots.C:165
 plots.C:166
 plots.C:167
 plots.C:168
 plots.C:169
 plots.C:170
 plots.C:171
 plots.C:172
 plots.C:173
 plots.C:174
 plots.C:175
 plots.C:176
 plots.C:177
 plots.C:178
 plots.C:179
 plots.C:180
 plots.C:181
 plots.C:182
 plots.C:183
 plots.C:184
 plots.C:185
 plots.C:186
 plots.C:187
 plots.C:188
 plots.C:189
 plots.C:190
 plots.C:191
 plots.C:192
 plots.C:193
 plots.C:194
 plots.C:195
 plots.C:196
 plots.C:197
 plots.C:198
 plots.C:199
 plots.C:200
 plots.C:201
 plots.C:202
 plots.C:203
 plots.C:204
 plots.C:205
 plots.C:206
 plots.C:207
 plots.C:208
 plots.C:209
 plots.C:210
 plots.C:211
 plots.C:212
 plots.C:213
 plots.C:214
 plots.C:215
 plots.C:216
 plots.C:217
 plots.C:218
 plots.C:219
 plots.C:220
 plots.C:221
 plots.C:222
 plots.C:223
 plots.C:224
 plots.C:225
 plots.C:226
 plots.C:227
 plots.C:228
 plots.C:229
 plots.C:230
 plots.C:231
 plots.C:232
 plots.C:233
 plots.C:234
 plots.C:235
 plots.C:236
 plots.C:237
 plots.C:238
 plots.C:239
 plots.C:240
 plots.C:241
 plots.C:242
 plots.C:243
 plots.C:244
 plots.C:245
 plots.C:246
 plots.C:247
 plots.C:248
 plots.C:249
 plots.C:250
 plots.C:251
 plots.C:252
 plots.C:253
 plots.C:254
 plots.C:255
 plots.C:256
 plots.C:257
 plots.C:258
 plots.C:259
 plots.C:260
 plots.C:261
 plots.C:262
 plots.C:263
 plots.C:264
 plots.C:265
 plots.C:266
 plots.C:267
 plots.C:268
 plots.C:269
 plots.C:270
 plots.C:271
 plots.C:272
 plots.C:273
 plots.C:274
 plots.C:275
 plots.C:276
 plots.C:277
 plots.C:278
 plots.C:279
 plots.C:280
 plots.C:281
 plots.C:282
 plots.C:283
 plots.C:284
 plots.C:285
 plots.C:286
 plots.C:287
 plots.C:288
 plots.C:289
 plots.C:290
 plots.C:291
 plots.C:292
 plots.C:293
 plots.C:294
 plots.C:295
 plots.C:296
 plots.C:297
 plots.C:298
 plots.C:299
 plots.C:300
 plots.C:301
 plots.C:302
 plots.C:303
 plots.C:304
 plots.C:305
 plots.C:306
 plots.C:307
 plots.C:308
 plots.C:309
 plots.C:310
 plots.C:311
 plots.C:312
 plots.C:313
 plots.C:314
 plots.C:315
 plots.C:316
 plots.C:317
 plots.C:318
 plots.C:319
 plots.C:320
 plots.C:321
 plots.C:322
 plots.C:323
 plots.C:324
 plots.C:325
 plots.C:326
 plots.C:327
 plots.C:328
 plots.C:329
 plots.C:330
 plots.C:331
 plots.C:332
 plots.C:333
 plots.C:334
 plots.C:335
 plots.C:336
 plots.C:337
 plots.C:338
 plots.C:339
 plots.C:340
 plots.C:341
 plots.C:342
 plots.C:343
 plots.C:344
 plots.C:345
 plots.C:346
 plots.C:347
 plots.C:348
 plots.C:349
 plots.C:350
 plots.C:351
 plots.C:352
 plots.C:353
 plots.C:354
 plots.C:355
 plots.C:356
 plots.C:357
 plots.C:358
 plots.C:359
 plots.C:360
 plots.C:361
 plots.C:362
 plots.C:363
 plots.C:364
 plots.C:365
 plots.C:366
 plots.C:367
 plots.C:368
 plots.C:369
 plots.C:370
 plots.C:371
 plots.C:372
 plots.C:373
 plots.C:374
 plots.C:375
 plots.C:376
 plots.C:377
 plots.C:378
 plots.C:379
 plots.C:380
 plots.C:381
 plots.C:382
 plots.C:383
 plots.C:384
 plots.C:385
 plots.C:386
 plots.C:387
 plots.C:388
 plots.C:389
 plots.C:390
 plots.C:391
 plots.C:392
 plots.C:393
 plots.C:394
 plots.C:395
 plots.C:396
 plots.C:397
 plots.C:398
 plots.C:399
 plots.C:400
 plots.C:401
 plots.C:402
 plots.C:403
 plots.C:404
 plots.C:405
 plots.C:406
 plots.C:407
 plots.C:408
 plots.C:409
 plots.C:410
 plots.C:411
 plots.C:412
 plots.C:413
 plots.C:414
 plots.C:415
 plots.C:416
 plots.C:417
 plots.C:418
 plots.C:419
 plots.C:420
 plots.C:421
 plots.C:422
 plots.C:423
 plots.C:424
 plots.C:425
 plots.C:426
 plots.C:427
 plots.C:428
 plots.C:429
 plots.C:430
 plots.C:431
 plots.C:432
 plots.C:433
 plots.C:434
 plots.C:435
 plots.C:436
 plots.C:437
 plots.C:438
 plots.C:439
 plots.C:440
 plots.C:441
 plots.C:442
 plots.C:443
 plots.C:444
 plots.C:445
 plots.C:446
 plots.C:447
 plots.C:448
 plots.C:449
 plots.C:450
 plots.C:451
 plots.C:452
 plots.C:453
 plots.C:454
 plots.C:455
 plots.C:456
 plots.C:457
 plots.C:458
 plots.C:459
 plots.C:460
 plots.C:461
 plots.C:462
 plots.C:463
 plots.C:464
 plots.C:465
 plots.C:466
 plots.C:467
 plots.C:468
 plots.C:469
 plots.C:470
 plots.C:471
 plots.C:472
 plots.C:473
 plots.C:474
 plots.C:475
 plots.C:476
 plots.C:477
 plots.C:478
 plots.C:479
 plots.C:480
 plots.C:481
 plots.C:482
 plots.C:483
 plots.C:484
 plots.C:485
 plots.C:486
 plots.C:487
 plots.C:488
 plots.C:489
 plots.C:490
 plots.C:491
 plots.C:492
 plots.C:493
 plots.C:494
 plots.C:495
 plots.C:496
 plots.C:497
 plots.C:498
 plots.C:499
 plots.C:500
 plots.C:501
 plots.C:502
 plots.C:503
 plots.C:504
 plots.C:505
 plots.C:506
 plots.C:507
 plots.C:508
 plots.C:509
 plots.C:510
 plots.C:511
 plots.C:512
 plots.C:513
 plots.C:514
 plots.C:515
 plots.C:516
 plots.C:517
 plots.C:518
 plots.C:519
 plots.C:520
 plots.C:521
 plots.C:522
 plots.C:523
 plots.C:524
 plots.C:525
 plots.C:526
 plots.C:527
 plots.C:528
 plots.C:529
 plots.C:530
 plots.C:531
 plots.C:532
 plots.C:533
 plots.C:534
 plots.C:535
 plots.C:536
 plots.C:537
 plots.C:538
 plots.C:539
 plots.C:540
 plots.C:541
 plots.C:542
 plots.C:543
 plots.C:544
 plots.C:545
 plots.C:546
 plots.C:547
 plots.C:548
 plots.C:549
 plots.C:550
 plots.C:551
 plots.C:552
 plots.C:553
 plots.C:554
 plots.C:555
 plots.C:556
 plots.C:557
 plots.C:558
 plots.C:559
 plots.C:560
 plots.C:561
 plots.C:562
 plots.C:563
 plots.C:564
 plots.C:565
 plots.C:566
 plots.C:567
 plots.C:568
 plots.C:569
 plots.C:570
 plots.C:571
 plots.C:572
 plots.C:573
 plots.C:574
 plots.C:575
 plots.C:576
 plots.C:577
 plots.C:578
 plots.C:579
 plots.C:580
 plots.C:581
 plots.C:582
 plots.C:583
 plots.C:584
 plots.C:585
 plots.C:586
 plots.C:587
 plots.C:588
 plots.C:589
 plots.C:590
 plots.C:591
 plots.C:592
 plots.C:593
 plots.C:594
 plots.C:595
 plots.C:596
 plots.C:597
 plots.C:598
 plots.C:599
 plots.C:600
 plots.C:601
 plots.C:602
 plots.C:603
 plots.C:604
 plots.C:605
 plots.C:606
 plots.C:607
 plots.C:608
 plots.C:609
 plots.C:610
 plots.C:611
 plots.C:612
 plots.C:613
 plots.C:614
 plots.C:615
 plots.C:616
 plots.C:617
 plots.C:618
 plots.C:619
 plots.C:620
 plots.C:621
 plots.C:622
 plots.C:623
 plots.C:624
 plots.C:625
 plots.C:626
 plots.C:627
 plots.C:628
 plots.C:629
 plots.C:630
 plots.C:631
 plots.C:632
 plots.C:633
 plots.C:634
 plots.C:635
 plots.C:636
 plots.C:637
 plots.C:638
 plots.C:639
 plots.C:640
 plots.C:641
 plots.C:642
 plots.C:643
 plots.C:644
 plots.C:645
 plots.C:646
 plots.C:647
 plots.C:648
 plots.C:649
 plots.C:650
 plots.C:651
 plots.C:652
 plots.C:653
 plots.C:654
 plots.C:655
 plots.C:656
 plots.C:657
 plots.C:658
 plots.C:659
 plots.C:660
 plots.C:661
 plots.C:662
 plots.C:663
 plots.C:664
 plots.C:665
 plots.C:666
 plots.C:667
 plots.C:668
 plots.C:669
 plots.C:670
 plots.C:671
 plots.C:672
 plots.C:673
 plots.C:674
 plots.C:675
 plots.C:676
 plots.C:677
 plots.C:678
 plots.C:679
 plots.C:680
 plots.C:681
 plots.C:682
 plots.C:683
 plots.C:684
 plots.C:685
 plots.C:686
 plots.C:687
 plots.C:688
 plots.C:689
 plots.C:690
 plots.C:691
 plots.C:692
 plots.C:693
 plots.C:694
 plots.C:695
 plots.C:696
 plots.C:697
 plots.C:698
 plots.C:699
 plots.C:700
 plots.C:701
 plots.C:702
 plots.C:703
 plots.C:704
 plots.C:705
 plots.C:706
 plots.C:707
 plots.C:708
 plots.C:709
 plots.C:710
 plots.C:711
 plots.C:712
 plots.C:713
 plots.C:714
 plots.C:715
 plots.C:716
 plots.C:717
 plots.C:718
 plots.C:719
 plots.C:720
 plots.C:721
 plots.C:722
 plots.C:723
 plots.C:724
 plots.C:725
 plots.C:726
 plots.C:727
 plots.C:728
 plots.C:729
 plots.C:730
 plots.C:731
 plots.C:732
 plots.C:733
 plots.C:734
 plots.C:735
 plots.C:736
 plots.C:737
 plots.C:738
 plots.C:739
 plots.C:740
 plots.C:741
 plots.C:742
 plots.C:743
 plots.C:744
 plots.C:745
 plots.C:746
 plots.C:747
 plots.C:748
 plots.C:749
 plots.C:750
 plots.C:751
 plots.C:752
 plots.C:753
 plots.C:754
 plots.C:755
 plots.C:756
 plots.C:757
 plots.C:758
 plots.C:759
 plots.C:760
 plots.C:761
 plots.C:762
 plots.C:763
 plots.C:764
 plots.C:765
 plots.C:766
 plots.C:767
 plots.C:768
 plots.C:769
 plots.C:770
 plots.C:771
 plots.C:772
 plots.C:773
 plots.C:774
 plots.C:775
 plots.C:776
 plots.C:777
 plots.C:778
 plots.C:779
 plots.C:780
 plots.C:781
 plots.C:782
 plots.C:783
 plots.C:784
 plots.C:785
 plots.C:786
 plots.C:787
 plots.C:788
 plots.C:789
 plots.C:790
 plots.C:791
 plots.C:792
 plots.C:793
 plots.C:794
 plots.C:795
 plots.C:796
 plots.C:797
 plots.C:798
 plots.C:799
 plots.C:800
 plots.C:801
 plots.C:802
 plots.C:803
 plots.C:804
 plots.C:805
 plots.C:806
 plots.C:807
 plots.C:808
 plots.C:809
 plots.C:810
 plots.C:811
 plots.C:812
 plots.C:813
 plots.C:814
 plots.C:815
 plots.C:816
 plots.C:817
 plots.C:818
 plots.C:819
 plots.C:820
 plots.C:821
 plots.C:822
 plots.C:823
 plots.C:824
 plots.C:825
 plots.C:826
 plots.C:827
 plots.C:828
 plots.C:829
 plots.C:830
 plots.C:831
 plots.C:832
 plots.C:833
 plots.C:834
 plots.C:835
 plots.C:836
 plots.C:837
 plots.C:838
 plots.C:839
 plots.C:840
 plots.C:841
 plots.C:842
 plots.C:843
 plots.C:844
 plots.C:845
 plots.C:846
 plots.C:847
 plots.C:848
 plots.C:849
 plots.C:850
 plots.C:851
 plots.C:852
 plots.C:853
 plots.C:854
 plots.C:855
 plots.C:856
 plots.C:857
 plots.C:858
 plots.C:859
 plots.C:860
 plots.C:861
 plots.C:862
 plots.C:863
 plots.C:864
 plots.C:865
 plots.C:866
 plots.C:867
 plots.C:868
 plots.C:869
 plots.C:870
 plots.C:871
 plots.C:872
 plots.C:873
 plots.C:874
 plots.C:875
 plots.C:876
 plots.C:877
 plots.C:878
 plots.C:879
 plots.C:880
 plots.C:881
 plots.C:882
 plots.C:883
 plots.C:884
 plots.C:885
 plots.C:886
 plots.C:887
 plots.C:888
 plots.C:889
 plots.C:890
 plots.C:891
 plots.C:892
 plots.C:893
 plots.C:894
 plots.C:895
 plots.C:896
 plots.C:897
 plots.C:898
 plots.C:899
 plots.C:900
 plots.C:901
 plots.C:902
 plots.C:903
 plots.C:904
 plots.C:905
 plots.C:906
 plots.C:907
 plots.C:908
 plots.C:909
 plots.C:910
 plots.C:911
 plots.C:912
 plots.C:913
 plots.C:914
 plots.C:915
 plots.C:916
 plots.C:917
 plots.C:918
 plots.C:919
 plots.C:920
 plots.C:921
 plots.C:922
 plots.C:923
 plots.C:924
 plots.C:925
 plots.C:926
 plots.C:927
 plots.C:928
 plots.C:929
 plots.C:930
 plots.C:931
 plots.C:932
 plots.C:933
 plots.C:934
 plots.C:935
 plots.C:936
 plots.C:937
 plots.C:938
 plots.C:939
 plots.C:940
 plots.C:941
 plots.C:942
 plots.C:943
 plots.C:944
 plots.C:945
 plots.C:946
 plots.C:947
 plots.C:948
 plots.C:949
 plots.C:950
 plots.C:951
 plots.C:952
 plots.C:953
 plots.C:954
 plots.C:955
 plots.C:956
 plots.C:957
 plots.C:958
 plots.C:959
 plots.C:960
 plots.C:961
 plots.C:962
 plots.C:963
 plots.C:964
 plots.C:965
 plots.C:966
 plots.C:967
 plots.C:968
 plots.C:969
 plots.C:970
 plots.C:971
 plots.C:972
 plots.C:973
 plots.C:974
 plots.C:975
 plots.C:976
 plots.C:977
 plots.C:978
 plots.C:979
 plots.C:980
 plots.C:981
 plots.C:982
 plots.C:983
 plots.C:984
 plots.C:985
 plots.C:986
 plots.C:987
 plots.C:988
 plots.C:989
 plots.C:990
 plots.C:991
 plots.C:992
 plots.C:993
 plots.C:994
 plots.C:995
 plots.C:996
 plots.C:997
 plots.C:998
 plots.C:999
 plots.C:1000
 plots.C:1001
 plots.C:1002
 plots.C:1003
 plots.C:1004
 plots.C:1005
 plots.C:1006
 plots.C:1007
 plots.C:1008
 plots.C:1009
 plots.C:1010
 plots.C:1011
 plots.C:1012
 plots.C:1013
 plots.C:1014
 plots.C:1015
 plots.C:1016
 plots.C:1017
 plots.C:1018
 plots.C:1019
 plots.C:1020
 plots.C:1021
 plots.C:1022
 plots.C:1023
 plots.C:1024
 plots.C:1025
 plots.C:1026
 plots.C:1027
 plots.C:1028
 plots.C:1029
 plots.C:1030
 plots.C:1031
 plots.C:1032
 plots.C:1033
 plots.C:1034
 plots.C:1035
 plots.C:1036
 plots.C:1037
 plots.C:1038
 plots.C:1039
 plots.C:1040
 plots.C:1041
 plots.C:1042
 plots.C:1043
 plots.C:1044
 plots.C:1045
 plots.C:1046
 plots.C:1047
 plots.C:1048
 plots.C:1049
 plots.C:1050
 plots.C:1051
 plots.C:1052
 plots.C:1053
 plots.C:1054
 plots.C:1055
 plots.C:1056
 plots.C:1057
 plots.C:1058
 plots.C:1059
 plots.C:1060
 plots.C:1061
 plots.C:1062
 plots.C:1063
 plots.C:1064
 plots.C:1065
 plots.C:1066
 plots.C:1067
 plots.C:1068
 plots.C:1069
 plots.C:1070
 plots.C:1071
 plots.C:1072
 plots.C:1073
 plots.C:1074
 plots.C:1075
 plots.C:1076
 plots.C:1077
 plots.C:1078
 plots.C:1079
 plots.C:1080
 plots.C:1081
 plots.C:1082
 plots.C:1083
 plots.C:1084
 plots.C:1085
 plots.C:1086
 plots.C:1087
 plots.C:1088
 plots.C:1089
 plots.C:1090
 plots.C:1091
 plots.C:1092
 plots.C:1093
 plots.C:1094
 plots.C:1095
 plots.C:1096
 plots.C:1097
 plots.C:1098
 plots.C:1099
 plots.C:1100
 plots.C:1101
 plots.C:1102
 plots.C:1103
 plots.C:1104
 plots.C:1105
 plots.C:1106
 plots.C:1107
 plots.C:1108
 plots.C:1109
 plots.C:1110
 plots.C:1111
 plots.C:1112
 plots.C:1113
 plots.C:1114
 plots.C:1115
 plots.C:1116
 plots.C:1117
 plots.C:1118
 plots.C:1119
 plots.C:1120
 plots.C:1121
 plots.C:1122
 plots.C:1123
 plots.C:1124
 plots.C:1125
 plots.C:1126
 plots.C:1127
 plots.C:1128
 plots.C:1129
 plots.C:1130
 plots.C:1131
 plots.C:1132
 plots.C:1133
 plots.C:1134
 plots.C:1135
 plots.C:1136
 plots.C:1137
 plots.C:1138
 plots.C:1139
 plots.C:1140
 plots.C:1141
 plots.C:1142
 plots.C:1143
 plots.C:1144
 plots.C:1145
 plots.C:1146
 plots.C:1147
 plots.C:1148
 plots.C:1149
 plots.C:1150
 plots.C:1151
 plots.C:1152
 plots.C:1153
 plots.C:1154
 plots.C:1155
 plots.C:1156
 plots.C:1157
 plots.C:1158
 plots.C:1159
 plots.C:1160
 plots.C:1161
 plots.C:1162
 plots.C:1163
 plots.C:1164
 plots.C:1165
 plots.C:1166
 plots.C:1167
 plots.C:1168
 plots.C:1169
 plots.C:1170
 plots.C:1171
 plots.C:1172
 plots.C:1173
 plots.C:1174
 plots.C:1175
 plots.C:1176
 plots.C:1177
 plots.C:1178
 plots.C:1179
 plots.C:1180
 plots.C:1181
 plots.C:1182
 plots.C:1183
 plots.C:1184
 plots.C:1185
 plots.C:1186
 plots.C:1187
 plots.C:1188
 plots.C:1189
 plots.C:1190
 plots.C:1191
 plots.C:1192
 plots.C:1193
 plots.C:1194
 plots.C:1195
 plots.C:1196
 plots.C:1197
 plots.C:1198
 plots.C:1199
 plots.C:1200
 plots.C:1201
 plots.C:1202
 plots.C:1203
 plots.C:1204
 plots.C:1205
 plots.C:1206
 plots.C:1207
 plots.C:1208
 plots.C:1209
 plots.C:1210
 plots.C:1211
 plots.C:1212
 plots.C:1213
 plots.C:1214
 plots.C:1215
 plots.C:1216
 plots.C:1217
 plots.C:1218
 plots.C:1219
 plots.C:1220
 plots.C:1221
 plots.C:1222
 plots.C:1223
 plots.C:1224
 plots.C:1225
 plots.C:1226
 plots.C:1227
 plots.C:1228
 plots.C:1229
 plots.C:1230
 plots.C:1231
 plots.C:1232
 plots.C:1233
 plots.C:1234
 plots.C:1235
 plots.C:1236
 plots.C:1237
 plots.C:1238
 plots.C:1239
 plots.C:1240
 plots.C:1241
 plots.C:1242
 plots.C:1243
 plots.C:1244
 plots.C:1245
 plots.C:1246
 plots.C:1247
 plots.C:1248
 plots.C:1249
 plots.C:1250
 plots.C:1251
 plots.C:1252
 plots.C:1253
 plots.C:1254
 plots.C:1255
 plots.C:1256
 plots.C:1257
 plots.C:1258
 plots.C:1259
 plots.C:1260
 plots.C:1261
 plots.C:1262
 plots.C:1263
 plots.C:1264
 plots.C:1265
 plots.C:1266
 plots.C:1267
 plots.C:1268
 plots.C:1269
 plots.C:1270
 plots.C:1271
 plots.C:1272
 plots.C:1273
 plots.C:1274
 plots.C:1275
 plots.C:1276
 plots.C:1277
 plots.C:1278
 plots.C:1279
 plots.C:1280
 plots.C:1281
 plots.C:1282
 plots.C:1283
 plots.C:1284
 plots.C:1285
 plots.C:1286
 plots.C:1287
 plots.C:1288
 plots.C:1289
 plots.C:1290
 plots.C:1291
 plots.C:1292
 plots.C:1293
 plots.C:1294
 plots.C:1295
 plots.C:1296
 plots.C:1297
 plots.C:1298
 plots.C:1299
 plots.C:1300
 plots.C:1301
 plots.C:1302
 plots.C:1303
 plots.C:1304
 plots.C:1305
 plots.C:1306
 plots.C:1307
 plots.C:1308
 plots.C:1309
 plots.C:1310
 plots.C:1311
 plots.C:1312
 plots.C:1313
 plots.C:1314
 plots.C:1315
 plots.C:1316
 plots.C:1317
 plots.C:1318
 plots.C:1319
 plots.C:1320
 plots.C:1321
 plots.C:1322
 plots.C:1323
 plots.C:1324
 plots.C:1325
 plots.C:1326
 plots.C:1327
 plots.C:1328
 plots.C:1329
 plots.C:1330
 plots.C:1331
 plots.C:1332
 plots.C:1333
 plots.C:1334
 plots.C:1335
 plots.C:1336
 plots.C:1337
 plots.C:1338
 plots.C:1339
 plots.C:1340
 plots.C:1341
 plots.C:1342
 plots.C:1343
 plots.C:1344
 plots.C:1345
 plots.C:1346
 plots.C:1347
 plots.C:1348
 plots.C:1349
 plots.C:1350
 plots.C:1351
 plots.C:1352
 plots.C:1353
 plots.C:1354
 plots.C:1355
 plots.C:1356
 plots.C:1357
 plots.C:1358
 plots.C:1359
 plots.C:1360
 plots.C:1361
 plots.C:1362
 plots.C:1363
 plots.C:1364
 plots.C:1365
 plots.C:1366
 plots.C:1367
 plots.C:1368
 plots.C:1369
 plots.C:1370
 plots.C:1371
 plots.C:1372
 plots.C:1373
 plots.C:1374
 plots.C:1375
 plots.C:1376
 plots.C:1377
 plots.C:1378
 plots.C:1379
 plots.C:1380
 plots.C:1381
 plots.C:1382
 plots.C:1383
 plots.C:1384
 plots.C:1385
 plots.C:1386
 plots.C:1387
 plots.C:1388
 plots.C:1389
 plots.C:1390
 plots.C:1391
 plots.C:1392
 plots.C:1393
 plots.C:1394
 plots.C:1395
 plots.C:1396
 plots.C:1397
 plots.C:1398
 plots.C:1399
 plots.C:1400
 plots.C:1401
 plots.C:1402
 plots.C:1403
 plots.C:1404
 plots.C:1405
 plots.C:1406
 plots.C:1407
 plots.C:1408
 plots.C:1409
 plots.C:1410
 plots.C:1411
 plots.C:1412
 plots.C:1413
 plots.C:1414
 plots.C:1415
 plots.C:1416
 plots.C:1417
 plots.C:1418
 plots.C:1419
 plots.C:1420
 plots.C:1421
 plots.C:1422
 plots.C:1423
 plots.C:1424
 plots.C:1425
 plots.C:1426
 plots.C:1427
 plots.C:1428
 plots.C:1429
 plots.C:1430
 plots.C:1431
 plots.C:1432
 plots.C:1433
 plots.C:1434
 plots.C:1435
 plots.C:1436
 plots.C:1437
 plots.C:1438
 plots.C:1439
 plots.C:1440
 plots.C:1441
 plots.C:1442
 plots.C:1443
 plots.C:1444
 plots.C:1445
 plots.C:1446
 plots.C:1447
 plots.C:1448
 plots.C:1449
 plots.C:1450
 plots.C:1451
 plots.C:1452
 plots.C:1453
 plots.C:1454
 plots.C:1455
 plots.C:1456
 plots.C:1457
 plots.C:1458
 plots.C:1459
 plots.C:1460
 plots.C:1461
 plots.C:1462
 plots.C:1463
 plots.C:1464
 plots.C:1465
 plots.C:1466
 plots.C:1467
 plots.C:1468
 plots.C:1469
 plots.C:1470
 plots.C:1471
 plots.C:1472
 plots.C:1473
 plots.C:1474
 plots.C:1475
 plots.C:1476
 plots.C:1477
 plots.C:1478
 plots.C:1479
 plots.C:1480
 plots.C:1481
 plots.C:1482
 plots.C:1483
 plots.C:1484
 plots.C:1485
 plots.C:1486
 plots.C:1487
 plots.C:1488
 plots.C:1489
 plots.C:1490
 plots.C:1491
 plots.C:1492
 plots.C:1493
 plots.C:1494
 plots.C:1495
 plots.C:1496
 plots.C:1497
 plots.C:1498
 plots.C:1499
 plots.C:1500
 plots.C:1501
 plots.C:1502
 plots.C:1503
 plots.C:1504
 plots.C:1505
 plots.C:1506
 plots.C:1507
 plots.C:1508
 plots.C:1509
 plots.C:1510
 plots.C:1511
 plots.C:1512
 plots.C:1513
 plots.C:1514
 plots.C:1515
 plots.C:1516
 plots.C:1517
 plots.C:1518
 plots.C:1519
 plots.C:1520
 plots.C:1521
 plots.C:1522
 plots.C:1523
 plots.C:1524
 plots.C:1525
 plots.C:1526
 plots.C:1527
 plots.C:1528
 plots.C:1529
 plots.C:1530
 plots.C:1531
 plots.C:1532
 plots.C:1533
 plots.C:1534
 plots.C:1535
 plots.C:1536
 plots.C:1537
 plots.C:1538
 plots.C:1539
 plots.C:1540
 plots.C:1541
 plots.C:1542
 plots.C:1543
 plots.C:1544
 plots.C:1545
 plots.C:1546
 plots.C:1547
 plots.C:1548
 plots.C:1549
 plots.C:1550
 plots.C:1551
 plots.C:1552
 plots.C:1553
 plots.C:1554
 plots.C:1555
 plots.C:1556
 plots.C:1557
 plots.C:1558
 plots.C:1559
 plots.C:1560
 plots.C:1561
 plots.C:1562
 plots.C:1563
 plots.C:1564
 plots.C:1565
 plots.C:1566
 plots.C:1567
 plots.C:1568
 plots.C:1569
 plots.C:1570
 plots.C:1571
 plots.C:1572
 plots.C:1573
 plots.C:1574
 plots.C:1575
 plots.C:1576
 plots.C:1577
 plots.C:1578
 plots.C:1579
 plots.C:1580
 plots.C:1581
 plots.C:1582
 plots.C:1583
 plots.C:1584
 plots.C:1585
 plots.C:1586
 plots.C:1587
 plots.C:1588
 plots.C:1589
 plots.C:1590
 plots.C:1591
 plots.C:1592
 plots.C:1593
 plots.C:1594
 plots.C:1595
 plots.C:1596
 plots.C:1597
 plots.C:1598
 plots.C:1599
 plots.C:1600
 plots.C:1601
 plots.C:1602
 plots.C:1603
 plots.C:1604
 plots.C:1605
 plots.C:1606
 plots.C:1607
 plots.C:1608
 plots.C:1609
 plots.C:1610
 plots.C:1611
 plots.C:1612
 plots.C:1613
 plots.C:1614
 plots.C:1615
 plots.C:1616
 plots.C:1617
 plots.C:1618
 plots.C:1619
 plots.C:1620
 plots.C:1621
 plots.C:1622
 plots.C:1623
 plots.C:1624
 plots.C:1625
 plots.C:1626
 plots.C:1627
 plots.C:1628
 plots.C:1629
 plots.C:1630
 plots.C:1631
 plots.C:1632
 plots.C:1633
 plots.C:1634
 plots.C:1635
 plots.C:1636
 plots.C:1637
 plots.C:1638
 plots.C:1639
 plots.C:1640
 plots.C:1641
 plots.C:1642
 plots.C:1643
 plots.C:1644
 plots.C:1645
 plots.C:1646
 plots.C:1647
 plots.C:1648
 plots.C:1649
 plots.C:1650
 plots.C:1651
 plots.C:1652
 plots.C:1653
 plots.C:1654
 plots.C:1655
 plots.C:1656
 plots.C:1657
 plots.C:1658
 plots.C:1659
 plots.C:1660
 plots.C:1661
 plots.C:1662
 plots.C:1663
 plots.C:1664
 plots.C:1665
 plots.C:1666
 plots.C:1667
 plots.C:1668
 plots.C:1669
 plots.C:1670
 plots.C:1671
 plots.C:1672
 plots.C:1673
 plots.C:1674
 plots.C:1675
 plots.C:1676
 plots.C:1677
 plots.C:1678
 plots.C:1679
 plots.C:1680
 plots.C:1681
 plots.C:1682
 plots.C:1683
 plots.C:1684
 plots.C:1685
 plots.C:1686
 plots.C:1687
 plots.C:1688
 plots.C:1689
 plots.C:1690
 plots.C:1691
 plots.C:1692
 plots.C:1693
 plots.C:1694
 plots.C:1695
 plots.C:1696
 plots.C:1697
 plots.C:1698
 plots.C:1699
 plots.C:1700
 plots.C:1701
 plots.C:1702
 plots.C:1703
 plots.C:1704
 plots.C:1705
 plots.C:1706
 plots.C:1707
 plots.C:1708
 plots.C:1709
 plots.C:1710
 plots.C:1711
 plots.C:1712
 plots.C:1713
 plots.C:1714
 plots.C:1715
 plots.C:1716
 plots.C:1717
 plots.C:1718
 plots.C:1719
 plots.C:1720
 plots.C:1721
 plots.C:1722
 plots.C:1723
 plots.C:1724
 plots.C:1725
 plots.C:1726
 plots.C:1727
 plots.C:1728
 plots.C:1729
 plots.C:1730
 plots.C:1731
 plots.C:1732
 plots.C:1733
 plots.C:1734
 plots.C:1735
 plots.C:1736
 plots.C:1737
 plots.C:1738
 plots.C:1739
 plots.C:1740
 plots.C:1741
 plots.C:1742
 plots.C:1743
 plots.C:1744
 plots.C:1745
 plots.C:1746
 plots.C:1747
 plots.C:1748
 plots.C:1749
 plots.C:1750
 plots.C:1751
 plots.C:1752
 plots.C:1753
 plots.C:1754
 plots.C:1755
 plots.C:1756
 plots.C:1757
 plots.C:1758
 plots.C:1759
 plots.C:1760
 plots.C:1761
 plots.C:1762
 plots.C:1763
 plots.C:1764
 plots.C:1765
 plots.C:1766
 plots.C:1767
 plots.C:1768
 plots.C:1769
 plots.C:1770
 plots.C:1771
 plots.C:1772
 plots.C:1773
 plots.C:1774
 plots.C:1775
 plots.C:1776
 plots.C:1777
 plots.C:1778
 plots.C:1779
 plots.C:1780
 plots.C:1781
 plots.C:1782
 plots.C:1783
 plots.C:1784
 plots.C:1785
 plots.C:1786
 plots.C:1787
 plots.C:1788
 plots.C:1789
 plots.C:1790
 plots.C:1791
 plots.C:1792
 plots.C:1793
 plots.C:1794
 plots.C:1795
 plots.C:1796
 plots.C:1797
 plots.C:1798
 plots.C:1799
 plots.C:1800
 plots.C:1801
 plots.C:1802
 plots.C:1803
 plots.C:1804
 plots.C:1805
 plots.C:1806
 plots.C:1807
 plots.C:1808
 plots.C:1809
 plots.C:1810
 plots.C:1811
 plots.C:1812
 plots.C:1813
 plots.C:1814
 plots.C:1815
 plots.C:1816
 plots.C:1817
 plots.C:1818
 plots.C:1819
 plots.C:1820
 plots.C:1821
 plots.C:1822
 plots.C:1823
 plots.C:1824
 plots.C:1825
 plots.C:1826
 plots.C:1827
 plots.C:1828
 plots.C:1829
 plots.C:1830
 plots.C:1831
 plots.C:1832
 plots.C:1833
 plots.C:1834
 plots.C:1835
 plots.C:1836
 plots.C:1837
 plots.C:1838
 plots.C:1839
 plots.C:1840
 plots.C:1841
 plots.C:1842
 plots.C:1843
 plots.C:1844
 plots.C:1845
 plots.C:1846
 plots.C:1847
 plots.C:1848
 plots.C:1849
 plots.C:1850
 plots.C:1851
 plots.C:1852
 plots.C:1853
 plots.C:1854
 plots.C:1855
 plots.C:1856
 plots.C:1857
 plots.C:1858
 plots.C:1859
 plots.C:1860
 plots.C:1861
 plots.C:1862
 plots.C:1863
 plots.C:1864
 plots.C:1865
 plots.C:1866
 plots.C:1867
 plots.C:1868
 plots.C:1869
 plots.C:1870
 plots.C:1871
 plots.C:1872
 plots.C:1873
 plots.C:1874
 plots.C:1875
 plots.C:1876
 plots.C:1877
 plots.C:1878
 plots.C:1879
 plots.C:1880
 plots.C:1881
 plots.C:1882
 plots.C:1883
 plots.C:1884
 plots.C:1885
 plots.C:1886
 plots.C:1887
 plots.C:1888
 plots.C:1889
 plots.C:1890
 plots.C:1891
 plots.C:1892
 plots.C:1893
 plots.C:1894
 plots.C:1895
 plots.C:1896
 plots.C:1897
 plots.C:1898
 plots.C:1899
 plots.C:1900
 plots.C:1901
 plots.C:1902
 plots.C:1903
 plots.C:1904
 plots.C:1905
 plots.C:1906
 plots.C:1907
 plots.C:1908
 plots.C:1909
 plots.C:1910
 plots.C:1911
 plots.C:1912
 plots.C:1913
 plots.C:1914
 plots.C:1915
 plots.C:1916
 plots.C:1917
 plots.C:1918
 plots.C:1919
 plots.C:1920
 plots.C:1921
 plots.C:1922
 plots.C:1923
 plots.C:1924
 plots.C:1925
 plots.C:1926
 plots.C:1927
 plots.C:1928
 plots.C:1929
 plots.C:1930
 plots.C:1931
 plots.C:1932
 plots.C:1933
 plots.C:1934
 plots.C:1935
 plots.C:1936
 plots.C:1937
 plots.C:1938
 plots.C:1939
 plots.C:1940
 plots.C:1941
 plots.C:1942
 plots.C:1943
 plots.C:1944
 plots.C:1945
 plots.C:1946
 plots.C:1947
 plots.C:1948
 plots.C:1949
 plots.C:1950
 plots.C:1951
 plots.C:1952
 plots.C:1953
 plots.C:1954
 plots.C:1955
 plots.C:1956
 plots.C:1957
 plots.C:1958
 plots.C:1959
 plots.C:1960
 plots.C:1961
 plots.C:1962
 plots.C:1963
 plots.C:1964
 plots.C:1965
 plots.C:1966
 plots.C:1967
 plots.C:1968
 plots.C:1969
 plots.C:1970
 plots.C:1971
 plots.C:1972
 plots.C:1973
 plots.C:1974
 plots.C:1975
 plots.C:1976
 plots.C:1977
 plots.C:1978
 plots.C:1979
 plots.C:1980
 plots.C:1981
 plots.C:1982
 plots.C:1983
 plots.C:1984
 plots.C:1985
 plots.C:1986
 plots.C:1987
 plots.C:1988
 plots.C:1989
 plots.C:1990
 plots.C:1991
 plots.C:1992
 plots.C:1993
 plots.C:1994
 plots.C:1995
 plots.C:1996
 plots.C:1997
 plots.C:1998
 plots.C:1999
 plots.C:2000
 plots.C:2001
 plots.C:2002
 plots.C:2003
 plots.C:2004
 plots.C:2005
 plots.C:2006
 plots.C:2007
 plots.C:2008
 plots.C:2009
 plots.C:2010
 plots.C:2011
 plots.C:2012
 plots.C:2013
 plots.C:2014
 plots.C:2015
 plots.C:2016
 plots.C:2017
 plots.C:2018
 plots.C:2019
 plots.C:2020
 plots.C:2021
 plots.C:2022
 plots.C:2023
 plots.C:2024
 plots.C:2025
 plots.C:2026
 plots.C:2027
 plots.C:2028
 plots.C:2029
 plots.C:2030
 plots.C:2031
 plots.C:2032
 plots.C:2033
 plots.C:2034
 plots.C:2035
 plots.C:2036
 plots.C:2037
 plots.C:2038
 plots.C:2039
 plots.C:2040
 plots.C:2041
 plots.C:2042
 plots.C:2043
 plots.C:2044
 plots.C:2045
 plots.C:2046
 plots.C:2047
 plots.C:2048
 plots.C:2049
 plots.C:2050
 plots.C:2051
 plots.C:2052
 plots.C:2053
 plots.C:2054
 plots.C:2055
 plots.C:2056
 plots.C:2057
 plots.C:2058
 plots.C:2059
 plots.C:2060
 plots.C:2061
 plots.C:2062
 plots.C:2063
 plots.C:2064
 plots.C:2065
 plots.C:2066
 plots.C:2067
 plots.C:2068
 plots.C:2069
 plots.C:2070
 plots.C:2071
 plots.C:2072
 plots.C:2073
 plots.C:2074
 plots.C:2075
 plots.C:2076
 plots.C:2077
 plots.C:2078
 plots.C:2079
 plots.C:2080
 plots.C:2081
 plots.C:2082
 plots.C:2083
 plots.C:2084
 plots.C:2085
 plots.C:2086
 plots.C:2087
 plots.C:2088
 plots.C:2089
 plots.C:2090
 plots.C:2091
 plots.C:2092
 plots.C:2093
 plots.C:2094
 plots.C:2095
 plots.C:2096
 plots.C:2097
 plots.C:2098
 plots.C:2099
 plots.C:2100
 plots.C:2101
 plots.C:2102
 plots.C:2103
 plots.C:2104
 plots.C:2105
 plots.C:2106
 plots.C:2107
 plots.C:2108
 plots.C:2109
 plots.C:2110
 plots.C:2111
 plots.C:2112
 plots.C:2113
 plots.C:2114
 plots.C:2115
 plots.C:2116
 plots.C:2117
 plots.C:2118
 plots.C:2119
 plots.C:2120
 plots.C:2121
 plots.C:2122
 plots.C:2123
 plots.C:2124
 plots.C:2125
 plots.C:2126
 plots.C:2127
 plots.C:2128
 plots.C:2129
 plots.C:2130
 plots.C:2131
 plots.C:2132
 plots.C:2133
 plots.C:2134
 plots.C:2135
 plots.C:2136
 plots.C:2137
 plots.C:2138
 plots.C:2139
 plots.C:2140
 plots.C:2141
 plots.C:2142
 plots.C:2143
 plots.C:2144
 plots.C:2145
 plots.C:2146
 plots.C:2147
 plots.C:2148
 plots.C:2149
 plots.C:2150
 plots.C:2151
 plots.C:2152
 plots.C:2153
 plots.C:2154
 plots.C:2155
 plots.C:2156
 plots.C:2157
 plots.C:2158
 plots.C:2159
 plots.C:2160
 plots.C:2161
 plots.C:2162
 plots.C:2163
 plots.C:2164
 plots.C:2165
 plots.C:2166
 plots.C:2167
 plots.C:2168
 plots.C:2169
 plots.C:2170
 plots.C:2171
 plots.C:2172
 plots.C:2173
 plots.C:2174
 plots.C:2175
 plots.C:2176
 plots.C:2177
 plots.C:2178
 plots.C:2179
 plots.C:2180
 plots.C:2181
 plots.C:2182
 plots.C:2183
 plots.C:2184
 plots.C:2185
 plots.C:2186
 plots.C:2187
 plots.C:2188
 plots.C:2189
 plots.C:2190
 plots.C:2191
 plots.C:2192
 plots.C:2193
 plots.C:2194
 plots.C:2195
 plots.C:2196
 plots.C:2197
 plots.C:2198
 plots.C:2199
 plots.C:2200
 plots.C:2201
 plots.C:2202
 plots.C:2203
 plots.C:2204
 plots.C:2205
 plots.C:2206
 plots.C:2207
 plots.C:2208
 plots.C:2209
 plots.C:2210
 plots.C:2211
 plots.C:2212
 plots.C:2213
 plots.C:2214
 plots.C:2215
 plots.C:2216
 plots.C:2217
 plots.C:2218
 plots.C:2219
 plots.C:2220
 plots.C:2221
 plots.C:2222
 plots.C:2223
 plots.C:2224
 plots.C:2225
 plots.C:2226
 plots.C:2227
 plots.C:2228
 plots.C:2229
 plots.C:2230
 plots.C:2231
 plots.C:2232
 plots.C:2233
 plots.C:2234
 plots.C:2235
 plots.C:2236
 plots.C:2237
 plots.C:2238
 plots.C:2239
 plots.C:2240
 plots.C:2241
 plots.C:2242
 plots.C:2243
 plots.C:2244
 plots.C:2245
 plots.C:2246
 plots.C:2247
 plots.C:2248
 plots.C:2249
 plots.C:2250
 plots.C:2251
 plots.C:2252
 plots.C:2253
 plots.C:2254
 plots.C:2255
 plots.C:2256
 plots.C:2257
 plots.C:2258
 plots.C:2259
 plots.C:2260
 plots.C:2261
 plots.C:2262
 plots.C:2263
 plots.C:2264
 plots.C:2265
 plots.C:2266
 plots.C:2267
 plots.C:2268
 plots.C:2269
 plots.C:2270
 plots.C:2271
 plots.C:2272
 plots.C:2273
 plots.C:2274
 plots.C:2275
 plots.C:2276
 plots.C:2277
 plots.C:2278
 plots.C:2279
 plots.C:2280
 plots.C:2281
 plots.C:2282
 plots.C:2283
 plots.C:2284
 plots.C:2285
 plots.C:2286
 plots.C:2287
 plots.C:2288
 plots.C:2289
 plots.C:2290
 plots.C:2291
 plots.C:2292
 plots.C:2293
 plots.C:2294
 plots.C:2295
 plots.C:2296
 plots.C:2297
 plots.C:2298
 plots.C:2299
 plots.C:2300
 plots.C:2301
 plots.C:2302
 plots.C:2303
 plots.C:2304
 plots.C:2305
 plots.C:2306
 plots.C:2307
 plots.C:2308
 plots.C:2309
 plots.C:2310
 plots.C:2311
 plots.C:2312
 plots.C:2313
 plots.C:2314
 plots.C:2315
 plots.C:2316
 plots.C:2317
 plots.C:2318
 plots.C:2319
 plots.C:2320
 plots.C:2321
 plots.C:2322
 plots.C:2323
 plots.C:2324
 plots.C:2325
 plots.C:2326
 plots.C:2327
 plots.C:2328
 plots.C:2329
 plots.C:2330
 plots.C:2331
 plots.C:2332
 plots.C:2333
 plots.C:2334
 plots.C:2335
 plots.C:2336
 plots.C:2337
 plots.C:2338
 plots.C:2339
 plots.C:2340
 plots.C:2341
 plots.C:2342
 plots.C:2343
 plots.C:2344
 plots.C:2345
 plots.C:2346
 plots.C:2347
 plots.C:2348
 plots.C:2349
 plots.C:2350
 plots.C:2351
 plots.C:2352
 plots.C:2353
 plots.C:2354
 plots.C:2355
 plots.C:2356
 plots.C:2357
 plots.C:2358
 plots.C:2359
 plots.C:2360
 plots.C:2361
 plots.C:2362
 plots.C:2363
 plots.C:2364
 plots.C:2365
 plots.C:2366
 plots.C:2367
 plots.C:2368
 plots.C:2369
 plots.C:2370
 plots.C:2371
 plots.C:2372
 plots.C:2373
 plots.C:2374
 plots.C:2375
 plots.C:2376
 plots.C:2377
 plots.C:2378
 plots.C:2379
 plots.C:2380
 plots.C:2381
 plots.C:2382
 plots.C:2383
 plots.C:2384
 plots.C:2385
 plots.C:2386
 plots.C:2387
 plots.C:2388
 plots.C:2389
 plots.C:2390
 plots.C:2391
 plots.C:2392
 plots.C:2393
 plots.C:2394
 plots.C:2395
 plots.C:2396
 plots.C:2397
 plots.C:2398
 plots.C:2399
 plots.C:2400
 plots.C:2401
 plots.C:2402
 plots.C:2403
 plots.C:2404
 plots.C:2405
 plots.C:2406
 plots.C:2407
 plots.C:2408
 plots.C:2409
 plots.C:2410
 plots.C:2411
 plots.C:2412
 plots.C:2413
 plots.C:2414
 plots.C:2415
 plots.C:2416
 plots.C:2417
 plots.C:2418
 plots.C:2419
 plots.C:2420
 plots.C:2421
 plots.C:2422
 plots.C:2423
 plots.C:2424
 plots.C:2425
 plots.C:2426
 plots.C:2427
 plots.C:2428
 plots.C:2429
 plots.C:2430
 plots.C:2431
 plots.C:2432
 plots.C:2433
 plots.C:2434
 plots.C:2435
 plots.C:2436
 plots.C:2437
 plots.C:2438
 plots.C:2439
 plots.C:2440
 plots.C:2441
 plots.C:2442
 plots.C:2443
 plots.C:2444
 plots.C:2445
 plots.C:2446
 plots.C:2447
 plots.C:2448
 plots.C:2449
 plots.C:2450
 plots.C:2451
 plots.C:2452
 plots.C:2453
 plots.C:2454
 plots.C:2455
 plots.C:2456
 plots.C:2457
 plots.C:2458
 plots.C:2459
 plots.C:2460
 plots.C:2461
 plots.C:2462
 plots.C:2463
 plots.C:2464
 plots.C:2465
 plots.C:2466
 plots.C:2467
 plots.C:2468
 plots.C:2469
 plots.C:2470
 plots.C:2471
 plots.C:2472
 plots.C:2473
 plots.C:2474
 plots.C:2475
 plots.C:2476
 plots.C:2477
 plots.C:2478
 plots.C:2479
 plots.C:2480
 plots.C:2481
 plots.C:2482
 plots.C:2483
 plots.C:2484
 plots.C:2485
 plots.C:2486
 plots.C:2487
 plots.C:2488
 plots.C:2489
 plots.C:2490
 plots.C:2491
 plots.C:2492
 plots.C:2493
 plots.C:2494
 plots.C:2495
 plots.C:2496
 plots.C:2497
 plots.C:2498
 plots.C:2499
 plots.C:2500
 plots.C:2501
 plots.C:2502
 plots.C:2503
 plots.C:2504
 plots.C:2505
 plots.C:2506
 plots.C:2507
 plots.C:2508
 plots.C:2509
 plots.C:2510
 plots.C:2511
 plots.C:2512
 plots.C:2513
 plots.C:2514
 plots.C:2515
 plots.C:2516
 plots.C:2517
 plots.C:2518
 plots.C:2519
 plots.C:2520
 plots.C:2521
 plots.C:2522
 plots.C:2523
 plots.C:2524
 plots.C:2525
 plots.C:2526
 plots.C:2527
 plots.C:2528
 plots.C:2529
 plots.C:2530
 plots.C:2531
 plots.C:2532
 plots.C:2533
 plots.C:2534
 plots.C:2535
 plots.C:2536
 plots.C:2537
 plots.C:2538
 plots.C:2539
 plots.C:2540
 plots.C:2541
 plots.C:2542
 plots.C:2543
 plots.C:2544
 plots.C:2545
 plots.C:2546
 plots.C:2547
 plots.C:2548
 plots.C:2549
 plots.C:2550
 plots.C:2551
 plots.C:2552
 plots.C:2553
 plots.C:2554
 plots.C:2555
 plots.C:2556
 plots.C:2557
 plots.C:2558
 plots.C:2559
 plots.C:2560
 plots.C:2561
 plots.C:2562
 plots.C:2563
 plots.C:2564
 plots.C:2565
 plots.C:2566
 plots.C:2567
 plots.C:2568
 plots.C:2569
 plots.C:2570
 plots.C:2571
 plots.C:2572
 plots.C:2573
 plots.C:2574
 plots.C:2575
 plots.C:2576
 plots.C:2577
 plots.C:2578
 plots.C:2579
 plots.C:2580
 plots.C:2581
 plots.C:2582
 plots.C:2583
 plots.C:2584
 plots.C:2585
 plots.C:2586
 plots.C:2587
 plots.C:2588
 plots.C:2589
 plots.C:2590
 plots.C:2591
 plots.C:2592
 plots.C:2593
 plots.C:2594
 plots.C:2595
 plots.C:2596
 plots.C:2597
 plots.C:2598
 plots.C:2599
 plots.C:2600
 plots.C:2601
 plots.C:2602
 plots.C:2603
 plots.C:2604
 plots.C:2605
 plots.C:2606
 plots.C:2607
 plots.C:2608
 plots.C:2609
 plots.C:2610
 plots.C:2611
 plots.C:2612
 plots.C:2613
 plots.C:2614
 plots.C:2615
 plots.C:2616
 plots.C:2617
 plots.C:2618
 plots.C:2619
 plots.C:2620
 plots.C:2621
 plots.C:2622
 plots.C:2623
 plots.C:2624
 plots.C:2625
 plots.C:2626
 plots.C:2627
 plots.C:2628
 plots.C:2629
 plots.C:2630
 plots.C:2631
 plots.C:2632
 plots.C:2633
 plots.C:2634
 plots.C:2635
 plots.C:2636
 plots.C:2637
 plots.C:2638
 plots.C:2639
 plots.C:2640
 plots.C:2641
 plots.C:2642
 plots.C:2643
 plots.C:2644
 plots.C:2645
 plots.C:2646
 plots.C:2647
 plots.C:2648
 plots.C:2649
 plots.C:2650
 plots.C:2651
 plots.C:2652
 plots.C:2653
 plots.C:2654
 plots.C:2655
 plots.C:2656
 plots.C:2657
 plots.C:2658
 plots.C:2659
 plots.C:2660
 plots.C:2661
 plots.C:2662
 plots.C:2663
 plots.C:2664
 plots.C:2665
 plots.C:2666
 plots.C:2667
 plots.C:2668
 plots.C:2669
 plots.C:2670
 plots.C:2671
 plots.C:2672
 plots.C:2673
 plots.C:2674
 plots.C:2675
 plots.C:2676
 plots.C:2677
 plots.C:2678
 plots.C:2679
 plots.C:2680
 plots.C:2681
 plots.C:2682
 plots.C:2683
 plots.C:2684
 plots.C:2685
 plots.C:2686
 plots.C:2687
 plots.C:2688
 plots.C:2689
 plots.C:2690
 plots.C:2691
 plots.C:2692
 plots.C:2693
 plots.C:2694
 plots.C:2695
 plots.C:2696
 plots.C:2697
 plots.C:2698
 plots.C:2699
 plots.C:2700
 plots.C:2701
 plots.C:2702
 plots.C:2703
 plots.C:2704
 plots.C:2705
 plots.C:2706
 plots.C:2707
 plots.C:2708
 plots.C:2709
 plots.C:2710
 plots.C:2711
 plots.C:2712
 plots.C:2713
 plots.C:2714
 plots.C:2715
 plots.C:2716
 plots.C:2717
 plots.C:2718
 plots.C:2719
 plots.C:2720
 plots.C:2721
 plots.C:2722
 plots.C:2723
 plots.C:2724
 plots.C:2725
 plots.C:2726
 plots.C:2727
 plots.C:2728
 plots.C:2729
 plots.C:2730
 plots.C:2731
 plots.C:2732
 plots.C:2733
 plots.C:2734
 plots.C:2735
 plots.C:2736
 plots.C:2737
 plots.C:2738
 plots.C:2739
 plots.C:2740
 plots.C:2741
 plots.C:2742
 plots.C:2743
 plots.C:2744
 plots.C:2745
 plots.C:2746
 plots.C:2747
 plots.C:2748
 plots.C:2749
 plots.C:2750
 plots.C:2751
 plots.C:2752
 plots.C:2753
 plots.C:2754
 plots.C:2755
 plots.C:2756
 plots.C:2757
 plots.C:2758
 plots.C:2759
 plots.C:2760
 plots.C:2761
 plots.C:2762
 plots.C:2763
 plots.C:2764
 plots.C:2765
 plots.C:2766
 plots.C:2767
 plots.C:2768
 plots.C:2769
 plots.C:2770
 plots.C:2771
 plots.C:2772
 plots.C:2773
 plots.C:2774
 plots.C:2775
 plots.C:2776
 plots.C:2777
 plots.C:2778
 plots.C:2779
 plots.C:2780
 plots.C:2781
 plots.C:2782
 plots.C:2783
 plots.C:2784
 plots.C:2785
 plots.C:2786
 plots.C:2787
 plots.C:2788
 plots.C:2789
 plots.C:2790
 plots.C:2791
 plots.C:2792
 plots.C:2793
 plots.C:2794
 plots.C:2795
 plots.C:2796
 plots.C:2797
 plots.C:2798
 plots.C:2799
 plots.C:2800
 plots.C:2801
 plots.C:2802
 plots.C:2803
 plots.C:2804
 plots.C:2805
 plots.C:2806
 plots.C:2807
 plots.C:2808
 plots.C:2809
 plots.C:2810
 plots.C:2811
 plots.C:2812
 plots.C:2813
 plots.C:2814
 plots.C:2815
 plots.C:2816
 plots.C:2817
 plots.C:2818
 plots.C:2819
 plots.C:2820
 plots.C:2821
 plots.C:2822
 plots.C:2823
 plots.C:2824
 plots.C:2825
 plots.C:2826
 plots.C:2827
 plots.C:2828
 plots.C:2829
 plots.C:2830
 plots.C:2831
 plots.C:2832
 plots.C:2833
 plots.C:2834
 plots.C:2835
 plots.C:2836
 plots.C:2837
 plots.C:2838
 plots.C:2839
 plots.C:2840
 plots.C:2841
 plots.C:2842
 plots.C:2843
 plots.C:2844
 plots.C:2845
 plots.C:2846
 plots.C:2847
 plots.C:2848
 plots.C:2849
 plots.C:2850
 plots.C:2851
 plots.C:2852
 plots.C:2853
 plots.C:2854
 plots.C:2855
 plots.C:2856
 plots.C:2857
 plots.C:2858
 plots.C:2859
 plots.C:2860
 plots.C:2861
 plots.C:2862
 plots.C:2863
 plots.C:2864
 plots.C:2865
 plots.C:2866
 plots.C:2867
 plots.C:2868
 plots.C:2869
 plots.C:2870
 plots.C:2871
 plots.C:2872
 plots.C:2873
 plots.C:2874
 plots.C:2875
 plots.C:2876
 plots.C:2877
 plots.C:2878
 plots.C:2879
 plots.C:2880
 plots.C:2881
 plots.C:2882
 plots.C:2883
 plots.C:2884
 plots.C:2885
 plots.C:2886
 plots.C:2887
 plots.C:2888
 plots.C:2889
 plots.C:2890
 plots.C:2891
 plots.C:2892
 plots.C:2893
 plots.C:2894
 plots.C:2895
 plots.C:2896
 plots.C:2897
 plots.C:2898
 plots.C:2899
 plots.C:2900
 plots.C:2901
 plots.C:2902
 plots.C:2903
 plots.C:2904
 plots.C:2905
 plots.C:2906
 plots.C:2907
 plots.C:2908
 plots.C:2909
 plots.C:2910
 plots.C:2911
 plots.C:2912
 plots.C:2913
 plots.C:2914
 plots.C:2915
 plots.C:2916
 plots.C:2917
 plots.C:2918
 plots.C:2919
 plots.C:2920
 plots.C:2921
 plots.C:2922
 plots.C:2923
 plots.C:2924
 plots.C:2925
 plots.C:2926
 plots.C:2927
 plots.C:2928
 plots.C:2929
 plots.C:2930
 plots.C:2931
 plots.C:2932
 plots.C:2933
 plots.C:2934
 plots.C:2935
 plots.C:2936
 plots.C:2937
 plots.C:2938
 plots.C:2939
 plots.C:2940
 plots.C:2941
 plots.C:2942
 plots.C:2943
 plots.C:2944
 plots.C:2945
 plots.C:2946
 plots.C:2947
 plots.C:2948
 plots.C:2949
 plots.C:2950
 plots.C:2951
 plots.C:2952
 plots.C:2953
 plots.C:2954
 plots.C:2955
 plots.C:2956
 plots.C:2957
 plots.C:2958
 plots.C:2959
 plots.C:2960
 plots.C:2961
 plots.C:2962
 plots.C:2963
 plots.C:2964
 plots.C:2965
 plots.C:2966
 plots.C:2967
 plots.C:2968
 plots.C:2969
 plots.C:2970
 plots.C:2971
 plots.C:2972
 plots.C:2973
 plots.C:2974
 plots.C:2975
 plots.C:2976
 plots.C:2977
 plots.C:2978
 plots.C:2979
 plots.C:2980
 plots.C:2981
 plots.C:2982
 plots.C:2983
 plots.C:2984
 plots.C:2985
 plots.C:2986
 plots.C:2987
 plots.C:2988
 plots.C:2989
 plots.C:2990
 plots.C:2991
 plots.C:2992
 plots.C:2993
 plots.C:2994
 plots.C:2995
 plots.C:2996
 plots.C:2997
 plots.C:2998
 plots.C:2999
 plots.C:3000
 plots.C:3001
 plots.C:3002
 plots.C:3003
 plots.C:3004
 plots.C:3005
 plots.C:3006
 plots.C:3007
 plots.C:3008
 plots.C:3009
 plots.C:3010
 plots.C:3011
 plots.C:3012
 plots.C:3013
 plots.C:3014
 plots.C:3015
 plots.C:3016
 plots.C:3017
 plots.C:3018
 plots.C:3019
 plots.C:3020
 plots.C:3021
 plots.C:3022
 plots.C:3023
 plots.C:3024
 plots.C:3025
 plots.C:3026
 plots.C:3027
 plots.C:3028
 plots.C:3029
 plots.C:3030
 plots.C:3031
 plots.C:3032
 plots.C:3033
 plots.C:3034
 plots.C:3035
 plots.C:3036
 plots.C:3037
 plots.C:3038
 plots.C:3039
 plots.C:3040
 plots.C:3041
 plots.C:3042
 plots.C:3043
 plots.C:3044
 plots.C:3045
 plots.C:3046
 plots.C:3047
 plots.C:3048
 plots.C:3049
 plots.C:3050
 plots.C:3051
 plots.C:3052
 plots.C:3053
 plots.C:3054
 plots.C:3055
 plots.C:3056
 plots.C:3057
 plots.C:3058
 plots.C:3059
 plots.C:3060
 plots.C:3061
 plots.C:3062
 plots.C:3063
 plots.C:3064
 plots.C:3065
 plots.C:3066
 plots.C:3067
 plots.C:3068
 plots.C:3069
 plots.C:3070
 plots.C:3071
 plots.C:3072
 plots.C:3073
 plots.C:3074
 plots.C:3075
 plots.C:3076
 plots.C:3077
 plots.C:3078
 plots.C:3079
 plots.C:3080
 plots.C:3081
 plots.C:3082
 plots.C:3083
 plots.C:3084
 plots.C:3085
 plots.C:3086
 plots.C:3087
 plots.C:3088
 plots.C:3089
 plots.C:3090
 plots.C:3091
 plots.C:3092
 plots.C:3093
 plots.C:3094
 plots.C:3095
 plots.C:3096
 plots.C:3097
 plots.C:3098
 plots.C:3099
 plots.C:3100
 plots.C:3101
 plots.C:3102
 plots.C:3103
 plots.C:3104
 plots.C:3105
 plots.C:3106
 plots.C:3107
 plots.C:3108
 plots.C:3109
 plots.C:3110
 plots.C:3111
 plots.C:3112
 plots.C:3113
 plots.C:3114
 plots.C:3115
 plots.C:3116
 plots.C:3117
 plots.C:3118
 plots.C:3119
 plots.C:3120
 plots.C:3121
 plots.C:3122
 plots.C:3123
 plots.C:3124
 plots.C:3125
 plots.C:3126
 plots.C:3127
 plots.C:3128
 plots.C:3129
 plots.C:3130
 plots.C:3131
 plots.C:3132
 plots.C:3133
 plots.C:3134
 plots.C:3135
 plots.C:3136
 plots.C:3137
 plots.C:3138
 plots.C:3139
 plots.C:3140
 plots.C:3141
 plots.C:3142
 plots.C:3143
 plots.C:3144
 plots.C:3145
 plots.C:3146
 plots.C:3147
 plots.C:3148
 plots.C:3149
 plots.C:3150
 plots.C:3151
 plots.C:3152
 plots.C:3153
 plots.C:3154
 plots.C:3155
 plots.C:3156
 plots.C:3157
 plots.C:3158
 plots.C:3159
 plots.C:3160
 plots.C:3161
 plots.C:3162
 plots.C:3163
 plots.C:3164
 plots.C:3165
 plots.C:3166
 plots.C:3167
 plots.C:3168
 plots.C:3169
 plots.C:3170
 plots.C:3171
 plots.C:3172
 plots.C:3173
 plots.C:3174
 plots.C:3175
 plots.C:3176
 plots.C:3177
 plots.C:3178
 plots.C:3179
 plots.C:3180
 plots.C:3181
 plots.C:3182
 plots.C:3183
 plots.C:3184
 plots.C:3185
 plots.C:3186
 plots.C:3187
 plots.C:3188
 plots.C:3189
 plots.C:3190
 plots.C:3191
 plots.C:3192
 plots.C:3193
 plots.C:3194
 plots.C:3195
 plots.C:3196
 plots.C:3197
 plots.C:3198
 plots.C:3199
 plots.C:3200
 plots.C:3201
 plots.C:3202
 plots.C:3203
 plots.C:3204
 plots.C:3205
 plots.C:3206
 plots.C:3207
 plots.C:3208
 plots.C:3209
 plots.C:3210
 plots.C:3211
 plots.C:3212
 plots.C:3213
 plots.C:3214
 plots.C:3215
 plots.C:3216
 plots.C:3217
 plots.C:3218
 plots.C:3219
 plots.C:3220
 plots.C:3221
 plots.C:3222
 plots.C:3223
 plots.C:3224
 plots.C:3225
 plots.C:3226
 plots.C:3227
 plots.C:3228
 plots.C:3229
 plots.C:3230
 plots.C:3231
 plots.C:3232
 plots.C:3233
 plots.C:3234
 plots.C:3235
 plots.C:3236
 plots.C:3237
 plots.C:3238
 plots.C:3239
 plots.C:3240
 plots.C:3241
 plots.C:3242
 plots.C:3243
 plots.C:3244
 plots.C:3245
 plots.C:3246
 plots.C:3247
 plots.C:3248
 plots.C:3249
 plots.C:3250
 plots.C:3251
 plots.C:3252
 plots.C:3253
 plots.C:3254
 plots.C:3255
 plots.C:3256
 plots.C:3257
 plots.C:3258
 plots.C:3259
 plots.C:3260
 plots.C:3261
 plots.C:3262
 plots.C:3263
 plots.C:3264
 plots.C:3265
 plots.C:3266
 plots.C:3267
 plots.C:3268
 plots.C:3269
 plots.C:3270
 plots.C:3271
 plots.C:3272
 plots.C:3273
 plots.C:3274
 plots.C:3275
 plots.C:3276
 plots.C:3277
 plots.C:3278
 plots.C:3279
 plots.C:3280
 plots.C:3281
 plots.C:3282
 plots.C:3283
 plots.C:3284
 plots.C:3285
 plots.C:3286
 plots.C:3287
 plots.C:3288
 plots.C:3289
 plots.C:3290
 plots.C:3291
 plots.C:3292
 plots.C:3293
 plots.C:3294
 plots.C:3295
 plots.C:3296
 plots.C:3297
 plots.C:3298
 plots.C:3299
 plots.C:3300
 plots.C:3301
 plots.C:3302
 plots.C:3303
 plots.C:3304
 plots.C:3305
 plots.C:3306
 plots.C:3307
 plots.C:3308
 plots.C:3309
 plots.C:3310
 plots.C:3311
 plots.C:3312
 plots.C:3313
 plots.C:3314
 plots.C:3315
 plots.C:3316
 plots.C:3317
 plots.C:3318
 plots.C:3319
 plots.C:3320
 plots.C:3321
 plots.C:3322
 plots.C:3323
 plots.C:3324
 plots.C:3325
 plots.C:3326
 plots.C:3327
 plots.C:3328
 plots.C:3329
 plots.C:3330
 plots.C:3331
 plots.C:3332
 plots.C:3333
 plots.C:3334
 plots.C:3335
 plots.C:3336
 plots.C:3337
 plots.C:3338
 plots.C:3339
 plots.C:3340
 plots.C:3341
 plots.C:3342
 plots.C:3343
 plots.C:3344
 plots.C:3345
 plots.C:3346
 plots.C:3347
 plots.C:3348
 plots.C:3349
 plots.C:3350
 plots.C:3351
 plots.C:3352
 plots.C:3353
 plots.C:3354
 plots.C:3355
 plots.C:3356
 plots.C:3357
 plots.C:3358
 plots.C:3359
 plots.C:3360
 plots.C:3361
 plots.C:3362
 plots.C:3363
 plots.C:3364
 plots.C:3365
 plots.C:3366
 plots.C:3367
 plots.C:3368
 plots.C:3369
 plots.C:3370
 plots.C:3371
 plots.C:3372
 plots.C:3373
 plots.C:3374
 plots.C:3375
 plots.C:3376
 plots.C:3377
 plots.C:3378
 plots.C:3379
 plots.C:3380
 plots.C:3381
 plots.C:3382
 plots.C:3383
 plots.C:3384
 plots.C:3385
 plots.C:3386
 plots.C:3387
 plots.C:3388
 plots.C:3389
 plots.C:3390
 plots.C:3391
 plots.C:3392
 plots.C:3393
 plots.C:3394
 plots.C:3395
 plots.C:3396
 plots.C:3397
 plots.C:3398
 plots.C:3399
 plots.C:3400
 plots.C:3401
 plots.C:3402
 plots.C:3403
 plots.C:3404
 plots.C:3405
 plots.C:3406
 plots.C:3407
 plots.C:3408
 plots.C:3409
 plots.C:3410
 plots.C:3411
 plots.C:3412
 plots.C:3413
 plots.C:3414
 plots.C:3415
 plots.C:3416
 plots.C:3417
 plots.C:3418
 plots.C:3419
 plots.C:3420
 plots.C:3421
 plots.C:3422
 plots.C:3423
 plots.C:3424
 plots.C:3425
 plots.C:3426
 plots.C:3427
 plots.C:3428
 plots.C:3429
 plots.C:3430
 plots.C:3431
 plots.C:3432
 plots.C:3433
 plots.C:3434
 plots.C:3435
 plots.C:3436
 plots.C:3437
 plots.C:3438
 plots.C:3439
 plots.C:3440
 plots.C:3441
 plots.C:3442
 plots.C:3443
 plots.C:3444
 plots.C:3445
 plots.C:3446
 plots.C:3447
 plots.C:3448
 plots.C:3449
 plots.C:3450
 plots.C:3451
 plots.C:3452
 plots.C:3453
 plots.C:3454
 plots.C:3455
 plots.C:3456
 plots.C:3457
 plots.C:3458
 plots.C:3459
 plots.C:3460
 plots.C:3461
 plots.C:3462
 plots.C:3463
 plots.C:3464
 plots.C:3465
 plots.C:3466
 plots.C:3467
 plots.C:3468
 plots.C:3469
 plots.C:3470
 plots.C:3471
 plots.C:3472
 plots.C:3473
 plots.C:3474
 plots.C:3475
 plots.C:3476
 plots.C:3477
 plots.C:3478
 plots.C:3479
 plots.C:3480
 plots.C:3481
 plots.C:3482
 plots.C:3483
 plots.C:3484
 plots.C:3485
 plots.C:3486
 plots.C:3487
 plots.C:3488
 plots.C:3489
 plots.C:3490
 plots.C:3491
 plots.C:3492
 plots.C:3493
 plots.C:3494
 plots.C:3495
 plots.C:3496
 plots.C:3497
 plots.C:3498
 plots.C:3499
 plots.C:3500
 plots.C:3501
 plots.C:3502
 plots.C:3503
 plots.C:3504
 plots.C:3505
 plots.C:3506
 plots.C:3507
 plots.C:3508
 plots.C:3509
 plots.C:3510
 plots.C:3511
 plots.C:3512
 plots.C:3513
 plots.C:3514
 plots.C:3515
 plots.C:3516
 plots.C:3517
 plots.C:3518
 plots.C:3519
 plots.C:3520
 plots.C:3521
 plots.C:3522
 plots.C:3523
 plots.C:3524
 plots.C:3525
 plots.C:3526
 plots.C:3527
 plots.C:3528
 plots.C:3529
 plots.C:3530
 plots.C:3531
 plots.C:3532
 plots.C:3533
 plots.C:3534
 plots.C:3535
 plots.C:3536
 plots.C:3537
 plots.C:3538
 plots.C:3539
 plots.C:3540
 plots.C:3541
 plots.C:3542
 plots.C:3543
 plots.C:3544
 plots.C:3545
 plots.C:3546
 plots.C:3547
 plots.C:3548
 plots.C:3549
 plots.C:3550
 plots.C:3551
 plots.C:3552
 plots.C:3553
 plots.C:3554
 plots.C:3555
 plots.C:3556
 plots.C:3557
 plots.C:3558
 plots.C:3559
 plots.C:3560
 plots.C:3561
 plots.C:3562
 plots.C:3563
 plots.C:3564
 plots.C:3565
 plots.C:3566
 plots.C:3567
 plots.C:3568
 plots.C:3569
 plots.C:3570
 plots.C:3571
 plots.C:3572
 plots.C:3573
 plots.C:3574
 plots.C:3575
 plots.C:3576
 plots.C:3577
 plots.C:3578
 plots.C:3579
 plots.C:3580
 plots.C:3581
 plots.C:3582
 plots.C:3583
 plots.C:3584
 plots.C:3585
 plots.C:3586
 plots.C:3587
 plots.C:3588
 plots.C:3589
 plots.C:3590
 plots.C:3591
 plots.C:3592
 plots.C:3593
 plots.C:3594
 plots.C:3595
 plots.C:3596
 plots.C:3597
 plots.C:3598
 plots.C:3599
 plots.C:3600
 plots.C:3601
 plots.C:3602
 plots.C:3603
 plots.C:3604
 plots.C:3605
 plots.C:3606
 plots.C:3607
 plots.C:3608
 plots.C:3609
 plots.C:3610
 plots.C:3611
 plots.C:3612
 plots.C:3613
 plots.C:3614
 plots.C:3615
 plots.C:3616
 plots.C:3617
 plots.C:3618
 plots.C:3619
 plots.C:3620
 plots.C:3621
 plots.C:3622
 plots.C:3623
 plots.C:3624
 plots.C:3625
 plots.C:3626
 plots.C:3627
 plots.C:3628
 plots.C:3629
 plots.C:3630
 plots.C:3631
 plots.C:3632
 plots.C:3633
 plots.C:3634
 plots.C:3635
 plots.C:3636
 plots.C:3637
 plots.C:3638
 plots.C:3639
 plots.C:3640
 plots.C:3641
 plots.C:3642
 plots.C:3643
 plots.C:3644
 plots.C:3645
 plots.C:3646
 plots.C:3647
 plots.C:3648
 plots.C:3649
 plots.C:3650
 plots.C:3651
 plots.C:3652
 plots.C:3653
 plots.C:3654
 plots.C:3655
 plots.C:3656
 plots.C:3657
 plots.C:3658
 plots.C:3659
 plots.C:3660
 plots.C:3661
 plots.C:3662
 plots.C:3663
 plots.C:3664
 plots.C:3665
 plots.C:3666
 plots.C:3667
 plots.C:3668
 plots.C:3669
 plots.C:3670
 plots.C:3671
 plots.C:3672
 plots.C:3673
 plots.C:3674
 plots.C:3675
 plots.C:3676
 plots.C:3677
 plots.C:3678
 plots.C:3679
 plots.C:3680
 plots.C:3681
 plots.C:3682
 plots.C:3683
 plots.C:3684
 plots.C:3685
 plots.C:3686
 plots.C:3687
 plots.C:3688
 plots.C:3689
 plots.C:3690
 plots.C:3691
 plots.C:3692
 plots.C:3693
 plots.C:3694
 plots.C:3695
 plots.C:3696
 plots.C:3697
 plots.C:3698
 plots.C:3699
 plots.C:3700
 plots.C:3701
 plots.C:3702
 plots.C:3703
 plots.C:3704
 plots.C:3705
 plots.C:3706
 plots.C:3707
 plots.C:3708
 plots.C:3709
 plots.C:3710
 plots.C:3711
 plots.C:3712
 plots.C:3713
 plots.C:3714
 plots.C:3715
 plots.C:3716
 plots.C:3717
 plots.C:3718
 plots.C:3719
 plots.C:3720
 plots.C:3721
 plots.C:3722
 plots.C:3723
 plots.C:3724
 plots.C:3725
 plots.C:3726
 plots.C:3727
 plots.C:3728
 plots.C:3729
 plots.C:3730
 plots.C:3731
 plots.C:3732
 plots.C:3733
 plots.C:3734
 plots.C:3735
 plots.C:3736
 plots.C:3737
 plots.C:3738
 plots.C:3739
 plots.C:3740
 plots.C:3741
 plots.C:3742
 plots.C:3743
 plots.C:3744
 plots.C:3745
 plots.C:3746
 plots.C:3747
 plots.C:3748
 plots.C:3749
 plots.C:3750
 plots.C:3751
 plots.C:3752
 plots.C:3753
 plots.C:3754
 plots.C:3755
 plots.C:3756
 plots.C:3757
 plots.C:3758
 plots.C:3759
 plots.C:3760
 plots.C:3761
 plots.C:3762
 plots.C:3763
 plots.C:3764
 plots.C:3765
 plots.C:3766
 plots.C:3767
 plots.C:3768
 plots.C:3769
 plots.C:3770
 plots.C:3771
 plots.C:3772
 plots.C:3773
 plots.C:3774
 plots.C:3775
 plots.C:3776
 plots.C:3777
 plots.C:3778
 plots.C:3779
 plots.C:3780
 plots.C:3781
 plots.C:3782
 plots.C:3783
 plots.C:3784
 plots.C:3785
 plots.C:3786
 plots.C:3787
 plots.C:3788
 plots.C:3789
 plots.C:3790
 plots.C:3791
 plots.C:3792
 plots.C:3793
 plots.C:3794
 plots.C:3795
 plots.C:3796
 plots.C:3797
 plots.C:3798
 plots.C:3799
 plots.C:3800
 plots.C:3801
 plots.C:3802
 plots.C:3803
 plots.C:3804
 plots.C:3805
 plots.C:3806
 plots.C:3807
 plots.C:3808
 plots.C:3809
 plots.C:3810
 plots.C:3811
 plots.C:3812
 plots.C:3813
 plots.C:3814
 plots.C:3815
 plots.C:3816
 plots.C:3817
 plots.C:3818
 plots.C:3819
 plots.C:3820
 plots.C:3821
 plots.C:3822
 plots.C:3823
 plots.C:3824
 plots.C:3825
 plots.C:3826
 plots.C:3827
 plots.C:3828
 plots.C:3829
 plots.C:3830
 plots.C:3831
 plots.C:3832
 plots.C:3833
 plots.C:3834
 plots.C:3835
 plots.C:3836
 plots.C:3837
 plots.C:3838
 plots.C:3839
 plots.C:3840
 plots.C:3841
 plots.C:3842
 plots.C:3843
 plots.C:3844
 plots.C:3845
 plots.C:3846
 plots.C:3847
 plots.C:3848
 plots.C:3849
 plots.C:3850
 plots.C:3851
 plots.C:3852
 plots.C:3853
 plots.C:3854
 plots.C:3855
 plots.C:3856
 plots.C:3857
 plots.C:3858
 plots.C:3859
 plots.C:3860
 plots.C:3861
 plots.C:3862
 plots.C:3863
 plots.C:3864
 plots.C:3865
 plots.C:3866
 plots.C:3867
 plots.C:3868
 plots.C:3869
 plots.C:3870
 plots.C:3871
 plots.C:3872
 plots.C:3873
 plots.C:3874
 plots.C:3875
 plots.C:3876
 plots.C:3877
 plots.C:3878
 plots.C:3879
 plots.C:3880
 plots.C:3881
 plots.C:3882
 plots.C:3883
 plots.C:3884
 plots.C:3885
 plots.C:3886
 plots.C:3887
 plots.C:3888
 plots.C:3889
 plots.C:3890
 plots.C:3891
 plots.C:3892
 plots.C:3893
 plots.C:3894
 plots.C:3895
 plots.C:3896
 plots.C:3897
 plots.C:3898
 plots.C:3899
 plots.C:3900
 plots.C:3901
 plots.C:3902
 plots.C:3903
 plots.C:3904
 plots.C:3905
 plots.C:3906
 plots.C:3907
 plots.C:3908
 plots.C:3909
 plots.C:3910
 plots.C:3911
 plots.C:3912
 plots.C:3913
 plots.C:3914
 plots.C:3915
 plots.C:3916
 plots.C:3917
 plots.C:3918
 plots.C:3919
 plots.C:3920
 plots.C:3921
 plots.C:3922
 plots.C:3923
 plots.C:3924
 plots.C:3925
 plots.C:3926
 plots.C:3927
 plots.C:3928
 plots.C:3929
 plots.C:3930
 plots.C:3931
 plots.C:3932
 plots.C:3933
 plots.C:3934
 plots.C:3935
 plots.C:3936
 plots.C:3937
 plots.C:3938
 plots.C:3939
 plots.C:3940
 plots.C:3941
 plots.C:3942
 plots.C:3943
 plots.C:3944
 plots.C:3945
 plots.C:3946
 plots.C:3947
 plots.C:3948
 plots.C:3949
 plots.C:3950
 plots.C:3951
 plots.C:3952
 plots.C:3953
 plots.C:3954
 plots.C:3955
 plots.C:3956
 plots.C:3957
 plots.C:3958
 plots.C:3959
 plots.C:3960
 plots.C:3961
 plots.C:3962
 plots.C:3963
 plots.C:3964
 plots.C:3965
 plots.C:3966
 plots.C:3967
 plots.C:3968
 plots.C:3969
 plots.C:3970
 plots.C:3971
 plots.C:3972
 plots.C:3973
 plots.C:3974
 plots.C:3975
 plots.C:3976
 plots.C:3977
 plots.C:3978
 plots.C:3979
 plots.C:3980
 plots.C:3981
 plots.C:3982
 plots.C:3983
 plots.C:3984
 plots.C:3985
 plots.C:3986
 plots.C:3987
 plots.C:3988
 plots.C:3989
 plots.C:3990
 plots.C:3991
 plots.C:3992
 plots.C:3993
 plots.C:3994
 plots.C:3995
 plots.C:3996
 plots.C:3997
 plots.C:3998
 plots.C:3999
 plots.C:4000
 plots.C:4001
 plots.C:4002
 plots.C:4003
 plots.C:4004
 plots.C:4005
 plots.C:4006
 plots.C:4007
 plots.C:4008
 plots.C:4009
 plots.C:4010
 plots.C:4011
 plots.C:4012
 plots.C:4013
 plots.C:4014
 plots.C:4015
 plots.C:4016
 plots.C:4017
 plots.C:4018
 plots.C:4019
 plots.C:4020
 plots.C:4021
 plots.C:4022
 plots.C:4023
 plots.C:4024
 plots.C:4025
 plots.C:4026
 plots.C:4027
 plots.C:4028
 plots.C:4029
 plots.C:4030
 plots.C:4031
 plots.C:4032
 plots.C:4033
 plots.C:4034
 plots.C:4035
 plots.C:4036
 plots.C:4037
 plots.C:4038
 plots.C:4039
 plots.C:4040
 plots.C:4041
 plots.C:4042
 plots.C:4043
 plots.C:4044
 plots.C:4045
 plots.C:4046
 plots.C:4047
 plots.C:4048
 plots.C:4049
 plots.C:4050
 plots.C:4051
 plots.C:4052
 plots.C:4053
 plots.C:4054
 plots.C:4055
 plots.C:4056
 plots.C:4057
 plots.C:4058
 plots.C:4059
 plots.C:4060
 plots.C:4061
 plots.C:4062
 plots.C:4063
 plots.C:4064
 plots.C:4065
 plots.C:4066
 plots.C:4067
 plots.C:4068
 plots.C:4069
 plots.C:4070
 plots.C:4071
 plots.C:4072
 plots.C:4073
 plots.C:4074
 plots.C:4075
 plots.C:4076
 plots.C:4077
 plots.C:4078
 plots.C:4079
 plots.C:4080
 plots.C:4081
 plots.C:4082
 plots.C:4083
 plots.C:4084
 plots.C:4085
 plots.C:4086
 plots.C:4087
 plots.C:4088
 plots.C:4089
 plots.C:4090
 plots.C:4091
 plots.C:4092
 plots.C:4093
 plots.C:4094
 plots.C:4095
 plots.C:4096
 plots.C:4097
 plots.C:4098
 plots.C:4099
 plots.C:4100
 plots.C:4101
 plots.C:4102
 plots.C:4103
 plots.C:4104
 plots.C:4105
 plots.C:4106
 plots.C:4107
 plots.C:4108
 plots.C:4109
 plots.C:4110
 plots.C:4111
 plots.C:4112
 plots.C:4113
 plots.C:4114
 plots.C:4115
 plots.C:4116
 plots.C:4117
 plots.C:4118
 plots.C:4119
 plots.C:4120
 plots.C:4121
 plots.C:4122
 plots.C:4123
 plots.C:4124
 plots.C:4125
 plots.C:4126
 plots.C:4127
 plots.C:4128
 plots.C:4129
 plots.C:4130
 plots.C:4131
 plots.C:4132
 plots.C:4133
 plots.C:4134
 plots.C:4135
 plots.C:4136
 plots.C:4137
 plots.C:4138
 plots.C:4139
 plots.C:4140
 plots.C:4141
 plots.C:4142
 plots.C:4143
 plots.C:4144
 plots.C:4145
 plots.C:4146
 plots.C:4147
 plots.C:4148
 plots.C:4149
 plots.C:4150
 plots.C:4151
 plots.C:4152
 plots.C:4153
 plots.C:4154
 plots.C:4155
 plots.C:4156
 plots.C:4157
 plots.C:4158
 plots.C:4159
 plots.C:4160
 plots.C:4161
 plots.C:4162
 plots.C:4163
 plots.C:4164
 plots.C:4165
 plots.C:4166
 plots.C:4167
 plots.C:4168
 plots.C:4169
 plots.C:4170
 plots.C:4171
 plots.C:4172
 plots.C:4173
 plots.C:4174
 plots.C:4175
 plots.C:4176
 plots.C:4177
 plots.C:4178
 plots.C:4179
 plots.C:4180
 plots.C:4181
 plots.C:4182
 plots.C:4183
 plots.C:4184
 plots.C:4185
 plots.C:4186
 plots.C:4187
 plots.C:4188
 plots.C:4189
 plots.C:4190
 plots.C:4191
 plots.C:4192
 plots.C:4193
 plots.C:4194
 plots.C:4195
 plots.C:4196
 plots.C:4197
 plots.C:4198
 plots.C:4199
 plots.C:4200
 plots.C:4201
 plots.C:4202
 plots.C:4203
 plots.C:4204
 plots.C:4205
 plots.C:4206
 plots.C:4207
 plots.C:4208
 plots.C:4209
 plots.C:4210
 plots.C:4211
 plots.C:4212
 plots.C:4213
 plots.C:4214
 plots.C:4215
 plots.C:4216
 plots.C:4217
 plots.C:4218
 plots.C:4219
 plots.C:4220
 plots.C:4221
 plots.C:4222
 plots.C:4223
 plots.C:4224
 plots.C:4225
 plots.C:4226
 plots.C:4227
 plots.C:4228
 plots.C:4229
 plots.C:4230
 plots.C:4231
 plots.C:4232
 plots.C:4233
 plots.C:4234
 plots.C:4235
 plots.C:4236
 plots.C:4237
 plots.C:4238
 plots.C:4239
 plots.C:4240
 plots.C:4241
 plots.C:4242
 plots.C:4243
 plots.C:4244
 plots.C:4245
 plots.C:4246
 plots.C:4247
 plots.C:4248
 plots.C:4249
 plots.C:4250
 plots.C:4251
 plots.C:4252
 plots.C:4253
 plots.C:4254
 plots.C:4255
 plots.C:4256
 plots.C:4257
 plots.C:4258
 plots.C:4259
 plots.C:4260
 plots.C:4261
 plots.C:4262
 plots.C:4263
 plots.C:4264
 plots.C:4265
 plots.C:4266
 plots.C:4267
 plots.C:4268
 plots.C:4269
 plots.C:4270
 plots.C:4271
 plots.C:4272
 plots.C:4273
 plots.C:4274
 plots.C:4275
 plots.C:4276
 plots.C:4277
 plots.C:4278
 plots.C:4279
 plots.C:4280
 plots.C:4281
 plots.C:4282
 plots.C:4283
 plots.C:4284
 plots.C:4285
 plots.C:4286
 plots.C:4287
 plots.C:4288
 plots.C:4289
 plots.C:4290
 plots.C:4291
 plots.C:4292
 plots.C:4293
 plots.C:4294
 plots.C:4295
 plots.C:4296
 plots.C:4297
 plots.C:4298
 plots.C:4299