ROOT logo
void CorrectForEfficiencypp(const char *filedata,const char *fileMC);
void CorrectForEfficiencyBeauty(const char *filedata,const char *fileMC, const char *fileMCbg);
TList *GetResults(const Char_t *testfile,const Char_t *plus="");
TList *GetQA(const Char_t *testfile,const Char_t *plus="");
TObject* GetSpectrum(AliCFContainer *c, Int_t step);
THnSparseF* GetHadronEffbyIPcut(TList *hfeqa);
void CorrectFromTheWidth(TH1D *h1);


void CorrectForEfficiencypp(const char *filedata,const char *fileMC) {
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////
  // Will produce finalSpectrum.root with results inside
  // TGraphErrors UnfoldingCorrectedSpectrum -> unfolding procedure (doesn't work in 2D with trunk)
  // TGraphErrors AlltogetherSpectrum -> corrected spectrum with other method
  // TH1D RatioUnfoldingAlltogetherSpectrum 
  // THnSparseF UnfoldingCorrectedNotNormalizedSpectrum -> unfolding procedure not yet normalized
  // AliCFDataGrid AlltogetherCorrectedNotNormalizedSpectrum -> other method not yet normalized
  ///////////////////////////////////////////////////////////////////////////////////////////////////////

  gStyle->SetPalette(1);
  gStyle->SetOptStat(1111);
  gStyle->SetPadBorderMode(0);
  gStyle->SetCanvasColor(10);
  gStyle->SetPadLeftMargin(0.13);
  gStyle->SetPadRightMargin(0.13);

  /////////////////////
  // Take the stuff
  /////////////////////
  
  TList *resultsdata = GetResults(filedata,"_PID2");
  //TList *resultsdata = GetResults(filedata);
  if(!resultsdata){
    printf("No output objects for data: Calculation will terminate here\n");
    return;
  }

  ///////////////////////////////////////////////////////////
  // Event container for the normalization to CINB1
  // Take the number of events as function of z and number of contributors
  // For those without primary vertex from tracks, take the fraction in the z range from MC
  // For 10cm: LHC10f6a (88.0756%), LHC10f6 (86.7461%)
  ////////////////////////////////////////////////////////////

  AliCFContainer *containerdata = (AliCFContainer *) resultsdata->FindObject("eventContainer");
  if(!containerdata) {
    printf("No container \n");
    return;
  }
  AliCFDataGrid *dataGrid = (AliCFDataGrid *) GetSpectrum(containerdata,AliHFEcuts::kEventStepZRange);
  TH2D *spectrum_zrange = (TH2D *) dataGrid->Project(0,2);
  TH1D *spectrum1Da = (TH1D *) spectrum_zrange->ProjectionX("bin0",1,1);
  TH1D *spectrum1Db = (TH1D *) spectrum_zrange->ProjectionX("bin>0",2,12);
  TH1D *spectrum1Dc = (TH1D *) spectrum_zrange->ProjectionX("total");
  Double_t nbinbin0 = spectrum1Da->Integral();
  Double_t nbinnobin0 = spectrum1Db->Integral();
  Double_t nbintotal = spectrum1Dc->Integral();
  

  Float_t numberofentries = nbinnobin0+nbinbin0*0.880756;
  printf("Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0,nbinnobin0,nbintotal,numberofentries);
  

  //////////////////////////////
  // Take more stuff
  ///////////////////////////////
 
  
  TList *resultsmc = GetResults(fileMC,"_PID2");
  //TList *resultsmc = GetResults(fileMC);
  if(!resultsmc){
    printf("No output objects for mc: Calculation will terminate here\n");
    return;
  }

  AliHFEcontainer *datahfecontainer = (AliHFEcontainer *) resultsdata->FindObject("trackContainer");
  if(!datahfecontainer) {
    printf("No container for data \n");
    return;
  }
  AliCFContainer *sumcontainer = datahfecontainer->GetCFContainer("recTrackContReco");


  ////////////////////////////////////////////
  //Plot raw spectrum for TPC TOF scenario
  ////////////////////////////////////////////
  AliCFDataGrid *dataGrida = (AliCFDataGrid *) GetSpectrum(sumcontainer,AliHFEcuts::kStepHFEcutsTRD + 2);
  TH1D *spectrumpt =  (TH1D *) dataGrida->Project(0);
  CorrectFromTheWidth(spectrumpt);
  
  TH1D *total = new TH1D("total","",1,0.3,4.3);
  total->SetMaximum(1.0e+07);
  total->SetMinimum(1000);
  total->SetXTitle("p_{T} [GeV/c]");
  total->SetYTitle("dN/dp_{T}[GeV/c]^{-1}");
  total->SetTitleOffset(1.5,"Y");
  //total->Scale(0.9);
  total->GetXaxis()->SetRangeUser(0.38,4.3);
   

  TCanvas *c1test = new TCanvas("rawspectrum","rawspectrum",800,800);
  c1test->cd(1);
  gPad->SetLeftMargin(0.13);
  gPad->SetLogy();
  gPad->SetTicks();
  //gPad->SetGridx();
  //gPad->SetGridy();
  gPad->SetFillColor(10);
  gPad->SetFrameFillColor(10);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(1111);
  gStyle->SetOptTitle(0);
  total->SetStats(0);
  spectrumpt->SetStats(0);
  total->Draw();
  spectrumpt->Draw("same");
  TPaveText* t1=new TPaveText(0.49,0.45,0.79,0.52,"NDC");
  t1->SetFillStyle(0);
  t1->SetBorderSize(0);
  t1->AddText(0.,0.,"pp, #sqrt{s} =  7 TeV");
  t1->SetTextColor(kRed);
  //t1->SetTextSize(20);
  t1->SetTextFont(42);
  t1->Draw();
  TPaveText* t2=new TPaveText(0.49,0.35,0.79,0.42,"NDC");
  t2->SetFillStyle(0);
  t2->SetBorderSize(0);
  t2->AddText(0.,0.,"L = 2.6 nb^{-1}");
  t2->SetTextColor(kRed);
  //t1->SetTextSize(20);
  t2->SetTextFont(42);
  t2->Draw();
  TPaveText* t3=new TPaveText(0.49,0.35,0.79,0.42,"NDC");
  t3->SetFillStyle(0);
  t3->SetBorderSize(0);
  t3->AddText(0.,0.,"|#eta| < 0.8");
  t3->SetTextColor(kRed);
  //t1->SetTextSize(20);
  t3->SetTextFont(42);
  t3->Draw();
  
  /////////////////////////////
  // Check number of events
  /////////////////////////////


  Int_t numberOfEventsafterallcuts = (Int_t) datahfecontainer->GetNumberOfEvents();
   
  printf("Number of events not corrected %d\n",numberOfEventsafterallcuts);
  printf("Number of events corrected  %f\n",numberofentries);

  AliHFEcontainer *mchfecontainer = (AliHFEcontainer *) resultsmc->FindObject("trackContainer");
  if(!mchfecontainer) {
    printf("No mc container \n");
    return;
  }
 
  printf("Find the container V0\n");   
  AliHFEcontainer *containerhfeV0 = (AliHFEcontainer *) resultsdata->FindObject("containerV0");
  if(!containerhfeV0) {
    printf("No hfe container \n");
    return;
  }
    
  //////////////
  // Correct
  /////////////

  AliHFEspectrum *spectrum = new AliHFEspectrum("HFEspectrum");
  spectrum->SetNbDimensions(2);
  // If you want to correct positive (0) or negative (1) separately
  //spectrum->SetChargeChoosen(0);
  spectrum->SetUnSetCorrelatedErrors(kTRUE);
  spectrum->SetDebugLevel(1);
  spectrum->SetNumberOfEvents((Int_t)numberofentries);
  spectrum->SetDumpToFile(kTRUE);
  // True step in MC (events in range +- 10 cm and no pile up)
  spectrum->SetMCTruthStep(AliHFEcuts::kStepMCGeneratedZOutNoPileUpCentralityFine);
  // Step where we correct from MC (tracking + TOF)
  spectrum->SetMCEffStep(AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepHFEcutsTRD + 1);
  // Step from data we correct for
  spectrum->SetStepToCorrect(AliHFEcuts::kStepHFEcutsTRD + 2);
  // Steps to be corrected with V0 (TPC PID only)
  spectrum->SetStepBeforeCutsV0(AliHFEcuts::kStepHFEcutsTRD + 1);
  spectrum->SetStepAfterCutsV0(AliHFEcuts::kStepHFEcutsTRD + 2);

  // Place for a correction as an efficiency parametrized as function of pt of pt,eta,phi or p=pt
  //TF1 *hEfficiency = new TF1("efficiency", "[0]", 0., 20.);
  //hEfficiency->SetParameter(0, 0.5);
  //spectrum->SetEfficiencyFunction(hEfficiency);
  
  // Give everything (data container, mc container and V0 data container)
  spectrum->Init(datahfecontainer,mchfecontainer,containerhfeV0);
    
  // kTRUE means subtract hadron background, kFALSE means do not subtract hadron background
  spectrum->Correct(kTRUE);
  

}

//_____________________________________________________________________
void CorrectForEfficiencyBeauty(const char *filedata,const char *fileMC, const char *fileMCbg) {
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////
  // Will produce finalSpectrum.root with results inside
  // TGraphErrors UnfoldingCorrectedSpectrum -> unfolding procedure (doesn't work in 2D with trunk)
  // TGraphErrors AlltogetherSpectrum -> corrected spectrum with other method
  // TH1D RatioUnfoldingAlltogetherSpectrum 
  // THnSparseF UnfoldingCorrectedNotNormalizedSpectrum -> unfolding procedure not yet normalized
  // AliCFDataGrid AlltogetherCorrectedNotNormalizedSpectrum -> other method not yet normalized
  ///////////////////////////////////////////////////////////////////////////////////////////////////////

  gStyle->SetPalette(1);
  gStyle->SetOptStat(1111);
  gStyle->SetPadBorderMode(0);
  gStyle->SetCanvasColor(10);
  gStyle->SetPadLeftMargin(0.13);
  gStyle->SetPadRightMargin(0.13);

  /////////////////////
  // Take the stuff
  /////////////////////

  TList *resultsdata = GetResults(filedata,"_PID2");
  //TList *resultsdata = GetResults(filedata);
  if(!resultsdata){
    printf("No output objects for data: Calculation will terminate here\n");
    return;
  }
  ///////////////////////////////////////////////////////////
  // Event container for the normalization to CINB1
  // Take the number of events as function of z and number of contributors
  // For those without primary vertex from tracks, take the fraction in the z range from MC
  // For 10cm: LHC10f6a (88.0756%), LHC10f6 (86.7461%)
  ////////////////////////////////////////////////////////////

  AliCFContainer *containerdata = (AliCFContainer *) resultsdata->FindObject("eventContainer");
  if(!containerdata) {
    printf("No container \n");
    return;
  }
  AliCFDataGrid *dataGrid = (AliCFDataGrid *) GetSpectrum(containerdata,AliHFEcuts::kEventStepZRange);
  TH2D *spectrum_zrange = (TH2D *) dataGrid->Project(0,2);
  TH1D *spectrum1Da = (TH1D *) spectrum_zrange->ProjectionX("bin0",1,1);
  TH1D *spectrum1Db = (TH1D *) spectrum_zrange->ProjectionX("bin>0",2,12);
  TH1D *spectrum1Dc = (TH1D *) spectrum_zrange->ProjectionX("total");
  Double_t nbinbin0 = spectrum1Da->Integral();
  Double_t nbinnobin0 = spectrum1Db->Integral();
  Double_t nbintotal = spectrum1Dc->Integral();

  Float_t numberofentries = nbinnobin0+nbinbin0*0.880756;
  printf("Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0,nbinnobin0,nbintotal,numberofentries);


  AliHFEcontainer *datahfecontainer = (AliHFEcontainer *) resultsdata->FindObject("trackContainer");
  if(!datahfecontainer) {
    printf("No container for data \n");
    return;
  }


  //////////////////////////////
  // Check MC # of events
  ///////////////////////////////

  TList *resultsmc = GetResults(fileMC,"_PID2");
  if(!resultsmc){
    printf("No output objects for mc: Calculation will terminate here\n");
    return;
  }

  AliCFContainer *containermc = (AliCFContainer *) resultsmc->FindObject("eventContainer");
  if(!containermc) {
    printf("No container \n");
    return;
  }
  AliCFDataGrid *mcGrid = (AliCFDataGrid *) GetSpectrum(containermc,AliHFEcuts::kEventStepZRange);
  TH2D *spectrum_zrangemc = (TH2D *) mcGrid->Project(0,2);
  TH1D *spectrum1Damc = (TH1D *) spectrum_zrangemc->ProjectionX("bin0",1,1);
  TH1D *spectrum1Dbmc = (TH1D *) spectrum_zrangemc->ProjectionX("bin>0",2,12);
  TH1D *spectrum1Dcmc = (TH1D *) spectrum_zrangemc->ProjectionX("total");
  Double_t nbinbin0mc = spectrum1Damc->Integral();
  Double_t nbinnobin0mc = spectrum1Dbmc->Integral();
  Double_t nbintotalmc = spectrum1Dcmc->Integral();

  Float_t numberofentriesmc = nbinnobin0mc+nbinbin0mc*0.880756;
  printf("MC: Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0mc,nbinnobin0mc,nbintotalmc,numberofentriesmc);



  /////////////////////////////
  // Check number of events
  /////////////////////////////

  Int_t numberOfEventsafterallcuts = (Int_t) datahfecontainer->GetNumberOfEvents();

  printf("Number of events not corrected %d\n",numberOfEventsafterallcuts);
  printf("Number of events corrected  %f\n",numberofentries);

  AliHFEcontainer *mchfecontainer = (AliHFEcontainer *) resultsmc->FindObject("trackContainer");
  if(!mchfecontainer) {
    printf("No mc container \n");
    return;
  }

  printf("Find the container V0\n");
  AliHFEcontainer *containerhfeV0 = (AliHFEcontainer *) resultsdata->FindObject("containerV0");
  if(!containerhfeV0) {
    printf("No hfe container \n");
    return;
  }

  // nonHFE backgrounds
  TList *resultsmcbg = GetResults(fileMCbg,"_PID2");
  if(!resultsmcbg){
    printf("No output objects for mc: Calculation will terminate here\n");    return;
  }  
  AliHFEcontainer *mcbghfecontainer = (AliHFEcontainer *) resultsmcbg->FindObject("trackContainer");
  if(!mcbghfecontainer) {
    printf("No mc container \n");
    return;
  }

  AliCFContainer *containermcbg = (AliCFContainer *) resultsmcbg->FindObject("eventContainer");
  if(!containermcbg) {
    printf("No container \n");
    return;
  }

  AliCFDataGrid *mcbgGrid = (AliCFDataGrid *) GetSpectrum(containermcbg,AliHFEcuts::kEventStepZRange);
  TH2D *spectrum_zrangemcbg = (TH2D *) mcbgGrid->Project(0,2);
  TH1D *spectrum1Damcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("bin0",1,1);
  TH1D *spectrum1Dbmcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("bin>0",2,12);
  TH1D *spectrum1Dcmcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("total");
  Double_t nbinbin0mcbg = spectrum1Damcbg->Integral();
  Double_t nbinnobin0mcbg = spectrum1Dbmcbg->Integral();
  Double_t nbintotalmcbg = spectrum1Dcmcbg->Integral();

  Float_t numberofentriesmcbg = nbinnobin0mcbg+nbinbin0mcbg*0.880756;
  printf("MCbg: Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0mcbg,nbinnobin0mcbg,nbintotalmcbg,numberofentriesmcbg);


  // hadron contamination after IP cuts
  TList *hfeqa = GetQA(fileMC,"_PID2");
  THnSparseF* hsHadronEffbyIPcut = (THnSparseF* )GetHadronEffbyIPcut(hfeqa);

  //////////////
  // Correct
  /////////////

  AliHFEspectrum *spectrum = new AliHFEspectrum("HFEspectrum");

  spectrum->SetBeautyAnalysis();
  // Enable background subtraction
  spectrum->EnableIPanaHadronBgSubtract();
  spectrum->EnableIPanaCharmBgSubtract();
  spectrum->EnableIPanaConversionBgSubtract();
  spectrum->EnableIPanaNonHFEBgSubtract();
  //spectrum->SetNonHFEBackground2ndMethod();

  spectrum->SetNbDimensions(1);
  // If you want to correct positive (0) or negative (1) separately
  //spectrum->SetChargeChoosen(0);
  spectrum->SetDebugLevel(1);
  spectrum->SetNumberOfEvents((Int_t)numberofentries);
  spectrum->SetNumberOfMCEvents((Int_t)numberofentriesmc);
  spectrum->SetNumberOfMC2Events((Int_t)numberofentriesmcbg);
  spectrum->SetDumpToFile(kTRUE);
  // True step in MC (events in range +- 10 cm and no pile up)
  spectrum->SetMCTruthStep(AliHFEcuts::kStepMCGeneratedZOutNoPileUpCentralityFine);
  // Step where we correct from MC (tracking + TOF)
  spectrum->SetMCEffStep(AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepHFEcutsTRD + 1);
  // Step from data we correct for
  spectrum->SetStepToCorrect(AliHFEcuts::kStepHFEcutsTRD + 3); // +3 = tracking + TOF + TPC + IPcut
  // Steps to be corrected with V0 (TPC PID only)
  spectrum->SetStepBeforeCutsV0(AliHFEcuts::kStepHFEcutsTRD + 1);
  spectrum->SetStepAfterCutsV0(AliHFEcuts::kStepHFEcutsTRD + 2);

  spectrum->SetHadronEffbyIPcut(hsHadronEffbyIPcut);
  // Give everything (data container, mc container and V0 data container)
  spectrum->Init(datahfecontainer,mchfecontainer,containerhfeV0,mcbghfecontainer);

  // kTRUE means subtract hadron background, kFALSE means do not subtract hadron background
  spectrum->CorrectBeauty(kTRUE);

}

//_____________________________________________________________________
TList *GetResults(const Char_t *testfile,const Char_t *plus){
  //
  // read output
  //
  TFile *f = TFile::Open(testfile);
  if(!f || f->IsZombie()){
    printf("File not readable\n");
    return 0x0;
  }
  TString name("HFE_Results");
  name += plus; 
  printf("Name of TList %s\n",(const char*)name); 
  TList *l = dynamic_cast<TList *>(f->Get((const char*)name));
  if(!l){
    printf("Results list was not found\n");
    f->Close(); delete f;
    return 0x0;
  } 
  TList *returnlist = dynamic_cast<TList *>(l->Clone());
  f->Close(); delete f;
  return returnlist;
}

//_____________________________________________________________________
TList *GetQA(const Char_t *testfile,const Char_t *plus){
  //
  // read output
  //
  TFile *f = TFile::Open(testfile);
  if(!f || f->IsZombie()){
    printf("File not readable\n");
    return 0x0;
  }
  TString name("HFE_QA");
  name += plus;
  printf("Name of TList %s\n",(const char*)name);
  TList *l = dynamic_cast<TList *>(f->Get((const char*)name));
  if(!l){
    printf("QA list was not found\n");
    f->Close(); delete f;
    return 0x0;
  }
  TList *returnlist = dynamic_cast<TList *>(l->Clone());
  f->Close(); delete f;
  return returnlist;
}

//_____________________________________________________________________
THnSparseF* GetHadronEffbyIPcut(TList *hfeqa){


  // get hadron reduction factors due to the IP cuts
  TList* tl=(TList*)hfeqa->FindObject("list_TaskQA");
  TH1F* hbefore=(TH1F*)tl->FindObject("hadronsBeforeIPcut");
  TH1F* hafter=(TH1F*)tl->FindObject("hadronsAfterIPcut");
  TH1F* hreduction= (TH1F*)hafter->Clone("hreduction");
  hbefore->Sumw2(); 
  hafter->Sumw2();
  hreduction->Sumw2();
  hreduction->Divide(hbefore);

  Double_t* binEdges[0];
  Int_t hnBin = hreduction->GetNbinsX();
  Int_t nBin[1] = {hnBin};

  for(int i=0; i<nBin[0]; i++){
    binEdges[0][i] = hreduction->GetBinLowEdge(i+1);
  }
  binEdges[0][nBin[0]] = hreduction->GetBinLowEdge(nBin[0]) + hreduction->GetBinWidth(nBin[0]);

  THnSparseF* hsreduction = new THnSparseF("hadroncontamin", "hadroncontamin; pt[GeV/c]", 1, nBin);
  hsreduction->SetBinEdges(0, binEdges[0]);

  Double_t dataE[1];
  Double_t yval;
  for(int i=0; i<nBin[0]; i++){
    dataE[0]=hreduction->GetBinCenter(i+1);
    yval=hreduction->GetBinContent(i+1);
    hsreduction->Fill(dataE,yval);
  }

  Int_t* ibins;
  ibins = new Int_t[nBin[0] + 1];
  hsreduction->SetBinError(ibins,0);


  return hsreduction;
}

//_________________________________________________________________________
TObject* GetSpectrum(AliCFContainer *c, Int_t step) {
  AliCFDataGrid* data = new AliCFDataGrid("data","",*c,step);
  //data->SetMeasured(step);
  return data;
}
//___________________________________________________________________________
void CorrectFromTheWidth(TH1D *h1) {
  //
  // Correct from the width of the bins --> dN/dp_{T} (GeV/c)^{-1}
  //

  TAxis *axis = h1->GetXaxis();
  Int_t nbinX = h1->GetNbinsX();

  for(Int_t i = 1; i <= nbinX; i++) {

    Double_t width = axis->GetBinWidth(i);
    Double_t content = h1->GetBinContent(i);
    Double_t error = h1->GetBinError(i); 
    h1->SetBinContent(i,content/width); 
    h1->SetBinError(i,error/width);
  }

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