}
//-------------------------------------------------------------------
-TObjArray* AliAnalyseLeadingTrackUE::GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries, Int_t particleSpecies, Bool_t useEtaPtCuts)
+TObjArray* AliAnalyseLeadingTrackUE::GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries, Int_t particleSpecies, Bool_t useEtaPtCuts, Bool_t speciesOnTracks)
{
// Returns an array of particles that pass the cuts, if arrayMC is given each reconstructed particle is replaced by its corresponding MC particles, depending on the parameter onlyprimaries only for primaries
// particleSpecies: -1 all particles are returned
// 0 (pions) 1 (kaons) 2 (protons) 3 (others) particles
+ // speciesOnTracks if kFALSE, particleSpecies is only applied on the matched MC particle (not on the track itself)
Int_t nTracks = NParticles(obj);
TObjArray* tracks = new TObjArray;
// Loop over tracks or jets
for (Int_t ipart=0; ipart<nTracks; ++ipart) {
- AliVParticle* part = ParticleWithCuts( obj, ipart, onlyprimaries, particleSpecies );
+ AliVParticle* part = ParticleWithCuts( obj, ipart, onlyprimaries, (speciesOnTracks) ? particleSpecies : -1);
if (!part) continue;
if (useEtaPtCuts)
AliVParticle* ParticleWithCuts(TObject* obj, Int_t ipart, Bool_t onlyprimaries = kTRUE, Int_t particleSpecies = -1); // Returns track or MC particle at position "ipart" if passes selection criteria
void QSortTracks(TObjArray &a, Int_t first, Int_t last); // Sort by pT an array of AliVParticles
TObjArray* SortRegions(const AliVParticle* leading, TObject* obj, TObject* arrayMC, Bool_t onlyprimaries = kTRUE); // Assign particles to towards, away or transverse regions
- TObjArray* GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries = kTRUE, Int_t particleSpecies = -1, Bool_t useEtaPtCuts = kFALSE);
+ TObjArray* GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries = kTRUE, Int_t particleSpecies = -1, Bool_t useEtaPtCuts = kFALSE, Bool_t speciesOnTracks = kTRUE);
TObjArray* GetFakeParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries, Int_t particleSpecies, Bool_t useEtaPtCuts);
Bool_t TriggerSelection(const TObject* obj); // Select good triggers with AliPhysicsSelection class
Bool_t VertexSelection(const TObject* obj, Int_t ntracks, Double_t zed); // Vertex selection: see implementation
iTrackBin[2] = kNSpeciesBins;
iTrackBin[4] = nVertexBinsEff;
- fTrackHistEfficiency = new AliCFContainer("fTrackHistEfficiency", "Tracking efficiency", 4, 5, iTrackBin);
+ fTrackHistEfficiency = new AliCFContainer("fTrackHistEfficiency", "Tracking efficiency", 6, 5, iTrackBin);
fTrackHistEfficiency->SetBinLimits(0, trackBins[0]);
fTrackHistEfficiency->SetVarTitle(0, trackAxisTitle[0]);
fTrackHistEfficiency->SetBinLimits(1, pTBinsFine);
//____________________________________________________________________
TH2D* AliUEHist::GetFakeRate()
{
- return dynamic_cast<TH2D*> (GetTrackEfficiency(kCFStepTracked, kCFStepReconstructed, 0, 1));
+ return dynamic_cast<TH2D*> (GetTrackEfficiency(kCFStepTracked, (CFStep) (kCFStepTracked+3), 0, 1));
}
//____________________________________________________________________
//____________________________________________________________________
TH1D* AliUEHist::GetFakeRate(Int_t axis)
{
- return dynamic_cast<TH1D*> (GetTrackEfficiency(kCFStepTracked, kCFStepReconstructed, axis));
+ return dynamic_cast<TH1D*> (GetTrackEfficiency(kCFStepTracked, (CFStep) (kCFStepTracked+3), axis));
}
//____________________________________________________________________
TH2D* AliUEHist::GetTrackingCorrection()
}
//____________________________________________________________________
-void AliUEHistograms::FillTrackingEfficiency(TObjArray* mc, TObjArray* recoPrim, TObjArray* recoAll, TObjArray* fake, Int_t particleType, Double_t centrality, Double_t zVtx)
+void AliUEHistograms::FillTrackingEfficiency(TObjArray* mc, TObjArray* recoPrim, TObjArray* recoAll, TObjArray* recoPrimPID, TObjArray* recoAllPID, TObjArray* fake, Int_t particleType, Double_t centrality, Double_t zVtx)
{
// fills the tracking efficiency objects
//
// mc: all primary MC particles
// recoPrim: reconstructed primaries (again MC particles)
// recoAll: reconstructed (again MC particles)
+ // recoPrim: reconstructed primaries with checks on PID (again MC particles)
+ // recoAll: reconstructed with checks on PID (again MC particles)
// particleType is: 0 for pion, 1 for kaon, 2 for proton, 3 for others
- for (Int_t step=0; step<4; step++)
+ for (Int_t step=0; step<6; step++)
{
TObjArray* list = mc;
if (step == 1)
else if (step == 2)
list = recoAll;
else if (step == 3)
+ list = recoPrimPID;
+ else if (step == 4)
+ list = recoAllPID;
+ else if (step == 5)
list = fake;
if (!list)
void Fill(AliVParticle* leadingMC, AliVParticle* leadingReco);
void FillEvent(Int_t eventType, Int_t step);
void FillEvent(Double_t centrality, Int_t step);
- void FillTrackingEfficiency(TObjArray* mc, TObjArray* recoPrim, TObjArray* recoAll, TObjArray* fake, Int_t particleType, Double_t centrality = 0, Double_t zVtx = 0);
+ void FillTrackingEfficiency(TObjArray* mc, TObjArray* recoPrim, TObjArray* recoAll, TObjArray* recoPrimPID, TObjArray* recoAllPID, TObjArray* fake, Int_t particleType, Double_t centrality = 0, Double_t zVtx = 0);
void FillFakePt(TObjArray* fake, Double_t centrality);
void CopyReconstructedData(AliUEHistograms* from);
TObjArray* primRecoTracksMatched = fAnalyseUE->GetAcceptedParticles(fAOD, fArrayMC, kTRUE, particleSpecies);
TObjArray* allRecoTracksMatched = fAnalyseUE->GetAcceptedParticles(fAOD, fArrayMC, kFALSE, particleSpecies);
- fHistosUE->FillTrackingEfficiency(primMCParticles, primRecoTracksMatched, allRecoTracksMatched, 0, particleSpecies);
+ fHistosUE->FillTrackingEfficiency(primMCParticles, primRecoTracksMatched, allRecoTracksMatched, 0, 0, 0, particleSpecies);
delete primMCParticles;
delete primRecoTracksMatched;
for (Int_t particleSpecies = 0; particleSpecies < 4; particleSpecies++)
{
TObjArray* primMCParticles = fAnalyseUE->GetAcceptedParticles(mc, 0x0, kTRUE, particleSpecies, kTRUE);
- TObjArray* primRecoTracksMatched = fAnalyseUE->GetAcceptedParticles(inputEvent, mc, kTRUE, particleSpecies, kTRUE);
- TObjArray* allRecoTracksMatched = fAnalyseUE->GetAcceptedParticles(inputEvent, mc, kFALSE, particleSpecies, kTRUE);
+ TObjArray* primRecoTracksMatched = fAnalyseUE->GetAcceptedParticles(inputEvent, mc, kTRUE, particleSpecies, kTRUE, kFALSE);
+ TObjArray* allRecoTracksMatched = fAnalyseUE->GetAcceptedParticles(inputEvent, mc, kFALSE, particleSpecies, kTRUE, kFALSE);
+ TObjArray* primRecoTracksMatchedPID = 0;
+ TObjArray* allRecoTracksMatchedPID = 0;
+
+ if (fHelperPID)
+ {
+ primRecoTracksMatchedPID = fAnalyseUE->GetAcceptedParticles(inputEvent, mc, kTRUE, particleSpecies, kTRUE, kTRUE);
+ allRecoTracksMatchedPID = fAnalyseUE->GetAcceptedParticles(inputEvent, mc, kFALSE, particleSpecies, kTRUE, kTRUE);
+ }
CleanUp(primMCParticles, mc, skipParticlesAbove);
CleanUp(primRecoTracksMatched, mc, skipParticlesAbove);
CleanUp(allRecoTracksMatched, mc, skipParticlesAbove);
+ CleanUp(primRecoTracksMatchedPID, mc, skipParticlesAbove);
+ CleanUp(allRecoTracksMatchedPID, mc, skipParticlesAbove);
// select charges
if (fTriggerSelectCharge != 0)
SelectCharge(primMCParticles);
SelectCharge(primRecoTracksMatched);
SelectCharge(allRecoTracksMatched);
+ SelectCharge(primRecoTracksMatchedPID);
+ SelectCharge(allRecoTracksMatchedPID);
}
- fHistos->FillTrackingEfficiency(primMCParticles, primRecoTracksMatched, allRecoTracksMatched, 0, particleSpecies, centrality, zVtx);
+ fHistos->FillTrackingEfficiency(primMCParticles, primRecoTracksMatched, allRecoTracksMatched, primRecoTracksMatchedPID, allRecoTracksMatchedPID, 0, particleSpecies, centrality, zVtx);
// Printf("%d --> %d %d %d", particleSpecies, primMCParticles->GetEntries(), primRecoTracksMatched->GetEntries(), allRecoTracksMatched->GetEntries());
CleanUp((TObjArray*) fakeParticles->At(0), mc, skipParticlesAbove);
CleanUp((TObjArray*) fakeParticles->At(1), mc, skipParticlesAbove);
- fHistos->FillTrackingEfficiency(0, 0, 0, (TObjArray*) fakeParticles->At(2), -1, centrality, zVtx);
+ fHistos->FillTrackingEfficiency(0, 0, 0, 0, 0, (TObjArray*) fakeParticles->At(2), 0, centrality, zVtx);
fHistos->FillFakePt(fakeParticles, centrality);
// Printf(">>>>> %d %d %d fakes", ((TObjArray*) fakeParticles->At(0))->GetEntriesFast(), ((TObjArray*) fakeParticles->At(1))->GetEntriesFast(), ((TObjArray*) fakeParticles->At(2))->GetEntriesFast());
delete fakeParticles;
{
// calls RemoveInjectedSignals, RemoveWeakDecays and RemoveDuplicates
+ if (!tracks)
+ return;
+
if (fInjectedSignals)
fAnalyseUE->RemoveInjectedSignals(tracks, mcObj, maxLabel);
if (fRemoveWeakDecays)
{
// remove particles with charge not selected (depending on fTriggerSelectCharge)
+ if (!tracks)
+ return;
+
Int_t before = tracks->GetEntriesFast();
for (Int_t i=0; i<before; ++i)