Add possibility to cut tracks on DCA
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 23 Nov 2012 13:51:53 +0000 (13:51 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 23 Nov 2012 13:51:53 +0000 (13:51 +0000)
PWG/CaloTrackCorrBase/AliCaloTrackReader.cxx
PWG/CaloTrackCorrBase/AliCaloTrackReader.h

index 5f75c90..0364724 100755 (executable)
@@ -70,6 +70,7 @@ fUseEMCALTimeCut(1),         fUseParamTimeCut(0),             fUseTrackTimeCut(0
 fEMCALTimeCutMin(-10000),    fEMCALTimeCutMax(10000),
 fEMCALParamTimeCutMin(),     fEMCALParamTimeCutMax(),
 fTrackTimeCutMin(-10000),    fTrackTimeCutMax(10000),
+fUseTrackDCACut(0),
 fAODBranchList(0x0),
 fCTSTracks(0x0),             fEMCALClusters(0x0),             fPHOSClusters(0x0),
 fEMCALCells(0x0),            fPHOSCells(0x0),
@@ -384,6 +385,11 @@ void AliCaloTrackReader::InitParameters()
   fEMCALPtMax = 1000. ;
   fPHOSPtMax  = 1000. ;
   
+  //Track DCA cuts
+  fTrackDCACut[0] = 3; //xy, quite large
+  fTrackDCACut[1] = 3; //z, quite large
+  fTrackDCACut[2] = 3; //TPC constrained, quite large
+
   //Do not filter the detectors input by default.
   fFillEMCAL      = kFALSE;
   fFillPHOS       = kFALSE;
@@ -1135,7 +1141,7 @@ void AliCaloTrackReader::FillInputCTS()
     if(fCTSPtMin > momentum.Pt() || fCTSPtMax < momentum.Pt()) continue ;
         
     if(fCheckFidCut && !fFiducialCut->IsInFiducialCut(momentum,"CTS")) continue;
-    
+      
     if(okTOF)
     {
        //SetTrackEventBCcut(bc);
@@ -1149,6 +1155,33 @@ void AliCaloTrackReader::FillInputCTS()
       }
     }
     
+    if(fUseTrackDCACut)
+    {
+      //In case of hybrid tracks on AODs, constrained TPC tracks cannot be propagated back to primary vertex
+      AliAODTrack * aodTrack = dynamic_cast<AliAODTrack*>(track);
+      Float_t dcaCons = -999;
+      if(aodTrack)
+      {
+        dcaCons = aodTrack->DCA();
+        //vtxBC   = aodTrack->GetProdVertex()->GetBC();
+        if(dcaCons > -999)
+        {
+          if(TMath::Abs(dcaCons) > fTrackDCACut[2] ) continue ;
+        }
+      }
+
+      //non contrained TPC tracks (tracks with ITS points) on AODs
+      if(dcaCons==-999)
+      {
+        Double_t dca[2]   = {1e6,1e6};
+        Double_t covar[3] = {1e6,1e6,1e6};
+        Bool_t okDCA = track->PropagateToDCA(fInputEvent->GetPrimaryVertex(),bz,100.,dca,covar);
+        if( !okDCA                               ||
+            TMath::Abs(dca[0]) > fTrackDCACut[0] ||
+            TMath::Abs(dca[1]) > fTrackDCACut[1]    ) continue ;
+      }
+    }// DCA cuts
+    
     if(fDebug > 2 && momentum.Pt() > 0.1)
       printf("AliCaloTrackReader::FillInputCTS() - Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
              momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
index abb3d41..592b03a 100755 (executable)
@@ -118,6 +118,16 @@ public:
   void             SetEMCALEMax (Float_t  e)               { SetEMCALPtMax(e)              ; }
   void             SetPHOSEMax  (Float_t  e)               { SetPHOSPtMax (e)              ; }
   
+  
+  Double_t         GetTrackDCACut(Int_t i)           const { if(i >= 0 && i < 3 ) return fTrackDCACut[i] ;
+                                                             else return -999              ; }
+  
+  void             SetTrackDCACut(Int_t i, Float_t cut)    { if(i >= 0 && i < 3 )
+                                                             fTrackDCACut[i] = cut         ; }
+  
+  void             SwitchOnUseTrackDCACut()                { fUseTrackDCACut = kTRUE       ; }
+  void             SwitchOffUseTrackDCACut()               { fUseTrackDCACut = kFALSE      ; }
+  
   //Time cut
   
   Double_t         GetTrackTimeCutMin()              const { return fTrackTimeCutMin       ; }
@@ -477,7 +487,9 @@ public:
   Double_t         fEMCALParamTimeCutMax[4];// Remove clusters/cells with time larger than parametrized value, in ns
   Double_t         fTrackTimeCutMin;        // Remove tracks with time smaller than this value, in ns
   Double_t         fTrackTimeCutMax;        // Remove tracks with time larger than this value, in ns
-  
+  Bool_t           fUseTrackDCACut;         // Do DCA selection
+  Double_t         fTrackDCACut[3];         // Remove tracks with DCA larger than cut
+
   TList          * fAODBranchList ;         //-> List with AOD branches created and needed in analysis
   TObjArray      * fCTSTracks ;             //-> temporal array with tracks
   TObjArray      * fEMCALClusters ;         //-> temporal array with EMCAL CaloClusters