#include "AliVParticle.h"
#include "AliESDMuonTrack.h"
#include "AliAODTrack.h"
+#include "AliAnalysisManager.h"
/// \cond CLASSIMP
ClassImp(AliMuonTrackCuts) // Class implementation in ROOT context
}
}
- TString filename = "$ALICE_ROOT/OADB/PWG3/MuonTrackCuts.root";
+ TString filename = Form("%s/PWG3/MuonTrackCuts.root",AliAnalysisManager::GetOADBPath());
if ( fIsMC ) filename.ReplaceAll(".root", "_MC.root");
TString parNames[kNParameters];
parNames[kNSigmaPdcaCut] = "NSigmaPdcaCut";
parNames[kChi2NormCut] = "Chi2NormCut";
parNames[kRelPResolution] = "RelPResolution";
+ parNames[kSharpPtApt] = "SharpPtApt";
+ parNames[kSharpPtLpt] = "SharpPtLpt";
+ parNames[kSharpPtHpt] = "SharpPtHpt";
TObjArray* paramList = 0x0;
if ( matchTrig >= 1 ) selectionMask |= kMuMatchApt;
if ( matchTrig >= 2 ) selectionMask |= kMuMatchLpt;
if ( matchTrig >= 3 ) selectionMask |= kMuMatchHpt;
+
+ if ( track->Pt() >= GetSharpPtCut( matchTrig-1, kFALSE ) ) selectionMask |= kMuSharpPtCut;
Double_t chi2norm = ( fIsESD ) ? ((AliESDMuonTrack*)track)->GetNormalizedChi2() : ((AliAODTrack*)track)->Chi2perNDF();
if ( chi2norm < GetChi2NormCut() ) selectionMask |= kMuTrackChiSquare;
return fParameters[kSlopeResolution];
}
+//________________________________________________________________________
+void AliMuonTrackCuts::SetSharpPtCut ( Int_t trigPtCut, Double_t ptCutValue )
+{
+ /// Set sharp tracker cut matching the trigger level
+ /// trigPtCut can be 0 (Apt), 1 (Lpt) or 2 (Hpt)
+ Int_t ipar = -1;
+ switch ( trigPtCut ) {
+ case 0:
+ ipar = kSharpPtApt;
+ break;
+ case 1:
+ ipar = kSharpPtLpt;
+ break;
+ case 2:
+ ipar = kSharpPtHpt;
+ break;
+ default:
+ AliError("Allowed values for trigPtCut are 0 (Apt), 1 (Lpt), 2 (Hpt)");
+ return;
+ }
+ SetParameter(ipar,ptCutValue);
+}
+
+//________________________________________________________________________
+Double_t AliMuonTrackCuts::GetSharpPtCut ( Int_t trigPtCut, Bool_t warn ) const
+{
+ /// Get sharp tracker cut matching the trigger level
+ /// trigPtCut can be 0 (Apt), 1 (Lpt) or 2 (Hpt)
+ if ( trigPtCut < 0 || trigPtCut > 2 ) {
+ if ( warn ) AliError("Allowed values for trigPtCut are 0 (Apt), 1 (Lpt), 2 (Hpt)");
+ return 0.;
+ }
+ Int_t ipar = kSharpPtApt + trigPtCut;
+ return fParameters[ipar];
+}
+
//________________________________________________________________________
void AliMuonTrackCuts::SetDefaultFilterMask ()
{
if ( filterMask & kMuMatchLpt ) printf(" match Lpt\n");
if ( filterMask & kMuMatchHpt ) printf(" match Hpt\n");
if ( filterMask & kMuTrackChiSquare ) printf(" Chi2 cut on track\n");
+ if ( filterMask & kMuSharpPtCut ) printf(" sharp tracker pt cut matching trig. pt cut\n");
printf(" ******************** \n");
}
if ( sopt.Contains("param") ) {
printf(" Cut on track chi2/NDF: %g\n", fParameters[kChi2NormCut]);
printf(" Momentum resolution: %g\n", fParameters[kRelPResolution]);
printf(" Slope resolution: %g\n", fParameters[kSlopeResolution]);
+ printf(" Sharp pt cut: %g (Apt) %g (Lpt) %g (Hpt)\n", fParameters[kSharpPtApt], fParameters[kSharpPtLpt], fParameters[kSharpPtHpt]);
printf(" ********************************\n");
}
}
kMuMatchLpt = BIT(4),
kMuMatchHpt = BIT(5),
kMuTrackChiSquare = BIT(6),
+ kMuSharpPtCut = BIT(7)
};
AliMuonTrackCuts();
kChi2NormCut, ///< Cut on the normalized chi2 of track
kRelPResolution, ///< Relative momentum resolution
kSlopeResolution, ///< Slope resolution
+ kSharpPtApt, ///< Sharp tracker pt cut for Apt
+ kSharpPtLpt, ///< Sharp tracker pt cut for Lpt
+ kSharpPtHpt, ///< Sharp tracker pt cut for Hpt
kNParameters ///< Total number of parameters
};
void SetSlopeResolution ( Double_t slopeResolution );
Double_t GetSlopeResolution () const;
+
+ void SetSharpPtCut ( Int_t trigPtCut, Double_t ptCutValue );
+ Double_t GetSharpPtCut ( Int_t trigPtCut, Bool_t warn = kTRUE ) const;
Bool_t StreamParameters ( Int_t runNumber, Int_t maxRun );