 |
ATLAS Offline Software
|
Implementation of the muon selector tool.
More...
#include <MuonSelectionTool.h>
|
struct | hitSummary |
| struct to handle easily number of hits in different parts of the MS More...
|
|
|
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 () |
|
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...
|
|
bool | isBIS78 (const float eta, const float phi) const |
| Check if muon eta/phi falls in BIS7/8 chambers. More...
|
|
bool | isBEE (const float eta, const float phi) const |
| Check if muon eta/phi falls in BEE chambers. More...
|
|
bool | isBMG (const float eta, const float phi) const |
| Check if muon eta/phi falls in BMG chambers. More...
|
|
float | qOverPsignificance (const xAOD::Muon &muon) const |
| Returns q/p significance of the muon (see definition in https://cds.cern.ch/record/2665711 ) More...
|
|
float | rhoPrime (const xAOD::Muon &muon) const |
| Returns rhoPrime of the muon (see definition in https://cds.cern.ch/record/2665711 ) More...
|
|
template<class P , class T , class S > |
void | retrieveSummaryValue (const P &muon, T &value, const S type, bool ignoreMissing=false) const |
| helper function to retrieve a hitSummary value More...
|
|
void | fillSummary (const xAOD::Muon &muon, hitSummary &summary) const |
| functions that fills a hitSummary for a muon More...
|
|
virtual float | getTightNNScore (const xAOD::Muon &muon) const override |
| Returns the TightNNscore of the muon, an experimental ML-based score for the identification of muons from HF hadron decays. More...
|
|
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, V, H > &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 | 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...
|
|
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 |
|
void | IdMsPt (const xAOD::Muon &muon, float &idPt, float &msPt) const |
|
void | checkSanity () const |
|
bool | isRun3 (bool forceOnTheFly=false) const |
|
void | retrieveParam (const xAOD::Muon &muon, float &value, const xAOD::Muon::ParamDef param) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &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"} |
|
Gaudi::Property< bool > | m_useBEEBISInHighPtRun3 {this, "UseBEEBISInHighPtRun3", true, "Include BEE and BIS7/8 in high-pT WP in Run3"} |
|
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 |
|
Gaudi::Property< bool > | m_calculateTightNNScore {this, "CalculateTightNNScore", false} |
|
ToolHandle< AthInfer::IAthInferenceTool > | m_onnxTool {this, "ORTInferenceTool", "AthOnnx::OnnxRuntimeInferenceTool"} |
|
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 35 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 319 of file MuonSelectionTool.cxx.
325 else if (
mu.muonType() == xAOD::Muon::MuonStandAlone)
327 else if (
mu.muonType() == xAOD::Muon::SegmentTagged)
329 else if (
mu.muonType() == xAOD::Muon::CaloTagged)
331 else if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon)
346 acceptData.setCutResult(
"Eta",
true);
351 acceptData.setCutResult(
"IDHits", passIDCuts);
356 acceptData.setCutResult(
"Preselection", passMuonCuts);
358 if (!passIDCuts || !passMuonCuts) {
return acceptData; }
362 bool thisMu_highpt =
false;
364 bool thisMu_lowptE =
false;
367 ATH_MSG_VERBOSE(
"Muon quality: " << thisMu_quality <<
" passes HighPt: " << thisMu_highpt
368 <<
" passes LowPtEfficiency: " << thisMu_lowptE);
369 if (m_quality < 4 && thisMu_quality >
m_quality) {
return acceptData; }
370 if (
m_quality == 4 && !thisMu_highpt) {
return acceptData; }
371 if (
m_quality == 5 && !thisMu_lowptE) {
return acceptData; }
372 acceptData.setCutResult(
"Quality",
true);
◆ checkSanity()
void CP::MuonSelectionTool::checkSanity |
( |
| ) |
const |
|
private |
Definition at line 290 of file MuonSelectionTool.cxx.
292 static std::atomic<bool> checkDone{
false};
300 <<
" while on-the fly check for runNumber "<<
getRunNumber(
true)<<
" indicates isRun3Geo="<<
isRun3(
true));
306 ATH_MSG_WARNING(
"MuonSelectionTool currently supports Loose, Medium, Tight, HighPt, and LowPtEfficiency WPs for Run3; all other WPs can only be used in ExpertDevelopMode mode");
310 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);
253 return PBASE::declareProperty(
name,hndl,
doc);
◆ 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.
229 return PBASE::declareProperty(
name,hndl,
doc);
◆ 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.
338 return PBASE::declareProperty(
name, property,
doc);
◆ 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()
functions that fills a hitSummary for a muon
Definition at line 1421 of file MuonSelectionTool.cxx.
1444 if (std::abs(
muon.eta()) > 2.0) {
1445 ATH_MSG_VERBOSE(
"Recalculating number of precision layers for combined muon");
1454 + (
summary.extendedSmallHits > 2 ||
summary.extendedLargeHits > 2);
1458 if (!eta1stgchits_acc.isAvailable(
muon) || !eta2stgchits_acc.isAvailable(
muon) || !mmhits_acc.isAvailable(
muon)) {
1459 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve NSW hits!"
1460 <<
" (Please use DxAODs with p-tags >= p5834 OR set ExcludeNSWFromPrecisionLayers to True (tests only)");
1461 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 248 of file MuonSelectionTool.cxx.
251 ATH_MSG_ERROR(
" getHist(...) TFile is nullptr! Check that the Tight cut map is loaded correctly");
252 return StatusCode::FAILURE;
254 TH1* h_ptr =
nullptr;
260 return StatusCode::FAILURE;
262 hist = std::unique_ptr<TH1>{h_ptr};
263 hist->SetDirectory(
nullptr);
264 ATH_MSG_INFO(
"Successfully read tight working point histogram: " <<
hist->GetName());
266 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
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
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 435 of file MuonSelectionTool.cxx.
443 if (
mu.muonType() == xAOD::Muon::SegmentTagged) {
446 if (std::abs(
mu.eta()) < 0.1) {
450 ATH_MSG_VERBOSE(
"Do not allow segment-tagged muon at |eta| > 0.1 - return VeryLoose");
456 if (
mu.muonType() == xAOD::Muon::CaloTagged) {
481 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - return VeryLoose");
487 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
491 const float reducedChi2 =
mu.primaryTrackParticle()->chiSquared() /
mu.primaryTrackParticle()->numberDoF();
499 if (
summary.nprecisionLayers > 1 && reducedChi2 < 8 && std::abs(qOverPsignif) < 7) {
506 ATH_MSG_VERBOSE(
"Muon did not pass requirements for tight combined muon");
510 (
summary.nprecisionLayers > 1 ||(
summary.nprecisionLayers == 1 &&
summary.nprecisionHoleLayers < 2 && std::abs(
mu.eta()) < 0.1))
517 ATH_MSG_VERBOSE(
"Muon did not pass requirements for medium combined muon");
523 if ((
summary.nprecisionLayers > 1 ||
524 (
summary.nprecisionLayers == 1 &&
summary.nprecisionHoleLayers < 2 && std::abs(
mu.eta()) < 0.1))) {
540 ATH_MSG_VERBOSE(
"Muon passed selection for loose working point at low pT");
545 ATH_MSG_VERBOSE(
"Did not pass selections for combined muon - returning VeryLoose");
554 ATH_MSG_VERBOSE(
"Standalone muons currently only used when in expert mode for run3");
558 if (std::abs(
mu.eta()) > 2.5) {
569 ATH_MSG_VERBOSE(
"Muon did not pass selection for medium stand-alone muon - return VeryLoose");
574 if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
578 ATH_MSG_VERBOSE(
"Silicon-associated forward muon muons currently only used when in expert mode for run3");
583 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
585 if (cbtrack && metrack) {
586 if (std::abs(cbtrack->
eta()) > 2.5) {
593 "SiliconForwardAssociated muon has ID track as primary track particle. "
594 <<
"This is a bug fixed starting with xAODMuon-00-17-07, which should be present in this release. "
595 <<
"Please report this to the Muon CP group!");
604 ATH_MSG_VERBOSE(
"Muon did not pass selection for medium silicon-associated forward muon - return VeryLoose");
608 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 1483 of file MuonSelectionTool.cxx.
1493 if (
summary.nprecisionLayers == 2)
1494 return ResolutionCategory::highPt2station;
1502 ATH_MSG_VERBOSE(
"getResolutionCategory - No MS track available for muon. Using combined track.");
1503 MS_track =
mu.trackParticle(xAOD::Muon::CombinedTrackParticle);
1507 const float etaMS = MS_track->
eta();
1508 const float etaCB = CB_track->
eta();
1509 const float phiMS = MS_track->
phi();
1514 category = ResolutionCategory::missingInner;
1517 category = ResolutionCategory::missingMiddle;
1521 category = ResolutionCategory::missingOuter;
1523 if (!
isRun3() && (std::abs(
etaMS) > 2.0 || std::abs(etaCB) > 2.0) &&
summary.cscUnspoiledEtaHits == 0)
1524 category = ResolutionCategory::spoiledCSC;
1526 if ((1.01 < std::abs(
etaMS) && std::abs(
etaMS) < 1.1) || (1.01 < std::abs(etaCB) && std::abs(etaCB) < 1.1))
1527 category = ResolutionCategory::BEoverlap;
1532 if (
isBEE(
etaMS, phiMS) || (std::abs(etaCB) > 1.4 && (
summary.extendedSmallHits > 0 ||
summary.extendedSmallHoles > 0))) {
1534 category = ResolutionCategory::missingBEE;
1536 if (
summary.extendedSmallHits >= 3 &&
summary.outerSmallHits < 3)
category = ResolutionCategory::missingOuter;
1538 if (!
summary.isSmallGoodSectors)
1542 if (
summary.nprecisionLayers == 1)
category = ResolutionCategory::oneStation;
◆ getRunNumber()
unsigned int CP::MuonSelectionTool::getRunNumber |
( |
bool |
needOnlyCorrectYear = false | ) |
const |
|
private |
Definition at line 1549 of file MuonSelectionTool.cxx.
1557 ATH_MSG_DEBUG(
"The current event is a data event. Return runNumber.");
1558 return eventInfo->runNumber();
1563 static std::atomic<bool> issuedWarningPRW{
false};
1564 if (acc_rnd.isAvailable(*eventInfo)) {
1565 unsigned int rn = acc_rnd(*eventInfo);
1566 if (
rn != 0)
return acc_rnd(*eventInfo);
1568 if (!issuedWarningPRW) {
1570 issuedWarningPRW =
true;
1575 if (needOnlyCorrectYear) {
1576 if (eventInfo->runNumber() < 300000) {
1577 ATH_MSG_DEBUG(
"Random run number not available and this is mc16a or mc20a, returning dummy 2016 run number.");
1580 }
else if (eventInfo->runNumber() < 310000) {
1581 ATH_MSG_DEBUG(
"Random run number not available and this is mc16d or mc20d, returning dummy 2017 run number.");
1584 }
else if (eventInfo->runNumber() < 320000) {
1585 ATH_MSG_DEBUG(
"Random run number not available and this is mc16e or mc20e, returning dummy 2018 run number.");
1588 }
else if (eventInfo->runNumber() < 600000) {
1589 ATH_MSG_DEBUG(
"Random run number not available and this is mc21/mc23, for the time being we're returing a dummy run number.");
1592 ATH_MSG_DEBUG(
"Detected some run 4 / phase II runnumber "<<eventInfo->runNumber()<<
". ");
1596 ATH_MSG_FATAL(
"Random run number not available, fallback option of using runNumber failed since "<<eventInfo->runNumber()<<
" cannot be recognised");
1597 throw std::runtime_error(
"MuonSelectionTool() - need RandomRunNumber decoration by the PileupReweightingTool");
1600 ATH_MSG_FATAL(
"Failed to find the RandomRunNumber decoration by the PileupReweightingTool");
1601 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 815 of file MuonSelectionTool.cxx.
816 std::vector<const xAOD::MuonSegment*> segments_sorted;
817 segments_sorted.reserve(
mu.nMuonSegments());
819 for (
unsigned int i = 0;
i <
mu.nMuonSegments();
i++) {
820 if (!
mu.muonSegment(
i))
821 ATH_MSG_WARNING(
"The muon reports more segments than are available. Please report this to the muon software community!");
823 segments_sorted.push_back(
mu.muonSegment(
i));
826 std::sort(segments_sorted.begin(), segments_sorted.end(), chamberIndexCompare);
828 return segments_sorted;
◆ getTightNNScore()
float CP::MuonSelectionTool::getTightNNScore |
( |
const xAOD::Muon & |
muon | ) |
const |
|
overridevirtual |
Returns the TightNNscore of the muon, an experimental ML-based score for the identification of muons from HF hadron decays.
Implements CP::IMuonSelectionTool.
Definition at line 1656 of file MuonSelectionTool.cxx.
1659 ATH_MSG_ERROR(
"TightNNScore calculation is disabled. Please set the property CalculateTightNNScore to true.");
1660 throw std::runtime_error(
"cannot calculate TightNNScore");
1665 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
1666 if(!idtrack || !metrack)
return -999;
1670 if (std::abs(
mu.eta())>2.5)
return -999;
1671 if(
mu.pt()<4000.)
return -999;
1673 std::vector<float> input_features;
1675 int mu_author=
mu.author();
1677 float mu_scatteringCurvatureSignificance=0.;
1679 float mu_scatteringNeighbourSignificance=0.;
1681 float mu_momentumBalanceSignificance=0.;
1684 float mu_reducedChi2=
mu.primaryTrackParticle()->chiSquared() /
mu.primaryTrackParticle()->numberDoF();
1687 float mu_spectrometerFieldIntegral=0.;
1689 float mu_segmentDeltaEta=0;
1691 uint8_t mu_numberOfPixelHits=0;
1693 uint8_t mu_numberOfPixelDeadSensors=0;
1710 input_features = {(
float)mu_author,
1712 mu_scatteringCurvatureSignificance,
1713 mu_scatteringNeighbourSignificance,
1714 mu_momentumBalanceSignificance,
1715 mu_qOverPSignificance,
1719 mu_spectrometerFieldIntegral,
1721 (
float)mu_numberOfPixelHits,
1722 (
float)mu_numberOfPixelDeadSensors,
1723 (
float)mu_innerLargeHits,
1724 (
float)mu_innerSmallHits,
1725 (
float)mu_middleLargeHits,
1726 (
float)mu_middleSmallHits,
1727 (
float)mu_outerLargeHits,
1728 (
float)mu_outerSmallHits};
1732 uint8_t mu_phiLayer1STGCHits=0;
1734 uint8_t mu_phiLayer2STGCHits=0;
1736 uint8_t mu_etaLayer1STGCHits=0;
1738 uint8_t mu_etaLayer2STGCHits=0;
1742 input_features = {(
float)mu_author,
1744 mu_scatteringCurvatureSignificance,
1745 mu_scatteringNeighbourSignificance,
1746 mu_momentumBalanceSignificance,
1747 mu_qOverPSignificance,
1751 mu_spectrometerFieldIntegral,
1753 (
float)mu_numberOfPixelHits,
1754 (
float)mu_numberOfPixelDeadSensors,
1755 (
float)mu_innerLargeHits,
1756 (
float)mu_innerSmallHits,
1757 (
float)mu_middleLargeHits,
1758 (
float)mu_middleSmallHits,
1759 (
float)mu_outerLargeHits,
1760 (
float)mu_outerSmallHits,
1761 (
float)mu_phiLayer1STGCHits,
1762 (
float)mu_phiLayer2STGCHits,
1763 (
float)mu_etaLayer1STGCHits,
1764 (
float)mu_etaLayer2STGCHits,
1769 std::vector<int64_t> inputShape = {1,
static_cast<int64_t
>(input_features.size())};
1772 inputData[
"flatten_input"] = std::make_pair(
1773 inputShape, std::move(input_features)
1777 outputData[
"TightNNScore"] = std::make_pair(
1778 std::vector<int64_t>{1, 1}, std::vector<float>{}
1781 if (!
m_onnxTool->inference(inputData, outputData).isSuccess()) {
1785 const auto& variant = outputData[
"TightNNScore"].second;
1786 if (std::holds_alternative<std::vector<float>>(variant)) {
1787 const auto&
vec = std::get<std::vector<float>>(variant);
1798 ATH_MSG_DEBUG(
"TightNNScore for muon with pT " <<
mu.pt() <<
" GeV, eta " <<
mu.eta() <<
" is " <<
score);
◆ IdMsPt()
void CP::MuonSelectionTool::IdMsPt |
( |
const xAOD::Muon & |
muon, |
|
|
float & |
idPt, |
|
|
float & |
msPt |
|
) |
| const |
|
private |
Definition at line 381 of file MuonSelectionTool.cxx.
383 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
384 if (!idtrack || !metrack) idPt = mePt = -1.;
386 mePt = metrack->
pt();
387 idPt = idtrack->
pt();
389 if (!mePt_acc.isAvailable(
mu) || !idPt_acc.isAvailable(
mu)) {
391 <<
" q:" <<
mu.charge() <<
", author:" <<
mu.author()
392 <<
" is not decorated with calibrated momenta. Please fix");
393 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 64 of file MuonSelectionTool.cxx.
69 m_geoOnTheFly ?
ATH_MSG_INFO(
"Is Run-3 geometry: On-the-fly determination. THIS OPTION IS DEPRECATED AND WILL BE REMOVED SOON. Use IsRun3Geo property instead.")
81 "Not using allAuthors variable as currently missing in many derivations; LowPtEfficiency working point will always return "
82 "false, but this is expected at the moment. Have a look here: "
83 "https://twiki.cern.ch/twiki/bin/view/Atlas/MuonSelectionToolR21#New_LowPtEfficiency_working_poin");
87 ATH_MSG_INFO(
"You have opted to select only 3-station muons in the high-pT selection! "
88 <<
"Please feed 'HighPt3Layers' to the 'WorkingPoint' property to retrieve the appropriate scale-factors");
92 ATH_MSG_WARNING(
"No cut-based selection is defined for segment-tagged muons in the Low-pT working point. "
93 <<
"Please set UseMVALowPt=true if you want to try the UseSegmentTaggedLowPt=true option.");
97 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).");
98 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.");
103 m_acceptInfo.
addCut(
"IDHits",
"Selection of muons according to whether they passed the MCP ID Hit cuts");
104 m_acceptInfo.
addCut(
"Preselection",
"Selection of muons according to their type/author");
109 "Invalid quality (i.e. selection WP) set: "
111 <<
" - it must be an integer between 0 and 5! (0=Tight, 1=Medium, 2=Loose, 3=Veryloose, 4=HighPt, 5=LowPtEfficiency)");
112 return StatusCode::FAILURE;
115 ATH_MSG_ERROR(
"Cannot use lowPt working point if allAuthors is not available!");
116 return StatusCode::FAILURE;
119 if(m_caloScoreWP<1 || m_caloScoreWP>4){
120 ATH_MSG_FATAL(
"CaloScoreWP property must be set to 1, 2, 3 or 4");
121 return StatusCode::FAILURE;
125 ATH_MSG_INFO(
"Initialising tight working point histograms...");
126 std::string tightWP_rootFile_fullPath;
131 Form(
"MuonSelectorTools/%s/muonSelection_tightWPHisto.root",
m_calibration_version.value().c_str()));
134 ATH_MSG_INFO(
"Reading muon tight working point histograms from " << tightWP_rootFile_fullPath);
136 std::unique_ptr<TFile>
file(TFile::Open(tightWP_rootFile_fullPath.c_str(),
"READ"));
138 if (!
file->IsOpen()) {
139 ATH_MSG_ERROR(
"Cannot read tight working point file from " << tightWP_rootFile_fullPath);
140 return StatusCode::FAILURE;
154 ATH_MSG_INFO(
"Reading bad muon veto cut functions from " << BMVcutFile_fullPath);
156 std::unique_ptr<TFile> BMVfile(TFile::Open(BMVcutFile_fullPath.c_str(),
"READ"));
158 if (!BMVfile->IsOpen()) {
159 ATH_MSG_ERROR(
"Cannot read bad muon veto cut function file from " << BMVcutFile_fullPath);
160 return StatusCode::FAILURE;
170 return StatusCode::FAILURE;
181 auto make_mva_reader = [](TString
file_path) {
182 std::vector<std::string> mva_var_names{
"momentumBalanceSignificance",
183 "scatteringCurvatureSignificance",
184 "scatteringNeighbourSignificance",
186 "middleLargeHoles+middleSmallHoles",
187 "muonSegmentDeltaEta",
188 "muonSeg1ChamberIdx",
189 "muonSeg2ChamberIdx"};
190 std::unique_ptr<TMVA::Reader>
reader = std::make_unique<TMVA::Reader>(mva_var_names);
207 auto make_mva_reader_MuTagIMO = [](TString
file_path,
bool useSeg2ChamberIndex) {
208 std::vector<std::string> mva_var_names;
209 if (useSeg2ChamberIndex) mva_var_names.push_back(
"muonSeg2ChamberIndex");
210 mva_var_names.push_back(
"muonSeg1ChamberIndex");
211 mva_var_names.push_back(
"muonSeg1NPrecisionHits");
212 mva_var_names.push_back(
"muonSegmentDeltaEta");
213 mva_var_names.push_back(
"muonSeg1GlobalR");
214 mva_var_names.push_back(
"muonSeg1Chi2OverDoF");
215 mva_var_names.push_back(
"muonSCS");
217 std::unique_ptr<TMVA::Reader>
reader = std::make_unique<TMVA::Reader>(mva_var_names);
232 ATH_MSG_ERROR(
"Cannot calculate TightNNScore: ONNX tool not configured! "
233 "Please set the ORTInferenceTool property to a valid AthOnnx::OnnxRuntimeInferenceTool instance.");
234 return StatusCode::FAILURE;
239 }
else ATH_MSG_INFO(
"ONNX tool not configured — skipping retrieval.");
245 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 649 of file MuonSelectionTool.cxx.
653 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
659 bool IsBadMuon =
false;
660 if (idtrack && metrack && cbtrack) {
662 double qOverP_ID = idtrack->
qOverP();
664 double qOverP_ME = metrack->
qOverP();
666 double qOverP_CB = cbtrack->
qOverP();
679 double IdCbRatio = std::abs((qOverPerr_ID / qOverP_ID) / (qOverPerr_CB / qOverP_CB));
680 double MeCbRatio = std::abs((qOverPerr_ME / qOverP_ME) / (qOverPerr_CB / qOverP_CB));
681 IsBadMuon = (IdCbRatio < 0.8 || MeCbRatio < 0.8 || IsBadMuon);
685 double IdCbRatio = std::abs((qOverPerr_ID / qOverP_ID) / (qOverPerr_CB / qOverP_CB));
686 double MeCbRatio = std::abs((qOverPerr_ME / qOverP_ME) / (qOverPerr_CB / qOverP_CB));
687 IsBadMuon = (IdCbRatio < 0.8 || MeCbRatio < 0.8);
◆ isBEE()
bool CP::MuonSelectionTool::isBEE |
( |
const float |
eta, |
|
|
const float |
phi |
|
) |
| const |
Check if muon eta/phi falls in BEE chambers.
Definition at line 1624 of file MuonSelectionTool.cxx.
1625 static constexpr std::array<float, 2> BEE_eta{1.440, 1.692};
1626 static constexpr std::array<float, 8> BEE_phi{0.301, 0.478, 1.086, 1.263, 1.872, 2.049, 2.657, 2.834};
1628 float abs_eta = std::abs(eta);
1629 float abs_phi = std::abs(phi);
1631 if (abs_eta >= BEE_eta[0] && abs_eta <= BEE_eta[1]) {
1632 if ((abs_phi >= BEE_phi[0] && abs_phi <= BEE_phi[1]) || (abs_phi >= BEE_phi[2] && abs_phi <= BEE_phi[3]) ||
1633 (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 |
Check if muon eta/phi falls in BIS7/8 chambers.
Definition at line 1606 of file MuonSelectionTool.cxx.
1607 static constexpr std::array<float, 2> BIS78_eta{1.05, 1.3};
1608 static constexpr std::array<float, 8> BIS78_phi{0.21, 0.57, 1.00, 1.33, 1.78, 2.14, 2.57, 2.93};
1610 float abs_eta = std::abs(eta);
1611 float abs_phi = std::abs(phi);
1613 if (abs_eta >= BIS78_eta[0] && abs_eta <= BIS78_eta[1]) {
1614 if ((abs_phi >= BIS78_phi[0] && abs_phi <= BIS78_phi[1]) || (abs_phi >= BIS78_phi[2] && abs_phi <= BIS78_phi[3]) ||
1615 (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 |
Check if muon eta/phi falls in BMG chambers.
Definition at line 1642 of file MuonSelectionTool.cxx.
1643 static constexpr std::array<float, 6> BMG_eta{0.35, 0.47, 0.68, 0.80, 0.925, 1.04};
1644 static constexpr std::array<float, 4> BMG_phi{-1.93, -1.765, -1.38, -1.21};
1646 float abs_eta = std::abs(eta);
1648 if ((abs_eta >= BMG_eta[0] && abs_eta <= BMG_eta[1]) || (abs_eta >= BMG_eta[2] && abs_eta <= BMG_eta[3]) ||
1649 (abs_eta >= BMG_eta[4] && abs_eta <= BMG_eta[5])) {
1650 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 1221 of file MuonSelectionTool.cxx.
1224 if (std::abs(
mu.eta()) < 1.05) {
1234 double qOpRelResolution = std::hypot(
p1,
p2 *
mu.primaryTrackParticle()->pt() *
MeVtoGeV);
1236 double qOverPabs_unsmeared = std::abs(
mu.primaryTrackParticle()->definingParameters()[4]);
1237 double qOverPabs_smeared = 1.0 / (
mu.pt() * std::cosh(
mu.eta()));
1239 if ((qOverPabs_smeared - qOverPabs_unsmeared) / (qOpRelResolution * qOverPabs_unsmeared) <
1240 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 1297 of file MuonSelectionTool.cxx.
1305 int CaloMuonIDTag = -20;
1308 bool readID =
mu.parameter(CaloMuonIDTag, xAOD::Muon::CaloMuonIDTag);
1310 ATH_MSG_WARNING(
"Unable to read CaloMuonIDTag Quality information! Rejecting the CALO muon!");
1315 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 1116 of file MuonSelectionTool.cxx.
1120 double start_cut = 3.0;
1121 double end_cut = 1.6;
1122 double abs_eta = std::abs(
mu.eta());
1125 double p0(8.0),
p1(0.),
p2(0.);
1132 else if (abs_eta > 1.05 && abs_eta <= 1.3) {
1135 }
else if (abs_eta > 1.3 && abs_eta <= 1.7) {
1138 }
else if (abs_eta > 1.7 && abs_eta <= 2.0) {
1141 }
else if (abs_eta > 2.0) {
1152 else if (abs_eta > 1.05 && abs_eta <= 1.3) {
1155 }
else if (abs_eta > 1.3 && abs_eta <= 1.7) {
1158 }
else if (abs_eta > 1.7 && abs_eta <= 2.0) {
1161 }
else if (abs_eta > 2.0) {
1176 if (abs_eta > 1.05 && abs_eta < 1.3) {
1179 }
else if (abs_eta >= 1.3 && abs_eta < 1.7) {
1182 }
else if (abs_eta >= 1.7 && abs_eta < 2.0) {
1185 }
else if (abs_eta >= 2.0) {
1191 bool passErrorCutCB =
false;
1196 double qOverP_CB = cbtrack->
qOverP();
1202 double a = (end_cut - start_cut) / 4000.0;
1203 double b = end_cut -
a * 5000.0;
1204 double coefficient = (pt_CB > 1000.) ? (
a * pt_CB +
b) : start_cut;
1205 if (std::abs(qOverPerr_CB / qOverP_CB) < coefficient *
sigma) { passErrorCutCB =
true; }
1212 ATH_MSG_DEBUG(
"The current event is a MC event. Use bad muon veto mimic.");
1218 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.
Implements CP::IMuonSelectionTool.
Definition at line 938 of file MuonSelectionTool.cxx.
955 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - fail high-pT");
975 ATH_MSG_VERBOSE(
"passedHighPtCuts - No MS track available for muon. Using combined track.");
976 MS_track =
mu.trackParticle(xAOD::Muon::CombinedTrackParticle);
979 if (MS_track && CB_track) {
981 float phiMS = MS_track->
phi();
982 float etaCB = CB_track->
eta();
985 if (!
isRun3() && (std::abs(
etaMS) > 2.0 || std::abs(etaCB) > 2.0)) {
986 if (
summary.cscUnspoiledEtaHits == 0) {
993 if (!
isRun3() &&
mu.eta() < -1.899 && std::abs(
mu.phi()) < 0.211) {
994 ATH_MSG_VERBOSE(
"Muon is in eta/phi region vetoed due to disabled chambers in MC - fail high-pT");
999 if ((1.01 < std::abs(
etaMS) && std::abs(
etaMS) < 1.1) || (1.01 < std::abs(etaCB) && std::abs(etaCB) < 1.1)) {
1000 ATH_MSG_VERBOSE(
"Muon is in barrel/endcap overlap region - fail high-pT");
1030 if (
summary.nprecisionLayers < 4) {
1031 ATH_MSG_VERBOSE(
"Muon is in BEE eta/phi region and does not have 4 precision layers - fail high-pT");
1035 if (std::abs(etaCB) > 1.4) {
1039 if (
summary.nprecisionLayers < 4 && (
summary.extendedSmallHits > 0 ||
summary.extendedSmallHoles > 0)) {
1040 ATH_MSG_VERBOSE(
"Muon is in BEE eta/phi region and does not have 4 precision layers - fail high-pT");
1045 ATH_MSG_WARNING(
"passedHighPtCuts - MS or CB track missing in muon! Failing High-pT selection...");
1051 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
1056 if (std::abs(qOverPsignif) > 7) {
1068 if (std::abs(
mu.eta()) > 1.2 &&
summary.extendedSmallHits < 3 &&
summary.extendedLargeHits < 3) {
1092 if (
summary.nprecisionLayers < 3) {
1093 ATH_MSG_VERBOSE(
"Muon has less than 3 precision layers - fail high-pT");
1098 if (
summary.isSmallGoodSectors) {
1099 if (!(
summary.innerSmallHits > 2 &&
summary.middleSmallHits > 2 &&
1100 (
summary.outerSmallHits > 2 ||
summary.extendedSmallHits > 2))) {
1101 ATH_MSG_VERBOSE(
"Muon has small/large sectors overlap - fail high-pT");
1105 if (!(
summary.innerLargeHits > 2 &&
summary.middleLargeHits > 2 &&
1106 (
summary.outerLargeHits > 2 ||
summary.extendedLargeHits > 2))) {
1107 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.
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 614 of file MuonSelectionTool.cxx.
617 if (isLRTmuon.isAvailable(
mu)) {
618 if (isLRTmuon(
mu))
return true;
624 if(!patternAcc.isAvailable(*idtrack)) {
625 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.");
626 throw std::runtime_error(
"MuonSelectionTool() - isLRT decor and patternRecoInfo both unavailable for a muon.");
628 std::bitset<xAOD::NumberOfTrackRecoInfo> patternBitSet(patternAcc(*idtrack));
636 }
else if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
638 if (cbtrack && std::abs(cbtrack->
eta()) > 2.5) {
return true; }
641 if (
mu.trackParticle(xAOD::Muon::InnerDetectorTrackParticle))
642 return passedIDCuts(*
mu.trackParticle(xAOD::Muon::InnerDetectorTrackParticle));
643 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 1265 of file MuonSelectionTool.cxx.
1270 " !! Tool configured with some of the ID hits requirements changed... FOR DEVELOPMENT ONLY: muon efficiency SF won't be "
1286 const float abseta = std::abs(
track.eta());
1290 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 700 of file MuonSelectionTool.cxx.
705 ATH_MSG_VERBOSE(
"LowPt WP currently not supported for run3 if not in expert mode");
721 ATH_MSG_VERBOSE(
"Muon is not combined or segment-tagged - fail low-pT");
734 ATH_MSG_VERBOSE(
"Muon is neither MuGirl / MuidCo / MuTagIMO - fail low-pT");
753 ATH_MSG_VERBOSE(
"Not using MVA selection, failing low-pT selection due to medium requirement in forward region");
761 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - fail low-pT");
769 uint nStationsCut = (std::abs(
mu.eta()) > 1.3 && std::abs(
mu.eta()) < 1.55) ? 2 : 1;
770 if (
summary.nprecisionLayers < nStationsCut) {
771 ATH_MSG_VERBOSE(
"number of precision layers = " << (
int)
summary.nprecisionLayers <<
" is lower than cut value " << nStationsCut
772 <<
" - fail low-pT");
780 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 831 of file MuonSelectionTool.cxx.
834 ATH_MSG_VERBOSE(
"LowPt WP currently not supported for run3 if not in expert mode");
843 float momentumBalanceSig{-1}, CurvatureSig{-1}, energyLoss{-1}, muonSegmentDeltaEta{-1}, scatteringNeigbour{-1};
854 float seg1ChamberIdx{-1.}, seg2ChamberIdx{-1.}, middleHoles{-1.}, seg1NPrecisionHits{-1.}, seg1GlobalR{-1.}, seg1Chi2OverDoF{-1.};
859 ATH_MSG_WARNING(
"passedLowPtEfficiencyMVACut - found segment-tagged muon with no segments!");
862 seg1ChamberIdx = (!muonSegments.empty()) ?
toInt(muonSegments[0]->chamberIndex()) : -9;
863 seg2ChamberIdx = (muonSegments.size() > 1) ?
toInt(muonSegments[1]->chamberIndex()) : -9;
867 seg1NPrecisionHits = (!muonSegments.empty()) ? muonSegments[0]->nPrecisionHits() : -1;
868 seg1GlobalR = (!muonSegments.empty())
869 ? std::hypot(muonSegments[0]->
x(), muonSegments[0]->y(), muonSegments[0]->z())
871 seg1Chi2OverDoF = (!muonSegments.empty()) ? muonSegments[0]->
chiSquared() / muonSegments[0]->numberDoF() : -1;
880 std::vector<float> var_vector;
882 var_vector = {momentumBalanceSig, CurvatureSig, scatteringNeigbour, energyLoss,
883 middleHoles, muonSegmentDeltaEta, seg1ChamberIdx, seg2ChamberIdx};
885 if (std::abs(
mu.eta()) >= 1.3)
886 var_vector = {seg2ChamberIdx, seg1ChamberIdx, seg1NPrecisionHits, muonSegmentDeltaEta,
887 seg1GlobalR, seg1Chi2OverDoF, std::abs(CurvatureSig)};
889 var_vector = {seg1ChamberIdx, seg1NPrecisionHits, muonSegmentDeltaEta,
890 seg1GlobalR, seg1Chi2OverDoF, std::abs(CurvatureSig)};
895 if (eventInfo->eventNumber() % 2 == 1) {
905 if (std::abs(
mu.eta()) < 0.7)
907 else if (std::abs(
mu.eta()) < 1.3)
913 float BDTdiscriminant;
916 BDTdiscriminant = reader_MUID->EvaluateMVA(var_vector,
"BDTG");
918 BDTdiscriminant = reader_MUGIRL->EvaluateMVA(var_vector,
"BDTG");
920 BDTdiscriminant = reader_MUTAGIMO->EvaluateMVA(var_vector,
"BDT");
922 ATH_MSG_WARNING(
"Invalid author for low-pT MVA, failing selection...");
929 if (BDTdiscriminant > BDTcut) {
◆ passedMuonCuts()
Returns true if the muon passes a standardized loose preselection.
Implements CP::IMuonSelectionTool.
Definition at line 1246 of file MuonSelectionTool.cxx.
1250 if (
mu.muonType() == xAOD::Muon::CaloTagged && std::abs(
mu.eta()) < 0.105)
1257 if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
1259 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 1348 of file MuonSelectionTool.cxx.
1351 ATH_MSG_VERBOSE(
"for run3, Tight WP is only supported when ExcludeNSWFromPrecisionLayers=False and RecalcPrecisionLayerswNSW=True");
1354 float symmetric_eta = std::abs(
mu.eta());
1358 if (pt < 4.0 || symmetric_eta >= 2.5)
return false;
1359 ATH_MSG_VERBOSE(
"Muon is passing tight WP kinematic cuts with pT,eta " <<
mu.pt() <<
" , " <<
mu.eta());
1366 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a low pt muon with (pt,eta) ( " <<
pt <<
" , " <<
mu.eta() <<
" ) ");
1368 ATH_MSG_VERBOSE(
"Momentum significance value " << oneOverPSig <<
", required to be less than " << qOverPCut);
1370 if (
rho > rhoCut)
return false;
1373 if (oneOverPSig > qOverPCut)
return false;
1374 ATH_MSG_VERBOSE(
"Muon passed tight WP, low pT momentum significance cut");
1382 else if (
pt < 100.0) {
1385 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a medium pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
1389 if (
rho > rhoCut)
return false;
1397 else if (
pt < 500.0) {
1399 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a high pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
1402 ATH_MSG_VERBOSE(
"Rho value " <<
rho <<
", required to be less than " << rhoCut <<
" unless -1, in which no cut is applied");
1404 if (rhoCut < 0.0)
return true;
1405 if (
rho > rhoCut)
return false;
1412 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, LundVariablesTool, 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, LundVariablesTool, 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 |
Returns q/p significance of the muon (see definition in https://cds.cern.ch/record/2665711 )
Definition at line 400 of file MuonSelectionTool.cxx.
406 <<
" Momentum dependent cuts are disabled. Return 0.");
410 const xAOD::TrackParticle* metrack =
muon.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
411 if (!idtrack || !metrack) {
412 ATH_MSG_VERBOSE(
"No ID / MS track. Return dummy large value of 1 mio");
415 float mePt{-1.}, idPt{-1.};
422 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 |
|
private |
Definition at line 1473 of file MuonSelectionTool.cxx.
1475 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve parameter " << param
1476 <<
" for muon with pT:" <<
muon.pt() *
MeVtoGeV <<
", eta:" <<
muon.eta() <<
", phi: " <<
muon.phi()
1477 <<
", q:" <<
muon.charge() <<
", author: " <<
muon.author());
1478 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 |
|
inline |
helper function to retrieve a hitSummary value
Definition at line 152 of file MuonSelectionTool.h.
154 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve summary value " <<
type);
155 throw std::runtime_error(
"MuonSelectorTool summary retrieval failed");
◆ rhoPrime()
◆ 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 236 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_calculateTightNNScore
Gaudi::Property<bool> CP::MuonSelectionTool::m_calculateTightNNScore {this, "CalculateTightNNScore", false} |
|
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 215 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 208 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 222 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 224 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 226 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 218 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 211 of file MuonSelectionTool.h.
◆ m_onnxTool
◆ 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_useBEEBISInHighPtRun3
Gaudi::Property<bool> CP::MuonSelectionTool::m_useBEEBISInHighPtRun3 {this, "UseBEEBISInHighPtRun3", true, "Include BEE and BIS7/8 in high-pT WP in Run3"} |
|
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
@ phiLayer2STGCHits
number of phi hits in the second STGC trigger layer (STGC2)
@ numberOfPrecisionHoleLayers
layers with holes AND no hits [unit8_t].
Helper class to provide type-safe access to aux data.
float charge() const
Returns the charge.
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)
float chiSquared() const
Returns the of the overall track fit.
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
std::vector< size_t > vec
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
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
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
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
std::map< std::string, InferenceData > OutputDataMap
@ 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
constexpr int toInt(const ParamDefs p)
@ 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].
float numberDoF() const
Returns the number of degrees of freedom of the overall track or vertex fit as float.
@ STACO
Tracks produced by STACO.
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
@ phiLayer1STGCHits
number of phi hits in the first STGC trigger layer (STGC1)
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
constexpr int pow(int base, int exp) noexcept
std::map< std::string, InferenceData > InputDataMap
float theta() const
Returns the parameter, which has range 0 to .
@ spectrometerFieldIntegral
Discriminators and further variables.
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].