From 1bb1fef1bd35890a55c47d3c5512289ce96162b9 Mon Sep 17 00:00:00 2001 From: jbook Date: Thu, 8 Nov 2012 13:33:10 +0000 Subject: [PATCH] -add variables HasCocktailMother,HasCocktailGrandMother to indentify/cut on enhanced MC signals -add Print function to EventCuts --- PWGDQ/dielectron/AliDielectronEventCuts.cxx | 28 +++++++++ PWGDQ/dielectron/AliDielectronEventCuts.h | 5 +- PWGDQ/dielectron/AliDielectronMC.cxx | 6 +- PWGDQ/dielectron/AliDielectronMC.h | 2 +- PWGDQ/dielectron/AliDielectronVarManager.cxx | 3 + PWGDQ/dielectron/AliDielectronVarManager.h | 60 +++++++++++++++----- 6 files changed, 86 insertions(+), 18 deletions(-) diff --git a/PWGDQ/dielectron/AliDielectronEventCuts.cxx b/PWGDQ/dielectron/AliDielectronEventCuts.cxx index 0699b582b90..a9f5067390a 100644 --- a/PWGDQ/dielectron/AliDielectronEventCuts.cxx +++ b/PWGDQ/dielectron/AliDielectronEventCuts.cxx @@ -38,6 +38,8 @@ Detailed description ClassImp(AliDielectronEventCuts) +const char* AliDielectronEventCuts::fgkVtxNames[AliDielectronEventCuts::kVtxTracksOrSPD+1] = {"Tracks", "SPD", "TPC", "Any", "TracksOrSPD"}; + AliDielectronEventCuts::AliDielectronEventCuts() : AliAnalysisCuts(), fVtxZmin(0.), @@ -257,3 +259,29 @@ Bool_t AliDielectronEventCuts::IsSelectedAOD(TObject* event) return kTRUE; } +//________________________________________________________________________ +void AliDielectronEventCuts::Print(const Option_t* /*option*/) const +{ + // + // Print cuts and the range + // + printf("cut ranges for '%s'\n",GetTitle()); + printf("All Cuts have to be fulfilled\n"); + + Int_t iCut=0; + if(fRequireVtx) { + printf("Cut %02d: vertex required \n",iCut); iCut++; } + printf("Cut %02d: vertex type: %s \n", iCut, fgkVtxNames[fVtxType]); iCut++; + if(fMinVtxContributors) { + printf("Cut %02d: vertex contributors >= %d \n", iCut, fMinVtxContributors); iCut++; } + if(fVtxZmin(GetMCTrackFromMCEvent(daughterLabel)))->GetMother(); + if(GetMCTrackFromMCEvent(daughterLabel)) + return (static_cast(GetMCTrackFromMCEvent(daughterLabel)))->GetMother(); } else if(fAnaType==kESD) { if (!fMCEvent) return -1; - return (static_cast(GetMCTrackFromMCEvent(daughterLabel)))->GetMother(); + if(GetMCTrackFromMCEvent(daughterLabel)) + return (static_cast(GetMCTrackFromMCEvent(daughterLabel)))->GetMother(); } return -1; } diff --git a/PWGDQ/dielectron/AliDielectronMC.h b/PWGDQ/dielectron/AliDielectronMC.h index 77e5744c8f9..0fa61d1938c 100644 --- a/PWGDQ/dielectron/AliDielectronMC.h +++ b/PWGDQ/dielectron/AliDielectronMC.h @@ -95,6 +95,7 @@ public: void GetDaughters(const TObject *mother, AliVParticle* &d1, AliVParticle* &d2); Int_t IsJpsiPrimary(const AliDielectronPair * pair); Int_t IsJpsiPrimary(const AliVParticle * pair); + Bool_t CheckParticleSource(Int_t label, AliDielectronSignalMC::ESource source) const; AliMCEvent* GetMCEvent() { return fMCEvent; } // return the AliMCEvent @@ -119,7 +120,6 @@ private: Int_t GetLabelMotherWithPdgAOD(const AliVParticle *particle1, const AliVParticle *particle2, Int_t pdgMother); Bool_t ComparePDG(Int_t particlePDG, Int_t requiredPDG, Bool_t pdgExclusion, Bool_t checkBothCharges) const; - Bool_t CheckParticleSource(Int_t label, AliDielectronSignalMC::ESource source) const; Bool_t CheckIsRadiative(Int_t label) const; Bool_t CheckRadiativeDecision(Int_t mLabel, const AliDielectronSignalMC * const signalMC) const; diff --git a/PWGDQ/dielectron/AliDielectronVarManager.cxx b/PWGDQ/dielectron/AliDielectronVarManager.cxx index 3b33a6d2587..89619b9541a 100644 --- a/PWGDQ/dielectron/AliDielectronVarManager.cxx +++ b/PWGDQ/dielectron/AliDielectronVarManager.cxx @@ -79,6 +79,9 @@ const char* AliDielectronVarManager::fgkParticleNames[AliDielectronVarManager::k "PdgCode", "PdgCodeMother", "PdgCodeGrandMother", + "HasCocktailMother", + "HasCocktailGrandMother", + "NumberOfDaughters", "HaveSameMother", "IsJpsiPrimary", diff --git a/PWGDQ/dielectron/AliDielectronVarManager.h b/PWGDQ/dielectron/AliDielectronVarManager.h index 8d04ac14d4f..a35e3ff7a8c 100644 --- a/PWGDQ/dielectron/AliDielectronVarManager.h +++ b/PWGDQ/dielectron/AliDielectronVarManager.h @@ -123,6 +123,8 @@ public: kPdgCode, // PDG code kPdgCodeMother, kPdgCodeGrandMother, // PDG code of the grandmother + kHasCocktailMother, // true if particle is added via MC generator cocktail (AliDielectronSignal::kDirect) + kHasCocktailGrandMother, // true if particle is added via MC generator cocktail (AliDielectronSignal::kDirect) kNumberOfDaughters, // number of daughters kHaveSameMother, // check that particles have the same mother (MC) kIsJpsiPrimary, // check if the particle is primary (MC) @@ -547,18 +549,24 @@ inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle values[AliDielectronVarManager::kPdgCode]=-1; values[AliDielectronVarManager::kPdgCodeMother]=-1; values[AliDielectronVarManager::kPdgCodeGrandMother]=-1; + values[AliDielectronVarManager::kHasCocktailMother]=0; + values[AliDielectronVarManager::kHasCocktailGrandMother]=0; values[AliDielectronVarManager::kNumberOfDaughters]=-999; AliDielectronMC *mc=AliDielectronMC::Instance(); if (mc->HasMC()){ - if (mc->GetMCTrack(particle)) + if (mc->GetMCTrack(particle)) { values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode(); - + Int_t trkLbl = mc->GetMCTrack(particle)->GetLabel(); + values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(trkLbl, AliDielectronSignalMC::kDirect); + } AliMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother if (motherMC){ values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode(); + Int_t motherLbl = motherMC->GetLabel(); + values[AliDielectronVarManager::kHasCocktailGrandMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect); motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();; @@ -866,19 +874,26 @@ inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle values[AliDielectronVarManager::kPdgCode]=-1; values[AliDielectronVarManager::kPdgCodeMother]=-1; values[AliDielectronVarManager::kPdgCodeGrandMother]=-1; - + values[AliDielectronVarManager::kHasCocktailMother]=0; + values[AliDielectronVarManager::kHasCocktailGrandMother]=0; + values[AliDielectronVarManager::kNumberOfDaughters]=-1; AliDielectronMC *mc=AliDielectronMC::Instance(); if (mc->HasMC()){ - if (mc->GetMCTrack(particle)) + if (mc->GetMCTrack(particle)) { values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode(); - + Int_t trkLbl = mc->GetMCTrack(particle)->GetLabel(); + // printf("trklbl %d for %p->%p \n",trkLbl,particle,mc->GetMCTrack(particle)); + values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(trkLbl, AliDielectronSignalMC::kDirect); + } AliAODMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother if (motherMC){ values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode(); - + Int_t motherLbl = motherMC->GetLabel(); + values[AliDielectronVarManager::kHasCocktailGrandMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect); + motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();; } @@ -932,7 +947,9 @@ inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *part values[AliDielectronVarManager::kPdgCode] = -1; values[AliDielectronVarManager::kPdgCodeMother] = -1; values[AliDielectronVarManager::kPdgCodeGrandMother] = -1; - + values[AliDielectronVarManager::kHasCocktailMother]=0; + values[AliDielectronVarManager::kHasCocktailGrandMother]=0; + // Fill common AliVParticle interface information FillVarVParticle(particle, values); @@ -940,10 +957,15 @@ inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *part // Fill AliMCParticle interface specific information values[AliDielectronVarManager::kPdgCode] = particle->PdgCode(); + Int_t trkLbl = particle->GetLabel(); + values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(trkLbl, AliDielectronSignalMC::kDirect); AliMCParticle *motherMC = mc->GetMCTrackMother(particle); if (motherMC){ values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode(); + Int_t motherLbl = motherMC->GetLabel(); + values[AliDielectronVarManager::kHasCocktailGrandMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect); + motherMC=mc->GetMCTrackMother(motherMC); //grand mother if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();; } @@ -992,6 +1014,7 @@ inline void AliDielectronVarManager::FillVarMCParticle2(const AliVParticle *p1, values[AliDielectronVarManager::kPdgCode] = 0; values[AliDielectronVarManager::kPdgCodeMother] = 0; + values[AliDielectronVarManager::kHasCocktailMother]=0; AliDielectronMC *mc=AliDielectronMC::Instance(); AliVParticle* mother=0x0; @@ -1090,7 +1113,9 @@ inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle values[AliDielectronVarManager::kPdgCode] = -1; values[AliDielectronVarManager::kPdgCodeMother] = -1; values[AliDielectronVarManager::kPdgCodeGrandMother] = -1; - + values[AliDielectronVarManager::kHasCocktailMother]=0; + values[AliDielectronVarManager::kHasCocktailGrandMother]=0; + // Fill common AliVParticle interface information FillVarVParticle(particle, values); @@ -1099,10 +1124,15 @@ inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle // Fill AliAODMCParticle interface specific information values[AliDielectronVarManager::kPdgCode] = particle->PdgCode(); + Int_t trkLbl = particle->GetLabel(); + values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(trkLbl, AliDielectronSignalMC::kDirect); AliAODMCParticle *motherMC = mc->GetMCTrackMother(particle); if (motherMC){ values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode(); + Int_t motherLbl = motherMC->GetLabel(); + values[AliDielectronVarManager::kHasCocktailGrandMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect); + motherMC=mc->GetMCTrackMother(motherMC); //grand mother if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();; } @@ -1122,7 +1152,8 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa values[AliDielectronVarManager::kPdgCode]=-1; values[AliDielectronVarManager::kPdgCodeMother]=-1; values[AliDielectronVarManager::kPdgCodeGrandMother]=-1; - + values[AliDielectronVarManager::kHasCocktailMother]=0; + values[AliDielectronVarManager::kHasCocktailGrandMother]=0; Double_t errPseudoProperTime2 = -1; // Fill common AliVParticle interface information @@ -1321,7 +1352,7 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(pair); values[AliDielectronVarManager::kHaveSameMother] = samemother ; - // fill kPseudoProperTimeResolution + // fill kPseudoProperTimeResolution values[AliDielectronVarManager::kPseudoProperTimeResolution] = -1e10; // values[AliDielectronVarManager::kPseudoProperTimePull] = -1e10; if(samemother && fgEvent) { @@ -1331,13 +1362,15 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa const AliMCEvent *mcevent = mc->GetMCEvent(); const AliVVertex* mcVtx = mcevent ? mcevent->GetPrimaryVertex() : 0x0; if(motherMC && mcVtx) { - const Double_t lxyMC = ( (motherMC->Xv() - mcVtx->GetX()) * motherMC->Px() + + Int_t motherLbl = motherMC->GetLabel(); + values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect); + const Double_t lxyMC = ( (motherMC->Xv() - mcVtx->GetX()) * motherMC->Px() + (motherMC->Yv() - mcVtx->GetY()) * motherMC->Py() ) / motherMC->Pt(); const Double_t pseudoMC = lxyMC * (TDatabasePDG::Instance()->GetParticle(443)->Mass())/motherMC->Pt(); values[AliDielectronVarManager::kPseudoProperTimeResolution] = values[AliDielectronVarManager::kPseudoProperTime] - pseudoMC; if (errPseudoProperTime2 > 0) values[AliDielectronVarManager::kPseudoProperTimePull] = values[AliDielectronVarManager::kPseudoProperTimeResolution]/sqrt(errPseudoProperTime2); - } + } } } @@ -1418,7 +1451,8 @@ inline void AliDielectronVarManager::FillVarKFParticle(const AliKFParticle *part values[AliDielectronVarManager::kPdgCode] = -1; values[AliDielectronVarManager::kPdgCodeMother] = -1; values[AliDielectronVarManager::kPdgCodeGrandMother] = -1; - + values[AliDielectronVarManager::kHasCocktailMother]=0; + values[AliDielectronVarManager::kHasCocktailGrandMother]=0; // if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values); for (Int_t i=AliDielectronVarManager::kPairMax; i