]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskKineFilter.cxx
Added possibility to use par files for base libraries. More comments added.
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskKineFilter.cxx
index 3ab0fd56696b2285b7225139ddd94aa614dc2938..332bc6de8d1259a273db07ca91949400e5d10f45 100644 (file)
@@ -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);