X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWG%2FEMCAL%2FAliEmcalPicoTrackMaker.cxx;h=e9123aa93c66956a66a2b63ba66f42b693fca507;hb=1d19471cf1eff3b7f6d0b6715003b0e1d73df686;hp=0b018164e3a937ea88195845f10e7600ec3b4f0b;hpb=ed7ba2e50d1b649c07c2e206fe80577f7eb1523e;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWG/EMCAL/AliEmcalPicoTrackMaker.cxx b/PWG/EMCAL/AliEmcalPicoTrackMaker.cxx index 0b018164e3a..e9123aa93c6 100644 --- a/PWG/EMCAL/AliEmcalPicoTrackMaker.cxx +++ b/PWG/EMCAL/AliEmcalPicoTrackMaker.cxx @@ -15,15 +15,17 @@ #include "AliLog.h" #include "AliPicoTrack.h" #include "AliVTrack.h" +#include "AliAODMCParticle.h" +#include "AliNamedArrayI.h" ClassImp(AliEmcalPicoTrackMaker) //________________________________________________________________________ AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() : AliAnalysisTaskSE("AliEmcalPicoTrackMaker"), - fESDtrackCuts(0), fTracksOutName("PicoTracks"), fTracksInName("tracks"), + fMCParticlesName("mcparticles"), fMinTrackPt(0), fMaxTrackPt(1000), fMinTrackEta(-10), @@ -31,12 +33,12 @@ AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() : fMinTrackPhi(-10), fMaxTrackPhi(10), fTrackEfficiency(1), - fIncludeNoITS(kTRUE), - fUseNegativeLabels(kTRUE), - fIsMC(kFALSE), - fCutMaxFractionSharedTPCClusters(0.4), + fCopyMCFlag(kFALSE), fTracksIn(0), - fTracksOut(0) + fTracksOut(0), + fMCParticles(0), + fMCParticlesMap(0), + fInit(kFALSE) { // Constructor. @@ -47,9 +49,9 @@ AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() : //________________________________________________________________________ AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) : AliAnalysisTaskSE(name), - fESDtrackCuts(0), fTracksOutName("PicoTracks"), fTracksInName("tracks"), + fMCParticlesName("mcparticles"), fMinTrackPt(0), fMaxTrackPt(1000), fMinTrackEta(-10), @@ -57,12 +59,12 @@ AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) : fMinTrackPhi(-10), fMaxTrackPhi(10), fTrackEfficiency(1), - fIncludeNoITS(kTRUE), - fUseNegativeLabels(kTRUE), - fIsMC(kFALSE), - fCutMaxFractionSharedTPCClusters(0.4), + fCopyMCFlag(kFALSE), fTracksIn(0), - fTracksOut(0) + fTracksOut(0), + fMCParticles(0), + fMCParticlesMap(0), + fInit(kFALSE) { // Constructor. @@ -81,9 +83,6 @@ AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker() void AliEmcalPicoTrackMaker::UserCreateOutputObjects() { // Create my user objects. - - fTracksOut = new TClonesArray("AliPicoTrack"); - fTracksOut->SetName(fTracksOutName); } //________________________________________________________________________ @@ -91,14 +90,7 @@ void AliEmcalPicoTrackMaker::UserExec(Option_t *) { // Main loop, called for each event. - AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager(); - if (!am) { - AliError("Manager zero, returning"); - return; - } - - // retrieve tracks from input. - if (!fTracksIn) { + if (!fInit) { fTracksIn = dynamic_cast(InputEvent()->FindListObject(fTracksInName)); if (!fTracksIn) { AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data())); @@ -108,19 +100,38 @@ void AliEmcalPicoTrackMaker::UserExec(Option_t *) AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data())); return; } + + fTracksOut = new TClonesArray("AliPicoTrack"); + fTracksOut->SetName(fTracksOutName); + + // add tracks to event if not yet there + if (InputEvent()->FindListObject(fTracksOutName)) { + AliFatal(Form("Object %s already present in the event!",fTracksOutName.Data())); + } + else { + InputEvent()->AddObject(fTracksOut); + } + + if (fCopyMCFlag) { + fMCParticles = dynamic_cast(InputEvent()->FindListObject(fMCParticlesName)); + if (!fMCParticles) { + AliError(Form("Could not retrieve MC particles %s!", fMCParticlesName.Data())); + } + if (!fMCParticles->GetClass()->GetBaseClass("AliVParticle")) { + AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fMCParticlesName.Data())); + fMCParticles = 0; + } + + TString mapName(fMCParticlesName); + mapName += "_Map"; + fMCParticlesMap = dynamic_cast(InputEvent()->FindListObject(mapName)); + } + + fInit = kTRUE; } - // add tracks to event if not yet there fTracksOut->Delete(); - if (!(InputEvent()->FindListObject(fTracksOutName))) { - InputEvent()->AddObject(fTracksOut); - } - // test if we are in ESD or AOD mode - Bool_t esdMode = kTRUE; - if (dynamic_cast(InputEvent())!=0) - esdMode = kFALSE; - // loop over tracks const Int_t Ntracks = fTracksIn->GetEntriesFast(); for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) { @@ -137,82 +148,51 @@ void AliEmcalPicoTrackMaker::UserExec(Option_t *) track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi) continue; - Bool_t isEmc = kFALSE; - Int_t type = -1; - if (esdMode) { - AliESDtrack *esdtrack = static_cast(track); - if (fESDtrackCuts && !fESDtrackCuts->AcceptTrack(esdtrack)) - continue; - type = esdtrack->GetTRDNchamberdEdx(); - if (!fIncludeNoITS && (type==2)) - continue; - if (TMath::Abs(esdtrack->GetTrackEtaOnEMCal()) < 0.75 && - esdtrack->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() && - esdtrack->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad()) - isEmc = kTRUE; - // isEmc = track->IsEMCAL(); - } else { - AliAODTrack *aodtrack = static_cast(track); - if (fAODfilterBits[0] < 0) { - if (aodtrack->IsHybridGlobalConstrainedGlobal()) - type = 3; - else /*not a good track*/ - continue; - } else { - if (aodtrack->TestFilterBit(fAODfilterBits[0])) { - type = 0; - } else if (aodtrack->TestFilterBit(fAODfilterBits[1])) { - if ((aodtrack->GetStatus()&AliESDtrack::kITSrefit)==0) { - if (fIncludeNoITS) - type = 2; - else - continue; - } else { - type = 1; - } - } - else {/*not a good track*/ - continue; - } - } - if (fCutMaxFractionSharedTPCClusters > 0) { - Double_t frac = Double_t(aodtrack->GetTPCnclsS()) / Double_t(aodtrack->GetTPCncls()); - if (frac > fCutMaxFractionSharedTPCClusters) - continue; - } - if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 && - track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() && - track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad()) - isEmc = kTRUE; - } - if (fTrackEfficiency < 1) { Double_t r = gRandom->Rndm(); if (fTrackEfficiency < r) continue; } - Int_t label = 0; - if (fIsMC) { - if (fUseNegativeLabels) - label = track->GetLabel(); - else - label = TMath::Abs(track->GetLabel()); - - if (label == 0) - AliDebug(2,Form("Track %d with label==0", iTracks)); + Bool_t isEmc = kFALSE; + if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 && + track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() && + track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad()) + isEmc = kTRUE; + + AliPicoTrack *picotrack = new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(), + track->Eta(), + track->Phi(), + track->Charge(), + track->GetLabel(), + AliPicoTrack::GetTrackType(track), + track->GetTrackEtaOnEMCal(), + track->GetTrackPhiOnEMCal(), + track->GetTrackPtOnEMCal(), + isEmc); + picotrack->SetTrack(track); + + if (fCopyMCFlag && track->GetLabel() != 0) { + AliVParticle *mcpart = GetMCParticle(TMath::Abs(track->GetLabel())); + if (mcpart) { + UInt_t mcFlag = mcpart->GetFlag(); + picotrack->SetFlag(mcFlag); + Short_t genIndex = mcpart->GetGeneratorIndex(); + picotrack->SetGeneratorIndex(genIndex); + } } - /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(), - track->Eta(), - track->Phi(), - track->Charge(), - label, - type, - track->GetTrackEtaOnEMCal(), - track->GetTrackPhiOnEMCal(), - track->GetTrackPtOnEMCal(), - isEmc); ++nacc; } } + +//________________________________________________________________________ +AliVParticle* AliEmcalPicoTrackMaker::GetMCParticle(Int_t label) +{ + if (!fMCParticles) return 0; + Int_t index = label; + if (fMCParticlesMap) index = fMCParticlesMap->At(label); + if (index < 0 || index >= fMCParticles->GetEntriesFast()) return 0; + AliVParticle *part = static_cast(fMCParticles->At(index)); + return part; +}