#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
}
//________________________________________________________________________
-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();
}
-
//________________________________________________________________________
AliMuonPairCuts::AliMuonPairCuts(const AliMuonPairCuts& obj) :
AliAnalysisCuts(obj),
}
//________________________________________________________________________
-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);
}
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 )
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;
}
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
{
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");
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");