ROOT logo
#include <TFile.h>
#include <TH1.h>
#include <TF1.h>
#include <TCanvas.h>
#include <TAxis.h>
#include <TStyle.h>
#include <TChain.h>
#include <TTree.h>
#include <TMath.h>
#include <TClonesArray.h>
#include <TLegend.h>

#include <AliXRDPROOFtoolkit.h>

#include "DebugClasses.C"
#include "my_tools.C"

#include <iostream>

using namespace std;

/*
  To run code:
  ============

  Info:
  * I did not recheck this code. For now I would just use the efficiency values I have.
  * The code could be made nicer. Esepcially some plots could be put in folders.

  Use AliRoot because of AliXRDPROOFtoolkit:
  gSystem->AddIncludePath("-I$ALICE_ROOT/TPC")
  gSystem->AddIncludePath("-I../lib")
  gSystem->AddIncludePath("-I../grid")
  gSystem->AddIncludePath("-I../macros")
  gROOT->SetMacroPath(".:../macros:../grid:../lib/")
  .L my_tools.C+
  .L DebugClasses.C+
  .L createEfficiency.C+

  Examples of visualization:
  DrawEfficiency("lhc10d_eff_pythia.root", "eff.root")

  // This is the correction I did for the low pT guys
  DrawCorrection("lhc10d_eff_pythia.root", "lhc10d_eff_phojet.root")



  CreateEff("lhc10d_mc_all.dat", 0, "lhc10d_eff_all.root")

  
*/

void DrawEfficiency(const Char_t* fileName, const Char_t* effFileName);
void DrawCorrection(const Char_t* fileNamePYTHIA, const Char_t* fileNamePHOJET);
TH1D* HistInvert(TH1D* hist);


