Adding cut on TOF status bit and default cuts for TOF (Chiara Zampolli)
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 27 Feb 2012 17:18:07 +0000 (17:18 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 27 Feb 2012 17:18:07 +0000 (17:18 +0000)
ANALYSIS/AliESDtrackCuts.cxx
ANALYSIS/AliESDtrackCuts.h

index 99bc5b7..db1922e 100644 (file)
@@ -74,6 +74,7 @@ const Char_t* AliESDtrackCuts::fgkCutNames[kNCuts] = {
  "n crossed rows / n findable clusters",
  "missing ITS points",
  "#Chi^{2} TPC constrained vs. global",
+ "require TOF out",
  "TOF Distance cut"
 };
 
@@ -137,6 +138,7 @@ AliESDtrackCuts::AliESDtrackCuts(const Char_t* name, const Char_t* title) : AliA
   fEtaMax(0),
   fRapMin(0),
   fRapMax(0),
+  fCutRequireTOFout(kFALSE),
   fFlagCutTOFdistance(kFALSE),
   fCutTOFdistance(3.),
   fHistogramsOn(0),
@@ -249,11 +251,12 @@ AliESDtrackCuts::AliESDtrackCuts(const AliESDtrackCuts &c) : AliAnalysisCuts(c),
   fEtaMax(0),
   fRapMin(0),
   fRapMax(0),
+  fCutRequireTOFout(kFALSE),
   fFlagCutTOFdistance(kFALSE),
   fCutTOFdistance(3.),
   fHistogramsOn(0),
-  ffDTheoretical(0),                                
-  fhCutStatistics(0),         
+  ffDTheoretical(0),
+  fhCutStatistics(0),
   fhCutCorrelation(0)
 {
   //
@@ -567,6 +570,7 @@ void AliESDtrackCuts::Copy(TObject &c) const
 
   target.fFlagCutTOFdistance = fFlagCutTOFdistance;
   target.fCutTOFdistance = fCutTOFdistance;
+  target.fCutRequireTOFout = fCutRequireTOFout;
 
   target.fHistogramsOn = fHistogramsOn;
 
@@ -752,7 +756,6 @@ AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(Bool_t selPrima
   //esdTrackCuts->SetEtaRange(-0.8,+0.8);
   
   esdTrackCuts->SetMaxChi2PerClusterITS(36);
-  // to be added after validation: esdTrackCuts->SetFlagCutTOFdistance(kTRUE);
   
   return esdTrackCuts;
 }
@@ -796,7 +799,6 @@ AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(Bool_t selPrima
   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
   
   esdTrackCuts->SetMaxChi2PerClusterITS(36);
-  // to be added after validation: esdTrackCuts->SetFlagCutTOFdistance(kTRUE);
 
   return esdTrackCuts;
 }
@@ -840,7 +842,6 @@ AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(Bool_t selPrima
   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
   
   esdTrackCuts->SetMaxChi2PerClusterITS(36);
-  // to be added after validation: esdTrackCuts->SetFlagCutTOFdistance(kTRUE);
 
   return esdTrackCuts;
 }
@@ -1287,6 +1288,41 @@ Bool_t AliESDtrackCuts::AcceptTrack(const AliESDtrack* esdTrack)
   }
   if(nMissITSpts>fCutMaxMissingITSPoints) cuts[38] = kTRUE;
   
+  //kTOFout
+  if (fCutRequireTOFout && (status&AliESDtrack::kTOFout)==0)
+    cuts[40]=kTRUE;
+
+  // TOF signal Dz cut
+  Float_t dxTOF = esdTrack->GetTOFsignalDx();
+  Float_t dzTOF = esdTrack->GetTOFsignalDz();
+  if (fFlagCutTOFdistance && (esdTrack->GetStatus() & AliESDtrack::kTOFout) == AliESDtrack::kTOFout){ // applying the TOF distance cut only if requested, and only on tracks that reached the TOF and where associated with a TOF hit 
+         if (fgBeamTypeFlag < 0) {  // the check on the beam type was not done yet
+                 const AliESDEvent* event = esdTrack->GetESDEvent();
+                 if (event){
+                         TString beamTypeESD = event->GetBeamType();
+                         AliDebug(2,Form("Beam type from ESD event = %s",beamTypeESD.Data()));
+                         if (beamTypeESD.CompareTo("A-A",TString::kIgnoreCase) == 0){ // we are in PbPb collisions --> fgBeamTypeFlag will be set to 1, to apply the cut on TOF signal Dz
+                                 fgBeamTypeFlag = 1;
+                         }
+                         else { // we are NOT in PbPb collisions --> fgBeamTypeFlag will be set to 0, to NOT apply the cu6 on TOF signal Dz
+                                 fgBeamTypeFlag = 0;
+                         }                               
+                 }
+                 else{
+                         AliFatal("Beam type not available, but it is needed to apply the TOF cut!");
+                 }
+         }
+
+         if (fgBeamTypeFlag == 1){ // we are in PbPb collisions --> apply the cut on TOF signal Dz
+                 Float_t radiusTOF = TMath::Sqrt(dxTOF*dxTOF + dzTOF*dzTOF);
+                 AliDebug(3,Form("TOF check (with fCutTOFdistance = %f) --> dx = %f, dz = %f, radius = %f", fCutTOFdistance, dxTOF, dzTOF, radiusTOF));
+                 if (radiusTOF > fCutTOFdistance){
+                         AliDebug(2, Form("************* the radius is outside the range! %f > %f, the track will be skipped", radiusTOF, fCutTOFdistance));
+                         cuts[41] = kTRUE;
+                 }
+         }
+  }
+  
   Bool_t cut=kFALSE;
   for (Int_t i=0; i<kNCuts; i++) 
     if (cuts[i]) {cut = kTRUE;}
@@ -1343,38 +1379,6 @@ Bool_t AliESDtrackCuts::AcceptTrack(const AliESDtrack* esdTrack)
     }
   }
 
