 |
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"} |
| |
| Gaudi::Property< int > | m_expertMode_RunNumber {this, "expertMode_RunNumber", 0, "Expert only option. Overwrites RunNumber"} |
| |
| Gaudi::Property< unsigned long long > | m_expertMode_EvtNumber {this, "expertMode_EvtNumber", 0, "Expert only option. Overwrites EventNumber"} |
| |
| 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 1420 of file MuonSelectionTool.cxx.
1443 if (std::abs(
muon.eta()) > 2.0) {
1444 ATH_MSG_VERBOSE(
"Recalculating number of precision layers for combined muon");
1453 + (
summary.extendedSmallHits > 2 ||
summary.extendedLargeHits > 2);
1457 if (!eta1stgchits_acc.isAvailable(
muon) || !eta2stgchits_acc.isAvailable(
muon) || !mmhits_acc.isAvailable(
muon)) {
1458 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve NSW hits!"
1459 <<
" (Please use DxAODs with p-tags >= p5834 OR set ExcludeNSWFromPrecisionLayers to True (tests only)");
1460 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 1482 of file MuonSelectionTool.cxx.
1492 if (
summary.nprecisionLayers == 2)
1493 return ResolutionCategory::highPt2station;
1501 ATH_MSG_VERBOSE(
"getResolutionCategory - No MS track available for muon. Using combined track.");
1502 MS_track =
mu.trackParticle(xAOD::Muon::CombinedTrackParticle);
1506 const float etaMS = MS_track->
eta();
1507 const float etaCB = CB_track->
eta();
1508 const float phiMS = MS_track->
phi();
1513 category = ResolutionCategory::missingInner;
1516 category = ResolutionCategory::missingMiddle;
1520 category = ResolutionCategory::missingOuter;
1522 if (!
isRun3() && (std::abs(
etaMS) > 2.0 || std::abs(etaCB) > 2.0) &&
summary.cscUnspoiledEtaHits == 0)
1523 category = ResolutionCategory::spoiledCSC;
1525 if ((1.01 < std::abs(
etaMS) && std::abs(
etaMS) < 1.1) || (1.01 < std::abs(etaCB) && std::abs(etaCB) < 1.1))
1526 category = ResolutionCategory::BEoverlap;
1531 if (
isBEE(
etaMS, phiMS) || (std::abs(etaCB) > 1.4 && (
summary.extendedSmallHits > 0 ||
summary.extendedSmallHoles > 0))) {
1533 category = ResolutionCategory::missingBEE;
1535 if (
summary.extendedSmallHits >= 3 &&
summary.outerSmallHits < 3)
category = ResolutionCategory::missingOuter;
1537 if (!
summary.isSmallGoodSectors)
1541 if (
summary.nprecisionLayers == 1)
category = ResolutionCategory::oneStation;
◆ getRunNumber()
| unsigned int CP::MuonSelectionTool::getRunNumber |
( |
bool |
needOnlyCorrectYear = false | ) |
const |
|
private |
Definition at line 1548 of file MuonSelectionTool.cxx.
1556 else runNumber = eventInfo->runNumber();
1560 ATH_MSG_DEBUG(
"The current event is a data event. Return runNumber.");
1566 static std::atomic<bool> issuedWarningPRW{
false};
1567 if (acc_rnd.isAvailable(*eventInfo)) {
1568 unsigned int rn = acc_rnd(*eventInfo);
1569 if (
rn != 0)
return acc_rnd(*eventInfo);
1571 if (!issuedWarningPRW) {
1573 issuedWarningPRW =
true;
1578 if (needOnlyCorrectYear) {
1580 ATH_MSG_DEBUG(
"Random run number not available and this is mc16a or mc20a, returning dummy 2016 run number.");
1584 ATH_MSG_DEBUG(
"Random run number not available and this is mc16d or mc20d, returning dummy 2017 run number.");
1588 ATH_MSG_DEBUG(
"Random run number not available and this is mc16e or mc20e, returning dummy 2018 run number.");
1592 ATH_MSG_DEBUG(
"Random run number not available and this is mc21/mc23, for the time being we're returing a dummy run number.");
1599 ATH_MSG_FATAL(
"Random run number not available, fallback option of using runNumber failed since "<<
runNumber<<
" cannot be recognised");
1600 throw std::runtime_error(
"MuonSelectionTool() - need RandomRunNumber decoration by the PileupReweightingTool");
1603 ATH_MSG_FATAL(
"Failed to find the RandomRunNumber decoration by the PileupReweightingTool");
1604 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 810 of file MuonSelectionTool.cxx.
811 std::vector<const xAOD::MuonSegment*> segments_sorted;
812 segments_sorted.reserve(
mu.nMuonSegments());
814 for (
unsigned int i = 0;
i <
mu.nMuonSegments();
i++) {
815 if (!
mu.muonSegment(
i))
816 ATH_MSG_WARNING(
"The muon reports more segments than are available. Please report this to the muon software community!");
818 segments_sorted.push_back(
mu.muonSegment(
i));
821 std::sort(segments_sorted.begin(), segments_sorted.end(), chamberIndexCompare);
823 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 1659 of file MuonSelectionTool.cxx.
1662 ATH_MSG_ERROR(
"TightNNScore calculation is disabled. Please set the property CalculateTightNNScore to true.");
1663 throw std::runtime_error(
"cannot calculate TightNNScore");
1668 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
1669 if(!idtrack || !metrack)
return -999;
1673 if (std::abs(
mu.eta())>2.5)
return -999;
1674 if(
mu.pt()<4000.)
return -999;
1676 std::vector<float> input_features;
1678 int mu_author=
mu.author();
1680 float mu_scatteringCurvatureSignificance=0.;
1682 float mu_scatteringNeighbourSignificance=0.;
1684 float mu_momentumBalanceSignificance=0.;
1687 float mu_reducedChi2=
mu.primaryTrackParticle()->chiSquared() /
mu.primaryTrackParticle()->numberDoF();
1690 float mu_spectrometerFieldIntegral=0.;
1692 float mu_segmentDeltaEta=0;
1694 uint8_t mu_numberOfPixelHits=0;
1696 uint8_t mu_numberOfPixelDeadSensors=0;
1713 input_features = {(
float)mu_author,
1715 mu_scatteringCurvatureSignificance,
1716 mu_scatteringNeighbourSignificance,
1717 mu_momentumBalanceSignificance,
1718 mu_qOverPSignificance,
1722 mu_spectrometerFieldIntegral,
1724 (
float)mu_numberOfPixelHits,
1725 (
float)mu_numberOfPixelDeadSensors,
1726 (
float)mu_innerLargeHits,
1727 (
float)mu_innerSmallHits,
1728 (
float)mu_middleLargeHits,
1729 (
float)mu_middleSmallHits,
1730 (
float)mu_outerLargeHits,
1731 (
float)mu_outerSmallHits};
1735 uint8_t mu_phiLayer1STGCHits=0;
1737 uint8_t mu_phiLayer2STGCHits=0;
1739 uint8_t mu_etaLayer1STGCHits=0;
1741 uint8_t mu_etaLayer2STGCHits=0;
1745 input_features = {(
float)mu_author,
1747 mu_scatteringCurvatureSignificance,
1748 mu_scatteringNeighbourSignificance,
1749 mu_momentumBalanceSignificance,
1750 mu_qOverPSignificance,
1754 mu_spectrometerFieldIntegral,
1756 (
float)mu_numberOfPixelHits,
1757 (
float)mu_numberOfPixelDeadSensors,
1758 (
float)mu_innerLargeHits,
1759 (
float)mu_innerSmallHits,
1760 (
float)mu_middleLargeHits,
1761 (
float)mu_middleSmallHits,
1762 (
float)mu_outerLargeHits,
1763 (
float)mu_outerSmallHits,
1764 (
float)mu_phiLayer1STGCHits,
1765 (
float)mu_phiLayer2STGCHits,
1766 (
float)mu_etaLayer1STGCHits,
1767 (
float)mu_etaLayer2STGCHits,
1772 std::vector<int64_t> inputShape = {1,
static_cast<int64_t
>(input_features.size())};
1775 inputData[
"flatten_input"] = std::make_pair(
1776 inputShape, std::move(input_features)
1780 outputData[
"TightNNScore"] = std::make_pair(
1781 std::vector<int64_t>{1, 1}, std::vector<float>{}
1784 if (!
m_onnxTool->inference(inputData, outputData).isSuccess()) {
1788 const auto& variant = outputData[
"TightNNScore"].second;
1789 if (std::holds_alternative<std::vector<float>>(variant)) {
1790 const auto&
vec = std::get<std::vector<float>>(variant);
1801 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 1627 of file MuonSelectionTool.cxx.
1628 static constexpr std::array<float, 2> BEE_eta{1.440, 1.692};
1629 static constexpr std::array<float, 8> BEE_phi{0.301, 0.478, 1.086, 1.263, 1.872, 2.049, 2.657, 2.834};
1631 float abs_eta = std::abs(
eta);
1632 float abs_phi = std::abs(
phi);
1634 if (abs_eta >= BEE_eta[0] && abs_eta <= BEE_eta[1]) {
1635 if ((abs_phi >= BEE_phi[0] && abs_phi <= BEE_phi[1]) || (abs_phi >= BEE_phi[2] && abs_phi <= BEE_phi[3]) ||
1636 (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 1609 of file MuonSelectionTool.cxx.
1610 static constexpr std::array<float, 2> BIS78_eta{1.05, 1.3};
1611 static constexpr std::array<float, 8> BIS78_phi{0.21, 0.57, 1.00, 1.33, 1.78, 2.14, 2.57, 2.93};
1613 float abs_eta = std::abs(
eta);
1614 float abs_phi = std::abs(
phi);
1616 if (abs_eta >= BIS78_eta[0] && abs_eta <= BIS78_eta[1]) {
1617 if ((abs_phi >= BIS78_phi[0] && abs_phi <= BIS78_phi[1]) || (abs_phi >= BIS78_phi[2] && abs_phi <= BIS78_phi[3]) ||
1618 (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 1645 of file MuonSelectionTool.cxx.
1646 static constexpr std::array<float, 6> BMG_eta{0.35, 0.47, 0.68, 0.80, 0.925, 1.04};
1647 static constexpr std::array<float, 4> BMG_phi{-1.93, -1.765, -1.38, -1.21};
1649 float abs_eta = std::abs(
eta);
1651 if ((abs_eta >= BMG_eta[0] && abs_eta <= BMG_eta[1]) || (abs_eta >= BMG_eta[2] && abs_eta <= BMG_eta[3]) ||
1652 (abs_eta >= BMG_eta[4] && abs_eta <= BMG_eta[5])) {
1653 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 1220 of file MuonSelectionTool.cxx.
1223 if (std::abs(
mu.eta()) < 1.05) {
1233 double qOpRelResolution = std::hypot(
p1,
p2 *
mu.primaryTrackParticle()->pt() *
MeVtoGeV);
1235 double qOverPabs_unsmeared = std::abs(
mu.primaryTrackParticle()->definingParameters()[4]);
1236 double qOverPabs_smeared = 1.0 / (
mu.pt() * std::cosh(
mu.eta()));
1238 if ((qOverPabs_smeared - qOverPabs_unsmeared) / (qOpRelResolution * qOverPabs_unsmeared) <
1239 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 1296 of file MuonSelectionTool.cxx.
1304 int CaloMuonIDTag = -20;
1307 bool readID =
mu.parameter(CaloMuonIDTag, xAOD::Muon::CaloMuonIDTag);
1309 ATH_MSG_WARNING(
"Unable to read CaloMuonIDTag Quality information! Rejecting the CALO muon!");
1314 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 1115 of file MuonSelectionTool.cxx.
1119 double start_cut = 3.0;
1120 double end_cut = 1.6;
1121 double abs_eta = std::abs(
mu.eta());
1124 double p0(8.0),
p1(0.),
p2(0.);
1131 else if (abs_eta > 1.05 && abs_eta <= 1.3) {
1134 }
else if (abs_eta > 1.3 && abs_eta <= 1.7) {
1137 }
else if (abs_eta > 1.7 && abs_eta <= 2.0) {
1140 }
else if (abs_eta > 2.0) {
1151 else if (abs_eta > 1.05 && abs_eta <= 1.3) {
1154 }
else if (abs_eta > 1.3 && abs_eta <= 1.7) {
1157 }
else if (abs_eta > 1.7 && abs_eta <= 2.0) {
1160 }
else if (abs_eta > 2.0) {
1175 if (abs_eta > 1.05 && abs_eta < 1.3) {
1178 }
else if (abs_eta >= 1.3 && abs_eta < 1.7) {
1181 }
else if (abs_eta >= 1.7 && abs_eta < 2.0) {
1184 }
else if (abs_eta >= 2.0) {
1190 bool passErrorCutCB =
false;
1195 double qOverP_CB = cbtrack->
qOverP();
1201 double a = (end_cut - start_cut) / 4000.0;
1202 double b = end_cut -
a * 5000.0;
1203 double coefficient = (pt_CB > 1000.) ? (
a * pt_CB +
b) : start_cut;
1204 if (std::abs(qOverPerr_CB / qOverP_CB) < coefficient *
sigma) { passErrorCutCB =
true; }
1211 ATH_MSG_DEBUG(
"The current event is a MC event. Use bad muon veto mimic.");
1217 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 937 of file MuonSelectionTool.cxx.
954 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - fail high-pT");
974 ATH_MSG_VERBOSE(
"passedHighPtCuts - No MS track available for muon. Using combined track.");
975 MS_track =
mu.trackParticle(xAOD::Muon::CombinedTrackParticle);
978 if (MS_track && CB_track) {
980 float phiMS = MS_track->
phi();
981 float etaCB = CB_track->
eta();
984 if (!
isRun3() && (std::abs(
etaMS) > 2.0 || std::abs(etaCB) > 2.0)) {
985 if (
summary.cscUnspoiledEtaHits == 0) {
992 if (!
isRun3() &&
mu.eta() < -1.899 && std::abs(
mu.phi()) < 0.211) {
993 ATH_MSG_VERBOSE(
"Muon is in eta/phi region vetoed due to disabled chambers in MC - fail high-pT");
998 if ((1.01 < std::abs(
etaMS) && std::abs(
etaMS) < 1.1) || (1.01 < std::abs(etaCB) && std::abs(etaCB) < 1.1)) {
999 ATH_MSG_VERBOSE(
"Muon is in barrel/endcap overlap region - fail high-pT");
1029 if (
summary.nprecisionLayers < 4) {
1030 ATH_MSG_VERBOSE(
"Muon is in BEE eta/phi region and does not have 4 precision layers - fail high-pT");
1034 if (std::abs(etaCB) > 1.4) {
1038 if (
summary.nprecisionLayers < 4 && (
summary.extendedSmallHits > 0 ||
summary.extendedSmallHoles > 0)) {
1039 ATH_MSG_VERBOSE(
"Muon is in BEE eta/phi region and does not have 4 precision layers - fail high-pT");
1044 ATH_MSG_WARNING(
"passedHighPtCuts - MS or CB track missing in muon! Failing High-pT selection...");
1050 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
1055 if (std::abs(qOverPsignif) > 7) {
1067 if (std::abs(
mu.eta()) > 1.2 &&
summary.extendedSmallHits < 3 &&
summary.extendedLargeHits < 3) {
1091 if (
summary.nprecisionLayers < 3) {
1092 ATH_MSG_VERBOSE(
"Muon has less than 3 precision layers - fail high-pT");
1097 if (
summary.isSmallGoodSectors) {
1098 if (!(
summary.innerSmallHits > 2 &&
summary.middleSmallHits > 2 &&
1099 (
summary.outerSmallHits > 2 ||
summary.extendedSmallHits > 2))) {
1100 ATH_MSG_VERBOSE(
"Muon has small/large sectors overlap - fail high-pT");
1104 if (!(
summary.innerLargeHits > 2 &&
summary.middleLargeHits > 2 &&
1105 (
summary.outerLargeHits > 2 ||
summary.extendedLargeHits > 2))) {
1106 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 1264 of file MuonSelectionTool.cxx.
1269 " !! Tool configured with some of the ID hits requirements changed... FOR DEVELOPMENT ONLY: muon efficiency SF won't be "
1285 const float abseta = std::abs(
track.eta());
1289 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.
716 ATH_MSG_VERBOSE(
"Muon is not combined or segment-tagged - fail low-pT");
729 ATH_MSG_VERBOSE(
"Muon is neither MuGirl / MuidCo / MuTagIMO - fail low-pT");
748 ATH_MSG_VERBOSE(
"Not using MVA selection, failing low-pT selection due to medium requirement in forward region");
756 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - fail low-pT");
764 uint nStationsCut = (std::abs(
mu.eta()) > 1.3 && std::abs(
mu.eta()) < 1.55) ? 2 : 1;
765 if (
summary.nprecisionLayers < nStationsCut) {
766 ATH_MSG_VERBOSE(
"number of precision layers = " << (
int)
summary.nprecisionLayers <<
" is lower than cut value " << nStationsCut
767 <<
" - fail low-pT");
775 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 826 of file MuonSelectionTool.cxx.
829 ATH_MSG_VERBOSE(
"LowPt WP currently not supported for run3 if not in expert mode");
838 float momentumBalanceSig{-1}, CurvatureSig{-1}, energyLoss{-1}, muonSegmentDeltaEta{-1}, scatteringNeigbour{-1};
849 float seg1ChamberIdx{-1.}, seg2ChamberIdx{-1.}, middleHoles{-1.}, seg1NPrecisionHits{-1.}, seg1GlobalR{-1.}, seg1Chi2OverDoF{-1.};
854 ATH_MSG_WARNING(
"passedLowPtEfficiencyMVACut - found segment-tagged muon with no segments!");
857 seg1ChamberIdx = (!muonSegments.empty()) ?
toInt(muonSegments[0]->chamberIndex()) : -9;
858 seg2ChamberIdx = (muonSegments.size() > 1) ?
toInt(muonSegments[1]->chamberIndex()) : -9;
862 seg1NPrecisionHits = (!muonSegments.empty()) ? muonSegments[0]->nPrecisionHits() : -1;
863 seg1GlobalR = (!muonSegments.empty())
864 ? std::hypot(muonSegments[0]->
x(), muonSegments[0]->y(), muonSegments[0]->z())
866 seg1Chi2OverDoF = (!muonSegments.empty()) ? muonSegments[0]->
chiSquared() / muonSegments[0]->numberDoF() : -1;
879 std::vector<float> var_vector;
881 var_vector = {momentumBalanceSig, CurvatureSig, scatteringNeigbour, energyLoss,
882 middleHoles, muonSegmentDeltaEta, seg1ChamberIdx, seg2ChamberIdx};
884 if (std::abs(
mu.eta()) >= 1.3)
885 var_vector = {seg2ChamberIdx, seg1ChamberIdx, seg1NPrecisionHits, muonSegmentDeltaEta,
886 seg1GlobalR, seg1Chi2OverDoF, std::abs(CurvatureSig)};
888 var_vector = {seg1ChamberIdx, seg1NPrecisionHits, muonSegmentDeltaEta,
889 seg1GlobalR, seg1Chi2OverDoF, std::abs(CurvatureSig)};
904 if (std::abs(
mu.eta()) < 0.7)
906 else if (std::abs(
mu.eta()) < 1.3)
912 float BDTdiscriminant;
915 BDTdiscriminant = reader_MUID->EvaluateMVA(var_vector,
"BDTG");
917 BDTdiscriminant = reader_MUGIRL->EvaluateMVA(var_vector,
"BDTG");
919 BDTdiscriminant = reader_MUTAGIMO->EvaluateMVA(var_vector,
"BDT");
921 ATH_MSG_WARNING(
"Invalid author for low-pT MVA, failing selection...");
928 if (BDTdiscriminant > BDTcut) {
◆ passedMuonCuts()
Returns true if the muon passes a standardized loose preselection.
Implements CP::IMuonSelectionTool.
Definition at line 1245 of file MuonSelectionTool.cxx.
1249 if (
mu.muonType() == xAOD::Muon::CaloTagged && std::abs(
mu.eta()) < 0.105)
1256 if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
1258 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 1347 of file MuonSelectionTool.cxx.
1350 ATH_MSG_VERBOSE(
"for run3, Tight WP is only supported when ExcludeNSWFromPrecisionLayers=False and RecalcPrecisionLayerswNSW=True");
1353 float symmetric_eta = std::abs(
mu.eta());
1357 if (pt < 4.0 || symmetric_eta >= 2.5)
return false;
1358 ATH_MSG_VERBOSE(
"Muon is passing tight WP kinematic cuts with pT,eta " <<
mu.pt() <<
" , " <<
mu.eta());
1365 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a low pt muon with (pt,eta) ( " <<
pt <<
" , " <<
mu.eta() <<
" ) ");
1367 ATH_MSG_VERBOSE(
"Momentum significance value " << oneOverPSig <<
", required to be less than " << qOverPCut);
1369 if (
rho > rhoCut)
return false;
1372 if (oneOverPSig > qOverPCut)
return false;
1373 ATH_MSG_VERBOSE(
"Muon passed tight WP, low pT momentum significance cut");
1381 else if (
pt < 100.0) {
1384 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a medium pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
1388 if (
rho > rhoCut)
return false;
1396 else if (
pt < 500.0) {
1398 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a high pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
1401 ATH_MSG_VERBOSE(
"Rho value " <<
rho <<
", required to be less than " << rhoCut <<
" unless -1, in which no cut is applied");
1403 if (rhoCut < 0.0)
return true;
1404 if (
rho > rhoCut)
return false;
1411 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 1472 of file MuonSelectionTool.cxx.
1474 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve parameter " << param
1475 <<
" for muon with pT:" <<
muon.pt() *
MeVtoGeV <<
", eta:" <<
muon.eta() <<
", phi: " <<
muon.phi()
1476 <<
", q:" <<
muon.charge() <<
", author: " <<
muon.author());
1477 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 239 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_expertMode_EvtNumber
| Gaudi::Property<unsigned long long> CP::MuonSelectionTool::m_expertMode_EvtNumber {this, "expertMode_EvtNumber", 0, "Expert only option. Overwrites EventNumber"} |
|
private |
◆ m_expertMode_RunNumber
| Gaudi::Property<int> CP::MuonSelectionTool::m_expertMode_RunNumber {this, "expertMode_RunNumber", 0, "Expert only option. Overwrites RunNumber"} |
|
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 218 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 211 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 225 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 227 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 229 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 221 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 214 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].
@ phiLayer2STGCHits
number of phi hits in the second STGC trigger layer (STGC2)
@ 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
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
@ 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 .)
constexpr int toInt(const EnumType enumVal)
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].