ROOT logo
/////////////////////////////////////////////////////////////////////
// CheckEfficiencies.C (called by AODQAChecks.C)                   //
//                                                                 //
// Written by John Groh                                            //
/////////////////////////////////////////////////////////////////////

void CheckEfficiencies(AliSpectraAODHistoManager * hman,
		       TCanvas*& cEfficienciesAllRuns,
		       TH1F*& EfficiencyPiPlus,
		       TH1F*& EfficiencyKPlus,
		       TH1F*& EfficiencyProton,
		       TH1F*& EfficiencyPiMinus,
		       TH1F*& EfficiencyKMinus,
		       TH1F*& EfficiencyAntiproton,
		       Float_t FixedPtEff,
		       Int_t runs[],
		       Int_t nRuns,
		       Int_t irun)
{
  // canvas for printing individual runs seperately to Efficiencies.pdf
  TCanvas * cEfficienciesIndiv = new TCanvas("cEfficienciesIndiv","cEfficienciesIndiv");
  cEfficienciesIndiv->Divide(3,2);

  // calculate correction factors
  TH1F * CorrFact[nCharge*nPart];
  TLegend * lEfficiencyAllRuns[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  // get recreated histo and format it
	  Int_t index = ipart + nPart*icharge;
	  TString hname = Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  CorrFact[index] = (TH1F*)((TH1F*)hman->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
	  CorrFact[index]->SetName(Form("CorrFact_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
	  CorrFact[index]->SetTitle(Form("CorrFact_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
	  CorrFact[index]->SetMarkerStyle(Marker[index]);
	  CorrFact[index]->SetMarkerColor(Color[ipart]);
	  CorrFact[index]->SetLineColor(Color[ipart]);
	  CorrFact[index]->SetStats(kFALSE);
	  CorrFact[index]->GetYaxis()->SetTitle("MC Correction Factor");

	  // divide it by MC truth histo
	  hname = Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  CorrFact[index]->Divide(CorrFact[index],(TH1F*)((TH1F*)hman->GetPtHistogram1D(hname.Data(),-1,-1))->Clone(),1,1,"B"); // binomial error
	  
	  // draw efficiency histos for individual runs
	  cEfficienciesIndiv->cd(index+1);
	  TLegend * lEfficiencyIndiv = new TLegend(.55,.15,.85,.25);
	  lEfficiencyIndiv->AddEntry(CorrFact[index],Form("%s, Run %i",Names[index].Data(), runs[irun]),"lpe");
	  CorrFact[index]->DrawCopy();
	  lEfficiencyIndiv->DrawClone();

	  // superimpose efficiency histos on a different canvas for all runs
	  cEfficienciesAllRuns->cd(index+1);
	  if (irun == 0)
	    {
	      CorrFact[index]->DrawCopy(); 
	      lEfficiencyAllRuns[index] = new TLegend(.15,.75,.35,.85);
	      lEfficiencyAllRuns[index]->AddEntry(CorrFact[index],Names[index].Data(),"lpe");
	      lEfficiencyAllRuns[index]->SetFillColor(0);
	      lEfficiencyAllRuns[index]->DrawClone();
	    }
	  else CorrFact[index]->DrawCopy("same");

	  // using the values of FixedPtEff for a fixed pt, plot the correction factors vs the run #
	  switch (index)
	    {
	    case 0: // PiPlus
	      EfficiencyPiPlus->SetBinContent(irun+1,CorrFact[index]->GetBinContent(CorrFact[index]->FindBin(FixedPtEff)));
	      EfficiencyPiPlus->SetBinError(irun+1,CorrFact[index]->GetBinError(CorrFact[index]->FindBin(FixedPtEff)));
	      break;
	    case 1: // KPlus
	      EfficiencyKPlus->SetBinContent(irun+1,CorrFact[index]->GetBinContent(CorrFact[index]->FindBin(FixedPtEff)));
	      EfficiencyKPlus->SetBinError(irun+1,CorrFact[index]->GetBinError(CorrFact[index]->FindBin(FixedPtEff)));
	      break;
	    case 2: // Proton
	      EfficiencyProton->SetBinContent(irun+1,CorrFact[index]->GetBinContent(CorrFact[index]->FindBin(FixedPtEff)));
	      EfficiencyProton->SetBinError(irun+1,CorrFact[index]->GetBinError(CorrFact[index]->FindBin(FixedPtEff)));
	      break;
	    case 3: // PiMinus
	      EfficiencyPiMinus->SetBinContent(irun+1,CorrFact[index]->GetBinContent(CorrFact[index]->FindBin(FixedPtEff)));
	      EfficiencyPiMinus->SetBinError(irun+1,CorrFact[index]->GetBinError(CorrFact[index]->FindBin(FixedPtEff)));
	      break;
	    case 4: // KMinus
	      EfficiencyKMinus->SetBinContent(irun+1,CorrFact[index]->GetBinContent(CorrFact[index]->FindBin(FixedPtEff)));
	      EfficiencyKMinus->SetBinError(irun+1,CorrFact[index]->GetBinError(CorrFact[index]->FindBin(FixedPtEff)));
	      break;
	    case 5: // Antiproton
	      EfficiencyAntiproton->SetBinContent(irun+1,CorrFact[index]->GetBinContent(CorrFact[index]->FindBin(FixedPtEff)));
	      EfficiencyAntiproton->SetBinError(irun+1,CorrFact[index]->GetBinError(CorrFact[index]->FindBin(FixedPtEff)));
	      break;
	    default:
	      Printf("\n!!! ERROR in switch statement in CheckEfficiencies.C !!!\n");
	      break;
	    }
	} // end loop over ipart
    } // end loop over icharge
  
  // save the projections and fits to a pdf file once per run
  if (irun == 0) cEfficienciesIndiv->SaveAs("Plots/MC/AODEfficiencies.pdf(","pdf");
  else if (irun < nRuns-1) cEfficienciesIndiv->SaveAs("Plots/MC/AODEfficiencies.pdf","pdf");
  else if (irun == nRuns-1) cEfficienciesIndiv->SaveAs("Plots/MC/AODEfficiencies.pdf)","pdf");
   cEfficienciesIndiv->Close();

}










 CheckEfficiencies.C:1
 CheckEfficiencies.C:2
 CheckEfficiencies.C:3
 CheckEfficiencies.C:4
 CheckEfficiencies.C:5
 CheckEfficiencies.C:6
 CheckEfficiencies.C:7
 CheckEfficiencies.C:8
 CheckEfficiencies.C:9
 CheckEfficiencies.C:10
 CheckEfficiencies.C:11
 CheckEfficiencies.C:12
 CheckEfficiencies.C:13
 CheckEfficiencies.C:14
 CheckEfficiencies.C:15
 CheckEfficiencies.C:16
 CheckEfficiencies.C:17
 CheckEfficiencies.C:18
 CheckEfficiencies.C:19
 CheckEfficiencies.C:20
 CheckEfficiencies.C:21
 CheckEfficiencies.C:22
 CheckEfficiencies.C:23
 CheckEfficiencies.C:24
 CheckEfficiencies.C:25
 CheckEfficiencies.C:26
 CheckEfficiencies.C:27
 CheckEfficiencies.C:28
 CheckEfficiencies.C:29
 CheckEfficiencies.C:30
 CheckEfficiencies.C:31
 CheckEfficiencies.C:32
 CheckEfficiencies.C:33
 CheckEfficiencies.C:34
 CheckEfficiencies.C:35
 CheckEfficiencies.C:36
 CheckEfficiencies.C:37
 CheckEfficiencies.C:38
 CheckEfficiencies.C:39
 CheckEfficiencies.C:40
 CheckEfficiencies.C:41
 CheckEfficiencies.C:42
 CheckEfficiencies.C:43
 CheckEfficiencies.C:44
 CheckEfficiencies.C:45
 CheckEfficiencies.C:46
 CheckEfficiencies.C:47
 CheckEfficiencies.C:48
 CheckEfficiencies.C:49
 CheckEfficiencies.C:50
 CheckEfficiencies.C:51
 CheckEfficiencies.C:52
 CheckEfficiencies.C:53
 CheckEfficiencies.C:54
 CheckEfficiencies.C:55
 CheckEfficiencies.C:56
 CheckEfficiencies.C:57
 CheckEfficiencies.C:58
 CheckEfficiencies.C:59
 CheckEfficiencies.C:60
 CheckEfficiencies.C:61
 CheckEfficiencies.C:62
 CheckEfficiencies.C:63
 CheckEfficiencies.C:64
 CheckEfficiencies.C:65
 CheckEfficiencies.C:66
 CheckEfficiencies.C:67
 CheckEfficiencies.C:68
 CheckEfficiencies.C:69
 CheckEfficiencies.C:70
 CheckEfficiencies.C:71
 CheckEfficiencies.C:72
 CheckEfficiencies.C:73
 CheckEfficiencies.C:74
 CheckEfficiencies.C:75
 CheckEfficiencies.C:76
 CheckEfficiencies.C:77
 CheckEfficiencies.C:78
 CheckEfficiencies.C:79
 CheckEfficiencies.C:80
 CheckEfficiencies.C:81
 CheckEfficiencies.C:82
 CheckEfficiencies.C:83
 CheckEfficiencies.C:84
 CheckEfficiencies.C:85
 CheckEfficiencies.C:86
 CheckEfficiencies.C:87
 CheckEfficiencies.C:88
 CheckEfficiencies.C:89
 CheckEfficiencies.C:90
 CheckEfficiencies.C:91
 CheckEfficiencies.C:92
 CheckEfficiencies.C:93
 CheckEfficiencies.C:94
 CheckEfficiencies.C:95
 CheckEfficiencies.C:96
 CheckEfficiencies.C:97
 CheckEfficiencies.C:98
 CheckEfficiencies.C:99
 CheckEfficiencies.C:100
 CheckEfficiencies.C:101
 CheckEfficiencies.C:102
 CheckEfficiencies.C:103
 CheckEfficiencies.C:104
 CheckEfficiencies.C:105
 CheckEfficiencies.C:106
 CheckEfficiencies.C:107
 CheckEfficiencies.C:108
 CheckEfficiencies.C:109
 CheckEfficiencies.C:110
 CheckEfficiencies.C:111
 CheckEfficiencies.C:112
 CheckEfficiencies.C:113
 CheckEfficiencies.C:114
 CheckEfficiencies.C:115
 CheckEfficiencies.C:116
 CheckEfficiencies.C:117