Improve handling of sharp tracker pt cut matching with trigger pt level: alling Apply...
authorpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 12 Mar 2012 17:45:50 +0000 (17:45 +0000)
committerpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 12 Mar 2012 17:45:50 +0000 (17:45 +0000)
PWG/muon/AliMuonPairCuts.h
PWG/muon/AliMuonTrackCuts.cxx
PWG/muon/AliMuonTrackCuts.h
PWGPP/MUON/lite/AliAnalysisTaskTrigChEff.cxx

index 9d1ac4d..93df35f 100644 (file)
@@ -49,6 +49,9 @@ class AliMuonPairCuts : public AliAnalysisCuts
   void Print ( Option_t* option = "" ) const;
   
   Double_t MuonMass2() const;
+  
+  /// Apply also sharp pt cut when matching with trigger
+  void ApplySharpPtCutInMatching ( Bool_t sharpPtCut = kTRUE ) { fMuonTrackCuts.ApplySharpPtCutInMatching(sharpPtCut); }
 
  private:
   
index 690ab72..998685a 100644 (file)
@@ -24,6 +24,7 @@
 #include "TParameter.h"
 #include "TKey.h"
 #include "TVector3.h"
+#include "TSystem.h"
 
 #include "AliLog.h"
 #include "AliVParticle.h"
@@ -42,6 +43,7 @@ AliMuonTrackCuts::AliMuonTrackCuts() :
   fIsESD(kFALSE),
   fIsMC(kFALSE),
   fUseCustomParam(kFALSE),
