// Copy constructor
fTrackFilter = obj.fTrackFilter;
}
+//____________________________________________________________________
+AliAnalysisTaskKineFilter::~AliAnalysisTaskKineFilter()
+{
+ // if( fTrackFilter ) delete fTrackFilter;
+}
+
//____________________________________________________________________
AliAnalysisTaskKineFilter& AliAnalysisTaskKineFilter::operator=(const AliAnalysisTaskKineFilter& other)
void AliAnalysisTaskKineFilter::UserCreateOutputObjects()
{
// Create the output container
-
- OutputTree()->GetUserInfo()->Add(fTrackFilter);
+ if (OutputTree())
+ OutputTree()->GetUserInfo()->Add(fTrackFilter);
}
//____________________________________________________________________
-void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/)
+void AliAnalysisTaskKineFilter::UserExec(Option_t */*option*/)
{
// Execute analysis for current event
//
// get AliAOD Event
AliAODEvent* aod = AODEvent();
+ if (!aod) {
+ AliWarning("No Output Handler connected, doing nothing !") ;
+ return;
+ }
+
// aod->CreateStdContent();
AliStack* stack = MCEvent()->Stack();
Int_t nTracks = stack->GetNtrack();
Int_t nPrims = stack->GetNprimary();
+ Int_t nPrimsAdd = 0;
AliAODVertex *primary = NULL;
Int_t nPos = 0;
TParticle *part = stack->Particle(iTrack);
if (iTrack == 0) {
- // add primary vertex
- x[0] = part->Vx(); x[1] = part->Vy(); x[2] = part->Vz();
- primary = new(vertices[jVertices++])
- AliAODVertex(x, NULL, -999., NULL, AliAODVertex::kPrimary);
+ // add primary vertex
+ x[0] = part->Vx(); x[1] = part->Vy(); x[2] = part->Vz();
+ primary = new(vertices[jVertices++])
+ AliAODVertex(x, NULL, -999., NULL, -1, AliAODVertex::kPrimary);
}
- // only final particles
- if( part->GetStatusCode() !=1 ) continue;
//
// Track selection
// add primary tracks
primary->AddDaughter(new(tracks[jTracks++]) AliAODTrack(0, // ID,
- 0, // Label
+ iTrack, // Label
p,
kTRUE,
x,
NULL,
primary,
kFALSE, // no fit performed
- kFALSE, // no fit preformed
+ kFALSE, // no fit preformed
AliAODTrack::kPrimary,
selectInfo));
-
+
AliAODTrack* currTrack = (AliAODTrack*)tracks.Last();
SetChargeAndPID(part->GetPdgCode(), currTrack);
if (currTrack->Charge() != -99) {
nPos++;
} else if (currTrack->Charge() < 0) {
nNeg++;
- }
+ }
}
+ ++nPrimsAdd;
LoopOverSecondaries(part, jTracks, jVertices, nPos, nNeg);
} // end of track loop
if( fDebug > 1 )
AliInfo(Form("primaries: %d secondaries: %d (pos: %d neg: %d), vertices: %d",
- nPrims, tracks.GetEntriesFast()-nPrims, nPos, nNeg, vertices.GetEntriesFast() ) );
+ nPrimsAdd, tracks.GetEntriesFast()-nPrimsAdd, nPos, nNeg, vertices.GetEntriesFast() ) );
return;
}
for (Int_t iDaughter = mother->GetFirstDaughter(); iDaughter <= mother->GetLastDaughter(); iDaughter++) {
TParticle *part = stack->Particle(iDaughter);
// only final particles
- if( part->GetStatusCode() !=1 ) continue;
p[0] = part->Px();
p[1] = part->Py();
if (iDaughter == mother->GetFirstDaughter()) {
// add secondary vertex
- secondary = new(vertices[jVertices++])
- AliAODVertex(x, NULL, -999., tracks.Last(), AliAODVertex::kUndef);
-
- SetVertexType(part, secondary);
+ secondary = new(vertices[jVertices++])
+ AliAODVertex(x, NULL, -999., tracks.Last(), iDaughter, AliAODVertex::kUndef);
+ SetVertexType(part, secondary);
}
-
- UInt_t selectInfo = 0;
+
+ UInt_t selectInfo = 0;
//
// Track selection
if (fTrackFilter) {
// add secondary tracks
secondary->AddDaughter(new(tracks[jTracks++]) AliAODTrack(0, // ID
- 0, // label
+ iDaughter, // label
p,
kTRUE,
x,
nPos++;
} else if (currTrack->Charge() < 0) {
nNeg++;
- }
+ }
}
LoopOverSecondaries(part, jTracks, jVertices, nPos, nNeg);