]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
New version (Ernesto)
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 6 Jun 2008 19:45:38 +0000 (19:45 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 6 Jun 2008 19:45:38 +0000 (19:45 +0000)
ANALYSIS/AliAnalysisTaskKineFilter.cxx
ANALYSIS/AliAnalysisTaskKineFilter.h
ANALYSIS/AliKineTrackCuts.cxx
ANALYSIS/AliKineTrackCuts.h

index 3ab0fd56696b2285b7225139ddd94aa614dc2938..f34e502a0cbd79e98bbfea9245549dd5c5a5d8a8 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)
@@ -100,6 +106,7 @@ void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/)
   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;
@@ -155,8 +162,6 @@ void AliAnalysisTaskKineFilter::Exec(Option_t */*option*/)
                    AliAODVertex(x, NULL, -999., NULL, AliAODVertex::kPrimary);  
     }
     
-    // only final particles
-    if( part->GetStatusCode() !=1 ) continue;  
     
     //
     // Track selection
@@ -171,7 +176,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 +187,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 +198,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 +211,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 +233,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(); 
@@ -240,11 +245,10 @@ Int_t AliAnalysisTaskKineFilter::LoopOverSecondaries(TParticle *mother, Int_t &j
         // add secondary vertex
         secondary = new(vertices[jVertices++])
                        AliAODVertex(x, NULL, -999., tracks.Last(), AliAODVertex::kUndef);
-        
         SetVertexType(part, secondary);
       }
-      
-      UInt_t selectInfo = 0; 
+
+      UInt_t selectInfo = 0;
       //
       // Track selection
       if (fTrackFilter) {
@@ -254,7 +258,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 +280,7 @@ Int_t AliAnalysisTaskKineFilter::LoopOverSecondaries(TParticle *mother, Int_t &j
           nPos++;
         } else if (currTrack->Charge() < 0) {
           nNeg++;
-        }            
+        }
       }
 
       LoopOverSecondaries(part, jTracks, jVertices, nPos, nNeg);
index 246f419910c4da11abd4dfe83e982ad50f738144..ceac8faccd14d795e2f22582a9e8ecbdac837058 100644 (file)
@@ -26,7 +26,7 @@ class AliAnalysisTaskKineFilter : public AliAnalysisTaskSE
                                   AliAnalysisTaskKineFilter();
                                   AliAnalysisTaskKineFilter( const char* name );
                                   AliAnalysisTaskKineFilter(const AliAnalysisTaskKineFilter& obj);
-    virtual                      ~AliAnalysisTaskKineFilter() {;}
+    virtual                      ~AliAnalysisTaskKineFilter();
      AliAnalysisTaskKineFilter&   operator=(const AliAnalysisTaskKineFilter& other);
     
     // Implementation of interface methods
@@ -34,14 +34,14 @@ class AliAnalysisTaskKineFilter : public AliAnalysisTaskSE
     virtual                void   Exec( Option_t *option );
     
     // Setters
-    virtual                void   SetTrackFilter(AliAnalysisFilter* trackF) {fTrackFilter = trackF;}
+    virtual                void   SetTrackFilter(AliAnalysisFilter* trackF) { fTrackFilter = trackF; }
     
  private:
                           Int_t   LoopOverSecondaries(TParticle *mother, Int_t& jTracks, Int_t& jVertices, Int_t& nPos, Int_t& nNeg );
                            void   SetChargeAndPID(Int_t pdgCode, AliAODTrack *track);
                            void   SetVertexType(TParticle *part, AliAODVertex *vertex);
                          
-              AliAnalysisFilter*  fTrackFilter; //  Track Filter
+              AliAnalysisFilter*  fTrackFilter;          //  Track Filter
                     
     ClassDef( AliAnalysisTaskKineFilter, 1 ); // Analysis task for Kinematic filtering
 };
index 6112621f392ac91f407bb5f8118ce4624e424614..60298ab4df912b0a31e6def8862cd7b4a0e5c167 100644 (file)
@@ -32,6 +32,8 @@ ClassImp(AliKineTrackCuts)
 //____________________________________________________________________
 AliKineTrackCuts::AliKineTrackCuts(const Char_t* name, const Char_t* title) : 
   AliAnalysisCuts(name,title),
+  fOnlyFinalParticles(kFALSE),
+  fOnlyPrimary(kFALSE), 
   fPMin(0),
   fPMax(0),
   fPtMin(0),