+  fSharpPtCut(kFALSE),
   fParameters(TArrayD(kNParameters))
 {
   /// Default ctor.
@@ -54,6 +56,7 @@ AliMuonTrackCuts::AliMuonTrackCuts(const char* name, const char* title, Bool_t i
   fIsESD(isESD),
   fIsMC(kFALSE),
   fUseCustomParam(kFALSE),
+  fSharpPtCut(kFALSE),
   fParameters(TArrayD(kNParameters))
 {
   /// Constructor
@@ -68,6 +71,7 @@ AliMuonTrackCuts::AliMuonTrackCuts(const AliMuonTrackCuts& obj) :
   fIsESD(obj.fIsESD),
   fIsMC(obj.fIsMC),
   fUseCustomParam(obj.fUseCustomParam),
+  fSharpPtCut(obj.fSharpPtCut),
   fParameters(obj.fParameters)
 {
   /// Copy constructor
@@ -83,6 +87,7 @@ AliMuonTrackCuts& AliMuonTrackCuts::operator=(const AliMuonTrackCuts& obj)
     fIsESD = obj.fIsESD;
     fIsMC = obj.fIsMC;
     fUseCustomParam = obj.fUseCustomParam;
+    fSharpPtCut = obj.fSharpPtCut;
     fParameters = obj.fParameters;
   }
   return *this;
@@ -281,12 +286,11 @@ UInt_t AliMuonTrackCuts::GetSelectionMask( const TObject* obj )
 
   Int_t matchTrig = ( fIsESD ) ? ((AliESDMuonTrack*)track)->GetMatchTrigger() : ((AliAODTrack*)track)->GetMatchTrigger();
   Int_t cutLevel[3] = {kMuMatchApt, kMuMatchLpt, kMuMatchHpt};
-  Int_t cutLevelSharp[3] = {kMuMatchSharpApt, kMuMatchSharpLpt, kMuMatchSharpHpt};
   Double_t pt = track->Pt();
   for ( Int_t ilevel=0; ilevel<3; ilevel++ ) {
     if ( matchTrig < ilevel+1 ) break;
+    if ( fSharpPtCut && pt < GetSharpPtCut(ilevel) ) break;
     selectionMask |= cutLevel[ilevel];
-    if ( pt >= GetSharpPtCut(ilevel) ) selectionMask |= cutLevelSharp[ilevel];
   }
 
   Double_t chi2norm = ( fIsESD ) ? ((AliESDMuonTrack*)track)->GetNormalizedChi2() : ((AliAODTrack*)track)->Chi2perNDF();
@@ -558,7 +562,6 @@ void AliMuonTrackCuts::Print(Option_t* option) const
   if ( sopt.IsNull() || sopt.Contains("*") || sopt.Contains("all") ) sopt = "mask param";
   UInt_t filterMask = GetFilterMask();
   Int_t cutLevel[3] = {kMuMatchApt, kMuMatchLpt, kMuMatchHpt};
-  Int_t cutLevelSharp[3] = {kMuMatchSharpApt, kMuMatchSharpLpt, kMuMatchSharpHpt};
   TString cutLevelName[3] = {"Apt", "Lpt", "Hpt"};
   if ( sopt.Contains("mask") ) {
     printf(" *** Muon track filter mask: *** \n");
@@ -567,12 +570,13 @@ void AliMuonTrackCuts::Print(Option_t* option) const
     if ( filterMask & kMuThetaAbs ) printf("  2 < theta_abs < 10 deg\n");
     if ( filterMask & kMuPdca ) printf("  pxDCA cut\n");
     for ( Int_t ilevel=0; ilevel<3; ilevel++ ) {
-      if ( filterMask & cutLevel[ilevel] ) printf("  match %s\n", cutLevelName[ilevel].Data());
+      if ( filterMask & cutLevel[ilevel] ) {
+        printf("  match %s", cutLevelName[ilevel].Data());
+        if ( fSharpPtCut ) printf(" && sharp pt from tracker");
+        printf("\n");
+      }
     }
     if ( filterMask & kMuTrackChiSquare ) printf("  Chi2 cut on track\n");
-    for ( Int_t ilevel=0; ilevel<3; ilevel++ ) {
-      if ( filterMask & cutLevelSharp[ilevel] ) printf("  sharp tracker pt cut matching trig. %s cut\n", cutLevelName[ilevel].Data());
-    }
     printf(" ******************** \n");
   }
   if ( sopt.Contains("param") ) {
index faed05f..52435c9 100644 (file)
@@ -19,12 +19,9 @@ class AliMuonTrackCuts : public AliAnalysisCuts
     kMuMatchApt = BIT(3),
     kMuMatchLpt = BIT(4),
     kMuMatchHpt = BIT(5),
-    kMuTrackChiSquare = BIT(6),
-    kMuMatchSharpApt = BIT(7),
-    kMuMatchSharpLpt = BIT(8),
-    kMuMatchSharpHpt = BIT(9)
+    kMuTrackChiSquare = BIT(6)
   };
-
+  
   AliMuonTrackCuts();
   AliMuonTrackCuts(const char* name, const char* title, Bool_t isESD);
   AliMuonTrackCuts(const AliMuonTrackCuts& obj);
@@ -97,6 +94,9 @@ class AliMuonTrackCuts : public AliAnalysisCuts
   Double_t GetSharpPtCut ( Int_t trigPtCut, Bool_t warn = kTRUE ) const;
 
   Bool_t StreamParameters ( Int_t runNumber, Int_t maxRun );
+  
+  /// Apply also sharp pt cut when matching with trigger
+  void ApplySharpPtCutInMatching ( Bool_t sharpPtCut = kTRUE ) { fSharpPtCut = sharpPtCut; }
 
  private:
   
@@ -107,10 +107,11 @@ class AliMuonTrackCuts : public AliAnalysisCuts
   Bool_t fIsESD;            ///< Event is ESD
   Bool_t fIsMC;             ///< Monte Carlo analysis
   Bool_t fUseCustomParam;   ///< Use custom parameters (do not search in OADB)
+  Bool_t fSharpPtCut;       ///< Flag to apply sharp pt cut in track-trigger matching
 
   TArrayD fParameters;      ///< List of parameters
 
-  ClassDef(AliMuonTrackCuts, 1); // Class for muon track filters
+  ClassDef(AliMuonTrackCuts, 2); // Class for muon track filters
 };
  
 #endif
index 1736d9a..9ed4e7f 100644 (file)
@@ -370,9 +370,9 @@ void AliAnalysisTaskTrigChEff::ProcessEvent(TString physSel, const TObjArray& se
     itrackSel = matchTrig;
     UInt_t selection = fMuonTrackCuts->GetSelectionMask(track);
     Bool_t isSelected = ( ( selection & fMuonTrackCuts->GetFilterMask() ) == fMuonTrackCuts->GetFilterMask() );
-    if ( matchTrig == 1 && ( ( selection & AliMuonTrackCuts::kMuMatchSharpApt ) == 0 ) ) isSelected = kFALSE;
-    if ( matchTrig == 2 && ( ( selection & AliMuonTrackCuts::kMuMatchSharpLpt ) == 0 ) ) isSelected = kFALSE;
-    if ( matchTrig == 3 && ( ( selection & AliMuonTrackCuts::kMuMatchSharpHpt ) == 0 ) ) isSelected = kFALSE;
+    if ( matchTrig == 1 && ( ( selection & AliMuonTrackCuts::kMuMatchApt ) == 0 ) ) isSelected = kFALSE;
+    if ( matchTrig == 2 && ( ( selection & AliMuonTrackCuts::kMuMatchLpt ) == 0 ) ) isSelected = kFALSE;
+    if ( matchTrig == 3 && ( ( selection & AliMuonTrackCuts::kMuMatchHpt ) == 0 ) ) isSelected = kFALSE;
     if ( ! isSelected ) itrackSel = kNoSelCutApt;
         
     pattern = ( fAODEvent ) ? ((AliAODTrack*)track)->GetHitsPatternInTrigCh() :  ((AliESDMuonTrack*)track)->GetHitsPatternInTrigCh();