-  // TOF signal Dz cut
-  Float_t dxTOF = esdTrack->GetTOFsignalDx();
-  Float_t dzTOF = esdTrack->GetTOFsignalDz();
-  if (fFlagCutTOFdistance){
-         if (fgBeamTypeFlag < 0) {  // the check on the beam type was not done yet
-                 const AliESDEvent* event = esdTrack->GetESDEvent();
-                 if (event){
-                         TString beamTypeESD = event->GetBeamType();
-                         AliDebug(2,Form("Beam type from ESD event = %s",beamTypeESD.Data()));
-                         if (beamTypeESD.CompareTo("A-A",TString::kIgnoreCase) == 0){ // we are in PbPb collisions --> fgBeamTypeFlag will be set to 1, to apply the cut on TOF signal Dz
-                                 fgBeamTypeFlag = 1;
-                         }
-                         else { // we are NOT in PbPb collisions --> fgBeamTypeFlag will be set to 0, to NOT apply the cu6 on TOF signal Dz
-                                 fgBeamTypeFlag = 0;
-                         }                               
-                 }
-                 else{
-                         AliFatal("Beam type not available, but it is needed to apply the TOF cut!");
-                 }
-         }
-
-         if (fgBeamTypeFlag == 1){ // we are in PbPb collisions --> apply the cut on TOF signal Dz
-                 Float_t radiusTOF = TMath::Sqrt(dxTOF*dxTOF + dzTOF*dzTOF);
-                 AliDebug(3,Form("TOF check (with fCutTOFdistance = %f) --> dx = %f, dz = %f, radius = %f", fCutTOFdistance, dxTOF, dzTOF, radiusTOF));
-                 if (radiusTOF > fCutTOFdistance){
-                         AliDebug(2, Form("************* the radius is outside the range! %f > %f, the track will be skipped", radiusTOF, fCutTOFdistance));
-                         cuts[40] = kTRUE;
-                         cut = kTRUE;
-                 }
-         }
-  }
-  
   //########################################################################
   // filling histograms
   if (fHistogramsOn) {
@@ -2336,3 +2340,15 @@ Int_t AliESDtrackCuts::GetReferenceMultiplicity(const AliESDEvent* esd, MultEstT
 
   return multiplicityEstimate;
 }
+
+//____________________________________________________________________
+void AliESDtrackCuts::SetRequireStandardTOFmatchCuts(){
+
+       // setting the TOF cuts flags (kTOFout = TOF matching distance) to true, to include the selection on the standard TOF matching 
+
+       SetRequireTOFout(kTRUE);
+       SetFlagCutTOFdistance(kTRUE);
+       SetCutTOFdistance(3.);
+
+}
+
index d54d1a6..f3abb1d 100644 (file)
@@ -191,10 +191,13 @@ public:
   TH1F* GetNClustersTPC(Int_t i) const { return fhNClustersTPC[i]; }
   TH1F* GetPtHist(Int_t i) const { return fhPt[i]; }
   
+  // TOF cuts
   void SetFlagCutTOFdistance(Bool_t flagTOFcut) { fFlagCutTOFdistance = flagTOFcut;}
   Bool_t GetFlagCutTOFdistance() const { return fFlagCutTOFdistance;}
   void SetCutTOFdistance(Float_t cut) { fCutTOFdistance = cut;}
   Float_t GetCutTOFdistance() const { return fCutTOFdistance;}
+  void SetRequireTOFout(Bool_t b = kFALSE) {fCutRequireTOFout = b;} 
+  void SetRequireStandardTOFmatchCuts();
 
 protected:
   void Init(); // sets everything to 0
@@ -202,7 +205,7 @@ protected:
   Bool_t CheckPtDepDCA(TString dist,Bool_t print=kFALSE) const;
   void SetPtDepDCACuts(Double_t pt);
 
-  enum { kNCuts = 41 }; 
+  enum { kNCuts = 42 }; 
 
   //######################################################
   // esd track quality cuts
@@ -273,6 +276,7 @@ protected:
   Float_t fEtaMin, fEtaMax;           // definition of the range of the eta
   Float_t fRapMin, fRapMax;           // definition of the range of the y
 
+  Bool_t  fCutRequireTOFout;        // require TOF out 
   Bool_t  fFlagCutTOFdistance;       // cut on TOFdistance? --> yes by default!
   Float_t fCutTOFdistance;           // value of the cut on TOFdistance
   static Char_t fgBeamTypeFlag;      // -1 --> no check done on the beam type yet
@@ -323,7 +327,7 @@ protected:
 
   TH2F* fhTOFdistance[2];            //-> TOF signal distance dx vs dz
 
-  ClassDef(AliESDtrackCuts, 19)
+  ClassDef(AliESDtrackCuts, 20)
 };