Adding possibility to cut on length over which the track is sampled in the active...
authorakalweit <akalweit@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Sep 2013 14:52:19 +0000 (14:52 +0000)
committerakalweit <akalweit@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Sep 2013 14:52:19 +0000 (14:52 +0000)
ANALYSIS/AliESDtrackCuts.cxx
ANALYSIS/AliESDtrackCuts.h

index f5699c1..5314a5e 100644 (file)
@@ -76,7 +76,8 @@ const Char_t* AliESDtrackCuts::fgkCutNames[kNCuts] = {
  "missing ITS points",
  "#Chi^{2} TPC constrained vs. global",
  "require TOF out",
- "TOF Distance cut"
+ "TOF Distance cut",
+ "min length in active volume TPC"
 };
 
 AliESDtrackCuts* AliESDtrackCuts::fgMultEstTrackCuts[AliESDtrackCuts::kNMultEstTrackCuts] = { 0, 0, 0, 0 };
@@ -90,6 +91,7 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   fCutMinRatioCrossedRowsOverFindableClustersTPC(0),
   f1CutMinNClustersTPCPtDep(0x0),
   fCutMaxPtDepNClustersTPC(0),
+  fCutMinLengthActiveVolumeTPC(0),
   fCutMaxChi2PerClusterTPC(0),
   fCutMaxChi2PerClusterITS(0),
   fCutMaxChi2TPCConstrainedVsGlobal(0),
@@ -203,6 +205,7 @@ AliESDtrackCuts::AliESDtrackCuts(const AliESDtrackCuts &c) : AliAnalysisCuts(c),
   fCutMinRatioCrossedRowsOverFindableClustersTPC(0),
   f1CutMinNClustersTPCPtDep(0x0),
   fCutMaxPtDepNClustersTPC(0),
+  fCutMinLengthActiveVolumeTPC(0),
   fCutMaxChi2PerClusterTPC(0),
   fCutMaxChi2PerClusterITS(0),
   fCutMaxChi2TPCConstrainedVsGlobal(0),
@@ -506,7 +509,8 @@ void AliESDtrackCuts::Copy(TObject &c) const
     target.f1CutMinNClustersTPCPtDep = (TFormula*) f1CutMinNClustersTPCPtDep->Clone("f1CutMinNClustersTPCPtDep");
   }
   target.fCutMaxPtDepNClustersTPC =   fCutMaxPtDepNClustersTPC;
-
+  target.fCutMinLengthActiveVolumeTPC = fCutMinLengthActiveVolumeTPC;
+  
   target.fCutMaxChi2PerClusterTPC = fCutMaxChi2PerClusterTPC;
   target.fCutMaxChi2PerClusterITS = fCutMaxChi2PerClusterITS;
   target.fCutMaxChi2TPCConstrainedVsGlobal = fCutMaxChi2TPCConstrainedVsGlobal;
@@ -1094,7 +1098,7 @@ Bool_t AliESDtrackCuts::AcceptTrack(const AliESDtrack* esdTrack)
   else {
     nClustersTPC = esdTrack->GetTPCclusters(0);
   }
-
+  
   //Pt dependent NClusters Cut
   if(f1CutMinNClustersTPCPtDep) {
     if(esdTrack->Pt()<fCutMaxPtDepNClustersTPC)
@@ -1388,6 +1392,21 @@ Bool_t AliESDtrackCuts::AcceptTrack(const AliESDtrack* esdTrack)
        cut = kTRUE;
       }
     }
+
+    // max length in active volume
+    Float_t lengthInActiveZoneTPC = -1;
+    if (fCutMinLengthActiveVolumeTPC > 1.) { // do the calculation only if needed to save cpu-time
+      if (esdTrack->GetESDEvent()) {
+       lengthInActiveZoneTPC = esdTrack->GetLengthInActiveZone(1, 1.8, 220, esdTrack->GetESDEvent()->GetMagneticField()); 
+       //
+       if (lengthInActiveZoneTPC < fCutMinLengthActiveVolumeTPC ) {
+         cuts[42] = kTRUE;
+         cut = kTRUE;
+       }
+      }
+    }
+
+    
   }
 
   //########################################################################