@@ -68,6 +70,10 @@ Bool_t  AliKineTrackCuts::IsSelected(TObject* obj)
 
   TParticle * part = (TParticle *)obj;
   
+  // only final particles
+  if( fOnlyFinalParticles && part->GetStatusCode() !=1 ) return kFALSE;
+  if( fOnlyPrimary && part->IsPrimary() !=1 ) return kFALSE;
+  
   // getting the kinematic variables of the track
   Float_t momentum = part->P();
   Float_t pt       = part->Pt();
index 67ccacd4b3d4c55bcc48be9bd43066a0d3785d22..25ca45d2ceea4f83b7c0e2ad2bdc6d2419a21551 100644 (file)
@@ -16,27 +16,30 @@ public:
   virtual            ~AliKineTrackCuts(){;}
   
             Bool_t    IsSelected(TObject* obj);
-           Bool_t    IsSelected(TList* /*list*/) {return kTRUE;}
             
+              void    SetFinalParticles( Bool_t val=kTRUE )          { fOnlyFinalParticles = val; }
+              void    SetPrimaryParticles( Bool_t val=kTRUE )        { fOnlyPrimary = val; }
   // track kinematic cut setters
-              void    SetPRange(Float_t r1=0, Float_t r2=1e10)       {fPMin=r1;   fPMax=r2;}
-              void    SetPtRange(Float_t r1=0, Float_t r2=1e10)      {fPtMin=r1;  fPtMax=r2;}
-              void    SetPxRange(Float_t r1=-1e10, Float_t r2=1e10)  {fPxMin=r1;  fPxMax=r2;}
-              void    SetPyRange(Float_t r1=-1e10, Float_t r2=1e10)  {fPyMin=r1;  fPyMax=r2;}
-              void    SetPzRange(Float_t r1=-1e10, Float_t r2=1e10)  {fPzMin=r1;  fPzMax=r2;}
-              void    SetEtaRange(Float_t r1=-1e10, Float_t r2=1e10) {fEtaMin=r1; fEtaMax=r2;}
-              void    SetRapRange(Float_t r1=-1e10, Float_t r2=1e10) {fRapMin=r1; fRapMax=r2;}
+             void    SetPRange(Float_t r1=0, Float_t r2=1e10)       { fPMin=r1;   fPMax=r2;}
+              void    SetPtRange(Float_t r1=0, Float_t r2=1e10)      { fPtMin=r1;  fPtMax=r2;}
+              void    SetPxRange(Float_t r1=-1e10, Float_t r2=1e10)  { fPxMin=r1;  fPxMax=r2;}
+              void    SetPyRange(Float_t r1=-1e10, Float_t r2=1e10)  { fPyMin=r1;  fPyMax=r2;}
+              void    SetPzRange(Float_t r1=-1e10, Float_t r2=1e10)  { fPzMin=r1;  fPzMax=r2;}
+              void    SetEtaRange(Float_t r1=-1e10, Float_t r2=1e10) { fEtaMin=r1; fEtaMax=r2;}
+              void    SetRapRange(Float_t r1=-1e10, Float_t r2=1e10) { fRapMin=r1; fRapMax=r2;}
                   
 protected:        
                   
+           Bool_t    fOnlyFinalParticles;   // true => skip part with GetStatusCode()!=1
+           Bool_t    fOnlyPrimary;          // Only Primary Particles
   // kinematics cuts
-           Float_t   fPMin,   fPMax;             // definition of the range of the P
-           Float_t   fPtMin,  fPtMax;            // definition of the range of the Pt
-           Float_t   fPxMin,  fPxMax;            // definition of the range of the Px
-           Float_t   fPyMin,  fPyMax;            // definition of the range of the Py
-           Float_t   fPzMin,  fPzMax;            // definition of the range of the Pz
-           Float_t   fEtaMin, fEtaMax;           // definition of the range of the eta
-           Float_t   fRapMin, fRapMax;           // definition of the range of the y
+           Float_t   fPMin,   fPMax;        // definition of the range of the P
+           Float_t   fPtMin,  fPtMax;       // definition of the range of the Pt
+           Float_t   fPxMin,  fPxMax;       // definition of the range of the Px
+           Float_t   fPyMin,  fPyMax;       // definition of the range of the Py
+           Float_t   fPzMin,  fPzMax;       // definition of the range of the Pz
+           Float_t   fEtaMin, fEtaMax;      // definition of the range of the eta
+           Float_t   fRapMin, fRapMax;      // definition of the range of the y
   
   
   ClassDef(AliKineTrackCuts, 1)