X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ANALYSIS%2FAliAnalysisTaskKineFilter.cxx;h=332bc6de8d1259a273db07ca91949400e5d10f45;hb=7581b1bca235a1a8e1188d2178173dcaf26a3637;hp=3ab0fd56696b2285b7225139ddd94aa614dc2938;hpb=81ae6b8dac9e7470f8648a3436cc8038dbddc6b6;p=u%2Fmrichter%2FAliRoot.git diff --git a/ANALYSIS/AliAnalysisTaskKineFilter.cxx b/ANALYSIS/AliAnalysisTaskKineFilter.cxx index 3ab0fd56696..332bc6de8d1 100644 --- a/ANALYSIS/AliAnalysisTaskKineFilter.cxx +++ b/ANALYSIS/AliAnalysisTaskKineFilter.cxx @@ -66,6 +66,12 @@ AliAnalysisTaskKineFilter::AliAnalysisTaskKineFilter(const AliAnalysisTaskKineFi // Copy constructor fTrackFilter = obj.fTrackFilter; } +//____________________________________________________________________ +AliAnalysisTaskKineFilter::~AliAnalysisTaskKineFilter() +{ + // if( fTrackFilter ) delete fTrackFilter; +} + //____________________________________________________________________ AliAnalysisTaskKineFilter& AliAnalysisTaskKineFilter::operator=(const AliAnalysisTaskKineFilter& other) @@ -80,13 +86,13 @@ AliAnalysisTaskKineFilter& AliAnalysisTaskKineFilter::operator=(const AliAnalysi 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 // @@ -95,11 +101,17 @@ void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/) // 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; @@ -149,14 +161,12 @@ void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/) 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 @@ -171,7 +181,7 @@ void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/) // add primary tracks primary->AddDaughter(new(tracks[jTracks++]) AliAODTrack(0, // ID, - 0, // Label + iTrack, // Label p, kTRUE, x, @@ -182,10 +192,10 @@ void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/) 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) { @@ -193,8 +203,9 @@ void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/) nPos++; } else if (currTrack->Charge() < 0) { nNeg++; - } + } } + ++nPrimsAdd; LoopOverSecondaries(part, jTracks, jVertices, nPos, nNeg); } // end of track loop @@ -205,7 +216,7 @@ void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/) 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; } @@ -227,7 +238,6 @@ Int_t AliAnalysisTaskKineFilter::LoopOverSecondaries(TParticle *mother, Int_t &j 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(); @@ -238,13 +248,12 @@ Int_t AliAnalysisTaskKineFilter::LoopOverSecondaries(TParticle *mother, Int_t &j 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) { @@ -254,7 +263,7 @@ Int_t AliAnalysisTaskKineFilter::LoopOverSecondaries(TParticle *mother, Int_t &j // add secondary tracks secondary->AddDaughter(new(tracks[jTracks++]) AliAODTrack(0, // ID - 0, // label + iDaughter, // label p, kTRUE, x, @@ -276,7 +285,7 @@ Int_t AliAnalysisTaskKineFilter::LoopOverSecondaries(TParticle *mother, Int_t &j nPos++; } else if (currTrack->Charge() < 0) { nNeg++; - } + } } LoopOverSecondaries(part, jTracks, jVertices, nPos, nNeg);