]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG/muon/AliMuonPairCuts.cxx
guess the run number from the input file path
[u/mrichter/AliRoot.git] / PWG / muon / AliMuonPairCuts.cxx
index 3724e60aa156eb7af7733a169a856dd70cbf5806..31f8303089b3a5e5873083f8997d59564fb7d98b 100644 (file)
 #include "TMath.h"
 #include "TList.h"
 #include "TLorentzVector.h"
+#include "TArrayI.h"
 
 #include "AliLog.h"
 #include "AliVParticle.h"
+#include "AliInputEventHandler.h"
 
 /// \cond CLASSIMP
 ClassImp(AliMuonPairCuts) // Class implementation in ROOT context
@@ -35,9 +37,9 @@ AliMuonPairCuts::AliMuonPairCuts() :
 }
 
 //________________________________________________________________________
-AliMuonPairCuts::AliMuonPairCuts(const char* name, const char* title, Bool_t isESD) :
-  AliAnalysisCuts(name, title),
-  fMuonTrackCuts("muonTrackCutInPair","muonTrackCutInPair", isESD)
+AliMuonPairCuts::AliMuonPairCuts(const char* name, const char* title) :
+AliAnalysisCuts(name, title),
+fMuonTrackCuts("muonTrackCutInPair","muonTrackCutInPair")
 {
   /// Constructor
   SetDefaultFilterMask();
@@ -54,7 +56,6 @@ fMuonTrackCuts(trackCuts)
 }
 
 
-
 //________________________________________________________________________
 AliMuonPairCuts::AliMuonPairCuts(const AliMuonPairCuts& obj) :
   AliAnalysisCuts(obj),
@@ -83,10 +84,10 @@ AliMuonPairCuts::~AliMuonPairCuts()
 }
 
 //________________________________________________________________________
-Bool_t AliMuonPairCuts::SetRun( Int_t runNumber )
+Bool_t AliMuonPairCuts::SetRun ( const AliInputEventHandler* eventHandler )
 {
   /// Get parameters from OADB for runNumber
-  return fMuonTrackCuts.SetRun(runNumber);
+  return fMuonTrackCuts.SetRun(eventHandler);
 }
 
 
@@ -108,6 +109,16 @@ Bool_t AliMuonPairCuts::IsSelected( TList* list )
   return ( ( selectionMask & filterMask ) == filterMask );
 }
 
+//________________________________________________________________________
+Bool_t AliMuonPairCuts::IsSelected( TObject* track1, TObject* track2 )
+{
+  /// Pair is selected
+  UInt_t filterMask = GetFilterMask();
+  UInt_t selectionMask = GetSelectionMask(track1, track2);
+  
+  return ( ( selectionMask & filterMask ) == filterMask );
+}
+
 
 //________________________________________________________________________
 UInt_t AliMuonPairCuts::GetSelectionMask( const TObject* obj )
@@ -171,7 +182,7 @@ UInt_t AliMuonPairCuts::GetSelectionMask( const TObject* track1, const TObject*
 Double_t AliMuonPairCuts::MuonMass2() const
 {
   /// A usefull constant
-  static Double_t m2 = 1.11636129640000012e-02; // using a constant here as the line below is a problem for CINT...
+  static Double_t m2 = 1.11636129640000012e-02;
   return m2;
 }
 
@@ -190,6 +201,28 @@ void AliMuonPairCuts::SetIsMC ( Bool_t isMC )
   fMuonTrackCuts.SetIsMC(isMC);
 }
 
+//________________________________________________________________________
+Bool_t AliMuonPairCuts::TrackPtCutMatchTrigClass ( const AliVParticle* track1, const AliVParticle* track2, const TArrayI ptCutFromClass ) const
+{
+  /// Check if track pair passes the trigger pt cut level used in the trigger class
+  Bool_t matchTrig1 = fMuonTrackCuts.TrackPtCutMatchTrigClass(track1, ptCutFromClass);
+  Bool_t matchTrig2 = fMuonTrackCuts.TrackPtCutMatchTrigClass(track2, ptCutFromClass);
+  
+  Bool_t matchTrackerPt1 = kTRUE, matchTrackerPt2 = kTRUE;
+  if ( IsApplySharpPtCutInMatching() ) {
+    matchTrackerPt1 = ( track1->Pt() >= fMuonTrackCuts.GetMuonTrackCutsParam().GetSharpPtCut(ptCutFromClass[0]-1,kFALSE) );
+    matchTrackerPt2 = ( track2->Pt() >= fMuonTrackCuts.GetMuonTrackCutsParam().GetSharpPtCut(ptCutFromClass[0]-1,kFALSE) );
+  }
+  
+  matchTrig1 = ( matchTrig1 && matchTrackerPt1 );
+  matchTrig2 = ( matchTrig2 && matchTrackerPt2 );
+  
+  Bool_t passCut = ( ptCutFromClass[1]>0 ) ? ( matchTrig1 && matchTrig2 ) : ( matchTrig1 || matchTrig2 );
+
+  AliDebug(1,Form("Class matchTrig %i %i  trackMatchTrig %i %i trackPt %g %g (required %i)  passCut %i", ptCutFromClass[0], ptCutFromClass[1], matchTrig1, matchTrig2, track1->Pt(), track2->Pt(), IsApplySharpPtCutInMatching(),passCut));
+  return passCut;
+}
+
 //________________________________________________________________________
 void AliMuonPairCuts::Print(Option_t* option) const
 {
@@ -199,7 +232,7 @@ void AliMuonPairCuts::Print(Option_t* option) const
   
   TString sopt(option);
   sopt.ToLower();
-  if ( sopt.IsNull() || sopt.Contains("*") || sopt.Contains("all") ) sopt += " pair track";
+  if ( sopt.IsNull() || sopt.Contains("*") || sopt.Contains("all") ) sopt += " pair trackparam trackmask";
   if ( sopt.Contains("pair") ) {
     UInt_t filterMask = GetFilterMask();
     printf(" *** Muon pair filter mask: *** \n");
@@ -211,9 +244,9 @@ void AliMuonPairCuts::Print(Option_t* option) const
     if ( filterMask & kBothMuMatchApt ) printf("  mu1 && mu2 match Apt\n");
     if ( filterMask & kBothMuMatchLpt ) printf("  mu1 && mu2 match Lpt\n");
     if ( filterMask & kBothMuMatchHpt ) printf("  mu1 && mu2 match Hpt\n");
-    if ( filterMask & kBothMuMatchApt ) printf("  mu1 || mu2 match Apt\n");
-    if ( filterMask & kBothMuMatchLpt ) printf("  mu1 || mu2 match Lpt\n");
-    if ( filterMask & kBothMuMatchHpt ) printf("  mu1 || mu2 match Hpt\n");
+    if ( filterMask & kOneMuMatchApt ) printf("  mu1 || mu2 match Apt\n");
+    if ( filterMask & kOneMuMatchLpt ) printf("  mu1 || mu2 match Lpt\n");
+    if ( filterMask & kOneMuMatchHpt ) printf("  mu1 || mu2 match Hpt\n");
     if ( filterMask & kDimuUnlikeSign ) printf("  Unlike sign\n");
     if ( filterMask & kDimuRapidity ) printf("  -4 < y_{mumu} < -2.5\n");
     printf(" ******************** \n");