gROOT->LoadMacro("$ALICE_ROOT/PWG1/Macros/LoadMyLibs.C");\r
LoadMyLibs();\r
TFile f("Output.root");\r
- AliComparisonEff * compObj = (AliComparisonEff*)f.Get("AliComparisonEff");\r
+ //AliComparisonEff * compObj = (AliComparisonEff*)f.Get("AliComparisonEff");\r
+ AliComparisonEff * compObj = (AliComparisonEff*)cOutput->FindObject("AliComparisonEff");\r
\r
// Analyse comparison data\r
compObj->Analyse();\r
\r
*/\r
\r
+#include <TAxis.h>\r
+#include <TH1D.h>\r
\r
-#include <iostream>\r
-\r
-#include "TFile.h"\r
-#include "TCint.h"\r
-#include "TH3F.h"\r
-#include "TH2F.h"\r
-#include "TF1.h"\r
-#include "TProfile.h"\r
-#include "TProfile2D.h"\r
-#include "TGraph2D.h"\r
-#include "TCanvas.h"\r
-#include "TGraph.h"\r
// \r
-#include "AliESDEvent.h" \r
-#include "AliESD.h"\r
-#include "AliESDfriend.h"\r
-#include "AliESDfriendTrack.h"\r
+#include "AliESDtrack.h"\r
#include "AliRecInfoCuts.h" \r
#include "AliMCInfoCuts.h" \r
#include "AliLog.h" \r
-//\r
-#include "AliMathBase.h"\r
-#include "AliTreeDraw.h" \r
-#include "AliMagFMaps.h" \r
#include "AliESDVertex.h" \r
#include "AliExternalTrackParam.h" \r
#include "AliTracker.h" \r
-\r
#include "AliMCInfo.h" \r
#include "AliESDRecInfo.h" \r
#include "AliComparisonEff.h" \r
\r
using namespace std;\r
\r
-\r
ClassImp(AliComparisonEff)\r
\r
//_____________________________________________________________________________\r
\r
// histograms\r
\r
- fMCPt(0),\r
- fMCRecPt(0),\r
- fMCRecPrimPt(0),\r
- fMCRecSecPt(0),\r
-\r
- fEffTPCPt(0),\r
- fEffTPCPtMC(0),\r
- fEffTPCPtF(0),\r
- //\r
- fEffTPCPt_P(0),\r
- fEffTPCPtMC_P(0),\r
- fEffTPCPtF_P(0),\r
- //\r
- fEffTPCPt_Pi(0),\r
- fEffTPCPtMC_Pi(0),\r
- fEffTPCPtF_Pi(0),\r
- //\r
- fEffTPCPt_K(0),\r
- fEffTPCPtMC_K(0),\r
- fEffTPCPtF_K(0),\r
- \r
- fEffTPCTan(0),\r
- fEffTPCTanMC(0),\r
- fEffTPCTanF(0),\r
- //\r
- fEffTPCPtTan(0),\r
- fEffTPCPtTanMC(0),\r
- fEffTPCPtTanF(0),\r
+ fEffHisto(0),\r
\r
// Cuts \r
fCutsRC(0), \r
fCutsMC(0),\r
\r
- fVertex(0),\r
-\r
// histogram folder \r
fAnalysisFolder(0)\r
{\r
- // init vertex\r
- fVertex = new AliESDVertex();\r
- fVertex->SetXv(0.0); fVertex->SetYv(0.0); fVertex->SetZv(0.0); \r
+ // default consttructor \r
+}\r
\r
- for(Int_t i=0; i<4; ++i)\r
- {\r
- fTPCPtDCASigmaIdeal[i]=0;\r
- fTPCPtDCASigmaFull[i]=0;\r
- fTPCPtDCASigmaDay0[i]=0;\r
+//_____________________________________________________________________________\r
+AliComparisonEff::AliComparisonEff(Char_t* name="AliComparisonEff",Char_t*title="AliComparisonEff",Int_t analysisMode=0, Bool_t hptGenerator=kFALSE):\r
+ AliComparisonObject(name,title),\r
\r
- fTPCPtDCAXY[i]=0;\r
- fTPCPtDCAZ[i]=0;\r
+ // histograms\r
+ fEffHisto(0),\r
\r
- fTPCPtDCASigmaIdealPid[i]=0;\r
- fTPCPtDCASigmaFullPid[i]=0;\r
- fTPCPtDCASigmaDay0Pid[i]=0;\r
+ // Cuts \r
+ fCutsRC(0), \r
+ fCutsMC(0),\r
\r
- fTPCPtDCAXYPid[i]=0; \r
- fTPCPtDCAZPid[i]=0; \r
- }\r
+ // histogram folder \r
+ fAnalysisFolder(0)\r
+{\r
+ // named constructor\r
+ //\r
+ SetAnalysisMode(analysisMode);\r
+ SetHptGenerator(hptGenerator);\r
\r
Init();\r
}\r
\r
-//_____________________________________________________________________________\r
-AliComparisonEff::~AliComparisonEff(){\r
-\r
- // \r
- if(fMCPt) delete fMCPt; fMCPt=0;\r
- if(fMCRecPt) delete fMCRecPt; fMCRecPt=0;\r
- if(fMCRecPrimPt) delete fMCRecPrimPt; fMCRecPrimPt=0;\r
- if(fMCRecSecPt) delete fMCRecSecPt; fMCRecSecPt=0;\r
-\r
- // \r
- if(fEffTPCPt) delete fEffTPCPt; fEffTPCPt=0;\r
- if(fEffTPCPtMC) delete fEffTPCPtMC; fEffTPCPtMC=0;\r
- if(fEffTPCPtF) delete fEffTPCPtF; fEffTPCPtF=0;\r
-\r
- // \r
- if(fEffTPCPt_P) delete fEffTPCPt_P; fEffTPCPt_P=0;\r
- if(fEffTPCPtMC_P) delete fEffTPCPtMC_P; fEffTPCPtMC_P=0;\r
- if(fEffTPCPtF_P) delete fEffTPCPtF_P; fEffTPCPtF_P=0;\r
-\r
- // \r
- if(fEffTPCPt_Pi) delete fEffTPCPt_Pi; fEffTPCPt_Pi=0;\r
- if(fEffTPCPtMC_Pi) delete fEffTPCPtMC_Pi; fEffTPCPtMC_Pi=0;\r
- if(fEffTPCPtF_Pi) delete fEffTPCPtF_Pi; fEffTPCPtF_Pi=0;\r
-\r
- // \r
- if(fEffTPCPt_K) delete fEffTPCPt_K; fEffTPCPt_K=0;\r
- if(fEffTPCPtMC_K) delete fEffTPCPtMC_K; fEffTPCPtMC_K=0;\r
- if(fEffTPCPtF_K) delete fEffTPCPtF_K; fEffTPCPtF_K=0;\r
-\r
- // \r
- if(fEffTPCTan) delete fEffTPCTan; fEffTPCTan=0;\r
- if(fEffTPCTanMC) delete fEffTPCTanMC; fEffTPCTanMC=0;\r
- if(fEffTPCTanF) delete fEffTPCTanF; fEffTPCTanF=0;\r
-\r
- //\r
- if(fEffTPCPtTan) delete fEffTPCPtTan; fEffTPCPtTan=0;\r
- if(fEffTPCPtTanMC) delete fEffTPCPtTanMC; fEffTPCPtTanMC=0;\r
- if(fEffTPCPtTanF) delete fEffTPCPtTanF; fEffTPCPtTanF=0;\r
-\r
- for(Int_t i=0; i<4; ++i)\r
- {\r
- if(fTPCPtDCASigmaIdeal[i]) delete fTPCPtDCASigmaIdeal[i]; fTPCPtDCASigmaIdeal[i]=0;\r
- if(fTPCPtDCASigmaFull[i]) delete fTPCPtDCASigmaFull[i]; fTPCPtDCASigmaFull[i]=0;\r
- if(fTPCPtDCASigmaDay0[i]) delete fTPCPtDCASigmaDay0[i]; fTPCPtDCASigmaDay0[i]=0;\r
\r
- if(fTPCPtDCAXY[i]) delete fTPCPtDCAXY[i]; fTPCPtDCAXY[i]=0;\r
- if(fTPCPtDCAZ[i]) delete fTPCPtDCAZ[i]; fTPCPtDCAZ[i]=0;\r
+//_____________________________________________________________________________\r
+AliComparisonEff::~AliComparisonEff()\r
+{\r
+// destructor\r
\r
- if(fTPCPtDCASigmaIdealPid[i]) delete fTPCPtDCASigmaIdealPid[i]; fTPCPtDCASigmaIdealPid[i]=0;\r
- if(fTPCPtDCASigmaFullPid[i]) delete fTPCPtDCASigmaFullPid[i]; fTPCPtDCASigmaFullPid[i]=0;\r
- if(fTPCPtDCASigmaDay0Pid[i]) delete fTPCPtDCASigmaDay0Pid[i]; fTPCPtDCASigmaDay0Pid[i]=0;\r
+ if(fEffHisto) delete fEffHisto; fEffHisto=0;\r
\r
- if(fTPCPtDCAXYPid[i]) delete fTPCPtDCAXYPid[i]; fTPCPtDCAXYPid[i]=0;\r
- if(fTPCPtDCAZPid[i]) delete fTPCPtDCAZPid[i]; fTPCPtDCAZPid[i]=0;\r
- }\r
+ if(fCutsRC) delete fCutsRC; fCutsRC=0;\r
+ if(fCutsMC) delete fCutsMC; fCutsMC=0;\r
\r
if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r
}\r
\r
//_____________________________________________________________________________\r
-void AliComparisonEff::Init(){\r
-\r
+void AliComparisonEff::Init()\r
+{\r
// Init histograms\r
//\r
- fMCPt = new TH1F("fMCPt","fMCPt",50,0.1,3); \r
- fMCPt->SetXTitle("p_{t}");\r
- fMCPt->SetYTitle("yield");\r
-\r
- fMCRecPt = new TH1F("fMCRecPt","fMCRecPt",50,0.1,3); \r
- fMCRecPt->SetXTitle("p_{t}");\r
- fMCRecPt->SetYTitle("yield");\r
-\r
- fMCRecPrimPt = new TH1F("fMCRecPrimPt","fMCRecPrimPt",50,0.1,3); \r
- fMCRecPrimPt->SetXTitle("p_{t}");\r
- fMCRecPrimPt->SetYTitle("yield");\r
-\r
- fMCRecSecPt = new TH1F("fMCRecSecPt","fMCRecSecPt",50,0.1,3); \r
- fMCRecSecPt->SetXTitle("p_{t}");\r
- fMCRecSecPt->SetYTitle("yield");\r
-\r
- // Efficiency as function of pt\r
- fEffTPCPt = new TProfile("Eff_pt","Eff_Pt",50,0.1,3); \r
- fEffTPCPt->SetXTitle("p_{t}");\r
- fEffTPCPt->SetYTitle("TPC Efficiency");\r
-\r
- fEffTPCPtMC = new TProfile("MC_Eff_pt","MC_Eff_Pt",50,0.1,3); \r
- fEffTPCPtMC->SetXTitle("p_{t}");\r
- fEffTPCPtMC->SetYTitle("MC TPC Efficiency");\r
-\r
- fEffTPCPtF = new TProfile("F_Eff_pt","F_Eff_Pt",50,0.1,3); \r
- fEffTPCPtF->SetXTitle("p_{t}");\r
- fEffTPCPtF->SetYTitle("TPC Findable Efficiency");\r
-\r
- // Efficiency as function of pt protons\r
- fEffTPCPt_P = new TProfile("Eff_pt_P","Eff_Pt_P",50,0.1,3); \r
- fEffTPCPt_P->SetXTitle("p_{t}");\r
- fEffTPCPt_P->SetYTitle("TPC Efficiency");\r
-\r
- fEffTPCPtMC_P = new TProfile("MC_Eff_pt_P","MC_Eff_Pt_P",50,0.1,3); \r
- fEffTPCPtMC_P->SetXTitle("p_{t}");\r
- fEffTPCPtMC_P->SetYTitle("MC TPC Efficiency");\r
-\r
- fEffTPCPtF_P = new TProfile("F_Eff_pt_P","F_Eff_Pt_P",50,0.1,3); \r
- fEffTPCPtF_P->SetXTitle("p_{t}");\r
- fEffTPCPtF_P->SetYTitle("TPC Findable Efficiency");\r
-\r
- // Efficiency as function of pt pions\r
- fEffTPCPt_Pi = new TProfile("Eff_pt_Pi","Eff_Pit_Pi",50,0.1,3); \r
- fEffTPCPt_Pi->SetXTitle("p_{t}");\r
- fEffTPCPt_Pi->SetYTitle("TPC Efficiency");\r
-\r
- fEffTPCPtMC_Pi = new TProfile("MC_Eff_pt_Pi","MC_Eff_Pit_Pi",50,0.1,3); \r
- fEffTPCPtMC_Pi->SetXTitle("p_{t}");\r
- fEffTPCPtMC_Pi->SetYTitle("MC TPC Efficiency");\r
-\r
- fEffTPCPtF_Pi = new TProfile("F_Eff_pt_Pi","F_Eff_Pit_Pi",50,0.1,3); \r
- fEffTPCPtF_Pi->SetXTitle("p_{t}");\r
- fEffTPCPtF_Pi->SetYTitle("TPC Findable Efficiency");\r
-\r
- // Efficiency as function of pt kaons\r
- fEffTPCPt_K = new TProfile("Eff_pt_K","Eff_Kt_K",50,0.1,3); \r
- fEffTPCPt_K->SetXTitle("p_{t}");\r
- fEffTPCPt_K->SetYTitle("TPC Efficiency");\r
-\r
- fEffTPCPtMC_K = new TProfile("MC_Eff_pt_K","MC_Eff_Kt_K",50,0.1,3); \r
- fEffTPCPtMC_K->SetXTitle("p_{t}");\r
- fEffTPCPtMC_K->SetYTitle("MC TPC Efficiency");\r
-\r
- fEffTPCPtF_K = new TProfile("F_Eff_pt_K","F_Eff_Kt_K",50,0.1,3); \r
- fEffTPCPtF_K->SetXTitle("p_{t}");\r
- fEffTPCPtF_K->SetYTitle("TPC Findable Efficiency");\r
-\r
- // Efficiency as function of tan(theta) \r
- fEffTPCTan = new TProfile("Eff_tan","Eff_tan",50,-2.5,2.5); \r
- fEffTPCTan->SetXTitle("tan(#theta)");\r
- fEffTPCTan->SetYTitle("TPC Efficiency");\r
-\r
- fEffTPCTanMC = new TProfile("MC_Eff_tan","MC_Eff_tan",50,-2.5,2.5); \r
- fEffTPCTanMC->SetXTitle("tan(#theta)");\r
- fEffTPCTanMC->SetYTitle("MC TPC Efficiency");\r
-\r
- fEffTPCTanF = new TProfile("F_Eff_tan","F_Eff_tan",50,-2.5,2.5); \r
- fEffTPCPtF->SetXTitle("tan(#theta)");\r
- fEffTPCPtF->SetYTitle("TPC Findable Efficiency");\r
-\r
- // Efficiency as function of pt and tan(theta) \r
- fEffTPCPtTan = new TProfile2D("Eff_pt_tan","Eff_Pt_tan",10,0.1,3,20,-2.,2.);\r
- fEffTPCPtTan->SetXTitle("tan(#theta)");\r
- fEffTPCPtTan->SetYTitle("p_{t}");\r
-\r
- fEffTPCPtTanMC = new TProfile2D("MC_Eff_pt_tan_MC","MC Eff Pt",10,0.1,3,20,-2.,2.);\r
- fEffTPCPtTanMC->SetXTitle("tan(#theta)");\r
- fEffTPCPtTanMC->SetYTitle("p_{t}");\r
-\r
- fEffTPCPtTanF = new TProfile2D("MC_Eff_pt_tan_F","MC Eff Pt",10,0.1,3,20,-2.,2.);\r
- fEffTPCPtTanF->SetXTitle("tan(#theta)");\r
- fEffTPCPtTanF->SetYTitle("p_{t}");\r
-\r
- char name[256];\r
- for(Int_t i=0; i<4; ++i)\r
- {\r
- sprintf(name, "fTPCPtDCASigmaIdeal_%d",i);\r
- fTPCPtDCASigmaIdeal[i] = new TH2F(name,name,50,0.1,3,100,0,100);\r
-\r
- sprintf(name, "fTPCPtDCASigmaFull_%d",i);\r
- fTPCPtDCASigmaFull[i] = new TH2F(name,name,50,0.1,3,100,0,100);\r
-\r
- sprintf(name, "fTPCPtDCASigmaDay0_%d",i);\r
- fTPCPtDCASigmaDay0[i] = new TH2F(name,name,50,0.1,3,100,0,100);\r
+ Int_t nPtBins = 31;\r
+ Double_t binsPt[32] = {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.7,0.8,0.9,1.0,1.2,1.4,1.6,1.8,2.0,2.25,2.5,2.75,3.,3.5,4.,5.,6.,8.,10.};\r
+ Double_t ptMin = 0., ptMax = 10.;\r
\r
- sprintf(name, "fTPCPtDCAXY_%d",i);\r
- fTPCPtDCAXY[i]= new TH2F(name,name,50,0.1,3,100,0,100);\r
- sprintf(name, "fTPCPtDCAZ_%d",i);\r
- fTPCPtDCAZ[i]= new TH2F(name,name,50,0.1,3,100,0,100);\r
-\r
- sprintf(name, "fTPCPtDCASigmaIdealPid_%d",i);\r
- fTPCPtDCASigmaIdealPid[i] = new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
+ if(IsHptGenerator() == kTRUE) {\r
+ nPtBins = 100;\r
+ ptMin = 0.; ptMax = 100.;\r
+ }\r
\r
- sprintf(name, "fTPCPtDCASigmaFullPid_%d",i);\r
- fTPCPtDCASigmaFullPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
+ //mceta:mcphi:mcpt:pid:isPrim:recStatus:findable\r
+ Int_t binsEffHisto[7]={30,144,nPtBins,5,2,2,2};\r
+ Double_t minEffHisto[7]={-1.5,0.,ptMin,0.,0.,0.,0.};\r
+ Double_t maxEffHisto[7]={ 1.5,2.*TMath::Pi(), ptMax,5.,2.,2.,2.};\r
\r
- sprintf(name, "fTPCPtDCASigmaDay0Pid_%d",i);\r
- fTPCPtDCASigmaDay0Pid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
+ fEffHisto = new THnSparseF("fEffHisto","mceta:mcphi:mcpt:pid:isPrim:recStatus:findable",7,binsEffHisto,minEffHisto,maxEffHisto);\r
+ if(!IsHptGenerator()) fEffHisto->SetBinEdges(2,binsPt);\r
\r
- sprintf(name, "fTPCPtDCAXYPid_%d",i);\r
- fTPCPtDCAXYPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
-\r
- sprintf(name, "fTPCPtDCAZPid_%d",i);\r
- fTPCPtDCAZPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
- }\r
+ fEffHisto->GetAxis(0)->SetTitle("eta");\r
+ fEffHisto->GetAxis(1)->SetTitle("phi (rad)");\r
+ fEffHisto->GetAxis(2)->SetTitle("pt (GeV/c)");\r
+ fEffHisto->GetAxis(3)->SetTitle("pid");\r
+ fEffHisto->GetAxis(4)->SetTitle("isPrim");\r
+ fEffHisto->GetAxis(5)->SetTitle("recStatus");\r
+ fEffHisto->GetAxis(6)->SetTitle("findable");\r
+ fEffHisto->Sumw2();\r
\r
// init cuts\r
if(!fCutsMC) \r
}\r
\r
//_____________________________________________________________________________\r
-void AliComparisonEff::Process(AliMCInfo* infoMC, AliESDRecInfo *infoRC)\r
+void AliComparisonEff::ProcessTPC(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r
{\r
// Fill efficiency comparison information\r
- \r
+\r
AliExternalTrackParam *track = 0;\r
Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]\r
Double_t kMaxD = 123456.0; // max distance\r
-\r
- // systematics\r
- const Double_t kSigma2Full_xy = 0.25; // ExB full systematics [cm]\r
- const Double_t kSigma2Full_z = 5.0; // drift velocity (goofie) [cm] \r
-\r
- const Double_t kSigma2Day0_xy = 0.02; // ExB [cm]\r
- const Double_t kSigma2Day0_z = 0.1; // drift velocity (goofie) [cm] \r
-\r
- // \r
- Double_t DCASigmaIdeal=0;\r
- Double_t DCASigmaFull=0;\r
- Double_t DCASigmaDay0=0;\r
-\r
Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r
+ AliESDVertex vertexMC; // MC primary vertex\r
\r
// distance to Prim. vertex \r
const Double_t* dv = infoMC->GetVDist(); \r
\r
Float_t mcpt = infoMC->GetParticle().Pt();\r
- Float_t tantheta = TMath::Tan(infoMC->GetParticle().Theta()-TMath::Pi()*0.5);\r
+ Float_t mceta = infoMC->GetParticle().Eta();\r
+ Float_t mcphi = infoMC->GetParticle().Phi();\r
+ if(mcphi<0) mcphi += 2.*TMath::Pi();\r
+\r
Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r
+ Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
+ Bool_t recStatus = kFALSE;\r
\r
// calculate and set prim. vertex\r
- fVertex->SetXv( infoMC->GetParticle().Vx() - dv[0] );\r
- fVertex->SetYv( infoMC->GetParticle().Vy() - dv[1] );\r
- fVertex->SetZv( infoMC->GetParticle().Vz() - dv[2] );\r
+ vertexMC.SetXv( infoMC->GetParticle().Vx() - dv[0] );\r
+ vertexMC.SetYv( infoMC->GetParticle().Vy() - dv[1] );\r
+ vertexMC.SetZv( infoMC->GetParticle().Vz() - dv[2] );\r
\r
- // Check selection cuts\r
+ // Only 5 charged particle species (e,mu,pi,K,p)\r
if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r
\r
// transform Pdg to Pid\r
if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r
if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r
\r
- //cout << "dv[0] " << dv[0] << " dv[1] " << dv[1] << " dv[2] " << dv[2] << endl; \r
- //cout << "v[0] " << fVertex->GetXv() << " v[1] " << fVertex->GetYv() << " v[2] " << fVertex->GetZv()<< endl; \r
- if (TMath::Abs(tantheta)<fCutsRC->GetMaxAbsTanTheta())\r
+ if (infoRC->GetESDtrack() && infoRC->GetESDtrack()->GetTPCInnerParam()) \r
{\r
- if (infoRC->GetESDtrack() && infoRC->GetESDtrack()->GetTPCInnerParam()) \r
+ if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0)\r
{\r
- if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0 )\r
- {\r
- Bool_t bDCAStatus = track->PropagateToDCA(fVertex,field,kMaxD,dca,cov);\r
- if(bDCAStatus) {\r
- //\r
- cov[2] = track->GetCovariance()[2];\r
-\r
- // Eff = infoRC->GetStatus(1)==3 && isPrim / isPrim;\r
- // Pt vs ( dca[0]^2/cov[0]^2 + dca[1]^2/cov[2]^2 ) \r
- // Pt vs ( dca[0]^2/(cov[0]^2 + kSigma2Full_xy) + dca[1]^2/( cov[2]^2 + kSigma2Full_z ) \r
- // Pt vs ( dca[0]^2/(cov[0]^2 + kSigma2_xy) + dca[1]^2/( cov[2]^2 + kSigma2_z ) \r
-\r
- if(cov[0]>0.0 && cov[2]>0.0)\r
- {\r
- DCASigmaIdeal = TMath::Power(dca[0],2)/cov[0] \r
- + TMath::Power(dca[1],2)/cov[2]; \r
-\r
- DCASigmaFull = TMath::Power(dca[0],2)/(cov[0]+kSigma2Full_xy) \r
- + TMath::Power(dca[1],2)/(cov[2]+kSigma2Full_z); \r
-\r
- DCASigmaDay0 = TMath::Power(dca[0],2)/(cov[0]+kSigma2Day0_xy) \r
- + TMath::Power(dca[1],2)/(cov[2]+kSigma2Day0_z); \r
-\r
- //cout << "dca[0] " << dca[0] << " dca[1] " << dca[1] << endl; \r
- //cout << "cov[0] " << cov[0] << " cov[2] " << cov[2] << endl; \r
- //cout << "DCASigmaIdeal " << DCASigmaIdeal << " DCASigmaFull " << DCASigmaFull << " DCASigmaDay0 " <<DCASigmaDay0 << endl; \r
- //cout << " -------------------------------------------------------- "<< endl; \r
- }\r
-\r
- // MC pt\r
- fMCPt->Fill(mcpt); \r
- if(infoRC->GetStatus(1)==3) fMCRecPt->Fill(mcpt); \r
- if(infoRC->GetStatus(1)==3 && isPrim) fMCRecPrimPt->Fill(mcpt); \r
- if(infoRC->GetStatus(1)==3 && !isPrim) fMCRecSecPt->Fill(mcpt); \r
-\r
- if(isPrim)\r
- {\r
- fTPCPtDCASigmaIdeal[0]->Fill(mcpt,DCASigmaIdeal);\r
- fTPCPtDCASigmaFull[0]->Fill(mcpt,DCASigmaFull);\r
- fTPCPtDCASigmaDay0[0]->Fill(mcpt,DCASigmaDay0);\r
-\r
- fTPCPtDCAXY[0]->Fill(mcpt,dca[0]);\r
- fTPCPtDCAZ[0]->Fill(mcpt,dca[1]);\r
-\r
- fTPCPtDCASigmaIdealPid[0]->Fill(mcpt,DCASigmaIdeal,pid);\r
- fTPCPtDCASigmaFullPid[0]->Fill(mcpt,DCASigmaFull,pid);\r
- fTPCPtDCASigmaDay0Pid[0]->Fill(mcpt,DCASigmaDay0,pid);\r
-\r
- fTPCPtDCAXYPid[0]->Fill(mcpt,dca[0],pid);\r
- fTPCPtDCAZPid[0]->Fill(mcpt,dca[1],pid);\r
- \r
- if(infoRC->GetStatus(1)==3)\r
- {\r
- fTPCPtDCASigmaIdeal[1]->Fill(mcpt,DCASigmaIdeal);\r
- fTPCPtDCASigmaFull[1]->Fill(mcpt,DCASigmaFull);\r
- fTPCPtDCASigmaDay0[1]->Fill(mcpt,DCASigmaDay0);\r
-\r
- fTPCPtDCAXY[1]->Fill(mcpt,dca[0]);\r
- fTPCPtDCAZ[1]->Fill(mcpt,dca[1]);\r
-\r
- fTPCPtDCASigmaIdealPid[1]->Fill(mcpt,DCASigmaIdeal,pid);\r
- fTPCPtDCASigmaFullPid[1]->Fill(mcpt,DCASigmaFull,pid);\r
- fTPCPtDCASigmaDay0Pid[1]->Fill(mcpt,DCASigmaDay0,pid);\r
-\r
- fTPCPtDCAXYPid[1]->Fill(mcpt,dca[0],pid);\r
- fTPCPtDCAZPid[1]->Fill(mcpt,dca[1],pid);\r
- }\r
- }\r
-\r
- // Cont = infoRC->GetStatus(1)==3 && !isPrim / infoRC->GetStatus(1)==3 \r
- // Pt vs ( dz[0]^2/cov[0]^2 + dz[1]^2/cov[2]^2 ) \r
- // Pt vs ( dz[0]^2/(cov[0]^2 + kSigma2Full_xy) + dz[1]^2/( cov[2]^2 + kSigma2Full_z ) \r
- // Pt vs ( dz[0]^2/(cov[0]^2 + kSigma2_xy) + dz[1]^2/( cov[2]^2 + kSigma2_z ) \r
-\r
- if(infoRC->GetStatus(1)==3) \r
- {\r
- fTPCPtDCASigmaIdeal[2]->Fill(mcpt,DCASigmaIdeal);\r
- fTPCPtDCASigmaFull[2]->Fill(mcpt,DCASigmaFull);\r
- fTPCPtDCASigmaDay0[2]->Fill(mcpt,DCASigmaDay0);\r
-\r
- fTPCPtDCAXY[2]->Fill(mcpt,dca[0]);\r
- fTPCPtDCAZ[2]->Fill(mcpt,dca[1]);\r
-\r
- fTPCPtDCASigmaIdealPid[2]->Fill(mcpt,DCASigmaIdeal,pid);\r
- fTPCPtDCASigmaFullPid[2]->Fill(mcpt,DCASigmaFull,pid);\r
- fTPCPtDCASigmaDay0Pid[2]->Fill(mcpt,DCASigmaDay0,pid);\r
-\r
- fTPCPtDCAXYPid[2]->Fill(mcpt,dca[0],pid);\r
- fTPCPtDCAZPid[2]->Fill(mcpt,dca[1],pid);\r
- \r
- if(isPrim==0)\r
- {\r
- fTPCPtDCASigmaIdeal[3]->Fill(mcpt,DCASigmaIdeal);\r
- fTPCPtDCASigmaFull[3]->Fill(mcpt,DCASigmaFull);\r
- fTPCPtDCASigmaDay0[3]->Fill(mcpt,DCASigmaDay0);\r
-\r
- fTPCPtDCAXY[3]->Fill(mcpt,dca[0]);\r
- fTPCPtDCAZ[3]->Fill(mcpt,dca[1]);\r
-\r
- fTPCPtDCASigmaIdealPid[3]->Fill(mcpt,DCASigmaIdeal,pid);\r
- fTPCPtDCASigmaFullPid[3]->Fill(mcpt,DCASigmaFull,pid);\r
- fTPCPtDCASigmaDay0Pid[3]->Fill(mcpt,DCASigmaDay0,pid);\r
-\r
- fTPCPtDCAXYPid[3]->Fill(mcpt,dca[0],pid);\r
- fTPCPtDCAZPid[3]->Fill(mcpt,dca[1],pid);\r
- }\r
- }\r
- delete track;\r
- }\r
- }\r
- } \r
- else \r
- {\r
- if(isPrim)\r
- {\r
- fTPCPtDCASigmaIdeal[0]->Fill(mcpt,0.0);\r
- fTPCPtDCASigmaFull[0]->Fill(mcpt,0.0);\r
- fTPCPtDCASigmaDay0[0]->Fill(mcpt,0.0);\r
-\r
- fTPCPtDCAXY[0]->Fill(mcpt,0.0);\r
- fTPCPtDCAZ[0]->Fill(mcpt,0.0);\r
-\r
- fTPCPtDCASigmaIdealPid[0]->Fill(mcpt,0.0,pid);\r
- fTPCPtDCASigmaFullPid[0]->Fill(mcpt,0.0,pid);\r
- fTPCPtDCASigmaDay0Pid[0]->Fill(mcpt,0.0,pid);\r
-\r
- fTPCPtDCAXYPid[0]->Fill(mcpt,0.0,pid);\r
- fTPCPtDCAZPid[0]->Fill(mcpt,0.0,pid);\r
- }\r
- }\r
+ Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);\r
+ if(bDCAStatus) {\r
+ if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())\r
+ {\r
+ recStatus = kTRUE;\r
+ }\r
+ }\r
+ delete track;\r
+ }\r
}\r
\r
- // only primary particles\r
- if (!isPrim) return;\r
+ // Fill histograms\r
+ Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r
+ fEffHisto->Fill(vEffHisto);\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliComparisonEff::ProcessTPCITS(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r
+{\r
+ // Fill efficiency comparison information\r
+ \r
+ Int_t clusterITS[200];\r
+ Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r
+\r
+ Float_t mcpt = infoMC->GetParticle().Pt();\r
+ Float_t mceta = infoMC->GetParticle().Eta();\r
+ Float_t mcphi = infoMC->GetParticle().Phi();\r
+ if(mcphi<0) mcphi += 2.*TMath::Pi();\r
\r
- // pt\r
- if (TMath::Abs(tantheta)<fCutsRC->GetMaxAbsTanTheta()){\r
+ // distance to Prim. vertex \r
+ const Double_t* dv = infoMC->GetVDist(); \r
\r
- fEffTPCPt->Fill(mcpt, infoRC->GetStatus(1)==3);\r
- fEffTPCPtMC->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
- if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){\r
- fEffTPCPtF->Fill(mcpt, infoRC->GetStatus(1)==3);\r
- }\r
+ Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r
+ Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
+ Bool_t recStatus =kFALSE;\r
+ \r
+ // Only 5 charged particle species (e,mu,pi,K,p)\r
+ if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r
+\r
+ // transform Pdg to Pid\r
+ // Pdg convension is different for hadrons and leptons \r
+ // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r
+ Double_t pid = -1;\r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r
\r
- // protons\r
- if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt()) { \r
- fEffTPCPt_P->Fill(mcpt, infoRC->GetStatus(1)==3);\r
- fEffTPCPtMC_P->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
-\r
- if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {\r
- fEffTPCPtF_P->Fill(mcpt, infoRC->GetStatus(1)==3);\r
- }\r
- }\r
-\r
- // pions\r
- if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP()) {\r
- fEffTPCPt_Pi->Fill(mcpt, infoRC->GetStatus(1)==3);\r
- fEffTPCPtMC_Pi->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
-\r
- if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {\r
- fEffTPCPtF_Pi->Fill(mcpt, infoRC->GetStatus(1)==3);\r
- }\r
- }\r
-\r
- // kaons\r
- if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP()) {\r
- fEffTPCPt_K->Fill(mcpt, infoRC->GetStatus(1)==3);\r
- fEffTPCPtMC_K->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
-\r
- if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {\r
- fEffTPCPtF_K->Fill(mcpt, infoRC->GetStatus(1)==3);\r
- }\r
- }\r
+ if(!infoRC->GetESDtrack()) return;\r
+ if(infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS())\r
+ {\r
+ infoRC->GetESDtrack()->GetImpactParameters(dca,cov);\r
+ if(TMath::Abs(dca[0]) < fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1]) < fCutsRC->GetMaxDCAToVertexZ()) \r
+ {\r
+ recStatus =(infoRC->GetStatus(1)==3);\r
+ } \r
}\r
\r
- // theta\r
- if (TMath::Abs(mcpt)>fCutsRC->GetPtMin()){\r
- fEffTPCTan->Fill(tantheta, infoRC->GetStatus(1)==3);\r
- fEffTPCTanMC->Fill(tantheta, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
- if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){\r
- fEffTPCTanF->Fill(tantheta, infoRC->GetStatus(1)==3);\r
+ // fill histograms\r
+ Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r
+ fEffHisto->Fill(vEffHisto);\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliComparisonEff::ProcessConstrained(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r
+{\r
+ // Fill efficiency comparison information\r
+ AliExternalTrackParam *track = 0;\r
+ Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]\r
+ Double_t kMaxD = 123456.0; // max distance\r
+ Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r
+ AliESDVertex vertexMC; // MC primary vertex\r
+\r
+ // distance to Prim. vertex \r
+ const Double_t* dv = infoMC->GetVDist(); \r
+\r
+ Float_t mcpt = infoMC->GetParticle().Pt();\r
+ Float_t mceta = infoMC->GetParticle().Eta();\r
+ Float_t mcphi = infoMC->GetParticle().Phi();\r
+ if(mcphi<0) mcphi += 2.*TMath::Pi();\r
+\r
+ Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r
+ Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
+ Bool_t recStatus = kFALSE;\r
+ \r
+ // calculate and set prim. vertex\r
+ vertexMC.SetXv( infoMC->GetParticle().Vx() - dv[0] );\r
+ vertexMC.SetYv( infoMC->GetParticle().Vy() - dv[1] );\r
+ vertexMC.SetZv( infoMC->GetParticle().Vz() - dv[2] );\r
+ \r
+ // Only 5 charged particle species (e,mu,pi,K,p)\r
+ if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r
+\r
+ // transform Pdg to Pid\r
+ // Pdg convension is different for hadrons and leptons \r
+ // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r
+ Double_t pid = -1;\r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r
+ if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r
+\r
+ // constrained parameters resolution\r
+ if (!infoRC->GetESDtrack()) return;\r
+ const AliExternalTrackParam * cparam = infoRC->GetESDtrack()->GetConstrainedParam();\r
+ if(!cparam) return;\r
+\r
+ if ((track = new AliExternalTrackParam(*cparam)) != 0)\r
+ {\r
+ Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);\r
+ if(bDCAStatus) {\r
+ if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())\r
+ {\r
+ recStatus = (infoRC->GetStatus(1)!=3);\r
+ }\r
}\r
+ delete track;\r
}\r
\r
- // pt-theta\r
- fEffTPCPtTan->Fill(mcpt,tantheta,infoRC->GetStatus(1)==3);\r
- fEffTPCPtTanMC->Fill(mcpt,tantheta,infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()); \r
- if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){\r
- fEffTPCPtTanF->Fill(mcpt,tantheta,infoRC->GetStatus(1)==3); \r
- }\r
+ // Fill histograms\r
+ Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r
+ fEffHisto->Fill(vEffHisto);\r
}\r
\r
//_____________________________________________________________________________\r
-void AliComparisonEff::Exec(AliMCInfo* infoMC, AliESDRecInfo *infoRC)\r
+void AliComparisonEff::Exec(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r
{\r
// Process comparison information\r
- Process(infoMC,infoRC);\r
+\r
+ if(GetAnalysisMode() == 0) ProcessTPC(infoMC,infoRC);\r
+ else if(GetAnalysisMode() == 1) ProcessTPCITS(infoMC,infoRC);\r
+ else if(GetAnalysisMode() == 2) ProcessConstrained(infoMC,infoRC);\r
+ else {\r
+ printf("ERROR: AnalysisMode %d \n",fAnalysisMode);\r
+ return;\r
+ }\r
}\r
\r
//_____________________________________________________________________________\r
-Long64_t AliComparisonEff::Merge(TCollection* list) \r
+Long64_t AliComparisonEff::Merge(TCollection* const list) \r
{\r
// Merge list of objects (needed by PROOF)\r
\r
AliComparisonEff* entry = dynamic_cast<AliComparisonEff*>(obj);\r
if (entry == 0) continue; \r
\r
- fMCPt->Add(entry->fMCPt);\r
- fMCRecPt->Add(entry->fMCRecPt);\r
- fMCRecPrimPt->Add(entry->fMCRecPrimPt);\r
- fMCRecSecPt->Add(entry->fMCRecSecPt);\r
-\r
- fEffTPCPt->Add(entry->fEffTPCPt);\r
- fEffTPCPtMC->Add(entry->fEffTPCPtMC);\r
- fEffTPCPtF->Add(entry->fEffTPCPtF);\r
-\r
- fEffTPCPt_P->Add(entry->fEffTPCPt_P);\r
- fEffTPCPtMC_P->Add(entry->fEffTPCPtMC_P);\r
- fEffTPCPtF_P->Add(entry->fEffTPCPtF_P);\r
-\r
- fEffTPCPt_Pi->Add(entry->fEffTPCPt_Pi);\r
- fEffTPCPtMC_Pi->Add(entry->fEffTPCPtMC_Pi);\r
- fEffTPCPtF_Pi->Add(entry->fEffTPCPtF_Pi);\r
-\r
- fEffTPCPt_K->Add(entry->fEffTPCPt_K);\r
- fEffTPCPtMC_K->Add(entry->fEffTPCPtMC_K);\r
- fEffTPCPtF_K->Add(entry->fEffTPCPtF_K);\r
-\r
- fEffTPCTan->Add(entry->fEffTPCTan);\r
- fEffTPCTanMC->Add(entry->fEffTPCTanMC);\r
- fEffTPCTanF->Add(entry->fEffTPCTanF);\r
- \r
- fEffTPCPtTan->Add(entry->fEffTPCPtTan);\r
- fEffTPCPtTanMC->Add(entry->fEffTPCPtTanMC);\r
- fEffTPCPtTanF->Add(entry->fEffTPCPtTanF);\r
- \r
- for(Int_t i=0; i<4; ++i)\r
- {\r
- fTPCPtDCASigmaIdeal[i]->Add(entry->fTPCPtDCASigmaIdeal[i]);\r
- fTPCPtDCASigmaFull[i]->Add(entry->fTPCPtDCASigmaFull[i]);\r
- fTPCPtDCASigmaDay0[i]->Add(entry->fTPCPtDCASigmaDay0[i]);\r
-\r
- fTPCPtDCAXY[i]->Add(entry->fTPCPtDCAXY[i]);\r
- fTPCPtDCAZ[i]->Add(entry->fTPCPtDCAXY[i]);\r
-\r
- fTPCPtDCASigmaIdealPid[i]->Add(entry->fTPCPtDCASigmaIdealPid[i]);\r
- fTPCPtDCASigmaFullPid[i]->Add(entry->fTPCPtDCASigmaFullPid[i]);\r
- fTPCPtDCASigmaDay0Pid[i]->Add(entry->fTPCPtDCASigmaDay0Pid[i]);\r
-\r
- fTPCPtDCAXYPid[i]->Add(entry->fTPCPtDCAXYPid[i]);\r
- fTPCPtDCAZPid[i]->Add(entry->fTPCPtDCAXYPid[i]);\r
- }\r
-\r
+ fEffHisto->Add(entry->fEffHisto);\r
count++;\r
}\r
\r
// Analyse comparison information and store output histograms\r
// in the folder "folderEff" \r
//\r
- \r
TH1::AddDirectory(kFALSE);\r
-\r
- AliComparisonEff * comp=this;\r
TObjArray *aFolderObj = new TObjArray;\r
\r
- // calculate efficiency and contamination (4 sigma) \r
- TH1 *h_sigmaidealpid[20];\r
- TH1 *h_sigmafullpid[20];\r
- TH1 *h_sigmaday0pid[20];\r
+ // efficiency vs pt\r
+ fEffHisto->GetAxis(0)->SetRangeUser(-0.9,0.9); // eta range\r
+ fEffHisto->GetAxis(4)->SetRangeUser(1.,1.); // primary tracks\r
\r
- TH1 *h_sigmaidealpidtot[4];\r
- TH1 *h_sigmafullpidtot[4];\r
- TH1 *h_sigmaday0pidtot[4];\r
+ // rec efficiency vs pt\r
+ TH1D *ptAll = fEffHisto->Projection(2);\r
\r
- char name[256];\r
- char name1[256];\r
- Int_t idx;\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed \r
+ TH1D *ptRec = fEffHisto->Projection(2);\r
+ ptRec->Divide(ptAll);\r
+ ptRec->SetName("ptRecEff");\r
\r
- for(Int_t i=0; i<4; ++i)\r
- {\r
- //total\r
- comp->fTPCPtDCASigmaIdealPid[i]->GetYaxis()->SetRange(1,4);\r
- sprintf(name,"h_sigmaidealpidtot_%d",i);\r
- h_sigmaidealpidtot[i] = comp->fTPCPtDCASigmaIdealPid[i]->Project3D();\r
- h_sigmaidealpidtot[i]->SetName(name);\r
-\r
- comp->fTPCPtDCASigmaFullPid[i]->GetYaxis()->SetRange(1,4);\r
- sprintf(name,"h_sigmafullpidtot_%d",i);\r
- h_sigmafullpidtot[i] = comp->fTPCPtDCASigmaFullPid[i]->Project3D();\r
- h_sigmafullpidtot[i]->SetName(name);\r
-\r
- comp->fTPCPtDCASigmaDay0Pid[i]->GetYaxis()->SetRange(1,4);\r
- sprintf(name,"h_sigmaday0pidtot_%d",i);\r
- h_sigmaday0pidtot[i] = comp->fTPCPtDCASigmaDay0Pid[i]->Project3D();\r
- h_sigmaday0pidtot[i]->SetName(name);\r
-\r
- // pid wise\r
- for(Int_t j=0; j<5; ++j)\r
- {\r
- idx = i*5 + j;\r
-\r
- comp->fTPCPtDCASigmaIdealPid[i]->GetYaxis()->SetRange(1,4);\r
- comp->fTPCPtDCASigmaIdealPid[i]->GetZaxis()->SetRange(j+1,j+1);\r
-\r
- sprintf(name,"h_sigmaidealpid_%d",idx);\r
- h_sigmaidealpid[idx] = comp->fTPCPtDCASigmaIdealPid[i]->Project3D();\r
- h_sigmaidealpid[idx]->SetName(name);\r
- \r
-\r
- comp->fTPCPtDCASigmaFullPid[i]->GetYaxis()->SetRange(1,4);\r
- comp->fTPCPtDCASigmaFullPid[i]->GetZaxis()->SetRange(j+1,j+1);\r
-\r
- sprintf(name,"h_sigmafullpid_%d",idx);\r
- h_sigmafullpid[idx] = comp->fTPCPtDCASigmaFullPid[i]->Project3D();\r
- h_sigmafullpid[idx]->SetName(name);\r
- \r
- comp->fTPCPtDCASigmaDay0Pid[i]->GetYaxis()->SetRange(1,4);\r
- comp->fTPCPtDCASigmaDay0Pid[i]->GetZaxis()->SetRange(j+1,j+1);\r
-\r
- sprintf(name,"h_sigmaday0pid_%d",idx);\r
- h_sigmaday0pid[idx] = comp->fTPCPtDCASigmaDay0Pid[i]->Project3D();\r
- h_sigmaday0pid[idx]->SetName(name);\r
- } \r
- }\r
+ aFolderObj->Add(ptRec);\r
\r
- // calculate efficiency and contamination (all pids)\r
- h_sigmaidealpidtot[0]->Sumw2();\r
- h_sigmaidealpidtot[1]->Divide(h_sigmaidealpidtot[0]);\r
- h_sigmaidealpidtot[2]->Sumw2();\r
- h_sigmaidealpidtot[3]->Divide(h_sigmaidealpidtot[2]);\r
\r
- h_sigmafullpidtot[0]->Sumw2();\r
- h_sigmafullpidtot[1]->Divide(h_sigmafullpidtot[0]);\r
- h_sigmafullpidtot[2]->Sumw2();\r
- h_sigmafullpidtot[3]->Divide(h_sigmafullpidtot[2]);\r
+ // rec efficiency vs pid vs pt\r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
+ fEffHisto->GetAxis(3)->SetRangeUser(2.,2.); // pions\r
+ TH1D *ptAllPi = fEffHisto->Projection(2);\r
\r
- h_sigmaday0pidtot[0]->Sumw2();\r
- h_sigmaday0pidtot[1]->Divide(h_sigmaday0pidtot[0]);\r
- h_sigmaday0pidtot[2]->Sumw2();\r
- h_sigmaday0pidtot[3]->Divide(h_sigmaday0pidtot[2]);\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
+ TH1D *ptRecPi = fEffHisto->Projection(2);\r
+ ptRecPi->Divide(ptAllPi);\r
+ ptRecPi->SetName("ptRecEffPi");\r
\r
- // calculate efficiency pid wise\r
- for(Int_t jdx = 0; jdx<5; jdx++)\r
- {\r
- h_sigmaidealpid[jdx]->Sumw2();\r
- h_sigmaidealpid[jdx+5]->Divide(h_sigmaidealpid[jdx]);\r
+ aFolderObj->Add(ptRecPi);\r
\r
- h_sigmafullpid[jdx]->Sumw2();\r
- h_sigmafullpid[jdx+5]->Divide(h_sigmafullpid[jdx]);\r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
+ fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons\r
+ TH1D *ptAllK = fEffHisto->Projection(2);\r
\r
- h_sigmaday0pid[jdx]->Sumw2();\r
- h_sigmaday0pid[jdx+5]->Divide(h_sigmaday0pid[jdx]);\r
- }\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
+ TH1D *ptRecK = fEffHisto->Projection(2);\r
+ ptRecK->Divide(ptAllK);\r
+ ptRecK->SetName("ptRecEffK");\r
\r
- // calculate cont. pid wise\r
- for(Int_t jdx = 0; jdx<5; jdx++)\r
- {\r
- h_sigmaidealpid[jdx+15]->Divide(h_sigmaidealpidtot[2]);\r
- h_sigmafullpid[jdx+15]->Divide(h_sigmafullpidtot[2]);\r
- h_sigmaday0pid[jdx+15]->Divide(h_sigmaday0pidtot[2]);\r
- }\r
+ aFolderObj->Add(ptRecK);\r
+\r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
+ fEffHisto->GetAxis(3)->SetRangeUser(4.,4.); // protons\r
+ TH1D *ptAllP = fEffHisto->Projection(2);\r
\r
- TCanvas * c = new TCanvas("Efficiency","Track efficiency");\r
- c->cd();\r
- c->Divide(1,2);\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
+ TH1D *ptRecP = fEffHisto->Projection(2);\r
+ ptRecP->Divide(ptAllP);\r
+ ptRecP->SetName("ptRecEffP");\r
+\r
+ aFolderObj->Add(ptRecP);\r
+ \r
+ // findable efficiency \r
+ fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); \r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
+ fEffHisto->GetAxis(6)->SetRangeUser(1.,1.); // findable\r
+ TH1D *ptAllF = fEffHisto->Projection(2);\r
+\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.);\r
+ fEffHisto->GetAxis(6)->SetRangeUser(1.,1.);\r
+ TH1D *ptRecF = fEffHisto->Projection(2); // rec findable\r
+ ptRecF->Divide(ptAllF);\r
+ ptRecF->SetName("ptRecFindableEff");\r
+\r
+ aFolderObj->Add(ptRecF);\r
\r
//\r
- c->cd(1);\r
- comp->fEffTPCTanF->SetXTitle("Tan(#theta)");\r
- comp->fEffTPCTanF->SetYTitle("eff_{findable}");\r
- comp->fEffTPCTanF->SetName("EffTanFindable");\r
- comp->fEffTPCTanF->Draw();\r
+ // efficiency vs eta\r
//\r
- c->cd(2);\r
- comp->fEffTPCTan->SetXTitle("Tan(#theta)");\r
- comp->fEffTPCTan->SetYTitle("eff_{all}");\r
- comp->fEffTPCTan->SetName("EffTanAll");\r
- comp->fEffTPCTan->Draw();\r
-\r
- aFolderObj->Add(comp->fEffTPCTanF);\r
- aFolderObj->Add(comp->fEffTPCTan);\r
-\r
- h_sigmaidealpidtot[1]->SetXTitle("p_{t}");\r
- h_sigmaidealpidtot[1]->SetYTitle("efficiency");\r
- h_sigmaidealpidtot[1]->SetTitle("Eff_SigmaIdeal");\r
- h_sigmaidealpidtot[1]->SetName("Eff_SigmaIdeal");\r
-\r
- h_sigmaidealpidtot[3]->SetXTitle("p_{t}");\r
- h_sigmaidealpidtot[3]->SetYTitle("contamination");\r
- h_sigmaidealpidtot[3]->SetTitle("Cont_SigmaIdeal");\r
- h_sigmaidealpidtot[3]->SetName("Cont_SigmaIdeal");\r
-\r
- aFolderObj->Add(h_sigmaidealpidtot[1]);\r
- aFolderObj->Add(h_sigmaidealpidtot[3]);\r
-\r
- h_sigmafullpidtot[1]->SetXTitle("p_{t}");\r
- h_sigmafullpidtot[1]->SetYTitle("efficiency");\r
- h_sigmafullpidtot[1]->SetTitle("Eff_SigmaFull");\r
- h_sigmafullpidtot[1]->SetName("Eff_SigmaFull");\r
-\r
- h_sigmafullpidtot[3]->SetXTitle("p_{t}");\r
- h_sigmafullpidtot[3]->SetYTitle("contamination");\r
- h_sigmafullpidtot[3]->SetTitle("Cont_SigmaFull");\r
- h_sigmafullpidtot[3]->SetName("Cont_SigmaFull");\r
-\r
- aFolderObj->Add(h_sigmafullpidtot[1]);\r
- aFolderObj->Add(h_sigmafullpidtot[3]);\r
-\r
- h_sigmaday0pidtot[1]->SetXTitle("p_{t}");\r
- h_sigmaday0pidtot[1]->SetYTitle("efficiency");\r
- h_sigmaday0pidtot[1]->SetTitle("Eff_SigmaDay0");\r
- h_sigmaday0pidtot[1]->SetName("Eff_SigmaDay0");\r
-\r
- h_sigmaday0pidtot[3]->SetXTitle("p_{t}");\r
- h_sigmaday0pidtot[3]->SetYTitle("contamination");\r
- h_sigmaday0pidtot[3]->SetTitle("Cont_SigmaDay0");\r
- h_sigmaday0pidtot[3]->SetName("Cont_SigmaDay0");\r
-\r
- aFolderObj->Add(h_sigmaday0pidtot[1]);\r
- aFolderObj->Add(h_sigmaday0pidtot[3]);\r
-\r
- for(Int_t jdx = 0; jdx<5; jdx++)\r
- {\r
- sprintf(name,"Eff_SigmaIdeal_%d",jdx);\r
- sprintf(name1,"Cont_SigmaIdeal_%d",jdx);\r
\r
+ fEffHisto->GetAxis(0)->SetRangeUser(-1.5,1.5); // eta range\r
+ fEffHisto->GetAxis(2)->SetRangeUser(0.2,10.); // pt range\r
+ fEffHisto->GetAxis(4)->SetRangeUser(1.,1.); // primary tracks\r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); // all\r
+ fEffHisto->GetAxis(6)->SetRangeUser(0.,1.); // all\r
\r
- h_sigmaidealpid[jdx+5]->SetXTitle("p_{t}");\r
- h_sigmaidealpid[jdx+5]->SetYTitle("efficiency");\r
- h_sigmaidealpid[jdx+5]->SetTitle(name);\r
- h_sigmaidealpid[jdx+5]->SetName(name);\r
+ // rec efficiency vs eta\r
+ TH1D *etaAll = fEffHisto->Projection(0);\r
\r
- h_sigmaidealpid[jdx+15]->SetXTitle("p_{t}");\r
- h_sigmaidealpid[jdx+15]->SetYTitle("contamination");\r
- h_sigmaidealpid[jdx+15]->SetTitle(name1);\r
- h_sigmaidealpid[jdx+15]->SetName(name1);\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed \r
+ TH1D *etaRec = fEffHisto->Projection(0);\r
+ etaRec->Divide(etaAll);\r
+ etaRec->SetName("etaRecEff");\r
\r
- aFolderObj->Add(h_sigmaidealpid[jdx+5]);\r
- aFolderObj->Add(h_sigmaidealpid[jdx+15]);\r
+ aFolderObj->Add(etaRec);\r
\r
- sprintf(name,"Eff_SigmaFull_%d",jdx);\r
- sprintf(name1,"Cont_SigmaFull_%d",jdx);\r
+ // rec efficiency vs pid vs eta\r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
+ fEffHisto->GetAxis(3)->SetRangeUser(2.,2.); // pions\r
+ TH1D *etaAllPi = fEffHisto->Projection(0);\r
\r
- h_sigmafullpid[jdx+5]->SetXTitle("p_{t}");\r
- h_sigmafullpid[jdx+5]->SetYTitle("efficiency");\r
- h_sigmafullpid[jdx+5]->SetTitle(name);\r
- h_sigmafullpid[jdx+5]->SetName(name);\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
+ TH1D *etaRecPi = fEffHisto->Projection(0);\r
+ etaRecPi->Divide(etaAllPi);\r
+ etaRecPi->SetName("etaRecEffPi");\r
\r
- h_sigmafullpid[jdx+15]->SetXTitle("p_{t}");\r
- h_sigmafullpid[jdx+15]->SetYTitle("contamination");\r
- h_sigmafullpid[jdx+15]->SetTitle(name1);\r
- h_sigmafullpid[jdx+15]->SetName(name1);\r
+ aFolderObj->Add(etaRecPi);\r
\r
- aFolderObj->Add(h_sigmafullpid[jdx+5]);\r
- aFolderObj->Add(h_sigmafullpid[jdx+15]);\r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
+ fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons\r
+ TH1D *etaAllK = fEffHisto->Projection(0);\r
\r
- sprintf(name,"Eff_SigmaDay0_%d",jdx);\r
- sprintf(name1,"Cont_SigmaDay0_%d",jdx);\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
+ TH1D *etaRecK = fEffHisto->Projection(0);\r
+ etaRecK->Divide(etaAllK);\r
+ etaRecK->SetName("etaRecEffK");\r
\r
- h_sigmaday0pid[jdx+5]->SetXTitle("p_{t}");\r
- h_sigmaday0pid[jdx+5]->SetYTitle("efficiency");\r
- h_sigmaday0pid[jdx+5]->SetTitle(name);\r
- h_sigmaday0pid[jdx+5]->SetName(name);\r
+ aFolderObj->Add(etaRecK);\r
\r
- h_sigmaday0pid[jdx+15]->SetXTitle("p_{t}");\r
- h_sigmaday0pid[jdx+15]->SetYTitle("contamination");\r
- h_sigmaday0pid[jdx+15]->SetTitle(name1);\r
- h_sigmaday0pid[jdx+15]->SetName(name1);\r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
+ fEffHisto->GetAxis(3)->SetRangeUser(4.,4.); // protons\r
+ TH1D *etaAllP = fEffHisto->Projection(0);\r
\r
- aFolderObj->Add(h_sigmaday0pid[jdx+5]);\r
- aFolderObj->Add(h_sigmaday0pid[jdx+15]);\r
- }\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
+ TH1D *etaRecP = fEffHisto->Projection(0);\r
+ etaRecP->Divide(etaAllP);\r
+ etaRecP->SetName("etaRecEffP");\r
+\r
+ aFolderObj->Add(etaRecP);\r
+ \r
+ //\r
+ // findable efficiency \r
+ //\r
+ fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); \r
+ fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
+ fEffHisto->GetAxis(6)->SetRangeUser(1.,1.); // findable\r
+ TH1D *etaAllF = fEffHisto->Projection(0);\r
+\r
+ fEffHisto->GetAxis(5)->SetRangeUser(1.,1.);\r
+ fEffHisto->GetAxis(6)->SetRangeUser(1.,1.);\r
+ TH1D *etaRecF = fEffHisto->Projection(0); // rec findable\r
+ etaRecF->Divide(etaAllF);\r
+ etaRecF->SetName("etaRecFindableEff");\r
+\r
+ aFolderObj->Add(etaRecF);\r
\r
// export objects to analysis folder\r
fAnalysisFolder = ExportToFolder(aFolderObj);\r