From ed268b64c3a3d1c1bc403015e8d618ed747da47c Mon Sep 17 00:00:00 2001 From: morsch Date: Fri, 7 Mar 2014 22:02:15 +0100 Subject: [PATCH] This is a protection against the case "label 0 tracks" in MC Pietro Antonioli --- STEER/AOD/AliAODpidUtil.cxx | 43 +++++++++++++++++--------------- STEER/ESD/AliESDpid.cxx | 49 +++++++++++++++++++------------------ 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/STEER/AOD/AliAODpidUtil.cxx b/STEER/AOD/AliAODpidUtil.cxx index 4c61bb46bd5..f7c41b06cce 100644 --- a/STEER/AOD/AliAODpidUtil.cxx +++ b/STEER/AOD/AliAODpidUtil.cxx @@ -55,40 +55,43 @@ Float_t AliAODpidUtil::GetTPCsignalTunedOnData(const AliVTrack *t) const { AliAODMCHeader *mcHeader = dynamic_cast(track->GetAODEvent()->GetList()->FindObject(AliAODMCHeader::StdBranchName())); if (mcHeader) { + TClonesArray *mcArray = (TClonesArray*)track->GetAODEvent()->GetList()->FindObject(AliAODMCParticle::StdBranchName()); Bool_t kGood = kTRUE; - - Int_t iS = TMath::Abs(((AliAODMCParticle*)mcArray->At(TMath::Abs(t->GetLabel())))->GetPdgCode()); - if(iS==AliPID::ParticleCode(AliPID::kElectron)){ + + if ( mcArray->At(TMath::Abs(t->GetLabel())) != NULL ) { // protects against label-0 tracks e.g. the initial proton for Phythia events + Int_t iS = TMath::Abs(((AliAODMCParticle*)mcArray->At(TMath::Abs(t->GetLabel())))->GetPdgCode()); + if(iS==AliPID::ParticleCode(AliPID::kElectron)){ type = AliPID::kElectron; - } - else if(iS==AliPID::ParticleCode(AliPID::kMuon)){ + } + else if(iS==AliPID::ParticleCode(AliPID::kMuon)){ type = AliPID::kMuon; - } - else if(iS==AliPID::ParticleCode(AliPID::kPion)){ + } + else if(iS==AliPID::ParticleCode(AliPID::kPion)){ type = AliPID::kPion; - } - else if(iS==AliPID::ParticleCode(AliPID::kKaon)){ + } + else if(iS==AliPID::ParticleCode(AliPID::kKaon)){ type = AliPID::kKaon; - } - else if(iS==AliPID::ParticleCode(AliPID::kProton)){ + } + else if(iS==AliPID::ParticleCode(AliPID::kProton)){ type = AliPID::kProton; - } - else if(iS==AliPID::ParticleCode(AliPID::kDeuteron)){ // d + } + else if(iS==AliPID::ParticleCode(AliPID::kDeuteron)){ // d type = AliPID::kDeuteron; - } - else if(iS==AliPID::ParticleCode(AliPID::kTriton)){ // t + } + else if(iS==AliPID::ParticleCode(AliPID::kTriton)){ // t type = AliPID::kTriton; - } - else if(iS==AliPID::ParticleCode(AliPID::kHe3)){ // 3He + } + else if(iS==AliPID::ParticleCode(AliPID::kHe3)){ // 3He type = AliPID::kHe3; - } - else if(iS==AliPID::ParticleCode(AliPID::kAlpha)){ // 4He + } + else if(iS==AliPID::ParticleCode(AliPID::kAlpha)){ // 4He type = AliPID::kAlpha; - } + } else kGood = kFALSE; + } else kGood = kFALSE; if(kGood){ //TODO maybe introduce different dEdxSources? diff --git a/STEER/ESD/AliESDpid.cxx b/STEER/ESD/AliESDpid.cxx index 88a23dc2523..f62b3a30c70 100644 --- a/STEER/ESD/AliESDpid.cxx +++ b/STEER/ESD/AliESDpid.cxx @@ -88,40 +88,41 @@ Float_t AliESDpid::GetTPCsignalTunedOnData(const AliVTrack *t) const { if(mcEvent){ Bool_t kGood = kTRUE; AliMCParticle *MCpart = (AliMCParticle *) mcEvent->GetTrack(TMath::Abs(t->GetLabel())); - TParticle *part = MCpart->Particle(); - - Int_t iS = TMath::Abs(part->GetPdgCode()); - - if(iS==AliPID::ParticleCode(AliPID::kElectron)){ + if (MCpart != NULL) { // protect against label-0 track (initial proton in Pythia events) + TParticle *part = MCpart->Particle(); + Int_t iS = TMath::Abs(part->GetPdgCode()); + + if(iS==AliPID::ParticleCode(AliPID::kElectron)){ type = AliPID::kElectron; - } - else if(iS==AliPID::ParticleCode(AliPID::kMuon)){ + } + else if(iS==AliPID::ParticleCode(AliPID::kMuon)){ type = AliPID::kMuon; - } - else if(iS==AliPID::ParticleCode(AliPID::kPion)){ + } + else if(iS==AliPID::ParticleCode(AliPID::kPion)){ type = AliPID::kPion; - } - else if(iS==AliPID::ParticleCode(AliPID::kKaon)){ + } + else if(iS==AliPID::ParticleCode(AliPID::kKaon)){ type = AliPID::kKaon; - } - else if(iS==AliPID::ParticleCode(AliPID::kProton)){ + } + else if(iS==AliPID::ParticleCode(AliPID::kProton)){ type = AliPID::kProton; - } - else if(iS==AliPID::ParticleCode(AliPID::kDeuteron)){ // d + } + else if(iS==AliPID::ParticleCode(AliPID::kDeuteron)){ // d type = AliPID::kDeuteron; - } - else if(iS==AliPID::ParticleCode(AliPID::kTriton)){ // t + } + else if(iS==AliPID::ParticleCode(AliPID::kTriton)){ // t type = AliPID::kTriton; - } - else if(iS==AliPID::ParticleCode(AliPID::kHe3)){ // 3He + } + else if(iS==AliPID::ParticleCode(AliPID::kHe3)){ // 3He type = AliPID::kHe3; - } - else if(iS==AliPID::ParticleCode(AliPID::kAlpha)){ // 4He + } + else if(iS==AliPID::ParticleCode(AliPID::kAlpha)){ // 4He type = AliPID::kAlpha; - } - else + } + else kGood = kFALSE; - + } else kGood = kFALSE; + if(kGood){ //TODO maybe introduce different dEdxSources? Double_t bethe = fTPCResponse.GetExpectedSignal(track, type, AliTPCPIDResponse::kdEdxDefault, this->UseTPCEtaCorrection(), -- 2.39.3