void CreateEff(const Char_t* mcFileName, Int_t maxEvents, const Char_t* mcOutFileName,
	       Float_t centLow=-20, Float_t centHigh=-5)
{  
  gStyle->SetOptStat(0);
  //
  // Create output
  //
  TFile* outFile = new TFile(mcOutFileName, "RECREATE");

  const Int_t nPid = 7;
  TH1D* hMcIn[nPid]     = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcOut[nPid]    = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcSec[nPid]    = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcEff[nPid]     = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcInNeg[nPid]  = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcOutNeg[nPid] = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcSecNeg[nPid] = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcEffNeg[nPid]     = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcInPos[nPid]  = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcOutPos[nPid] = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcSecPos[nPid] = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hMcEffPos[nPid]     = {0, 0, 0, 0, 0, 0, 0 };

  Int_t color[nPid] = {1, 2, 3, 4, 5, 1, 1};

  const Int_t nPtBins = 68;
  Double_t xBins[nPtBins+1] = {0. ,  0.05, 0.1,  0.15, 0.2,  0.25, 0.3,  0.35, 0.4,  0.45,
			       0.5,  0.55, 0.6,  0.65, 0.7,  0.75, 0.8,  0.85, 0.9,  0.95,
			       1.0,  1.1 , 1.2,  1.3 , 1.4,  1.5 , 1.6,  1.7 , 1.8,  1.9 ,
			       2.0,  2.2 , 2.4,  2.6 , 2.8,  3.0 , 3.2,  3.4 , 3.6,  3.8 ,
			       4.0,  4.5 , 5.0,  5.5 , 6.0,  6.5 , 7.0,  8.0 , 9.0,  10.0,
			       11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
			       26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
  
  for(Int_t pid = 0; pid < nPid; pid++) {
    
    hMcIn[pid] = new TH1D(Form("hIn%d", pid), Form("Efficiency (pid %d)", pid), 
			  nPtBins, xBins); 
    hMcInNeg[pid] = new TH1D(Form("hInNeg%d", pid), Form("Efficiency (pid %d, q < 0)", pid), 
			     nPtBins, xBins); 
    hMcInPos[pid] = new TH1D(Form("hInPos%d", pid), Form("Efficiency (pid %d, q < 0)", pid), 
			     nPtBins, xBins); 

    hMcIn[pid]->Sumw2();
    hMcIn[pid]->SetMarkerStyle(29);
    hMcIn[pid]->SetMarkerColor(color[pid]);
    hMcInNeg[pid]->Sumw2();
    hMcInNeg[pid]->SetMarkerStyle(24);
    hMcInNeg[pid]->SetMarkerColor(color[pid]);
    hMcInPos[pid]->Sumw2();
    hMcInPos[pid]->SetMarkerStyle(20);
    hMcInPos[pid]->SetMarkerColor(color[pid]);

    hMcOut[pid] = new TH1D(Form("hMcOut%d", pid), Form("MC out (pid %d)", pid), 
			   nPtBins, xBins); 
    hMcOutNeg[pid] = new TH1D(Form("hMcOutNeg%d", pid), Form("MC out (pid %d, q < 0)", pid), 
			      nPtBins, xBins); 
    hMcOutPos[pid] = new TH1D(Form("hMcOutPos%d", pid), Form("MC out (pid %d, q < 0)", pid), 
			      nPtBins, xBins); 

    hMcOut[pid]->Sumw2();
    hMcOut[pid]->SetMarkerStyle(29);
    hMcOut[pid]->SetMarkerColor(color[pid]);
    hMcOutNeg[pid]->Sumw2();
    hMcOutNeg[pid]->SetMarkerStyle(24);
    hMcOutNeg[pid]->SetMarkerColor(color[pid]);
    hMcOutPos[pid]->Sumw2();
    hMcOutPos[pid]->SetMarkerStyle(20);
    hMcOutPos[pid]->SetMarkerColor(color[pid]);

    hMcSec[pid] = new TH1D(Form("hSec%d", pid), Form("Secondaries (pid %d)", pid), 
			  nPtBins, xBins); 
    hMcSecNeg[pid] = new TH1D(Form("hSecNeg%d", pid), Form("Secondaries (pid %d, q < 0)", pid), 
			     nPtBins, xBins); 
    hMcSecPos[pid] = new TH1D(Form("hSecPos%d", pid), Form("Secondaries (pid %d, q < 0)", pid), 
			     nPtBins, xBins); 

    hMcSec[pid]->Sumw2();
    hMcSec[pid]->SetMarkerStyle(29);
    hMcSec[pid]->SetMarkerColor(color[pid]);
    hMcSecNeg[pid]->Sumw2();
    hMcSecNeg[pid]->SetMarkerStyle(24);
    hMcSecNeg[pid]->SetMarkerColor(color[pid]);
    hMcSecPos[pid]->Sumw2();
    hMcSecPos[pid]->SetMarkerStyle(20);
    hMcSecPos[pid]->SetMarkerColor(color[pid]);

    hMcEff[pid] = new TH1D(Form("hEff%d", pid), Form("Efficiency (pid %d)", pid), 
			  nPtBins, xBins); 
    hMcEffNeg[pid] = new TH1D(Form("hEffNeg%d", pid), Form("Efficiency (pid %d, q < 0)", pid), 
			     nPtBins, xBins); 
    hMcEffPos[pid] = new TH1D(Form("hEffPos%d", pid), Form("Efficiency (pid %d, q < 0)", pid), 
			     nPtBins, xBins); 

    hMcEff[pid]->Sumw2();
    hMcEff[pid]->SetMarkerStyle(29);
    hMcEff[pid]->SetMarkerColor(color[pid]);
    hMcEffNeg[pid]->Sumw2();
    hMcEffNeg[pid]->SetMarkerStyle(24);
    hMcEffNeg[pid]->SetMarkerColor(color[pid]);
    hMcEffPos[pid]->Sumw2();
    hMcEffPos[pid]->SetMarkerStyle(20);
    hMcEffPos[pid]->SetMarkerColor(color[pid]);
  }
      
  TTree* Tree   = 0;
  if(strstr(mcFileName, ".dat")) {
    
    AliXRDPROOFtoolkit tool;
    TChain* chain = tool.MakeChain(mcFileName,"tree", 0, 1000);
    chain->Lookup();
    Tree = chain;
  } else {
    TFile* mcFile = FindFileFresh(mcFileName);
    if(!mcFile)
      return;
    
    Tree = (TTree*)mcFile->Get("tree");
  }
  if(!Tree)
    return;
  
  
  DeDxEvent* event = 0;
  TClonesArray* trackArray = 0;
  TClonesArray* mcTrackArray = 0;
  Tree->SetBranchAddress("event", &event);
  Tree->SetBranchAddress("track"  , &trackArray);
  Tree->SetBranchAddress("trackMC"  , &mcTrackArray);
  Int_t nEvents = Tree->GetEntries();
  cout << "Number of events: " << nEvents << endl;
  
  if(maxEvents>0 && maxEvents < nEvents) {
    
    nEvents = maxEvents;
    cout << "N events was reduced to: " << maxEvents << endl;
  }
  
  Int_t currentRun = 0;

  for(Int_t n = 0; n < nEvents; n++) {
    
    Tree->GetEntry(n);
    
    if((n+1)%1000000==0)
      cout << "Event: " << n+1 << "/" << nEvents << endl;
    
    if(event->run != currentRun) {
      
      cout << "New run: " << event->run << endl;
      currentRun = event->run;
    }

    if(event->cent < centLow || event->cent > centHigh)
      continue;

    const Int_t nMcTracks = mcTrackArray->GetEntries();
      
    for(Int_t i = 0; i < nMcTracks; i++) {
	
      DeDxTrackMC* trackMC = (DeDxTrackMC*)mcTrackArray->At(i);

      // if(TMath::Abs(trackMC->pdgMC)==3312 || TMath::Abs(trackMC->pdgMC)==3334) 
      // 	continue; // Xi-!
	
      hMcIn[0]->Fill(trackMC->ptMC);
      hMcIn[trackMC->pidMC]->Fill(trackMC->ptMC);
	
      if(trackMC->qMC < 0) {
	  
	hMcInNeg[0]->Fill(trackMC->ptMC);
	hMcInNeg[trackMC->pidMC]->Fill(trackMC->ptMC);
      } else {
	  
	hMcInPos[0]->Fill(trackMC->ptMC);
	hMcInPos[trackMC->pidMC]->Fill(trackMC->ptMC);
      }
    }

    const Int_t nTracks = trackArray->GetEntries();
      
    for(Int_t i = 0; i < nTracks; i++) {
	
      DeDxTrack* track = (DeDxTrack*)trackArray->At(i);
	
      if(!(track->filter&1))
	continue;
      
      // if(TMath::Abs(track->mother)==3312 || TMath::Abs(track->mother)==3334) 
      // 	continue; // Xi+- or Omega+-!

      hMcOut[0]->Fill(track->pt);
      hMcOut[track->pid]->Fill(track->pt);
	
      if(track->q < 0) {
	  
	hMcOutNeg[0]->Fill(track->pt);
	hMcOutNeg[track->pid]->Fill(track->pt);
      } else {
	  
	hMcOutPos[0]->Fill(track->pt);
	hMcOutPos[track->pid]->Fill(track->pt);
      }
	
      if(track->primary==0) {
	hMcSec[0]->Fill(track->pt);
	hMcSec[track->pid]->Fill(track->pt);
	  
	if(track->q < 0) {
	    
	  hMcSecNeg[0]->Fill(track->pt);
	  hMcSecNeg[track->pid]->Fill(track->pt);
	} else {
	    
	  hMcSecPos[0]->Fill(track->pt);
	  hMcSecPos[track->pid]->Fill(track->pt);
	}
      }
    }
  }

  TH1D* hMcInPiKP = (TH1D*)hMcIn[1]->Clone("hMcInPiKP");
  hMcInPiKP->Add(hMcIn[2]);
  hMcInPiKP->Add(hMcIn[3]);
  hMcInPiKP->Divide(hMcIn[0]);

  for(Int_t pid = 0; pid < nPid; pid++) {
    
    hMcSec[pid]->Divide(hMcSec[pid], hMcOut[pid]); 
    hMcSecNeg[pid]->Divide(hMcSecNeg[pid], hMcOutNeg[pid]); 
    hMcSecPos[pid]->Divide(hMcSecPos[pid], hMcOutPos[pid]); 

    hMcEff[pid]   ->Divide(hMcOut[pid], hMcIn[pid]); 
    hMcEffNeg[pid]->Divide(hMcOutNeg[pid], hMcInNeg[pid]); 
    hMcEffPos[pid]->Divide(hMcOutPos[pid], hMcInPos[pid]); 
  }

  outFile->Write();
  outFile->Close();  
}

//_______________________________________________________________________
void DrawEfficiency(const Char_t* fileName, const Char_t* effFileName)
{
  TFile* file = FindFileFresh(fileName);
  if(!file)
    return;
  
  gStyle->SetOptStat(0);

  const Double_t ptmin  =  3.01;
  const Double_t ptmax  = 19.999;
  //  const Double_t ptmax  = 49.999;
  
  const Double_t effmin = 0.6;
  const Double_t effmax = 0.9;

  // const Double_t effmin = 0.0;
  // const Double_t effmax = 1.5;

  const Double_t secmin = 0.0;
  const Double_t secmax = 0.1;

  const Int_t nPid = 7;

  TH1D* hEff[nPid]     = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hEffNeg[nPid]  = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hEffPos[nPid]  = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hSec[nPid]    = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hSecNeg[nPid] = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hSecPos[nPid] = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hOut[nPid]    = {0, 0, 0, 0, 0, 0, 0 };

  for(Int_t pid = 0; pid < nPid; pid++) {

    hEff[pid] = (TH1D*)file->Get(Form("hEff%d", pid));

    hEffNeg[pid] = (TH1D*)file->Get(Form("hEffNeg%d", pid));

    hEffPos[pid] = (TH1D*)file->Get(Form("hEffPos%d", pid));

    hSec[pid] = (TH1D*)file->Get(Form("hSec%d", pid));

    hSecNeg[pid] = (TH1D*)file->Get(Form("hSecNeg%d", pid));

    hSecPos[pid] = (TH1D*)file->Get(Form("hSecPos%d", pid));

    hOut[pid] = (TH1D*)file->Get(Form("hMcOut%d", pid));

    // hEff[pid]->Rebin(4);
    // hEffNeg[pid]->Rebin(4);
    // hEffPos[pid]->Rebin(4);

    // hSec[pid]->Rebin(4);
    // hSecNeg[pid]->Rebin(4);
    // hSecPos[pid]->Rebin(4);

    // hOut[pid]->Rebin(4);

    // hEff[pid]->Scale(0.25);
    // hEffNeg[pid]->Scale(0.25);
    // hEffPos[pid]->Scale(0.25);

    // hSec[pid]->Scale(0.25);
    // hSecNeg[pid]->Scale(0.25);
    // hSecPos[pid]->Scale(0.25);

    // hOut[pid]->Scale(0.25);

    hEff[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
    hEff[pid]->GetYaxis()->SetRangeUser(effmin, effmax);
    hEffNeg[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
    hEffNeg[pid]->GetYaxis()->SetRangeUser(effmin, effmax);
    hEffPos[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
    hEffPos[pid]->GetYaxis()->SetRangeUser(effmin, effmax);
    hSec[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
    hSec[pid]->GetYaxis()->SetRangeUser(secmin, secmax);
    hSecNeg[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
    hSecNeg[pid]->GetYaxis()->SetRangeUser(secmin, secmax);
    hSecPos[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
    hSecPos[pid]->GetYaxis()->SetRangeUser(secmin, secmax);
    hOut[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
  }

  TCanvas* cChEff = new TCanvas("cChEff", "All efficiency", 800, 300);
  cChEff->Clear();
  cChEff->Divide(2, 1);
  cChEff->cd(1);
  //  TF1* pionEff = new TF1("pionEff", "pol0", 0.0, 50.0);
  TF1* chEff = new TF1("chEff", "[0]*(1-[1]/x)", 0.0, 50.0);
  chEff->SetLineColor(1);
  chEff->SetParameters(0.7, 0.5);
  hEff[0]->Fit(chEff, "", "", ptmin, ptmax);
  
  cChEff->cd(2);
  hEffPos[0]->Draw();
  hEffNeg[0]->Draw("SAME");
  chEff->DrawCopy("SAME");
  cChEff->SaveAs("eff_charged.gif");

  TCanvas* cPionEff = new TCanvas("cPionEff", "Pion efficiency", 800, 300);
  cPionEff->Clear();
  cPionEff->Divide(2, 1);
  cPionEff->cd(1);
  //  TF1* pionEff = new TF1("pionEff", "pol0", 0.0, 50.0);
  TF1* pionEff = new TF1("pionEff", "[0]*(1-[1]/x)", 0.0, 50.0);
  pionEff->SetLineColor(2);
  pionEff->SetParameters(0.7, 0.5);
  hEff[1]->Fit(pionEff, "", "", ptmin, ptmax);
  
  cPionEff->cd(2);
  hEffPos[1]->Draw();
  hEffNeg[1]->Draw("SAME");
  pionEff->DrawCopy("SAME");
  cPionEff->SaveAs("eff_pion.gif");

  TCanvas* cKaonEff = new TCanvas("cKaonEff", "Kaon efficiency", 800, 300);
  cKaonEff->Clear();
  cKaonEff->Divide(2, 1);
  cKaonEff->cd(1);
  //  TF1* kaonEff = new TF1("kaonEff", "pol0", 0.0, 50.0);
  TF1* kaonEff = new TF1("kaonEff", "[0]*(1-[1]/x)", 0.0, 50.0);
  kaonEff->SetLineColor(3);
  kaonEff->SetParameters(0.7, 0.5);
  hEff[2]->Fit(kaonEff, "", "", ptmin, ptmax);
  
  cKaonEff->cd(2);
  hEffPos[2]->Draw();
  hEffNeg[2]->Draw("SAME");
  kaonEff->DrawCopy("SAME");
  cKaonEff->SaveAs("eff_kaon.gif");

  TCanvas* cProtonEff = new TCanvas("cProtonEff", "Proton efficiency", 800, 300);
  cProtonEff->Clear();
  cProtonEff->Divide(2, 1);
  cProtonEff->cd(1);
  //  TF1* protonEff = new TF1("protonEff", "pol0", 0.0, 50.0);
  TF1* protonEff = new TF1("protonEff", "[0]*(1-[1]/x)", 0.0, 50.0);
  protonEff->SetLineColor(4);
  protonEff->SetParameters(0.7, 0.5);
  hEff[3]->Fit(protonEff, "", "", ptmin, ptmax);
  
  cProtonEff->cd(2);
  hEffPos[3]->Draw();
  hEffNeg[3]->Draw("SAME");
  protonEff->DrawCopy("SAME");
  cProtonEff->SaveAs("eff_proton.gif");

  TCanvas* cAllEff = new TCanvas("cAllEff", "All efficiency", 400, 300);
  cAllEff->Clear();
  
  TH1D* hDummy = (TH1D*)hEff[1]->Clone("hDummy");
  hDummy->Reset();
  hDummy->SetTitle("Efficiency vs p_{T}; p_{T} [GeV/c]; Efficiency");
  hDummy->Draw();
  
  chEff->DrawCopy("SAME");
  pionEff->DrawCopy("SAME");
  kaonEff->DrawCopy("SAME");
  protonEff->DrawCopy("SAME");
  cAllEff->SaveAs("eff_all.gif");

  // TCanvas* cPionSec = new TCanvas("cPionSec", "Pion sec", 800, 300);
  // cPionSec->Clear();
  // cPionSec->Divide(2, 1);
  // cPionSec->cd(1);
  // TF1* pionSec = new TF1("pionSec", "pol0", 0.0, 50.0);
  // hSec[1]->Fit(pionSec, "", "", ptmin, ptmax);
  
  // cPionSec->cd(2);
  // hSecPos[1]->Draw();
  // hSecNeg[1]->Draw("SAME");
  // pionSec->Draw("SAME");
  // cPionSec->SaveAs("sec_pion.gif");

  // TCanvas* cKaonSec = new TCanvas("cKaonSec", "Kaon sec", 800, 300);
  // cKaonSec->Clear();
  // cKaonSec->Divide(2, 1);
  // cKaonSec->cd(1);
  // TF1* kaonSec = new TF1("kaonSec", "pol0", 0.0, 50.0);
  // hSec[2]->Fit(kaonSec, "", "", ptmin, ptmax);
  
  // cKaonSec->cd(2);
  // hSecPos[2]->Draw();
  // hSecNeg[2]->Draw("SAME");
  // kaonSec->Draw("SAME");
  // cKaonSec->SaveAs("sec_kaon.gif");

  // TCanvas* cProtonSec = new TCanvas("cProtonSec", "Proton sec", 800, 300);
  // cProtonSec->Clear();
  // cProtonSec->Divide(2, 1);
  // cProtonSec->cd(1);
  // TF1* protonSec = new TF1("protonSec", "pol0", 0.0, 50.0);
  // hSec[3]->Fit(protonSec, "", "", ptmin, ptmax);
  
  // cProtonSec->cd(2);
  // hSecPos[3]->Draw();
  // hSecNeg[3]->Draw("SAME");
  // protonSec->Draw("SAME");
  // cProtonSec->SaveAs("sec_proton.gif");


  TCanvas* cEffRatioPi = new TCanvas("cEffRatioPi", "eff pi / eff all", 400, 300);
  cEffRatioPi->Clear();
  //  TF1* pionEff = new TF1("pionEff", "pol0", 0.0, 50.0);
  TF1* effRatioPi = new TF1("effRatioPi", "pol0", 0.0, 50.0);
  effRatioPi->SetLineColor(6);
  effRatioPi->SetParameters(0.7, 0.5);
  TH1D* hEffRatioPi = (TH1D*)hEff[1]->Clone("hEffRatioPi");
  hEffRatioPi->SetTitle("; p_{T} [GeV/c]; #epsilon_{ch}/#epsilon_{pi}");
  hEffRatioPi->Divide(hEff[0], hEff[1], 1, 1, "B");
  //  hEffRatioPi->Divide(hEff[1], hEff[0]);
  hEffRatioPi->GetXaxis()->SetRangeUser(0.0, 19.99);
  hEffRatioPi->GetYaxis()->SetRangeUser(0.8, 1.1);
  hEffRatioPi->SetStats(kTRUE);
  hEffRatioPi->Fit(effRatioPi, "", "", ptmin, ptmax);
  cEffRatioPi->SaveAs("eff_ratio_pi.gif");
  cEffRatioPi->SaveAs("eff_ratio_pi.pdf");

  TCanvas* cEffRatioK = new TCanvas("cEffRatioK", "eff K / eff all", 400, 300);
  cEffRatioK->Clear();
  TF1* effRatioK = new TF1("effRatioK", "exp(-[1]*x)+[0]", 0.0, 50.0);
  effRatioK->SetParameters(1.0, 1.0);
  effRatioK->SetLineColor(6);
  TH1D* hEffChargedRebinned = (TH1D*)hEff[0]->Clone("hEffChargedRebinned");
  hEffChargedRebinned->Rebin(2);
  TH1D* hEffRatioK = (TH1D*)hEff[2]->Clone("hEffRatioK");
  hEffRatioK->Rebin(2);
  hEffRatioK->SetTitle("; p_{T} [GeV/c]; #epsilon_{ch}/#epsilon_{K}");
  hEffRatioK->Divide(hEffChargedRebinned, hEffRatioK, 1, 1, "B");
  //  hEffRatioK->Divide(hEff[1], hEff[0]);
  hEffRatioK->GetXaxis()->SetRangeUser(0.0, 19.99);
  hEffRatioK->GetYaxis()->SetRangeUser(0.8, 1.1);
  hEffRatioK->SetStats(kTRUE);
  hEffRatioK->Fit(effRatioK, "", "", ptmin, ptmax);
  cEffRatioK->SaveAs("eff_ratio_K.gif");
  cEffRatioK->SaveAs("eff_ratio_K.pdf");
 
  TCanvas* cEffRatioP = new TCanvas("cEffRatioP", "eff p / eff all", 400, 300);
  cEffRatioP->Clear();
  TF1* effRatioP = new TF1("effRatioP", "pol0", 0.0, 50.0);
  effRatioP->SetLineColor(6);
  effRatioP->SetParameters(0.7, 0.5);
  // TH1D* hEffChargedRebinned = (TH1D*)hEff[0]->Clone("hEffChargedRebinned");
  // hEffChargedRebinned->Rebin(2);
  TH1D* hEffRatioP = (TH1D*)hEff[3]->Clone("hEffRatioP");
  hEffRatioP->Rebin(2);
  hEffRatioP->SetTitle("; p_{T} [GeV/c]; #epsilon_{ch}/#epsilon_{p}");
  hEffRatioP->Divide(hEffChargedRebinned, hEffRatioP, 1, 1, "B");
  //  hEffRatioP->Divide(hEff[1], hEff[0]);
  hEffRatioP->GetXaxis()->SetRangeUser(0.0, 19.99);
  hEffRatioP->GetYaxis()->SetRangeUser(0.8, 1.1);
  hEffRatioP->SetStats(kTRUE);
  hEffRatioP->Fit(effRatioP, "", "", ptmin, ptmax);
  cEffRatioP->SaveAs("eff_ratio_p.gif");
  cEffRatioP->SaveAs("eff_ratio_p.pdf");


  // TCanvas* cMuonRatio = new TCanvas("cMuonRatio", "muon / all", 400, 300);
  // cMuonRatio->Clear();
  // //  TF1* pionMuon = new TF1("pionMuon", "pol0", 0.0, 50.0);
  // TF1* muonRatio = new TF1("muonRatio", "pol0", 0.0, 50.0);
  // muonRatio->SetLineColor(1);
  // muonRatio->SetParameter(0, 0.01);
  // TH1D* hMuonRatio = (TH1D*)hOut[5]->Clone("hMuonRatio");
  // hMuonRatio->SetTitle("; p_{T} [GeV/c]; muon/all");
  // hMuonRatio->Divide(hOut[5], hOut[0], 1, 1, "B");
  // hMuonRatio->GetYaxis()->SetRangeUser(0.0, 0.05);
  // hMuonRatio->SetStats(kTRUE);
  // hMuonRatio->Fit(muonRatio, "", "", ptmin, ptmax);
  // cMuonRatio->SaveAs("muon_ratio.gif");
  // cMuonRatio->SaveAs("muon_ratio.pdf");

  // TCanvas* cElectronRatio = new TCanvas("cElectronRatio", "electron / all", 400, 300);
  // cElectronRatio->Clear();
  // //  TF1* pionElectron = new TF1("pionElectron", "pol0", 0.0, 50.0);
  // TF1* electronRatio = new TF1("electronRatio", "pol0", 0.0, 50.0);
  // electronRatio->SetLineColor(1);
  // electronRatio->SetParameter(0, 0.01);
  // TH1D* hElectronRatio = (TH1D*)hOut[4]->Clone("hElectronRatio");
  // hElectronRatio->SetTitle("; p_{T} [GeV/c]; electron/all");
  // hElectronRatio->Divide(hOut[4], hOut[0], 1, 1, "B");
  // hElectronRatio->GetYaxis()->SetRangeUser(0.0, 0.05);
  // hElectronRatio->SetStats(kTRUE);
  // hElectronRatio->SetMarkerColor(6);
  // hElectronRatio->Fit(electronRatio, "", "", ptmin, ptmax);
  // cElectronRatio->SaveAs("electron_ratio.gif");
  // cElectronRatio->SaveAs("electron_ratio.pdf");
  

  TFile* effFile = new TFile(effFileName, "RECREATE");
  chEff->Write();
  pionEff->Write();
  kaonEff->Write();
  protonEff->Write();
  effFile->Close();
}


//_______________________________________________________________________
void DrawCorrection(const Char_t* fileNamePYTHIA, const Char_t* fileNamePHOJET)
{
  TFile* filePYTHIA = FindFileFresh(fileNamePYTHIA);
  if(!filePYTHIA)
    return;

  TFile* filePHOJET = FindFileFresh(fileNamePHOJET);
  if(!filePHOJET)
    return;
  
  gStyle->SetOptStat(0);

  const Double_t ptmin  =  0.0;
  const Double_t ptmax  = 4.999;
  //  const Double_t ptmax  = 49.999;
  
  const Double_t effmin = 0.95;
  const Double_t effmax = 1.12;

  const Int_t nPid = 7;

  TH1D* hInPYTHIA[nPid]     = {0, 0, 0, 0, 0, 0, 0 };
  TH1D* hInPHOJET[nPid]     = {0, 0, 0, 0, 0, 0, 0 };

  for(Int_t pid = 0; pid < nPid; pid++) {

    hInPYTHIA[pid] = (TH1D*)filePYTHIA->Get(Form("hIn%d", pid));
    hInPYTHIA[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
    hInPYTHIA[pid]->GetYaxis()->SetRangeUser(effmin, effmax);

    hInPHOJET[pid] = (TH1D*)filePHOJET->Get(Form("hIn%d", pid));
    hInPHOJET[pid]->GetXaxis()->SetRangeUser(ptmin, ptmax);
    hInPHOJET[pid]->GetYaxis()->SetRangeUser(effmin, effmax);
  }

  hInPYTHIA[1]->Add(hInPYTHIA[2]);
  hInPYTHIA[1]->Add(hInPYTHIA[3]);
  hInPYTHIA[0]->Divide(hInPYTHIA[1], hInPYTHIA[0], 1, 1, "B");

  TH1D* histPYTHIA = HistInvert(hInPYTHIA[0]);
  histPYTHIA->SetLineColor(2);
  histPYTHIA->SetMarkerColor(2);

  hInPHOJET[1]->Add(hInPHOJET[2]);
  hInPHOJET[1]->Add(hInPHOJET[3]);
  hInPHOJET[0]->Divide(hInPHOJET[1], hInPHOJET[0], 1, 1, "B");

  TH1D* histPHOJET = HistInvert(hInPHOJET[0]);
  histPHOJET->SetLineColor(4);
  histPHOJET->SetMarkerColor(4);

  TCanvas* cChCorrection = new TCanvas("cChCorrection", "All efficiency", 400, 300);
  cChCorrection->Clear();

  cChCorrection->SetGridy();

  histPYTHIA->GetYaxis()->SetRangeUser(effmin, effmax);
  histPYTHIA->SetTitle("N_{ch}/(#pi + K + p) for primaries at generator level; p_{T} [GeV/c]; Ratio");
  histPYTHIA->Draw();

  histPHOJET->Draw("SAME");

  TLegend* legend = new TLegend(0.55, 0.22, 0.79, 0.42);    
  legend->SetBorderSize(0);
  legend->SetFillColor(0);
  legend->AddEntry(histPYTHIA, "PYTHIA", "P");
  legend->AddEntry(histPHOJET, "PHOJET", "P");
  legend->Draw();
  
  cChCorrection->SaveAs("charged_over_piKp.gif");

  TFile* file = new TFile("correction.root", "RECREATE");
  histPYTHIA->SetName("histPYTHIA");
  histPHOJET->SetName("histPHOJET");
  histPYTHIA->Write();
  histPHOJET->Write();
  file->Close();
}

//_______________________________________________________________________
TH1D* HistInvert(TH1D* hist)
{
  TH1D* histNew = new TH1D(*hist);
  histNew->Reset();
  histNew->SetName(Form("%s_inv", hist->GetName()));
  histNew->SetTitle(Form("%s (inverted)", hist->GetTitle()));
  
  const Int_t nBins = hist->GetNbinsX();
  
  for(Int_t i = 1; i <= nBins; i++) {
    
    if(hist->GetBinContent(i) == 0)
      continue;

    histNew->SetBinContent(i, 1.0/hist->GetBinContent(i));
    histNew->SetBinError(i, hist->GetBinError(i)/hist->GetBinContent(i)/hist->GetBinContent(i));
  }

  return histNew;
}
 createEfficiency.C:1
 createEfficiency.C:2
 createEfficiency.C:3
 createEfficiency.C:4
 createEfficiency.C:5
 createEfficiency.C:6
 createEfficiency.C:7
 createEfficiency.C:8
 createEfficiency.C:9
 createEfficiency.C:10
 createEfficiency.C:11
 createEfficiency.C:12
 createEfficiency.C:13
 createEfficiency.C:14
 createEfficiency.C:15
 createEfficiency.C:16
 createEfficiency.C:17
 createEfficiency.C:18
 createEfficiency.C:19
 createEfficiency.C:20
 createEfficiency.C:21
 createEfficiency.C:22
 createEfficiency.C:23
 createEfficiency.C:24
 createEfficiency.C:25
 createEfficiency.C:26
 createEfficiency.C:27
 createEfficiency.C:28
 createEfficiency.C:29
 createEfficiency.C:30
 createEfficiency.C:31
 createEfficiency.C:32
 createEfficiency.C:33
 createEfficiency.C:34
 createEfficiency.C:35
 createEfficiency.C:36
 createEfficiency.C:37
 createEfficiency.C:38
 createEfficiency.C:39
 createEfficiency.C:40
 createEfficiency.C:41
 createEfficiency.C:42
 createEfficiency.C:43
 createEfficiency.C:44
 createEfficiency.C:45
 createEfficiency.C:46
 createEfficiency.C:47
 createEfficiency.C:48
 createEfficiency.C:49
 createEfficiency.C:50
 createEfficiency.C:51
 createEfficiency.C:52
 createEfficiency.C:53
 createEfficiency.C:54
 createEfficiency.C:55
 createEfficiency.C:56
 createEfficiency.C:57
 createEfficiency.C:58
 createEfficiency.C:59
 createEfficiency.C:60
 createEfficiency.C:61
 createEfficiency.C:62
 createEfficiency.C:63
 createEfficiency.C:64
 createEfficiency.C:65
 createEfficiency.C:66
 createEfficiency.C:67
 createEfficiency.C:68
 createEfficiency.C:69
 createEfficiency.C:70
 createEfficiency.C:71
 createEfficiency.C:72
 createEfficiency.C:73
 createEfficiency.C:74
 createEfficiency.C:75
 createEfficiency.C:76
 createEfficiency.C:77
 createEfficiency.C:78
 createEfficiency.C:79
 createEfficiency.C:80
 createEfficiency.C:81
 createEfficiency.C:82
 createEfficiency.C:83
 createEfficiency.C:84
 createEfficiency.C:85
 createEfficiency.C:86
 createEfficiency.C:87
 createEfficiency.C:88
 createEfficiency.C:89
 createEfficiency.C:90
 createEfficiency.C:91
 createEfficiency.C:92
 createEfficiency.C:93
 createEfficiency.C:94
 createEfficiency.C:95
 createEfficiency.C:96
 createEfficiency.C:97
 createEfficiency.C:98
 createEfficiency.C:99
 createEfficiency.C:100
 createEfficiency.C:101
 createEfficiency.C:102
 createEfficiency.C:103
 createEfficiency.C:104
 createEfficiency.C:105
 createEfficiency.C:106
 createEfficiency.C:107
 createEfficiency.C:108
 createEfficiency.C:109
 createEfficiency.C:110
 createEfficiency.C:111
 createEfficiency.C:112
 createEfficiency.C:113
 createEfficiency.C:114
 createEfficiency.C:115
 createEfficiency.C:116
 createEfficiency.C:117
 createEfficiency.C:118
 createEfficiency.C:119
 createEfficiency.C:120
 createEfficiency.C:121
 createEfficiency.C:122
 createEfficiency.C:123
 createEfficiency.C:124
 createEfficiency.C:125
 createEfficiency.C:126
 createEfficiency.C:127
 createEfficiency.C:128
 createEfficiency.C:129
 createEfficiency.C:130
 createEfficiency.C:131
 createEfficiency.C:132
 createEfficiency.C:133
 createEfficiency.C:134
 createEfficiency.C:135
 createEfficiency.C:136
 createEfficiency.C:137
 createEfficiency.C:138
 createEfficiency.C:139
 createEfficiency.C:140
 createEfficiency.C:141
 createEfficiency.C:142
 createEfficiency.C:143
 createEfficiency.C:144
 createEfficiency.C:145
 createEfficiency.C:146
 createEfficiency.C:147
 createEfficiency.C:148
 createEfficiency.C:149
 createEfficiency.C:150
 createEfficiency.C:151
 createEfficiency.C:152
 createEfficiency.C:153
 createEfficiency.C:154
 createEfficiency.C:155
 createEfficiency.C:156
 createEfficiency.C:157
 createEfficiency.C:158
 createEfficiency.C:159
 createEfficiency.C:160
 createEfficiency.C:161
 createEfficiency.C:162
 createEfficiency.C:163
 createEfficiency.C:164
 createEfficiency.C:165
 createEfficiency.C:166
 createEfficiency.C:167
 createEfficiency.C:168
 createEfficiency.C:169
 createEfficiency.C:170
 createEfficiency.C:171
 createEfficiency.C:172
 createEfficiency.C:173
 createEfficiency.C:174
 createEfficiency.C:175
 createEfficiency.C:176
 createEfficiency.C:177
 createEfficiency.C:178
 createEfficiency.C:179
 createEfficiency.C:180
 createEfficiency.C:181
 createEfficiency.C:182
 createEfficiency.C:183
 createEfficiency.C:184
 createEfficiency.C:185
 createEfficiency.C:186
 createEfficiency.C:187
 createEfficiency.C:188
 createEfficiency.C:189
 createEfficiency.C:190
 createEfficiency.C:191
 createEfficiency.C:192
 createEfficiency.C:193
 createEfficiency.C:194
 createEfficiency.C:195
 createEfficiency.C:196
 createEfficiency.C:197
 createEfficiency.C:198
 createEfficiency.C:199
 createEfficiency.C:200
 createEfficiency.C:201
 createEfficiency.C:202
 createEfficiency.C:203
 createEfficiency.C:204
 createEfficiency.C:205
 createEfficiency.C:206
 createEfficiency.C:207
 createEfficiency.C:208
 createEfficiency.C:209
 createEfficiency.C:210
 createEfficiency.C:211
 createEfficiency.C:212
 createEfficiency.C:213
 createEfficiency.C:214
 createEfficiency.C:215
 createEfficiency.C:216
 createEfficiency.C:217
 createEfficiency.C:218
 createEfficiency.C:219
 createEfficiency.C:220
 createEfficiency.C:221
 createEfficiency.C:222
 createEfficiency.C:223
 createEfficiency.C:224
 createEfficiency.C:225
 createEfficiency.C:226
 createEfficiency.C:227
 createEfficiency.C:228
 createEfficiency.C:229
 createEfficiency.C:230
 createEfficiency.C:231
 createEfficiency.C:232
 createEfficiency.C:233
 createEfficiency.C:234
 createEfficiency.C:235
 createEfficiency.C:236
 createEfficiency.C:237
 createEfficiency.C:238
 createEfficiency.C:239
 createEfficiency.C:240
 createEfficiency.C:241
 createEfficiency.C:242
 createEfficiency.C:243
 createEfficiency.C:244
 createEfficiency.C:245
 createEfficiency.C:246
 createEfficiency.C:247
 createEfficiency.C:248
 createEfficiency.C:249
 createEfficiency.C:250
 createEfficiency.C:251
 createEfficiency.C:252
 createEfficiency.C:253
 createEfficiency.C:254
 createEfficiency.C:255
 createEfficiency.C:256
 createEfficiency.C:257
 createEfficiency.C:258
 createEfficiency.C:259
 createEfficiency.C:260
 createEfficiency.C:261
 createEfficiency.C:262
 createEfficiency.C:263
 createEfficiency.C:264
 createEfficiency.C:265
 createEfficiency.C:266
 createEfficiency.C:267
 createEfficiency.C:268
 createEfficiency.C:269
 createEfficiency.C:270
 createEfficiency.C:271
 createEfficiency.C:272
 createEfficiency.C:273
 createEfficiency.C:274
 createEfficiency.C:275
 createEfficiency.C:276
 createEfficiency.C:277
 createEfficiency.C:278
 createEfficiency.C:279
 createEfficiency.C:280
 createEfficiency.C:281
 createEfficiency.C:282
 createEfficiency.C:283
 createEfficiency.C:284
 createEfficiency.C:285
 createEfficiency.C:286
 createEfficiency.C:287
 createEfficiency.C:288
 createEfficiency.C:289
 createEfficiency.C:290
 createEfficiency.C:291
 createEfficiency.C:292
 createEfficiency.C:293
 createEfficiency.C:294
 createEfficiency.C:295
 createEfficiency.C:296
 createEfficiency.C:297
 createEfficiency.C:298
 createEfficiency.C:299
 createEfficiency.C:300
 createEfficiency.C:301
 createEfficiency.C:302
 createEfficiency.C:303
 createEfficiency.C:304
 createEfficiency.C:305
 createEfficiency.C:306
 createEfficiency.C:307
 createEfficiency.C:308
 createEfficiency.C:309
 createEfficiency.C:310
 createEfficiency.C:311
 createEfficiency.C:312
 createEfficiency.C:313
 createEfficiency.C:314
 createEfficiency.C:315
 createEfficiency.C:316
 createEfficiency.C:317
 createEfficiency.C:318
 createEfficiency.C:319
 createEfficiency.C:320
 createEfficiency.C:321
 createEfficiency.C:322
 createEfficiency.C:323
 createEfficiency.C:324
 createEfficiency.C:325
 createEfficiency.C:326
 createEfficiency.C:327
 createEfficiency.C:328
 createEfficiency.C:329
 createEfficiency.C:330
 createEfficiency.C:331
 createEfficiency.C:332
 createEfficiency.C:333
 createEfficiency.C:334
 createEfficiency.C:335
 createEfficiency.C:336
 createEfficiency.C:337
 createEfficiency.C:338
 createEfficiency.C:339
 createEfficiency.C:340
 createEfficiency.C:341
 createEfficiency.C:342
 createEfficiency.C:343
 createEfficiency.C:344
 createEfficiency.C:345
 createEfficiency.C:346
 createEfficiency.C:347
 createEfficiency.C:348
 createEfficiency.C:349
 createEfficiency.C:350
 createEfficiency.C:351
 createEfficiency.C:352
 createEfficiency.C:353
 createEfficiency.C:354
 createEfficiency.C:355
 createEfficiency.C:356
 createEfficiency.C:357
 createEfficiency.C:358
 createEfficiency.C:359
 createEfficiency.C:360
 createEfficiency.C:361
 createEfficiency.C:362
 createEfficiency.C:363
 createEfficiency.C:364
 createEfficiency.C:365
 createEfficiency.C:366
 createEfficiency.C:367
 createEfficiency.C:368
 createEfficiency.C:369
 createEfficiency.C:370
 createEfficiency.C:371
 createEfficiency.C:372
 createEfficiency.C:373
 createEfficiency.C:374
 createEfficiency.C:375
 createEfficiency.C:376
 createEfficiency.C:377
 createEfficiency.C:378
 createEfficiency.C:379
 createEfficiency.C:380
 createEfficiency.C:381
 createEfficiency.C:382
 createEfficiency.C:383
 createEfficiency.C:384
 createEfficiency.C:385
 createEfficiency.C:386
 createEfficiency.C:387
 createEfficiency.C:388
 createEfficiency.C:389
 createEfficiency.C:390
 createEfficiency.C:391
 createEfficiency.C:392
 createEfficiency.C:393
 createEfficiency.C:394
 createEfficiency.C:395
 createEfficiency.C:396
 createEfficiency.C:397
 createEfficiency.C:398
 createEfficiency.C:399
 createEfficiency.C:400
 createEfficiency.C:401
 createEfficiency.C:402
 createEfficiency.C:403
 createEfficiency.C:404
 createEfficiency.C:405
 createEfficiency.C:406
 createEfficiency.C:407
 createEfficiency.C:408
 createEfficiency.C:409
 createEfficiency.C:410
 createEfficiency.C:411
 createEfficiency.C:412
 createEfficiency.C:413
 createEfficiency.C:414
 createEfficiency.C:415
 createEfficiency.C:416
 createEfficiency.C:417
 createEfficiency.C:418
 createEfficiency.C:419
 createEfficiency.C:420
 createEfficiency.C:421
 createEfficiency.C:422
 createEfficiency.C:423
 createEfficiency.C:424
 createEfficiency.C:425
 createEfficiency.C:426
 createEfficiency.C:427
 createEfficiency.C:428
 createEfficiency.C:429
 createEfficiency.C:430
 createEfficiency.C:431
 createEfficiency.C:432
 createEfficiency.C:433
 createEfficiency.C:434
 createEfficiency.C:435
 createEfficiency.C:436
 createEfficiency.C:437
 createEfficiency.C:438
 createEfficiency.C:439
 createEfficiency.C:440
 createEfficiency.C:441
 createEfficiency.C:442
 createEfficiency.C:443
 createEfficiency.C:444
 createEfficiency.C:445
 createEfficiency.C:446
 createEfficiency.C:447
 createEfficiency.C:448
 createEfficiency.C:449
 createEfficiency.C:450
 createEfficiency.C:451
 createEfficiency.C:452
 createEfficiency.C:453
 createEfficiency.C:454
 createEfficiency.C:455
 createEfficiency.C:456
 createEfficiency.C:457
 createEfficiency.C:458
 createEfficiency.C:459
 createEfficiency.C:460
 createEfficiency.C:461
 createEfficiency.C:462
 createEfficiency.C:463
 createEfficiency.C:464
 createEfficiency.C:465
 createEfficiency.C:466
 createEfficiency.C:467
 createEfficiency.C:468
 createEfficiency.C:469
 createEfficiency.C:470
 createEfficiency.C:471
 createEfficiency.C:472
 createEfficiency.C:473
 createEfficiency.C:474
 createEfficiency.C:475
 createEfficiency.C:476
 createEfficiency.C:477
 createEfficiency.C:478
 createEfficiency.C:479
 createEfficiency.C:480
 createEfficiency.C:481
 createEfficiency.C:482
 createEfficiency.C:483
 createEfficiency.C:484
 createEfficiency.C:485
 createEfficiency.C:486
 createEfficiency.C:487
 createEfficiency.C:488
 createEfficiency.C:489
 createEfficiency.C:490
 createEfficiency.C:491
 createEfficiency.C:492
 createEfficiency.C:493
 createEfficiency.C:494
 createEfficiency.C:495
 createEfficiency.C:496
 createEfficiency.C:497
 createEfficiency.C:498
 createEfficiency.C:499
 createEfficiency.C:500
 createEfficiency.C:501
 createEfficiency.C:502
 createEfficiency.C:503
 createEfficiency.C:504
 createEfficiency.C:505
 createEfficiency.C:506
 createEfficiency.C:507
 createEfficiency.C:508
 createEfficiency.C:509
 createEfficiency.C:510
 createEfficiency.C:511
 createEfficiency.C:512
 createEfficiency.C:513
 createEfficiency.C:514
 createEfficiency.C:515
 createEfficiency.C:516
 createEfficiency.C:517
 createEfficiency.C:518
 createEfficiency.C:519
 createEfficiency.C:520
 createEfficiency.C:521
 createEfficiency.C:522
 createEfficiency.C:523
 createEfficiency.C:524
 createEfficiency.C:525
 createEfficiency.C:526
 createEfficiency.C:527
 createEfficiency.C:528
 createEfficiency.C:529
 createEfficiency.C:530
 createEfficiency.C:531
 createEfficiency.C:532
 createEfficiency.C:533
 createEfficiency.C:534
 createEfficiency.C:535
 createEfficiency.C:536
 createEfficiency.C:537
 createEfficiency.C:538
 createEfficiency.C:539
 createEfficiency.C:540
 createEfficiency.C:541
 createEfficiency.C:542
 createEfficiency.C:543
 createEfficiency.C:544
 createEfficiency.C:545
 createEfficiency.C:546
 createEfficiency.C:547
 createEfficiency.C:548
 createEfficiency.C:549
 createEfficiency.C:550
 createEfficiency.C:551
 createEfficiency.C:552
 createEfficiency.C:553
 createEfficiency.C:554
 createEfficiency.C:555
 createEfficiency.C:556
 createEfficiency.C:557
 createEfficiency.C:558
 createEfficiency.C:559
 createEfficiency.C:560
 createEfficiency.C:561
 createEfficiency.C:562
 createEfficiency.C:563
 createEfficiency.C:564
 createEfficiency.C:565
 createEfficiency.C:566
 createEfficiency.C:567
 createEfficiency.C:568
 createEfficiency.C:569
 createEfficiency.C:570
 createEfficiency.C:571
 createEfficiency.C:572
 createEfficiency.C:573
 createEfficiency.C:574
 createEfficiency.C:575
 createEfficiency.C:576
 createEfficiency.C:577
 createEfficiency.C:578
 createEfficiency.C:579
 createEfficiency.C:580
 createEfficiency.C:581
 createEfficiency.C:582
 createEfficiency.C:583
 createEfficiency.C:584
 createEfficiency.C:585
 createEfficiency.C:586
 createEfficiency.C:587
 createEfficiency.C:588
 createEfficiency.C:589
 createEfficiency.C:590
 createEfficiency.C:591
 createEfficiency.C:592
 createEfficiency.C:593
 createEfficiency.C:594
 createEfficiency.C:595
 createEfficiency.C:596
 createEfficiency.C:597
 createEfficiency.C:598
 createEfficiency.C:599
 createEfficiency.C:600
 createEfficiency.C:601
 createEfficiency.C:602
 createEfficiency.C:603
 createEfficiency.C:604
 createEfficiency.C:605
 createEfficiency.C:606
 createEfficiency.C:607
 createEfficiency.C:608
 createEfficiency.C:609
 createEfficiency.C:610
 createEfficiency.C:611
 createEfficiency.C:612
 createEfficiency.C:613
 createEfficiency.C:614
 createEfficiency.C:615
 createEfficiency.C:616
 createEfficiency.C:617
 createEfficiency.C:618
 createEfficiency.C:619
 createEfficiency.C:620
 createEfficiency.C:621
 createEfficiency.C:622
 createEfficiency.C:623
 createEfficiency.C:624
 createEfficiency.C:625
 createEfficiency.C:626
 createEfficiency.C:627
 createEfficiency.C:628
 createEfficiency.C:629
 createEfficiency.C:630
 createEfficiency.C:631
 createEfficiency.C:632
 createEfficiency.C:633
 createEfficiency.C:634
 createEfficiency.C:635
 createEfficiency.C:636
 createEfficiency.C:637
 createEfficiency.C:638
 createEfficiency.C:639
 createEfficiency.C:640
 createEfficiency.C:641
 createEfficiency.C:642
 createEfficiency.C:643
 createEfficiency.C:644
 createEfficiency.C:645
 createEfficiency.C:646
 createEfficiency.C:647
 createEfficiency.C:648
 createEfficiency.C:649
 createEfficiency.C:650
 createEfficiency.C:651
 createEfficiency.C:652
 createEfficiency.C:653
 createEfficiency.C:654
 createEfficiency.C:655
 createEfficiency.C:656
 createEfficiency.C:657
 createEfficiency.C:658
 createEfficiency.C:659
 createEfficiency.C:660
 createEfficiency.C:661
 createEfficiency.C:662
 createEfficiency.C:663
 createEfficiency.C:664
 createEfficiency.C:665
 createEfficiency.C:666
 createEfficiency.C:667
 createEfficiency.C:668
 createEfficiency.C:669
 createEfficiency.C:670
 createEfficiency.C:671
 createEfficiency.C:672
 createEfficiency.C:673
 createEfficiency.C:674
 createEfficiency.C:675
 createEfficiency.C:676
 createEfficiency.C:677
 createEfficiency.C:678
 createEfficiency.C:679
 createEfficiency.C:680
 createEfficiency.C:681
 createEfficiency.C:682
 createEfficiency.C:683
 createEfficiency.C:684
 createEfficiency.C:685
 createEfficiency.C:686
 createEfficiency.C:687
 createEfficiency.C:688
 createEfficiency.C:689
 createEfficiency.C:690
 createEfficiency.C:691
 createEfficiency.C:692
 createEfficiency.C:693
 createEfficiency.C:694
 createEfficiency.C:695
 createEfficiency.C:696
 createEfficiency.C:697
 createEfficiency.C:698