|
ATLAS Offline Software
|
Implementation of the muon selector tool.
More...
#include <MuonSelectionTool.h>
|
enum | ResolutionCategory {
unclassified = -1,
missingInner = 1,
missingMiddle = 1 << 1,
missingOuter = 1 << 2,
highPt2station = 1 << 3,
highPt = 1 << 4,
spoiledCSC = 1 << 5,
BEoverlap = 1 << 6,
BIS78 = 1 << 7,
missingBEE = 1 << 8,
oneStation = 1 << 9,
CategoryZero = missingInner | spoiledCSC | BEoverlap | BIS78 | missingBEE,
CategoryOne = missingMiddle | oneStation,
CategoryTwo = missingOuter,
CategoryThree = highPt2station,
CategoryFour = highPt
} |
| Declare the interface that the class provides. More...
|
|
|
| MuonSelectionTool (const std::string &name="MuonSelection") |
| Create a proper constructor for Athena. More...
|
|
virtual | ~MuonSelectionTool () |
|
virtual void | print () const =0 |
| Print the state of the tool. More...
|
|
virtual void | print () const |
| Print the state of the tool. More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
virtual StatusCode | initialize () override |
| Function initialising the tool. More...
|
|
|
virtual const asg::AcceptInfo & | getAcceptInfo () const override |
| Get an object describing the "selection steps" of the tool. More...
|
|
virtual asg::AcceptData | accept (const xAOD::IParticle *p) const override |
| Get the decision using a generic IParticle pointer. More...
|
|
|
virtual asg::AcceptData | accept (const xAOD::Muon &mu) const override |
| Get the decision for a specific Muon object. More...
|
|
virtual void | setPassesIDCuts (xAOD::Muon &) const override |
| set the passes ID cuts variable of the muon More...
|
|
virtual void | setPassesHighPtCuts (xAOD::Muon &mu) const override |
| set the passes high pT cuts variable of the muon More...
|
|
virtual void | setQuality (xAOD::Muon &mu) const override |
| set the passes low pT cuts variable of the muon More...
|
|
virtual bool | passedIDCuts (const xAOD::Muon &) const override |
| Returns true if the muon passes the standard MCP ID cuts. More...
|
|
virtual bool | passedMuonCuts (const xAOD::Muon &) const override |
| Returns true if the muon passes a standardized loose preselection. More...
|
|
virtual bool | passedIDCuts (const xAOD::TrackParticle &) const override |
| Returns true if the track particle passes the standard MCP ID cuts. More...
|
|
virtual bool | passedHighPtCuts (const xAOD::Muon &) const override |
| Returns true if the muon passes the standard MCP High Pt cuts. More...
|
|
virtual bool | passedLowPtEfficiencyCuts (const xAOD::Muon &) const override |
| Returns true if the muon passes the standard MCP low pt cuts. More...
|
|
virtual bool | passedLowPtEfficiencyCuts (const xAOD::Muon &, xAOD::Muon::Quality thisMu_quality) const override |
|
virtual bool | passedErrorCutCB (const xAOD::Muon &) const override |
| Returns true if a CB muon passes a pt- and eta-dependent cut on the relative CB q/p error. More...
|
|
virtual bool | isBadMuon (const xAOD::Muon &) const override |
| Returns true if a CB muon fails some loose quaility requirements designed to remove pathological tracks. More...
|
|
virtual xAOD::Muon::Quality | getQuality (const xAOD::Muon &mu) const override |
| Returns the quality of the muon. To set the value on the muon, instead call setQuality(xAOD::Muon&) const. More...
|
|
virtual bool | passedCaloTagQuality (const xAOD::Muon &mu) const override |
| Returns true if the muon passed additional calo-tag quality cuts. More...
|
|
virtual bool | passedCaloScore (const xAOD::Muon &mu) const override |
| Returns true if the muon passed the CaloScore calo-tag working point. More...
|
|
virtual int | getResolutionCategory (const xAOD::Muon &) const override |
| Returns an integer corresponding to categorization of muons with different resolutions. More...
|
|
|
bool | passedLowPtEfficiencyMVACut (const xAOD::Muon &) const |
|
bool | passTight (const xAOD::Muon &mu, float rho, float oneOverPSig) const |
| Returns true if the muon passed the tight working point cuts. More...
|
|
bool | passedBMVmimicCut (const xAOD::Muon &) const |
| Returns true if the muon passes a cut which mimics the effect of the combined error cut This is necessary only when the resolution is very optimistic in the MC such that a large smearing is applied. More...
|
|
std::vector< const xAOD::MuonSegment * > | getSegmentsSorted (const xAOD::Muon &mu) const |
| Returns a vector of the muon's segments, sorted according to chamber index. More...
|
|
StatusCode | getHist (TFile *file, const std::string &histName, std::unique_ptr< TH1 > &hist) const |
| Checks for each histogram. More...
|
|
unsigned int | getRunNumber (bool needOnlyCorrectYear=false) const |
|
bool | isBIS78 (const float eta, const float phi) const |
|
bool | isBEE (const float eta, const float phi) const |
|
bool | isBMG (const float eta, const float phi) const |
|
template<class P , class T , class S > |
void | retrieveSummaryValue (const P &muon, T &value, const S type, bool ignoreMissing=false) const |
|
void | fillSummary (const xAOD::Muon &muon, hitSummary &summary) const |
|
void | retrieveParam (const xAOD::Muon &muon, float &value, const xAOD::Muon::ParamDef param) const |
|
float | qOverPsignificance (const xAOD::Muon &muon) const |
|
float | rhoPrime (const xAOD::Muon &muon) const |
|
void | IdMsPt (const xAOD::Muon &muon, float &idPt, float &msPt) const |
|
void | checkSanity () const |
|
bool | isRun3 (bool forceOnTheFly=false) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
asg::AcceptInfo | m_acceptInfo |
| Store selection information. More...
|
|
Gaudi::Property< double > | m_maxEta {this, "MaxEta", 2.7, "Maximum eta range to select the muons"} |
|
Gaudi::Property< int > | m_quality {this, "MuQuality", 1,"Quality to select. Values correspond to 0=Tight, 1=Medium, 2=Loose, 3=VeryLoose (only for debug, not supported), 4=HighPt, 5=LowPtEfficiency"} |
|
Gaudi::Property< bool > | m_toroidOff {this, "ToroidOff", false, "Run the tool in Toroid off setup"} |
|
Gaudi::Property< bool > | m_isRun3 {this, "IsRun3Geo", false, "Switch to toggle the run 2 & run 3 geometry cuts. The tool will throw an exception if the run number does not match the expectations later"} |
|
Gaudi::Property< bool > | m_excludeNSWFromPrecisionLayers {this, "ExcludeNSWFromPrecisionLayers", false, "Cut on the nprecisionlayers ignoring the NSW"} |
|
Gaudi::Property< bool > | m_recalcPrecisionLayerswNSW {this, "RecalcPrecisionLayerswNSW", true, "Recalculate nprecisionlayers with internal criteria for NSW"} |
|
Gaudi::Property< bool > | m_useCaloScore {this, "UseCaloScore", true, "Use CaloScore for calo-tags in the Loose working point. False will revert back to CaloMuonIDTag (not recommended in Rel.22)"} |
|
Gaudi::Property< int > | m_caloScoreWP {this, "CaloScoreWP", 4,"Currently there are 4 CaloScore WPs for testing; WP4 is the recommended one"} |
|
Gaudi::Property< bool > | m_useLRT {this, "UseLRT", false, "Enable support for LRT muons"} |
|
Gaudi::Property< bool > | m_turnOffMomCorr {this, "TurnOffMomCorr", false} |
|
Gaudi::Property< bool > | m_disablePtCuts {this, "DisablePtCuts", false} |
|
Gaudi::Property< bool > | m_developMode {this, "ExpertDevelopMode", false} |
|
Gaudi::Property< bool > | m_TrtCutOff {this, "TrtCutOff", true} |
|
Gaudi::Property< bool > | m_SctCutOff {this, "SctCutOff", false} |
|
Gaudi::Property< bool > | m_PixCutOff {this, "PixCutOff", false} |
|
Gaudi::Property< bool > | m_SiHolesCutOff {this, "SiHolesCutOff", false} |
|
Gaudi::Property< bool > | m_useAllAuthors {this, "UseAllAuthors", true} |
|
Gaudi::Property< bool > | m_use2stationMuonsHighPt {this, "Use2stationMuonsHighPt", true, "for users of high-pT working point to choose whether to include 'safe' 2-station muons"} |
|
Gaudi::Property< bool > | m_useMVALowPt {this, "UseMVALowPt", false, "for users of low-pT working point to choose whether to use MVA and whether to include MuTagIMO muons. Not yet supported in release 22, crrently only for development studies."} |
|
Gaudi::Property< bool > | m_useSegmentTaggedLowPt {this, "UseSegmentTaggedLowPt", false, "Use MVA low-pt WP. In development phase"} |
|
Gaudi::Property< bool > | m_geoOnTheFly {this, "AllowSettingGeometryOnTheFly", false,"avoids crash if run2/run3 geo is wrongly set"} |
|
Gaudi::Property< bool > | m_doBadMuonVetoMimic {this, "DoBadMuonVetoMimic", false} |
|
Gaudi::Property< bool > | m_allowComm {this, "AcceptCommChain", true, "Accepts muons from the EMEO chain if set to true"} |
|
SG::ReadHandleKey< xAOD::EventInfo > | m_eventInfo {this, "EventInfoContName", "EventInfo", "event info key"} |
|
Gaudi::Property< std::string > | m_MVAreaderFile_EVEN_MuidCB |
|
Gaudi::Property< std::string > | m_MVAreaderFile_ODD_MuidCB |
|
Gaudi::Property< std::string > | m_MVAreaderFile_EVEN_MuGirl |
|
Gaudi::Property< std::string > | m_MVAreaderFile_ODD_MuGirl |
|
Gaudi::Property< std::string > | m_MVAreaderFile_MuTagIMO_etaBin1 |
|
Gaudi::Property< std::string > | m_MVAreaderFile_MuTagIMO_etaBin2 |
|
Gaudi::Property< std::string > | m_MVAreaderFile_MuTagIMO_etaBin3 |
|
Gaudi::Property< std::string > | m_calibration_version {this, "CalibrationRelease", "PreRec2016_2016-04-13"} |
|
Gaudi::Property< std::string > | m_custom_dir {this, "CustomInputFolder", ""} |
|
Gaudi::Property< std::string > | m_BMVcutFile |
| file for bad muon veto mimic cut functions More...
|
|
std::unique_ptr< TH1 > | m_tightWP_lowPt_rhoCuts |
|
std::unique_ptr< TH1 > | m_tightWP_lowPt_qOverPCuts |
|
std::unique_ptr< TH1 > | m_tightWP_mediumPt_rhoCuts |
|
std::unique_ptr< TH1 > | m_tightWP_highPt_rhoCuts |
|
std::unique_ptr< TF1 > | m_BMVcutFunction_barrel |
|
std::unique_ptr< TF1 > | m_BMVcutFunction_endcap |
|
std::unique_ptr< TMVA::Reader > | m_readerE_MUID {nullptr} |
|
std::unique_ptr< TMVA::Reader > | m_readerO_MUID {nullptr} |
|
std::unique_ptr< TMVA::Reader > | m_readerE_MUGIRL {nullptr} |
|
std::unique_ptr< TMVA::Reader > | m_readerO_MUGIRL {nullptr} |
|
std::unique_ptr< TMVA::Reader > | m_reader_MUTAGIMO_etaBin1 {nullptr} |
|
std::unique_ptr< TMVA::Reader > | m_reader_MUTAGIMO_etaBin2 {nullptr} |
|
std::unique_ptr< TMVA::Reader > | m_reader_MUTAGIMO_etaBin3 {nullptr} |
|
std::mutex | m_low_pt_mva_mutex |
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
Implementation of the muon selector tool.
Example implementation of how an object selector tool should look according to the TF3 recommendations.
- Author
- Attila Krasznahorkay Attil.nosp@m.a.Kr.nosp@m.aszna.nosp@m.hork.nosp@m.ay@ce.nosp@m.rn.c.nosp@m.h
- Revision
- 299883
- Date
- 2014-03-28 18:34:16 +0100 (Fri, 28 Mar 2014)
Definition at line 31 of file MuonSelectionTool.h.
◆ StoreGateSvc_t
◆ ResolutionCategory
Declare the interface that the class provides.
Enum for resolution categories, the "merged" categories Zero to Four group together categories with similar resolution
Enumerator |
---|
unclassified | |
missingInner | |
missingMiddle | |
missingOuter | |
highPt2station | |
highPt | |
spoiledCSC | |
BEoverlap | |
BIS78 | |
missingBEE | |
oneStation | |
CategoryZero | |
CategoryOne | |
CategoryTwo | |
CategoryThree | |
CategoryFour | |
Definition at line 31 of file IMuonSelectionTool.h.
◆ MuonSelectionTool()
CP::MuonSelectionTool::MuonSelectionTool |
( |
const std::string & |
name = "MuonSelection" | ) |
|
◆ ~MuonSelectionTool()
CP::MuonSelectionTool::~MuonSelectionTool |
( |
| ) |
|
|
virtualdefault |
◆ accept() [1/2]
◆ accept() [2/2]
Get the decision for a specific Muon object.
Implements CP::IMuonSelectionTool.
Definition at line 298 of file MuonSelectionTool.cxx.
304 else if (
mu.muonType() == xAOD::Muon::MuonStandAlone)
306 else if (
mu.muonType() == xAOD::Muon::SegmentTagged)
308 else if (
mu.muonType() == xAOD::Muon::CaloTagged)
310 else if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon)
325 acceptData.setCutResult(
"Eta",
true);
330 acceptData.setCutResult(
"IDHits", passIDCuts);
335 acceptData.setCutResult(
"Preselection", passMuonCuts);
337 if (!passIDCuts || !passMuonCuts) {
return acceptData; }
341 bool thisMu_highpt =
false;
343 bool thisMu_lowptE =
false;
346 ATH_MSG_VERBOSE(
"Muon quality: " << thisMu_quality <<
" passes HighPt: " << thisMu_highpt
347 <<
" passes LowPtEfficiency: " << thisMu_lowptE);
348 if (m_quality < 4 && thisMu_quality >
m_quality) {
return acceptData; }
349 if (
m_quality == 4 && !thisMu_highpt) {
return acceptData; }
350 if (
m_quality == 5 && !thisMu_lowptE) {
return acceptData; }
351 acceptData.setCutResult(
"Quality",
true);
◆ checkSanity()
void CP::MuonSelectionTool::checkSanity |
( |
| ) |
const |
|
private |
Definition at line 269 of file MuonSelectionTool.cxx.
271 static std::atomic<bool> checkDone{
false};
279 <<
" while on-the fly check for runNumber "<<
getRunNumber(
true)<<
" indicates isRun3Geo="<<
isRun3(
true));
285 ATH_MSG_WARNING(
"MuonSelectionTool currently supports Loose, Medium, Tight and HighPt WPs for Run3; all other WPs can only be used in ExpertDevelopMode mode");
289 ATH_MSG_WARNING(
"For Run3, Tight WP is supported only when ExcludeNSWFromPrecisionLayers=False and RecalcPrecisionLayerswNSW=True");
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ fillSummary()
Definition at line 1405 of file MuonSelectionTool.cxx.
1428 if (std::abs(
muon.eta()) > 2.0) {
1429 ATH_MSG_VERBOSE(
"Recalculating number of precision layers for combined muon");
1438 + (
summary.extendedSmallHits > 2 ||
summary.extendedLargeHits > 2);
1442 if (!eta1stgchits_acc.isAvailable(
muon) || !eta2stgchits_acc.isAvailable(
muon) || !mmhits_acc.isAvailable(
muon)) {
1443 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve NSW hits!"
1444 <<
" (Please use DxAODs with p-tags >= p5834 OR set ExcludeNSWFromPrecisionLayers to True (tests only)");
1445 throw std::runtime_error(
"Failed to retrieve NSW hits");
◆ getAcceptInfo()
◆ getHist()
StatusCode CP::MuonSelectionTool::getHist |
( |
TFile * |
file, |
|
|
const std::string & |
histName, |
|
|
std::unique_ptr< TH1 > & |
hist |
|
) |
| const |
|
private |
Checks for each histogram.
Definition at line 227 of file MuonSelectionTool.cxx.
230 ATH_MSG_ERROR(
" getHist(...) TFile is nullptr! Check that the Tight cut map is loaded correctly");
231 return StatusCode::FAILURE;
233 TH1* h_ptr =
nullptr;
239 return StatusCode::FAILURE;
241 hist = std::unique_ptr<TH1>{h_ptr};
242 hist->SetDirectory(
nullptr);
243 ATH_MSG_INFO(
"Successfully read tight working point histogram: " <<
hist->GetName());
245 return StatusCode::SUCCESS;
◆ getKey()
Get the (hashed) key of an object that is in the event store.
This is a bit of a special one. StoreGateSvc
and xAOD::TEvent
both provide ways for getting the SG::sgkey_t
key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.
In order to allow tools to efficiently perform this operation, they can use this helper function.
- See also
- asg::AsgTool::getName
- Parameters
-
ptr | The bare pointer to the object that the event store should know about |
- Returns
- The hashed key of the object in the store. If not found, an invalid (zero) key.
Definition at line 119 of file AsgTool.cxx.
121 #ifdef XAOD_STANDALONE
124 return evtStore()->event()->getKey( ptr );
127 return (
proxy ==
nullptr ? 0 :
proxy->sgkey() );
128 #endif // XAOD_STANDALONE
◆ getName()
const std::string & asg::AsgTool::getName |
( |
const void * |
ptr | ) |
const |
|
inherited |
Get the name of an object that is / should be in the event store.
This is a bit of a special one. StoreGateSvc
and xAOD::TEvent
both provide ways for getting the std::string
name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.
In order to allow tools to efficiently perform this operation, they can use this helper function.
- See also
- asg::AsgTool::getKey
- Parameters
-
ptr | The bare pointer to the object that the event store should know about |
- Returns
- The string name of the object in the store. If not found, an empty string.
Definition at line 106 of file AsgTool.cxx.
108 #ifdef XAOD_STANDALONE
111 return evtStore()->event()->getName( ptr );
114 static const std::string
dummy =
"";
116 #endif // XAOD_STANDALONE
◆ getProperty()
template<class T >
const T* asg::AsgTool::getProperty |
( |
const std::string & |
name | ) |
const |
|
inherited |
Get one of the tool's properties.
◆ getQuality()
xAOD::Muon::Quality CP::MuonSelectionTool::getQuality |
( |
const xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
Returns the quality of the muon. To set the value on the muon, instead call setQuality(xAOD::Muon&) const.
Implements CP::IMuonSelectionTool.
Definition at line 414 of file MuonSelectionTool.cxx.
420 ATH_MSG_VERBOSE(
"tool configured with quality="<<
m_quality<<
" which is currently only supported in expert mode for run3");
429 if (
mu.muonType() == xAOD::Muon::SegmentTagged) {
432 if (std::abs(
mu.eta()) < 0.1) {
436 ATH_MSG_VERBOSE(
"Do not allow segment-tagged muon at |eta| > 0.1 - return VeryLoose");
442 if (
mu.muonType() == xAOD::Muon::CaloTagged) {
467 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - return VeryLoose");
473 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
477 const float reducedChi2 =
mu.primaryTrackParticle()->chiSquared() /
mu.primaryTrackParticle()->numberDoF();
485 if (
summary.nprecisionLayers > 1 && reducedChi2 < 8 && std::abs(qOverPsignif) < 7) {
492 ATH_MSG_VERBOSE(
"Muon did not pass requirements for tight combined muon");
496 (
summary.nprecisionLayers > 1 ||(
summary.nprecisionLayers == 1 &&
summary.nprecisionHoleLayers < 2 && std::abs(
mu.eta()) < 0.1))
503 ATH_MSG_VERBOSE(
"Muon did not pass requirements for medium combined muon");
509 if ((
summary.nprecisionLayers > 1 ||
510 (
summary.nprecisionLayers == 1 &&
summary.nprecisionHoleLayers < 2 && std::abs(
mu.eta()) < 0.1))) {
526 ATH_MSG_VERBOSE(
"Muon passed selection for loose working point at low pT");
531 ATH_MSG_VERBOSE(
"Did not pass selections for combined muon - returning VeryLoose");
540 ATH_MSG_VERBOSE(
"Standalone muons currently only used when in expert mode for run3");
544 if (std::abs(
mu.eta()) > 2.5) {
555 ATH_MSG_VERBOSE(
"Muon did not pass selection for medium stand-alone muon - return VeryLoose");
560 if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
564 ATH_MSG_VERBOSE(
"Silicon-associated forward muon muons currently only used when in expert mode for run3");
569 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
571 if (cbtrack && metrack) {
572 if (std::abs(cbtrack->
eta()) > 2.5) {
579 "SiliconForwardAssociated muon has ID track as primary track particle. "
580 <<
"This is a bug fixed starting with xAODMuon-00-17-07, which should be present in this release. "
581 <<
"Please report this to the Muon CP group!");
590 ATH_MSG_VERBOSE(
"Muon did not pass selection for medium silicon-associated forward muon - return VeryLoose");
594 ATH_MSG_VERBOSE(
"Muon did not pass selection for loose/medium/tight for any muon type - return VeryLoose");
◆ getResolutionCategory()
int CP::MuonSelectionTool::getResolutionCategory |
( |
const xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
Returns an integer corresponding to categorization of muons with different resolutions.
Implements CP::IMuonSelectionTool.
Definition at line 1467 of file MuonSelectionTool.cxx.
1477 if (
summary.nprecisionLayers == 2)
1478 return ResolutionCategory::highPt2station;
1486 ATH_MSG_VERBOSE(
"getResolutionCategory - No MS track available for muon. Using combined track.");
1487 MS_track =
mu.trackParticle(xAOD::Muon::CombinedTrackParticle);
1491 const float etaMS = MS_track->
eta();
1492 const float etaCB = CB_track->
eta();
1493 const float phiMS = MS_track->
phi();
1498 category = ResolutionCategory::missingInner;
1501 category = ResolutionCategory::missingMiddle;
1505 category = ResolutionCategory::missingOuter;
1507 if (!
isRun3() && (std::abs(
etaMS) > 2.0 || std::abs(etaCB) > 2.0) &&
summary.cscUnspoiledEtaHits == 0)
1508 category = ResolutionCategory::spoiledCSC;
1510 if ((1.01 < std::abs(
etaMS) && std::abs(
etaMS) < 1.1) || (1.01 < std::abs(etaCB) && std::abs(etaCB) < 1.1))
1511 category = ResolutionCategory::BEoverlap;
1516 if (
isBEE(
etaMS, phiMS) || (std::abs(etaCB) > 1.4 && (
summary.extendedSmallHits > 0 ||
summary.extendedSmallHoles > 0))) {
1518 category = ResolutionCategory::missingBEE;
1520 if (
summary.extendedSmallHits >= 3 &&
summary.outerSmallHits < 3)
category = ResolutionCategory::missingOuter;
1522 if (!
summary.isSmallGoodSectors)
1526 if (
summary.nprecisionLayers == 1)
category = ResolutionCategory::oneStation;
◆ getRunNumber()
unsigned int CP::MuonSelectionTool::getRunNumber |
( |
bool |
needOnlyCorrectYear = false | ) |
const |
|
private |
Definition at line 1533 of file MuonSelectionTool.cxx.
1541 ATH_MSG_DEBUG(
"The current event is a data event. Return runNumber.");
1542 return eventInfo->runNumber();
1547 static std::atomic<bool> issuedWarningPRW{
false};
1548 if (acc_rnd.isAvailable(*eventInfo)) {
1549 unsigned int rn = acc_rnd(*eventInfo);
1550 if (
rn != 0)
return acc_rnd(*eventInfo);
1552 if (!issuedWarningPRW) {
1554 issuedWarningPRW =
true;
1559 if (needOnlyCorrectYear) {
1560 if (eventInfo->runNumber() < 300000) {
1561 ATH_MSG_DEBUG(
"Random run number not available and this is mc16a or mc20a, returning dummy 2016 run number.");
1564 }
else if (eventInfo->runNumber() < 310000) {
1565 ATH_MSG_DEBUG(
"Random run number not available and this is mc16d or mc20d, returning dummy 2017 run number.");
1568 }
else if (eventInfo->runNumber() < 320000) {
1569 ATH_MSG_DEBUG(
"Random run number not available and this is mc16e or mc20e, returning dummy 2018 run number.");
1572 }
else if (eventInfo->runNumber() < 500000) {
1573 ATH_MSG_DEBUG(
"Random run number not available and this is mc21/mc23, for the time being we're returing a dummy run number.");
1577 ATH_MSG_FATAL(
"Random run number not available, fallback option of using runNumber failed since "<<eventInfo->runNumber()<<
" cannot be recognised");
1578 throw std::runtime_error(
"MuonSelectionTool() - need RandomRunNumber decoration by the PileupReweightingTool");
1581 ATH_MSG_FATAL(
"Failed to find the RandomRunNumber decoration by the PileupReweightingTool");
1582 throw std::runtime_error(
"MuonSelectionTool() - need RandomRunNumber decoration from PileupReweightingTool");
◆ getSegmentsSorted()
Returns a vector of the muon's segments, sorted according to chamber index.
Definition at line 803 of file MuonSelectionTool.cxx.
804 std::vector<const xAOD::MuonSegment*> segments_sorted;
805 segments_sorted.reserve(
mu.nMuonSegments());
807 for (
unsigned int i = 0;
i <
mu.nMuonSegments();
i++) {
808 if (!
mu.muonSegment(
i))
809 ATH_MSG_WARNING(
"The muon reports more segments than are available. Please report this to the muon software community!");
811 segments_sorted.push_back(
mu.muonSegment(
i));
814 std::sort(segments_sorted.begin(), segments_sorted.end(), chamberIndexCompare);
816 return segments_sorted;
◆ IdMsPt()
void CP::MuonSelectionTool::IdMsPt |
( |
const xAOD::Muon & |
muon, |
|
|
float & |
idPt, |
|
|
float & |
msPt |
|
) |
| const |
|
inlineprivate |
Definition at line 360 of file MuonSelectionTool.cxx.
362 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
363 if (!idtrack || !metrack) idPt = mePt = -1.;
365 mePt = metrack->
pt();
366 idPt = idtrack->
pt();
368 if (!mePt_acc.isAvailable(
mu) || !idPt_acc.isAvailable(
mu)) {
370 <<
" q:" <<
mu.charge() <<
", author:" <<
mu.author()
371 <<
" is not decorated with calibrated momenta. Please fix");
372 throw std::runtime_error(
"MuonSelectionTool() - qOverP significance calculation failed");
◆ initialize()
StatusCode CP::MuonSelectionTool::initialize |
( |
| ) |
|
|
overridevirtual |
Function initialising the tool.
Reimplemented from asg::AsgTool.
Definition at line 58 of file MuonSelectionTool.cxx.
75 "Not using allAuthors variable as currently missing in many derivations; LowPtEfficiency working point will always return "
76 "false, but this is expected at the moment. Have a look here: "
77 "https://twiki.cern.ch/twiki/bin/view/Atlas/MuonSelectionToolR21#New_LowPtEfficiency_working_poin");
81 ATH_MSG_INFO(
"You have opted to select only 3-station muons in the high-pT selection! "
82 <<
"Please feed 'HighPt3Layers' to the 'WorkingPoint' property to retrieve the appropriate scale-factors");
86 ATH_MSG_WARNING(
"No cut-based selection is defined for segment-tagged muons in the Low-pT working point. "
87 <<
"Please set UseMVALowPt=true if you want to try the UseSegmentTaggedLowPt=true option.");
91 ATH_MSG_INFO(
"MuonSelectionTool will assume both Standard and LRT Muons are being used, and that the necessary information is available to identify the type (standard or LRT).");
92 if (
m_quality!=1)
ATH_MSG_WARNING(
"Currently, only Medium quality is supported for LRT muons. Your chosen WP will be applied (w/o ID cuts), but no recommendations are available for this quality.");
97 m_acceptInfo.
addCut(
"IDHits",
"Selection of muons according to whether they passed the MCP ID Hit cuts");
98 m_acceptInfo.
addCut(
"Preselection",
"Selection of muons according to their type/author");
103 "Invalid quality (i.e. selection WP) set: "
105 <<
" - it must be an integer between 0 and 5! (0=Tight, 1=Medium, 2=Loose, 3=Veryloose, 4=HighPt, 5=LowPtEfficiency)");
106 return StatusCode::FAILURE;
109 ATH_MSG_ERROR(
"Cannot use lowPt working point if allAuthors is not available!");
110 return StatusCode::FAILURE;
113 if(m_caloScoreWP<1 || m_caloScoreWP>4){
114 ATH_MSG_FATAL(
"CaloScoreWP property must be set to 1, 2, 3 or 4");
115 return StatusCode::FAILURE;
119 ATH_MSG_INFO(
"Initialising tight working point histograms...");
120 std::string tightWP_rootFile_fullPath;
125 Form(
"MuonSelectorTools/%s/muonSelection_tightWPHisto.root",
m_calibration_version.value().c_str()));
128 ATH_MSG_INFO(
"Reading muon tight working point histograms from " << tightWP_rootFile_fullPath);
130 std::unique_ptr<TFile>
file(TFile::Open(tightWP_rootFile_fullPath.c_str(),
"READ"));
132 if (!
file->IsOpen()) {
133 ATH_MSG_ERROR(
"Cannot read tight working point file from " << tightWP_rootFile_fullPath);
134 return StatusCode::FAILURE;
148 ATH_MSG_INFO(
"Reading bad muon veto cut functions from " << BMVcutFile_fullPath);
150 std::unique_ptr<TFile> BMVfile(TFile::Open(BMVcutFile_fullPath.c_str(),
"READ"));
152 if (!BMVfile->IsOpen()) {
153 ATH_MSG_ERROR(
"Cannot read bad muon veto cut function file from " << BMVcutFile_fullPath);
154 return StatusCode::FAILURE;
164 return StatusCode::FAILURE;
175 auto make_mva_reader = [](TString
file_path) {
176 std::vector<std::string> mva_var_names{
"momentumBalanceSignificance",
177 "scatteringCurvatureSignificance",
178 "scatteringNeighbourSignificance",
180 "middleLargeHoles+middleSmallHoles",
181 "muonSegmentDeltaEta",
182 "muonSeg1ChamberIdx",
183 "muonSeg2ChamberIdx"};
184 std::unique_ptr<TMVA::Reader>
reader = std::make_unique<TMVA::Reader>(mva_var_names);
201 auto make_mva_reader_MuTagIMO = [](TString
file_path,
bool useSeg2ChamberIndex) {
202 std::vector<std::string> mva_var_names;
203 if (useSeg2ChamberIndex) mva_var_names.push_back(
"muonSeg2ChamberIndex");
204 mva_var_names.push_back(
"muonSeg1ChamberIndex");
205 mva_var_names.push_back(
"muonSeg1NPrecisionHits");
206 mva_var_names.push_back(
"muonSegmentDeltaEta");
207 mva_var_names.push_back(
"muonSeg1GlobalR");
208 mva_var_names.push_back(
"muonSeg1Chi2OverDoF");
209 mva_var_names.push_back(
"muonSCS");
211 std::unique_ptr<TMVA::Reader>
reader = std::make_unique<TMVA::Reader>(mva_var_names);
224 return StatusCode::SUCCESS;
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ isBadMuon()
Returns true if a CB muon fails some loose quaility requirements designed to remove pathological tracks.
Implements CP::IMuonSelectionTool.
Definition at line 637 of file MuonSelectionTool.cxx.
641 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
647 bool IsBadMuon =
false;
648 if (idtrack && metrack && cbtrack) {
650 double qOverP_ID = idtrack->
qOverP();
652 double qOverP_ME = metrack->
qOverP();
654 double qOverP_CB = cbtrack->
qOverP();
667 double IdCbRatio = std::abs((qOverPerr_ID / qOverP_ID) / (qOverPerr_CB / qOverP_CB));
668 double MeCbRatio = std::abs((qOverPerr_ME / qOverP_ME) / (qOverPerr_CB / qOverP_CB));
669 IsBadMuon = (IdCbRatio < 0.8 || MeCbRatio < 0.8 || IsBadMuon);
673 double IdCbRatio = std::abs((qOverPerr_ID / qOverP_ID) / (qOverPerr_CB / qOverP_CB));
674 double MeCbRatio = std::abs((qOverPerr_ME / qOverP_ME) / (qOverPerr_CB / qOverP_CB));
675 IsBadMuon = (IdCbRatio < 0.8 || MeCbRatio < 0.8);
◆ isBEE()
bool CP::MuonSelectionTool::isBEE |
( |
const float |
eta, |
|
|
const float |
phi |
|
) |
| const |
|
private |
Definition at line 1605 of file MuonSelectionTool.cxx.
1606 static constexpr std::array<float, 2> BEE_eta{1.440, 1.692};
1607 static constexpr std::array<float, 8> BEE_phi{0.301, 0.478, 1.086, 1.263, 1.872, 2.049, 2.657, 2.834};
1609 float abs_eta = std::abs(
eta);
1610 float abs_phi = std::abs(
phi);
1612 if (abs_eta >= BEE_eta[0] && abs_eta <= BEE_eta[1]) {
1613 if ((abs_phi >= BEE_phi[0] && abs_phi <= BEE_phi[1]) || (abs_phi >= BEE_phi[2] && abs_phi <= BEE_phi[3]) ||
1614 (abs_phi >= BEE_phi[4] && abs_phi <= BEE_phi[5]) || (abs_phi >= BEE_phi[6] && abs_phi <= BEE_phi[7])) {
◆ isBIS78()
bool CP::MuonSelectionTool::isBIS78 |
( |
const float |
eta, |
|
|
const float |
phi |
|
) |
| const |
|
private |
Definition at line 1587 of file MuonSelectionTool.cxx.
1588 static constexpr std::array<float, 2> BIS78_eta{1.05, 1.3};
1589 static constexpr std::array<float, 8> BIS78_phi{0.21, 0.57, 1.00, 1.33, 1.78, 2.14, 2.57, 2.93};
1591 float abs_eta = std::abs(
eta);
1592 float abs_phi = std::abs(
phi);
1594 if (abs_eta >= BIS78_eta[0] && abs_eta <= BIS78_eta[1]) {
1595 if ((abs_phi >= BIS78_phi[0] && abs_phi <= BIS78_phi[1]) || (abs_phi >= BIS78_phi[2] && abs_phi <= BIS78_phi[3]) ||
1596 (abs_phi >= BIS78_phi[4] && abs_phi <= BIS78_phi[5]) || (abs_phi >= BIS78_phi[6] && abs_phi <= BIS78_phi[7])) {
◆ isBMG()
bool CP::MuonSelectionTool::isBMG |
( |
const float |
eta, |
|
|
const float |
phi |
|
) |
| const |
|
private |
Definition at line 1623 of file MuonSelectionTool.cxx.
1624 static constexpr std::array<float, 6> BMG_eta{0.35, 0.47, 0.68, 0.80, 0.925, 1.04};
1625 static constexpr std::array<float, 4> BMG_phi{-1.93, -1.765, -1.38, -1.21};
1627 float abs_eta = std::abs(
eta);
1629 if ((abs_eta >= BMG_eta[0] && abs_eta <= BMG_eta[1]) || (abs_eta >= BMG_eta[2] && abs_eta <= BMG_eta[3]) ||
1630 (abs_eta >= BMG_eta[4] && abs_eta <= BMG_eta[5])) {
1631 if ((
phi >= BMG_phi[0] &&
phi <= BMG_phi[1]) || (
phi >= BMG_phi[2] &&
phi <= BMG_phi[3])) {
return true; }
◆ isRun3()
bool CP::MuonSelectionTool::isRun3 |
( |
bool |
forceOnTheFly = false | ) |
const |
|
inlineprivate |
◆ msg() [1/2]
◆ msg() [2/2]
◆ msg_level_name()
const std::string & asg::AsgTool::msg_level_name |
( |
| ) |
const |
|
inherited |
A deprecated function for getting the message level's name.
Instead of using this, weirdly named function, user code should get the string name of the current minimum message level (in case they really need it...), with:
MSG::name( msg().level() )
This function's name doesn't follow the ATLAS coding rules, and as such will be removed in the not too distant future.
- Returns
- The string name of the current minimum message level that's printed
Definition at line 101 of file AsgTool.cxx.
◆ msgLvl()
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ passedBMVmimicCut()
bool CP::MuonSelectionTool::passedBMVmimicCut |
( |
const xAOD::Muon & |
mu | ) |
const |
|
private |
Returns true if the muon passes a cut which mimics the effect of the combined error cut This is necessary only when the resolution is very optimistic in the MC such that a large smearing is applied.
Definition at line 1206 of file MuonSelectionTool.cxx.
1209 if (std::abs(
mu.eta()) < 1.05) {
1219 double qOpRelResolution = std::hypot(p1, p2 *
mu.primaryTrackParticle()->pt() *
MeVtoGeV);
1221 double qOverPabs_unsmeared = std::abs(
mu.primaryTrackParticle()->definingParameters()[4]);
1222 double qOverPabs_smeared = 1.0 / (
mu.pt() * std::cosh(
mu.eta()));
1224 if ((qOverPabs_smeared - qOverPabs_unsmeared) / (qOpRelResolution * qOverPabs_unsmeared) <
1225 cutFunction->Eval(
mu.primaryTrackParticle()->pt() *
MeVtoGeV))
◆ passedCaloScore()
◆ passedCaloTagQuality()
bool CP::MuonSelectionTool::passedCaloTagQuality |
( |
const xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
Returns true if the muon passed additional calo-tag quality cuts.
Implements CP::IMuonSelectionTool.
Definition at line 1282 of file MuonSelectionTool.cxx.
1290 int CaloMuonIDTag = -20;
1293 bool readID =
mu.parameter(CaloMuonIDTag, xAOD::Muon::CaloMuonIDTag);
1295 ATH_MSG_WARNING(
"Unable to read CaloMuonIDTag Quality information! Rejecting the CALO muon!");
1300 return (CaloMuonIDTag > 10);
◆ passedErrorCutCB()
bool CP::MuonSelectionTool::passedErrorCutCB |
( |
const xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
Returns true if a CB muon passes a pt- and eta-dependent cut on the relative CB q/p error.
Implements CP::IMuonSelectionTool.
Definition at line 1101 of file MuonSelectionTool.cxx.
1105 double start_cut = 3.0;
1106 double end_cut = 1.6;
1107 double abs_eta = std::abs(
mu.eta());
1110 double p0(8.0), p1(0.), p2(0.);
1117 else if (abs_eta > 1.05 && abs_eta <= 1.3) {
1120 }
else if (abs_eta > 1.3 && abs_eta <= 1.7) {
1123 }
else if (abs_eta > 1.7 && abs_eta <= 2.0) {
1126 }
else if (abs_eta > 2.0) {
1137 else if (abs_eta > 1.05 && abs_eta <= 1.3) {
1140 }
else if (abs_eta > 1.3 && abs_eta <= 1.7) {
1143 }
else if (abs_eta > 1.7 && abs_eta <= 2.0) {
1146 }
else if (abs_eta > 2.0) {
1161 if (abs_eta > 1.05 && abs_eta < 1.3) {
1164 }
else if (abs_eta >= 1.3 && abs_eta < 1.7) {
1167 }
else if (abs_eta >= 1.7 && abs_eta < 2.0) {
1170 }
else if (abs_eta >= 2.0) {
1176 bool passErrorCutCB =
false;
1181 double qOverP_CB = cbtrack->
qOverP();
1187 double a = (end_cut - start_cut) / 4000.0;
1188 double b = end_cut -
a * 5000.0;
1189 double coefficient = (pt_CB > 1000.) ? (
a * pt_CB +
b) : start_cut;
1190 if (std::abs(qOverPerr_CB / qOverP_CB) < coefficient *
sigma) { passErrorCutCB =
true; }
1197 ATH_MSG_DEBUG(
"The current event is a MC event. Use bad muon veto mimic.");
1203 return passErrorCutCB;
◆ passedHighPtCuts()
bool CP::MuonSelectionTool::passedHighPtCuts |
( |
const xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
Returns true if the muon passes the standard MCP High Pt cuts.
To set the value on the muon, instead call setPassesHighPtCuts(xAOD::Muon&) const
Implements CP::IMuonSelectionTool.
Definition at line 925 of file MuonSelectionTool.cxx.
942 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - fail high-pT");
962 ATH_MSG_VERBOSE(
"passedHighPtCuts - No MS track available for muon. Using combined track.");
963 MS_track =
mu.trackParticle(xAOD::Muon::CombinedTrackParticle);
966 if (MS_track && CB_track) {
968 float phiMS = MS_track->
phi();
969 float etaCB = CB_track->
eta();
972 if (!
isRun3() && (std::abs(
etaMS) > 2.0 || std::abs(etaCB) > 2.0)) {
973 if (
summary.cscUnspoiledEtaHits == 0) {
980 if (!
isRun3() &&
mu.eta() < -1.899 && std::abs(
mu.phi()) < 0.211) {
981 ATH_MSG_VERBOSE(
"Muon is in eta/phi region vetoed due to disabled chambers in MC - fail high-pT");
986 if ((1.01 < std::abs(
etaMS) && std::abs(
etaMS) < 1.1) || (1.01 < std::abs(etaCB) && std::abs(etaCB) < 1.1)) {
987 ATH_MSG_VERBOSE(
"Muon is in barrel/endcap overlap region - fail high-pT");
1015 if (
summary.nprecisionLayers < 4) {
1016 ATH_MSG_VERBOSE(
"Muon is in BEE eta/phi region and does not have 4 precision layers - fail high-pT");
1020 if (std::abs(etaCB) > 1.4) {
1024 if (
summary.nprecisionLayers < 4 && (
summary.extendedSmallHits > 0 ||
summary.extendedSmallHoles > 0)) {
1025 ATH_MSG_VERBOSE(
"Muon is in BEE eta/phi region and does not have 4 precision layers - fail high-pT");
1030 ATH_MSG_WARNING(
"passedHighPtCuts - MS or CB track missing in muon! Failing High-pT selection...");
1036 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
1041 if (std::abs(qOverPsignif) > 7) {
1053 if (std::abs(
mu.eta()) > 1.2 &&
summary.extendedSmallHits < 3 &&
summary.extendedLargeHits < 3) {
1077 if (
summary.nprecisionLayers < 3) {
1078 ATH_MSG_VERBOSE(
"Muon has less than 3 precision layers - fail high-pT");
1083 if (
summary.isSmallGoodSectors) {
1084 if (!(
summary.innerSmallHits > 2 &&
summary.middleSmallHits > 2 &&
1085 (
summary.outerSmallHits > 2 ||
summary.extendedSmallHits > 2))) {
1086 ATH_MSG_VERBOSE(
"Muon has small/large sectors overlap - fail high-pT");
1090 if (!(
summary.innerLargeHits > 2 &&
summary.middleLargeHits > 2 &&
1091 (
summary.outerLargeHits > 2 ||
summary.extendedLargeHits > 2))) {
1092 ATH_MSG_VERBOSE(
"Muon has small/large sectors overlap - fail high-pT");
◆ passedIDCuts() [1/2]
Returns true if the muon passes the standard MCP ID cuts.
To set the value on the muon, instead call setPassesIDCuts(xAOD::Muon&) const
No ID cuts should be applied on LRT muons, so always set this flag to true.
If the isLRT decor is not available, try to see if patternRecoInfo is available for the corresponding ID track.
All LRT muons should have ID tracks. The muons without ID tracks have to come from the standard muon container.
Implements CP::IMuonSelectionTool.
Definition at line 602 of file MuonSelectionTool.cxx.
605 if (isLRTmuon.isAvailable(
mu)) {
606 if (isLRTmuon(
mu))
return true;
612 if(!patternAcc.isAvailable(*idtrack)) {
613 ATH_MSG_FATAL(
"No information available to tell if the muon is LRT or standard. Either run MuonLRTMergingAlg to decorate with `isLRT` flag, or supply the patternRecoInfo for the original ID track.");
614 throw std::runtime_error(
"MuonSelectionTool() - isLRT decor and patternRecoInfo both unavailable for a muon.");
616 std::bitset<xAOD::NumberOfTrackRecoInfo> patternBitSet(patternAcc(*idtrack));
624 }
else if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
626 if (cbtrack && std::abs(cbtrack->
eta()) > 2.5) {
return true; }
629 if (
mu.trackParticle(xAOD::Muon::InnerDetectorTrackParticle))
630 return passedIDCuts(*
mu.trackParticle(xAOD::Muon::InnerDetectorTrackParticle));
631 else if (
mu.primaryTrackParticle())
◆ passedIDCuts() [2/2]
Returns true if the track particle passes the standard MCP ID cuts.
Implements CP::IMuonSelectionTool.
Definition at line 1250 of file MuonSelectionTool.cxx.
1255 " !! Tool configured with some of the ID hits requirements changed... FOR DEVELOPMENT ONLY: muon efficiency SF won't be "
1260 if ((value1 + value2 == 0) && !
m_PixCutOff)
return false;
1264 if ((value1 + value2 <= 4) && !
m_SctCutOff)
return false;
1271 const float abseta = std::abs(
track.eta());
1274 const uint8_t totTRThits = value1 + value2;
1275 if (!((0.1 < abseta && abseta <= 1.9 && totTRThits > 5 && value2 < (0.9 * totTRThits)) || (abseta <= 0.1 || abseta > 1.9)))
◆ passedLowPtEfficiencyCuts() [1/2]
bool CP::MuonSelectionTool::passedLowPtEfficiencyCuts |
( |
const xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
◆ passedLowPtEfficiencyCuts() [2/2]
bool CP::MuonSelectionTool::passedLowPtEfficiencyCuts |
( |
const xAOD::Muon & |
mu, |
|
|
xAOD::Muon::Quality |
thisMu_quality |
|
) |
| const |
|
overridevirtual |
Implements CP::IMuonSelectionTool.
Definition at line 688 of file MuonSelectionTool.cxx.
693 ATH_MSG_VERBOSE(
"LowPt WP currently not supported for run3 if not in expert mode");
709 ATH_MSG_VERBOSE(
"Muon is not combined or segment-tagged - fail low-pT");
722 ATH_MSG_VERBOSE(
"Muon is neither MuGirl / MuidCo / MuTagIMO - fail low-pT");
741 ATH_MSG_VERBOSE(
"Not using MVA selection, failing low-pT selection due to medium requirement in forward region");
749 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - fail low-pT");
757 uint nStationsCut = (std::abs(
mu.eta()) > 1.3 && std::abs(
mu.eta()) < 1.55) ? 2 : 1;
758 if (
summary.nprecisionLayers < nStationsCut) {
759 ATH_MSG_VERBOSE(
"number of precision layers = " << (
int)
summary.nprecisionLayers <<
" is lower than cut value " << nStationsCut
760 <<
" - fail low-pT");
768 ATH_MSG_VERBOSE(
"MuGirl muon is not confirmed by MuTagIMO - fail low-pT");
◆ passedLowPtEfficiencyMVACut()
bool CP::MuonSelectionTool::passedLowPtEfficiencyMVACut |
( |
const xAOD::Muon & |
mu | ) |
const |
|
private |
Definition at line 819 of file MuonSelectionTool.cxx.
822 ATH_MSG_VERBOSE(
"LowPt WP currently not supported for run3 if not in expert mode");
831 float momentumBalanceSig{-1}, CurvatureSig{-1}, energyLoss{-1}, muonSegmentDeltaEta{-1}, scatteringNeigbour{-1};
842 float seg1ChamberIdx{-1.}, seg2ChamberIdx{-1.}, middleHoles{-1.}, seg1NPrecisionHits{-1.}, seg1GlobalR{-1.}, seg1Chi2OverDoF{-1.};
847 ATH_MSG_WARNING(
"passedLowPtEfficiencyMVACut - found segment-tagged muon with no segments!");
849 seg1ChamberIdx = (!muonSegments.empty()) ? muonSegments[0]->chamberIndex() : -9;
850 seg2ChamberIdx = (muonSegments.size() > 1) ? muonSegments[1]->chamberIndex() : -9;
854 seg1NPrecisionHits = (!muonSegments.empty()) ? muonSegments[0]->nPrecisionHits() : -1;
855 seg1GlobalR = (!muonSegments.empty())
856 ? std::hypot(muonSegments[0]->
x(), muonSegments[0]->y(), muonSegments[0]->z())
858 seg1Chi2OverDoF = (!muonSegments.empty()) ? muonSegments[0]->
chiSquared() / muonSegments[0]->numberDoF() : -1;
867 std::vector<float> var_vector;
869 var_vector = {momentumBalanceSig, CurvatureSig, scatteringNeigbour, energyLoss,
870 middleHoles, muonSegmentDeltaEta, seg1ChamberIdx, seg2ChamberIdx};
872 if (std::abs(
mu.eta()) >= 1.3)
873 var_vector = {seg2ChamberIdx, seg1ChamberIdx, seg1NPrecisionHits, muonSegmentDeltaEta,
874 seg1GlobalR, seg1Chi2OverDoF, std::abs(CurvatureSig)};
876 var_vector = {seg1ChamberIdx, seg1NPrecisionHits, muonSegmentDeltaEta,
877 seg1GlobalR, seg1Chi2OverDoF, std::abs(CurvatureSig)};
882 if (eventInfo->eventNumber() % 2 == 1) {
892 if (std::abs(
mu.eta()) < 0.7)
894 else if (std::abs(
mu.eta()) < 1.3)
900 float BDTdiscriminant;
903 BDTdiscriminant = reader_MUID->EvaluateMVA(var_vector,
"BDTG");
905 BDTdiscriminant = reader_MUGIRL->EvaluateMVA(var_vector,
"BDTG");
907 BDTdiscriminant = reader_MUTAGIMO->EvaluateMVA(var_vector,
"BDT");
909 ATH_MSG_WARNING(
"Invalid author for low-pT MVA, failing selection...");
916 if (BDTdiscriminant > BDTcut) {
◆ passedMuonCuts()
Returns true if the muon passes a standardized loose preselection.
Implements CP::IMuonSelectionTool.
Definition at line 1231 of file MuonSelectionTool.cxx.
1235 if (
mu.muonType() == xAOD::Muon::CaloTagged && std::abs(
mu.eta()) < 0.105)
1242 if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
1244 return (cbtrack && std::abs(cbtrack->
eta()) > 2.4);
◆ passTight()
bool CP::MuonSelectionTool::passTight |
( |
const xAOD::Muon & |
mu, |
|
|
float |
rho, |
|
|
float |
oneOverPSig |
|
) |
| const |
|
private |
Returns true if the muon passed the tight working point cuts.
Definition at line 1332 of file MuonSelectionTool.cxx.
1335 ATH_MSG_VERBOSE(
"for run3, Tight WP is only supported when ExcludeNSWFromPrecisionLayers=False and RecalcPrecisionLayerswNSW=True");
1338 float symmetric_eta = std::abs(
mu.eta());
1342 if (pt < 4.0 || symmetric_eta >= 2.5)
return false;
1343 ATH_MSG_VERBOSE(
"Muon is passing tight WP kinematic cuts with pT,eta " <<
mu.pt() <<
" , " <<
mu.eta());
1350 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a low pt muon with (pt,eta) ( " <<
pt <<
" , " <<
mu.eta() <<
" ) ");
1352 ATH_MSG_VERBOSE(
"Momentum significance value " << oneOverPSig <<
", required to be less than " << qOverPCut);
1354 if (
rho > rhoCut)
return false;
1357 if (oneOverPSig > qOverPCut)
return false;
1358 ATH_MSG_VERBOSE(
"Muon passed tight WP, low pT momentum significance cut");
1366 else if (
pt < 100.0) {
1369 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a medium pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
1373 if (
rho > rhoCut)
return false;
1381 else if (
pt < 500.0) {
1383 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a high pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
1386 ATH_MSG_VERBOSE(
"Rho value " <<
rho <<
", required to be less than " << rhoCut <<
" unless -1, in which no cut is applied");
1388 if (rhoCut < 0.0)
return true;
1389 if (
rho > rhoCut)
return false;
1396 ATH_MSG_VERBOSE(
"Not applying any tight WP cuts to a very high pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
◆ print() [1/2]
void asg::AsgTool::print |
( |
| ) |
const |
|
virtualinherited |
Print the state of the tool.
Implements asg::IAsgTool.
Reimplemented in JetRecTool, JetFinder, JetModifiedMassDrop, JetFromPseudojet, JetReclusterer, JetReclusteringTool, JetTruthLabelingTool, JetPileupLabelingTool, HI::HIPileupTool, top::TopObjectSelection, JetDumper, JetBottomUpSoftDrop, JetRecursiveSoftDrop, JetSoftDrop, JetConstituentsRetriever, JetSubStructureMomentToolsBase, JetSplitter, JetToolRunner, JetPruner, JetPseudojetRetriever, JetTrimmer, AsgHelloTool, and KtDeltaRTool.
Definition at line 131 of file AsgTool.cxx.
◆ print() [2/2]
virtual void asg::IAsgTool::print |
( |
| ) |
const |
|
pure virtualinherited |
Print the state of the tool.
Implemented in JetRecTool, JetFinder, JetModifiedMassDrop, JetFromPseudojet, JetReclusterer, JetReclusteringTool, JetTruthLabelingTool, JetPileupLabelingTool, HI::HIPileupTool, top::TopObjectSelection, asg::AsgTool, JetDumper, JetBottomUpSoftDrop, JetRecursiveSoftDrop, JetSoftDrop, JetConstituentsRetriever, JetSubStructureMomentToolsBase, JetSplitter, JetToolRunner, JetPruner, JetPseudojetRetriever, JetTrimmer, AsgHelloTool, and KtDeltaRTool.
◆ qOverPsignificance()
float CP::MuonSelectionTool::qOverPsignificance |
( |
const xAOD::Muon & |
muon | ) |
const |
|
inlineprivate |
Definition at line 379 of file MuonSelectionTool.cxx.
385 <<
" Momentum dependent cuts are disabled. Return 0.");
389 const xAOD::TrackParticle* metrack =
muon.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
390 if (!idtrack || !metrack) {
391 ATH_MSG_VERBOSE(
"No ID / MS track. Return dummy large value of 1 mio");
394 float mePt{-1.}, idPt{-1.};
401 return std::abs((metrack->
charge() / meP) - (idtrack->
charge() / idP)) / qOverPsigma;
◆ renounce()
◆ renounceArray()
◆ retrieveParam()
void CP::MuonSelectionTool::retrieveParam |
( |
const xAOD::Muon & |
muon, |
|
|
float & |
value, |
|
|
const xAOD::Muon::ParamDef |
param |
|
) |
| const |
|
inlineprivate |
Definition at line 1457 of file MuonSelectionTool.cxx.
1459 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve parameter " << param
1460 <<
" for muon with pT:" <<
muon.pt() *
MeVtoGeV <<
", eta:" <<
muon.eta() <<
", phi: " <<
muon.phi()
1461 <<
", q:" <<
muon.charge() <<
", author: " <<
muon.author());
1462 throw std::runtime_error(
"Failed to retrieve Parameter");
◆ retrieveSummaryValue()
template<class P , class T , class S >
void CP::MuonSelectionTool::retrieveSummaryValue |
( |
const P & |
muon, |
|
|
T & |
value, |
|
|
const S |
type, |
|
|
bool |
ignoreMissing = false |
|
) |
| const |
|
inlineprivate |
Definition at line 247 of file MuonSelectionTool.h.
249 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve summary value " <<
type);
250 throw std::runtime_error(
"MuonSelectorTool summary retrieval failed");
◆ rhoPrime()
Definition at line 403 of file MuonSelectionTool.cxx.
406 <<
"Momentum dependent cuts are disabled. Return 0.");
409 float mePt{-1.}, idPt{-1.};
411 return std::abs(idPt - mePt) /
muon.pt();
◆ setPassesHighPtCuts()
void CP::MuonSelectionTool::setPassesHighPtCuts |
( |
xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
◆ setPassesIDCuts()
void CP::MuonSelectionTool::setPassesIDCuts |
( |
xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
◆ setQuality()
void CP::MuonSelectionTool::setQuality |
( |
xAOD::Muon & |
mu | ) |
const |
|
overridevirtual |
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ m_acceptInfo
◆ m_allowComm
Gaudi::Property<bool> CP::MuonSelectionTool::m_allowComm {this, "AcceptCommChain", true, "Accepts muons from the EMEO chain if set to true"} |
|
private |
◆ m_BMVcutFile
Gaudi::Property<std::string> CP::MuonSelectionTool::m_BMVcutFile |
|
private |
Initial value:{this, "BMVcutFile",
"MuonSelectorTools/180620_BMVmimicCutFunctions/BMVmimicCutFunctions.root"}
file for bad muon veto mimic cut functions
Definition at line 189 of file MuonSelectionTool.h.
◆ m_BMVcutFunction_barrel
std::unique_ptr<TF1> CP::MuonSelectionTool::m_BMVcutFunction_barrel |
|
private |
◆ m_BMVcutFunction_endcap
std::unique_ptr<TF1> CP::MuonSelectionTool::m_BMVcutFunction_endcap |
|
private |
◆ m_calibration_version
Gaudi::Property<std::string> CP::MuonSelectionTool::m_calibration_version {this, "CalibrationRelease", "PreRec2016_2016-04-13"} |
|
private |
◆ m_caloScoreWP
Gaudi::Property<int> CP::MuonSelectionTool::m_caloScoreWP {this, "CaloScoreWP", 4,"Currently there are 4 CaloScore WPs for testing; WP4 is the recommended one"} |
|
private |
◆ m_custom_dir
Gaudi::Property<std::string> CP::MuonSelectionTool::m_custom_dir {this, "CustomInputFolder", ""} |
|
private |
◆ m_detStore
◆ m_developMode
Gaudi::Property<bool> CP::MuonSelectionTool::m_developMode {this, "ExpertDevelopMode", false} |
|
private |
◆ m_disablePtCuts
Gaudi::Property<bool> CP::MuonSelectionTool::m_disablePtCuts {this, "DisablePtCuts", false} |
|
private |
◆ m_doBadMuonVetoMimic
Gaudi::Property<bool> CP::MuonSelectionTool::m_doBadMuonVetoMimic {this, "DoBadMuonVetoMimic", false} |
|
private |
◆ m_eventInfo
◆ m_evtStore
◆ m_excludeNSWFromPrecisionLayers
Gaudi::Property<bool> CP::MuonSelectionTool::m_excludeNSWFromPrecisionLayers {this, "ExcludeNSWFromPrecisionLayers", false, "Cut on the nprecisionlayers ignoring the NSW"} |
|
private |
◆ m_geoOnTheFly
Gaudi::Property<bool> CP::MuonSelectionTool::m_geoOnTheFly {this, "AllowSettingGeometryOnTheFly", false,"avoids crash if run2/run3 geo is wrongly set"} |
|
private |
◆ m_isRun3
Gaudi::Property<bool> CP::MuonSelectionTool::m_isRun3 {this, "IsRun3Geo", false, "Switch to toggle the run 2 & run 3 geometry cuts. The tool will throw an exception if the run number does not match the expectations later"} |
|
private |
◆ m_low_pt_mva_mutex
std::mutex CP::MuonSelectionTool::m_low_pt_mva_mutex |
|
mutableprivate |
◆ m_maxEta
Gaudi::Property<double> CP::MuonSelectionTool::m_maxEta {this, "MaxEta", 2.7, "Maximum eta range to select the muons"} |
|
private |
◆ m_MVAreaderFile_EVEN_MuGirl
Gaudi::Property<std::string> CP::MuonSelectionTool::m_MVAreaderFile_EVEN_MuGirl |
|
private |
Initial value:{
this, "MVAreaderFile_EVEN_MuGirl",
"MuonSelectorTools/190118_PrelimLowPtMVA/LowPtMVA_Weights/BDTG_9JAN2019_MuGirl_EVEN.weights.xml"}
Definition at line 168 of file MuonSelectionTool.h.
◆ m_MVAreaderFile_EVEN_MuidCB
Gaudi::Property<std::string> CP::MuonSelectionTool::m_MVAreaderFile_EVEN_MuidCB |
|
private |
Initial value:{
this, "MVAreaderFile_EVEN_MuidCB",
"MuonSelectorTools/190118_PrelimLowPtMVA/LowPtMVA_Weights/BDTG_9JAN2019_MuidCB_EVEN.weights.xml"}
Definition at line 161 of file MuonSelectionTool.h.
◆ m_MVAreaderFile_MuTagIMO_etaBin1
Gaudi::Property<std::string> CP::MuonSelectionTool::m_MVAreaderFile_MuTagIMO_etaBin1 |
|
private |
Initial value:{
this, "MVAreaderFile_MuTagIMO_etaBin1", "dev/MuonSelectorTools/181121_MuTagIMO_BDT/BDT_NOV2021_MuTagIMO_etaBin1.weights.xml"}
Definition at line 175 of file MuonSelectionTool.h.
◆ m_MVAreaderFile_MuTagIMO_etaBin2
Gaudi::Property<std::string> CP::MuonSelectionTool::m_MVAreaderFile_MuTagIMO_etaBin2 |
|
private |
Initial value:{
this, "MVAreaderFile_MuTagIMO_etaBin2", "dev/MuonSelectorTools/181121_MuTagIMO_BDT/BDT_NOV2021_MuTagIMO_etaBin2.weights.xml"}
Definition at line 177 of file MuonSelectionTool.h.
◆ m_MVAreaderFile_MuTagIMO_etaBin3
Gaudi::Property<std::string> CP::MuonSelectionTool::m_MVAreaderFile_MuTagIMO_etaBin3 |
|
private |
Initial value:{
this, "MVAreaderFile_MuTagIMO_etaBin3", "dev/MuonSelectorTools/181121_MuTagIMO_BDT/BDT_NOV2021_MuTagIMO_etaBin3.weights.xml"}
Definition at line 179 of file MuonSelectionTool.h.
◆ m_MVAreaderFile_ODD_MuGirl
Gaudi::Property<std::string> CP::MuonSelectionTool::m_MVAreaderFile_ODD_MuGirl |
|
private |
Initial value:{
this, "MVAreaderFile_ODD_MuGirl",
"MuonSelectorTools/190118_PrelimLowPtMVA/LowPtMVA_Weights/BDTG_9JAN2019_MuGirl_ODD.weights.xml"}
Definition at line 171 of file MuonSelectionTool.h.
◆ m_MVAreaderFile_ODD_MuidCB
Gaudi::Property<std::string> CP::MuonSelectionTool::m_MVAreaderFile_ODD_MuidCB |
|
private |
Initial value:{
this, "MVAreaderFile_ODD_MuidCB",
"MuonSelectorTools/190118_PrelimLowPtMVA/LowPtMVA_Weights/BDTG_9JAN2019_MuidCB_ODD.weights.xml"}
Definition at line 164 of file MuonSelectionTool.h.
◆ m_PixCutOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_PixCutOff {this, "PixCutOff", false} |
|
private |
◆ m_quality
Gaudi::Property<int> CP::MuonSelectionTool::m_quality {this, "MuQuality", 1,"Quality to select. Values correspond to 0=Tight, 1=Medium, 2=Loose, 3=VeryLoose (only for debug, not supported), 4=HighPt, 5=LowPtEfficiency"} |
|
private |
◆ m_reader_MUTAGIMO_etaBin1
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_reader_MUTAGIMO_etaBin1 {nullptr} |
|
private |
◆ m_reader_MUTAGIMO_etaBin2
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_reader_MUTAGIMO_etaBin2 {nullptr} |
|
private |
◆ m_reader_MUTAGIMO_etaBin3
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_reader_MUTAGIMO_etaBin3 {nullptr} |
|
private |
◆ m_readerE_MUGIRL
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_readerE_MUGIRL {nullptr} |
|
private |
◆ m_readerE_MUID
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_readerE_MUID {nullptr} |
|
private |
◆ m_readerO_MUGIRL
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_readerO_MUGIRL {nullptr} |
|
private |
◆ m_readerO_MUID
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_readerO_MUID {nullptr} |
|
private |
◆ m_recalcPrecisionLayerswNSW
Gaudi::Property<bool> CP::MuonSelectionTool::m_recalcPrecisionLayerswNSW {this, "RecalcPrecisionLayerswNSW", true, "Recalculate nprecisionlayers with internal criteria for NSW"} |
|
private |
◆ m_SctCutOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_SctCutOff {this, "SctCutOff", false} |
|
private |
◆ m_SiHolesCutOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_SiHolesCutOff {this, "SiHolesCutOff", false} |
|
private |
◆ m_tightWP_highPt_rhoCuts
std::unique_ptr<TH1> CP::MuonSelectionTool::m_tightWP_highPt_rhoCuts |
|
private |
◆ m_tightWP_lowPt_qOverPCuts
std::unique_ptr<TH1> CP::MuonSelectionTool::m_tightWP_lowPt_qOverPCuts |
|
private |
◆ m_tightWP_lowPt_rhoCuts
std::unique_ptr<TH1> CP::MuonSelectionTool::m_tightWP_lowPt_rhoCuts |
|
private |
◆ m_tightWP_mediumPt_rhoCuts
std::unique_ptr<TH1> CP::MuonSelectionTool::m_tightWP_mediumPt_rhoCuts |
|
private |
◆ m_toroidOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_toroidOff {this, "ToroidOff", false, "Run the tool in Toroid off setup"} |
|
private |
◆ m_TrtCutOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_TrtCutOff {this, "TrtCutOff", true} |
|
private |
◆ m_turnOffMomCorr
Gaudi::Property<bool> CP::MuonSelectionTool::m_turnOffMomCorr {this, "TurnOffMomCorr", false} |
|
private |
◆ m_use2stationMuonsHighPt
Gaudi::Property<bool> CP::MuonSelectionTool::m_use2stationMuonsHighPt {this, "Use2stationMuonsHighPt", true, "for users of high-pT working point to choose whether to include 'safe' 2-station muons"} |
|
private |
◆ m_useAllAuthors
Gaudi::Property<bool> CP::MuonSelectionTool::m_useAllAuthors {this, "UseAllAuthors", true} |
|
private |
◆ m_useCaloScore
Gaudi::Property<bool> CP::MuonSelectionTool::m_useCaloScore {this, "UseCaloScore", true, "Use CaloScore for calo-tags in the Loose working point. False will revert back to CaloMuonIDTag (not recommended in Rel.22)"} |
|
private |
◆ m_useLRT
Gaudi::Property<bool> CP::MuonSelectionTool::m_useLRT {this, "UseLRT", false, "Enable support for LRT muons"} |
|
private |
◆ m_useMVALowPt
Gaudi::Property<bool> CP::MuonSelectionTool::m_useMVALowPt {this, "UseMVALowPt", false, "for users of low-pT working point to choose whether to use MVA and whether to include MuTagIMO muons. Not yet supported in release 22, crrently only for development studies."} |
|
private |
◆ m_useSegmentTaggedLowPt
Gaudi::Property<bool> CP::MuonSelectionTool::m_useSegmentTaggedLowPt {this, "UseSegmentTaggedLowPt", false, "Use MVA low-pt WP. In development phase"} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
virtual double pt() const override final
The transverse momentum ( ) of the particle.
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
#define CXXUTILS_TRAPPING_FP
@ numberOfPrecisionHoleLayers
layers with holes AND no hits [unit8_t].
Scalar phi() const
phi method
Helper class to provide type-safe access to aux data.
float charge() const
Returns the charge.
Scalar eta() const
pseudorapidity method
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
@ extendedSmallHoles
number of precision holes in the extended small layer
@ scatteringNeighbourSignificance
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ middleLargeHoles
number of precision holes in the middle large layer
Helper class to provide constant type-safe access to aux data.
#define ATH_MSG_VERBOSE(x)
@ IS_SIMULATION
true: simulation, false: data
@ innerLargeHits
number of precision hits in the inner large layer
virtual void setOwner(IDataHandleHolder *o)=0
@ cscUnspoiledEtaHits
number of unspoiled CSC eta clusters on track
@ momentumBalanceSignificance
@ middleLargeHits
number of precision hits in the middle large layer
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
@ extendedLargeHits
number of precision hits in the extended large layer
@ segmentDeltaEta
MuTag parameters.
@ middleSmallHoles
number of precision holes in the middle small layer
@ combinedTrackOutBoundsPrecisionHits
total out-of-bounds hits on the combined track
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
@ numberOfSCTHoles
number of SCT holes [unit8_t].
@ isSmallGoodSectors
if non-deweighted track chambers are small
@ SiSpacePointsSeedMaker_LargeD0
@ etaLayer2STGCHits
number of eta hits in the second STGC trigger layer (STGC2)
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
@ scatteringCurvatureSignificance
float qOverP() const
Returns the parameter.
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
@ middleSmallHits
number of precision hits in the middle small layer
@ outerSmallHits
number of precision hits in the outer small layer
float chiSquared(const U &p)
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
struct TBPatternUnitContext Muon
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
@ outerLargeHits
number of precision hits in the outer large layer
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
#define ATH_MSG_WARNING(x)
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ etaLayer1STGCHits
number of eta hits in the first STGC trigger layer (STGC1)
@ numberOfGoodPrecisionLayers
layers with at least 3 hits that are not deweighted [uint8_t]
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ STACO
Tracks produced by STACO.
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
Class describing a TrackParticle.
@ extendedSmallHits
number of precision hits in the extended small layer
reader
read the goodrunslist xml file(s)
@ innerSmallHits
number of precision hits in the inner small layer
float theta() const
Returns the parameter, which has range 0 to .
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
int addCut(const std::string &cutName, const std::string &cutDescription)
Add a cut; returning the cut position.
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].