return;
}
- RetrieveEventObjects();
-
- // add tracks to event if not yet there
- if (!(InputEvent()->FindListObject(fTracksOutName)))
+ // Add tracks to event if not yet there
+ if (!(InputEvent()->FindListObject(fTracksOutName))) {
InputEvent()->AddObject(fTracksOut);
+ }
+ else {
+ // IMPORTANT: if it is not an AliESDEvent, non-std TClonesArray will not be cleared automatically!
+ if (!(InputEvent()->InheritsFrom("AliESDEvent")))
+ fTracksOut->Delete();
+ }
+
+ RetrieveEventObjects();
Int_t Ntracks = GetNumberOfTracks();
for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
if (!AcceptTrack(track))
continue;
- Int_t label = 0;
+ Int_t label = -1;
if (track->InheritsFrom("AliAODTrack")) {
AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(track);
if (aodtrack->TestFilterBit(fAODfilterBits[0]))
label = 0;
- else if (aodtrack->TestFilterBit(fAODfilterBits[1]))
- label = 1;
- else //if (aodtrack->TestFilterBit(fAODfilterBits[2]))
- label = 2;
+ else //if (aodtrack->TestFilterBit(fAODfilterBits[1]))
+ label = 3;
}
else {
label = track->GetLabel();
AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(track);
if (aodtrack) {
//cout << "filter bit = " << fFilterBit << ", filter map = " << aodtrack->GetFilterMap() << endl;
- //return aodtrack->TestFilterBit(fAODfilterBits[0]+fAODfilterBits[1]+fAODfilterBits[2]);
- return aodtrack->IsHybridGlobalConstrainedGlobal();
+ //cout << fAODfilterBits[0]+fAODfilterBits[1] << endl;
+ return aodtrack->TestFilterBit(fAODfilterBits[0] | fAODfilterBits[1]);
+ //return aodtrack->IsHybridGlobalConstrainedGlobal();
}
else {
AliError("Could not cast AOD track!");
return kTRUE;
}
}
- else if (track->InheritsFrom("PicoTrack")) {
- AliWarning("PicoTrack: nothing to filter!");
+ else {
+ AliWarning("Track type not recognized: nothing to filter!");
return kTRUE;
}
}
void UserCreateOutputObjects();
void UserExec(Option_t *option);
- void SetAODfilterBits(Int_t b0 = 0, Int_t b1 = 0, Int_t b2 = 0) { fAODfilterBits[0] = b0; fAODfilterBits[1] = b1; fAODfilterBits[2] = b2; }
+ void SetAODfilterBits(Int_t b0 = 0, Int_t b1 = 0) { fAODfilterBits[0] = b0; fAODfilterBits[1] = b1; }
void SetTracksOutName(const char *name) { fTracksOutName = name; }
void SetTracksInName(const char *name) { fTracksInName = name; }
void SetESDtrackCuts(AliESDtrackCuts *cuts) { fESDtrackCuts = cuts; }
AliVTrack* GetTrack(const Int_t i) const;
Int_t GetNumberOfTracks() const;
- Int_t fAODfilterBits[3]; // AOD track filter bit map
+ Int_t fAODfilterBits[2]; // AOD track filter bit map
AliESDtrackCuts *fESDtrackCuts; // ESD track cuts
TString fTracksOutName; // Name of output track array
TString fTracksInName; // Name of input track array