@@ -2221,7 +2240,6 @@ Int_t AliESDtrackCuts::GetReferenceMultiplicity(const AliESDEvent* esd, MultEstT
   Int_t trackletsITSSA_complementary = 0; //number of SPD tracklets complementary to ITSSA tracks for a given event
 
   const Int_t nESDTracks = esd->GetNumberOfTracks();
-  Int_t highestID = 0;
 
   // flags for secondary and rejected tracks
   const Int_t kRejBit = BIT(15); // set this bit in global tracks if it is rejected by a cut
index b148aed..279116a 100644 (file)
@@ -88,6 +88,7 @@ public:
   void SetMinNClustersITS(Int_t min=-1)          {fCutMinNClusterITS=min;}
   void SetMinNCrossedRowsTPC(Float_t min=-1) { fCutMinNCrossedRowsTPC=min;}
   void SetMinRatioCrossedRowsOverFindableClustersTPC(Float_t min = -1) { fCutMinRatioCrossedRowsOverFindableClustersTPC=min;}
+  void SetMinLengthActiveVolumeTPC(Float_t min = 120.) {fCutMinLengthActiveVolumeTPC=min;}
   void SetClusterRequirementITS(Detector det, ITSClusterRequirement req = kOff) { fCutClusterRequirementITS[det] = req; }
   void SetClusterRequirementITS(ITSULayers det, ITSClusterRequirement req = kOff) { fCutClusterRequirementITS[det] = req; }
   void SetMaxChi2PerClusterTPC(Float_t max=1e10) {fCutMaxChi2PerClusterTPC=max;}
@@ -125,9 +126,9 @@ public:
   void SetDCAToVertex2D(Bool_t b=kFALSE)              {fCutDCAToVertex2D = b;}
 
 
-  // getters
-
+  // getters  
   Int_t   GetMinNClusterTPC()        const   { return fCutMinNClusterTPC;}
+  Float_t GetMinLengthActiveVolumeTPC() const { return fCutMinLengthActiveVolumeTPC;}
   Int_t   GetMinNClustersITS()       const   { return fCutMinNClusterITS;}
   TFormula *GetMinNClustersTPCPtDep() const  { return f1CutMinNClustersTPCPtDep;}
   ITSClusterRequirement GetClusterRequirementITS(Detector det) const { return fCutClusterRequirementITS[det]; }
@@ -208,7 +209,7 @@ protected:
   Bool_t CheckPtDepDCA(TString dist,Bool_t print=kFALSE) const;
   void SetPtDepDCACuts(Double_t pt);
 
-  enum { kNCuts = 42 }; 
+  enum { kNCuts = 43 }; 
 
   //######################################################
   // esd track quality cuts
@@ -220,7 +221,8 @@ protected:
   Float_t   fCutMinNCrossedRowsTPC;     // min number of tpc crossed rows
   Float_t fCutMinRatioCrossedRowsOverFindableClustersTPC; // min ratio crossed rows / findable clusters
   TFormula *f1CutMinNClustersTPCPtDep; // pt dependent tpc clusters cut
-  Float_t fCutMaxPtDepNClustersTPC;   // maximum pt for pt dependend TPC cluster cut. For pt=>ptmax NClusterMin = f1CutMinNClustersTPCPtDep->Eval(fCutMaxPtDepNClustersTPC).
+  Float_t fCutMaxPtDepNClustersTPC;     // maximum pt for pt dependend TPC cluster cut. For pt=>ptmax NClusterMin = f1CutMinNClustersTPCPtDep->Eval(fCutMaxPtDepNClustersTPC).
+  Float_t fCutMinLengthActiveVolumeTPC; // mininum length (in cm) over which the track is sampled in the active volume of the TPC (outside boundaries)
 
   ITSClusterRequirement fCutClusterRequirementITS[3];  // detailed ITS cluster requirements for (SPD, SDD, SSD)