|
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 void | print () const =0 |
| Print the state of the tool. More...
|
|
virtual void | print () const |
| Print the state of the tool. More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
virtual StatusCode | initialize () override |
| Function initialising the tool. More...
|
|
|
virtual const asg::AcceptInfo & | getAcceptInfo () const override |
| Get an object describing the "selection steps" of the tool. More...
|
|
virtual asg::AcceptData | accept (const xAOD::IParticle *p) const override |
| Get the decision using a generic IParticle pointer. More...
|
|
|
virtual asg::AcceptData | accept (const xAOD::Muon &mu) const override |
| Get the decision for a specific Muon object. More...
|
|
virtual void | setPassesIDCuts (xAOD::Muon &) const override |
| set the passes ID cuts variable of the muon More...
|
|
virtual void | 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 > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
asg::AcceptInfo | m_acceptInfo |
| Store selection information. More...
|
|
Gaudi::Property< double > | m_maxEta {this, "MaxEta", 2.7, "Maximum eta range to select the muons"} |
|
Gaudi::Property< int > | m_quality {this, "MuQuality", 1,"Quality to select. Values correspond to 0=Tight, 1=Medium, 2=Loose, 3=VeryLoose (only for debug, not supported), 4=HighPt, 5=LowPtEfficiency"} |
|
Gaudi::Property< bool > | m_toroidOff {this, "ToroidOff", false, "Run the tool in Toroid off setup"} |
|
Gaudi::Property< bool > | m_isRun3 {this, "IsRun3Geo", false, "Switch to toggle the run 2 & run 3 geometry cuts. The tool will throw an exception if the run number does not match the expectations later"} |
|
Gaudi::Property< bool > | m_excludeNSWFromPrecisionLayers {this, "ExcludeNSWFromPrecisionLayers", false, "Cut on the nprecisionlayers ignoring the NSW"} |
|
Gaudi::Property< bool > | m_recalcPrecisionLayerswNSW {this, "RecalcPrecisionLayerswNSW", true, "Recalculate nprecisionlayers with internal criteria for NSW"} |
|
Gaudi::Property< bool > | m_useCaloScore {this, "UseCaloScore", true, "Use CaloScore for calo-tags in the Loose working point. False will revert back to CaloMuonIDTag (not recommended in Rel.22)"} |
|
Gaudi::Property< int > | m_caloScoreWP {this, "CaloScoreWP", 4,"Currently there are 4 CaloScore WPs for testing; WP4 is the recommended one"} |
|
Gaudi::Property< bool > | m_useLRT {this, "UseLRT", false, "Enable support for LRT muons"} |
|
Gaudi::Property< bool > | m_turnOffMomCorr {this, "TurnOffMomCorr", false} |
|
Gaudi::Property< bool > | m_disablePtCuts {this, "DisablePtCuts", false} |
|
Gaudi::Property< bool > | m_developMode {this, "ExpertDevelopMode", false} |
|
Gaudi::Property< bool > | m_TrtCutOff {this, "TrtCutOff", true} |
|
Gaudi::Property< bool > | m_SctCutOff {this, "SctCutOff", false} |
|
Gaudi::Property< bool > | m_PixCutOff {this, "PixCutOff", false} |
|
Gaudi::Property< bool > | m_SiHolesCutOff {this, "SiHolesCutOff", false} |
|
Gaudi::Property< bool > | m_useAllAuthors {this, "UseAllAuthors", true} |
|
Gaudi::Property< bool > | m_use2stationMuonsHighPt {this, "Use2stationMuonsHighPt", true, "for users of high-pT working point to choose whether to include 'safe' 2-station muons"} |
|
Gaudi::Property< bool > | m_useMVALowPt {this, "UseMVALowPt", false, "for users of low-pT working point to choose whether to use MVA and whether to include MuTagIMO muons. Not yet supported in release 22, crrently only for development studies."} |
|
Gaudi::Property< bool > | m_useSegmentTaggedLowPt {this, "UseSegmentTaggedLowPt", false, "Use MVA low-pt WP. In development phase"} |
|
Gaudi::Property< bool > | m_geoOnTheFly {this, "AllowSettingGeometryOnTheFly", false,"avoids crash if run2/run3 geo is wrongly set"} |
|
Gaudi::Property< bool > | m_doBadMuonVetoMimic {this, "DoBadMuonVetoMimic", false} |
|
Gaudi::Property< bool > | m_allowComm {this, "AcceptCommChain", true, "Accepts muons from the EMEO chain if set to true"} |
|
Gaudi::Property< bool > | m_useBEEBISInHighPtRun3 {this, "UseBEEBISInHighPtRun3", false, "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 |
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
Implementation of the muon selector tool.
Example implementation of how an object selector tool should look according to the TF3 recommendations.
- Author
- Attila Krasznahorkay Attil.nosp@m.a.Kr.nosp@m.aszna.nosp@m.hork.nosp@m.ay@ce.nosp@m.rn.c.nosp@m.h
- Revision
- 299883
- Date
- 2014-03-28 18:34:16 +0100 (Fri, 28 Mar 2014)
Definition at line 31 of file MuonSelectionTool.h.
◆ StoreGateSvc_t
◆ ResolutionCategory
Declare the interface that the class provides.
Enum for resolution categories, the "merged" categories Zero to Four group together categories with similar resolution
Enumerator |
---|
unclassified | |
missingInner | |
missingMiddle | |
missingOuter | |
highPt2station | |
highPt | |
spoiledCSC | |
BEoverlap | |
BIS78 | |
missingBEE | |
oneStation | |
CategoryZero | |
CategoryOne | |
CategoryTwo | |
CategoryThree | |
CategoryFour | |
Definition at line 31 of file IMuonSelectionTool.h.
◆ MuonSelectionTool()
CP::MuonSelectionTool::MuonSelectionTool |
( |
const std::string & |
name = "MuonSelection" | ) |
|
◆ ~MuonSelectionTool()
CP::MuonSelectionTool::~MuonSelectionTool |
( |
| ) |
|
|
virtualdefault |
◆ accept() [1/2]
◆ accept() [2/2]
Get the decision for a specific Muon object.
Implements CP::IMuonSelectionTool.
Definition at line 299 of file MuonSelectionTool.cxx.
305 else if (
mu.muonType() == xAOD::Muon::MuonStandAlone)
307 else if (
mu.muonType() == xAOD::Muon::SegmentTagged)
309 else if (
mu.muonType() == xAOD::Muon::CaloTagged)
311 else if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon)
326 acceptData.setCutResult(
"Eta",
true);
331 acceptData.setCutResult(
"IDHits", passIDCuts);
336 acceptData.setCutResult(
"Preselection", passMuonCuts);
338 if (!passIDCuts || !passMuonCuts) {
return acceptData; }
342 bool thisMu_highpt =
false;
344 bool thisMu_lowptE =
false;
347 ATH_MSG_VERBOSE(
"Muon quality: " << thisMu_quality <<
" passes HighPt: " << thisMu_highpt
348 <<
" passes LowPtEfficiency: " << thisMu_lowptE);
349 if (m_quality < 4 && thisMu_quality >
m_quality) {
return acceptData; }
350 if (
m_quality == 4 && !thisMu_highpt) {
return acceptData; }
351 if (
m_quality == 5 && !thisMu_lowptE) {
return acceptData; }
352 acceptData.setCutResult(
"Quality",
true);
◆ checkSanity()
void CP::MuonSelectionTool::checkSanity |
( |
| ) |
const |
|
private |
Definition at line 270 of file MuonSelectionTool.cxx.
272 static std::atomic<bool> checkDone{
false};
280 <<
" while on-the fly check for runNumber "<<
getRunNumber(
true)<<
" indicates isRun3Geo="<<
isRun3(
true));
286 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");
290 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 1399 of file MuonSelectionTool.cxx.
1422 if (std::abs(
muon.eta()) > 2.0) {
1423 ATH_MSG_VERBOSE(
"Recalculating number of precision layers for combined muon");
1432 + (
summary.extendedSmallHits > 2 ||
summary.extendedLargeHits > 2);
1436 if (!eta1stgchits_acc.isAvailable(
muon) || !eta2stgchits_acc.isAvailable(
muon) || !mmhits_acc.isAvailable(
muon)) {
1437 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve NSW hits!"
1438 <<
" (Please use DxAODs with p-tags >= p5834 OR set ExcludeNSWFromPrecisionLayers to True (tests only)");
1439 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 228 of file MuonSelectionTool.cxx.
231 ATH_MSG_ERROR(
" getHist(...) TFile is nullptr! Check that the Tight cut map is loaded correctly");
232 return StatusCode::FAILURE;
234 TH1* h_ptr =
nullptr;
240 return StatusCode::FAILURE;
242 hist = std::unique_ptr<TH1>{h_ptr};
243 hist->SetDirectory(
nullptr);
244 ATH_MSG_INFO(
"Successfully read tight working point histogram: " <<
hist->GetName());
246 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 415 of file MuonSelectionTool.cxx.
423 if (
mu.muonType() == xAOD::Muon::SegmentTagged) {
426 if (std::abs(
mu.eta()) < 0.1) {
430 ATH_MSG_VERBOSE(
"Do not allow segment-tagged muon at |eta| > 0.1 - return VeryLoose");
436 if (
mu.muonType() == xAOD::Muon::CaloTagged) {
461 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - return VeryLoose");
467 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
471 const float reducedChi2 =
mu.primaryTrackParticle()->chiSquared() /
mu.primaryTrackParticle()->numberDoF();
479 if (
summary.nprecisionLayers > 1 && reducedChi2 < 8 && std::abs(qOverPsignif) < 7) {
486 ATH_MSG_VERBOSE(
"Muon did not pass requirements for tight combined muon");
490 (
summary.nprecisionLayers > 1 ||(
summary.nprecisionLayers == 1 &&
summary.nprecisionHoleLayers < 2 && std::abs(
mu.eta()) < 0.1))
497 ATH_MSG_VERBOSE(
"Muon did not pass requirements for medium combined muon");
503 if ((
summary.nprecisionLayers > 1 ||
504 (
summary.nprecisionLayers == 1 &&
summary.nprecisionHoleLayers < 2 && std::abs(
mu.eta()) < 0.1))) {
520 ATH_MSG_VERBOSE(
"Muon passed selection for loose working point at low pT");
525 ATH_MSG_VERBOSE(
"Did not pass selections for combined muon - returning VeryLoose");
534 ATH_MSG_VERBOSE(
"Standalone muons currently only used when in expert mode for run3");
538 if (std::abs(
mu.eta()) > 2.5) {
549 ATH_MSG_VERBOSE(
"Muon did not pass selection for medium stand-alone muon - return VeryLoose");
554 if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
558 ATH_MSG_VERBOSE(
"Silicon-associated forward muon muons currently only used when in expert mode for run3");
563 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
565 if (cbtrack && metrack) {
566 if (std::abs(cbtrack->
eta()) > 2.5) {
573 "SiliconForwardAssociated muon has ID track as primary track particle. "
574 <<
"This is a bug fixed starting with xAODMuon-00-17-07, which should be present in this release. "
575 <<
"Please report this to the Muon CP group!");
584 ATH_MSG_VERBOSE(
"Muon did not pass selection for medium silicon-associated forward muon - return VeryLoose");
588 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 1461 of file MuonSelectionTool.cxx.
1471 if (
summary.nprecisionLayers == 2)
1472 return ResolutionCategory::highPt2station;
1480 ATH_MSG_VERBOSE(
"getResolutionCategory - No MS track available for muon. Using combined track.");
1481 MS_track =
mu.trackParticle(xAOD::Muon::CombinedTrackParticle);
1485 const float etaMS = MS_track->
eta();
1486 const float etaCB = CB_track->
eta();
1487 const float phiMS = MS_track->
phi();
1492 category = ResolutionCategory::missingInner;
1495 category = ResolutionCategory::missingMiddle;
1499 category = ResolutionCategory::missingOuter;
1501 if (!
isRun3() && (std::abs(
etaMS) > 2.0 || std::abs(etaCB) > 2.0) &&
summary.cscUnspoiledEtaHits == 0)
1502 category = ResolutionCategory::spoiledCSC;
1504 if ((1.01 < std::abs(
etaMS) && std::abs(
etaMS) < 1.1) || (1.01 < std::abs(etaCB) && std::abs(etaCB) < 1.1))
1505 category = ResolutionCategory::BEoverlap;
1510 if (
isBEE(
etaMS, phiMS) || (std::abs(etaCB) > 1.4 && (
summary.extendedSmallHits > 0 ||
summary.extendedSmallHoles > 0))) {
1512 category = ResolutionCategory::missingBEE;
1514 if (
summary.extendedSmallHits >= 3 &&
summary.outerSmallHits < 3)
category = ResolutionCategory::missingOuter;
1516 if (!
summary.isSmallGoodSectors)
1520 if (
summary.nprecisionLayers == 1)
category = ResolutionCategory::oneStation;
◆ getRunNumber()
unsigned int CP::MuonSelectionTool::getRunNumber |
( |
bool |
needOnlyCorrectYear = false | ) |
const |
|
private |
Definition at line 1527 of file MuonSelectionTool.cxx.
1535 ATH_MSG_DEBUG(
"The current event is a data event. Return runNumber.");
1536 return eventInfo->runNumber();
1541 static std::atomic<bool> issuedWarningPRW{
false};
1542 if (acc_rnd.isAvailable(*eventInfo)) {
1543 unsigned int rn = acc_rnd(*eventInfo);
1544 if (
rn != 0)
return acc_rnd(*eventInfo);
1546 if (!issuedWarningPRW) {
1548 issuedWarningPRW =
true;
1553 if (needOnlyCorrectYear) {
1554 if (eventInfo->runNumber() < 300000) {
1555 ATH_MSG_DEBUG(
"Random run number not available and this is mc16a or mc20a, returning dummy 2016 run number.");
1558 }
else if (eventInfo->runNumber() < 310000) {
1559 ATH_MSG_DEBUG(
"Random run number not available and this is mc16d or mc20d, returning dummy 2017 run number.");
1562 }
else if (eventInfo->runNumber() < 320000) {
1563 ATH_MSG_DEBUG(
"Random run number not available and this is mc16e or mc20e, returning dummy 2018 run number.");
1566 }
else if (eventInfo->runNumber() < 500000) {
1567 ATH_MSG_DEBUG(
"Random run number not available and this is mc21/mc23, for the time being we're returing a dummy run number.");
1570 ATH_MSG_DEBUG(
"Detected some run 4 / phase II runnumber "<<eventInfo->runNumber()<<
". ");
1574 ATH_MSG_FATAL(
"Random run number not available, fallback option of using runNumber failed since "<<eventInfo->runNumber()<<
" cannot be recognised");
1575 throw std::runtime_error(
"MuonSelectionTool() - need RandomRunNumber decoration by the PileupReweightingTool");
1578 ATH_MSG_FATAL(
"Failed to find the RandomRunNumber decoration by the PileupReweightingTool");
1579 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 795 of file MuonSelectionTool.cxx.
796 std::vector<const xAOD::MuonSegment*> segments_sorted;
797 segments_sorted.reserve(
mu.nMuonSegments());
799 for (
unsigned int i = 0;
i <
mu.nMuonSegments();
i++) {
800 if (!
mu.muonSegment(
i))
801 ATH_MSG_WARNING(
"The muon reports more segments than are available. Please report this to the muon software community!");
803 segments_sorted.push_back(
mu.muonSegment(
i));
806 std::sort(segments_sorted.begin(), segments_sorted.end(), chamberIndexCompare);
808 return segments_sorted;
◆ IdMsPt()
void CP::MuonSelectionTool::IdMsPt |
( |
const xAOD::Muon & |
muon, |
|
|
float & |
idPt, |
|
|
float & |
msPt |
|
) |
| const |
|
private |
Definition at line 361 of file MuonSelectionTool.cxx.
363 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
364 if (!idtrack || !metrack) idPt = mePt = -1.;
366 mePt = metrack->
pt();
367 idPt = idtrack->
pt();
369 if (!mePt_acc.isAvailable(
mu) || !idPt_acc.isAvailable(
mu)) {
371 <<
" q:" <<
mu.charge() <<
", author:" <<
mu.author()
372 <<
" is not decorated with calibrated momenta. Please fix");
373 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 59 of file MuonSelectionTool.cxx.
76 "Not using allAuthors variable as currently missing in many derivations; LowPtEfficiency working point will always return "
77 "false, but this is expected at the moment. Have a look here: "
78 "https://twiki.cern.ch/twiki/bin/view/Atlas/MuonSelectionToolR21#New_LowPtEfficiency_working_poin");
82 ATH_MSG_INFO(
"You have opted to select only 3-station muons in the high-pT selection! "
83 <<
"Please feed 'HighPt3Layers' to the 'WorkingPoint' property to retrieve the appropriate scale-factors");
87 ATH_MSG_WARNING(
"No cut-based selection is defined for segment-tagged muons in the Low-pT working point. "
88 <<
"Please set UseMVALowPt=true if you want to try the UseSegmentTaggedLowPt=true option.");
92 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).");
93 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.");
98 m_acceptInfo.
addCut(
"IDHits",
"Selection of muons according to whether they passed the MCP ID Hit cuts");
99 m_acceptInfo.
addCut(
"Preselection",
"Selection of muons according to their type/author");
104 "Invalid quality (i.e. selection WP) set: "
106 <<
" - it must be an integer between 0 and 5! (0=Tight, 1=Medium, 2=Loose, 3=Veryloose, 4=HighPt, 5=LowPtEfficiency)");
107 return StatusCode::FAILURE;
110 ATH_MSG_ERROR(
"Cannot use lowPt working point if allAuthors is not available!");
111 return StatusCode::FAILURE;
114 if(m_caloScoreWP<1 || m_caloScoreWP>4){
115 ATH_MSG_FATAL(
"CaloScoreWP property must be set to 1, 2, 3 or 4");
116 return StatusCode::FAILURE;
120 ATH_MSG_INFO(
"Initialising tight working point histograms...");
121 std::string tightWP_rootFile_fullPath;
126 Form(
"MuonSelectorTools/%s/muonSelection_tightWPHisto.root",
m_calibration_version.value().c_str()));
129 ATH_MSG_INFO(
"Reading muon tight working point histograms from " << tightWP_rootFile_fullPath);
131 std::unique_ptr<TFile>
file(TFile::Open(tightWP_rootFile_fullPath.c_str(),
"READ"));
133 if (!
file->IsOpen()) {
134 ATH_MSG_ERROR(
"Cannot read tight working point file from " << tightWP_rootFile_fullPath);
135 return StatusCode::FAILURE;
149 ATH_MSG_INFO(
"Reading bad muon veto cut functions from " << BMVcutFile_fullPath);
151 std::unique_ptr<TFile> BMVfile(TFile::Open(BMVcutFile_fullPath.c_str(),
"READ"));
153 if (!BMVfile->IsOpen()) {
154 ATH_MSG_ERROR(
"Cannot read bad muon veto cut function file from " << BMVcutFile_fullPath);
155 return StatusCode::FAILURE;
165 return StatusCode::FAILURE;
176 auto make_mva_reader = [](TString
file_path) {
177 std::vector<std::string> mva_var_names{
"momentumBalanceSignificance",
178 "scatteringCurvatureSignificance",
179 "scatteringNeighbourSignificance",
181 "middleLargeHoles+middleSmallHoles",
182 "muonSegmentDeltaEta",
183 "muonSeg1ChamberIdx",
184 "muonSeg2ChamberIdx"};
185 std::unique_ptr<TMVA::Reader>
reader = std::make_unique<TMVA::Reader>(mva_var_names);
202 auto make_mva_reader_MuTagIMO = [](TString
file_path,
bool useSeg2ChamberIndex) {
203 std::vector<std::string> mva_var_names;
204 if (useSeg2ChamberIndex) mva_var_names.push_back(
"muonSeg2ChamberIndex");
205 mva_var_names.push_back(
"muonSeg1ChamberIndex");
206 mva_var_names.push_back(
"muonSeg1NPrecisionHits");
207 mva_var_names.push_back(
"muonSegmentDeltaEta");
208 mva_var_names.push_back(
"muonSeg1GlobalR");
209 mva_var_names.push_back(
"muonSeg1Chi2OverDoF");
210 mva_var_names.push_back(
"muonSCS");
212 std::unique_ptr<TMVA::Reader>
reader = std::make_unique<TMVA::Reader>(mva_var_names);
225 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 629 of file MuonSelectionTool.cxx.
633 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
639 bool IsBadMuon =
false;
640 if (idtrack && metrack && cbtrack) {
642 double qOverP_ID = idtrack->
qOverP();
644 double qOverP_ME = metrack->
qOverP();
646 double qOverP_CB = cbtrack->
qOverP();
659 double IdCbRatio = std::abs((qOverPerr_ID / qOverP_ID) / (qOverPerr_CB / qOverP_CB));
660 double MeCbRatio = std::abs((qOverPerr_ME / qOverP_ME) / (qOverPerr_CB / qOverP_CB));
661 IsBadMuon = (IdCbRatio < 0.8 || MeCbRatio < 0.8 || IsBadMuon);
665 double IdCbRatio = std::abs((qOverPerr_ID / qOverP_ID) / (qOverPerr_CB / qOverP_CB));
666 double MeCbRatio = std::abs((qOverPerr_ME / qOverP_ME) / (qOverPerr_CB / qOverP_CB));
667 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 1602 of file MuonSelectionTool.cxx.
1603 static constexpr std::array<float, 2> BEE_eta{1.440, 1.692};
1604 static constexpr std::array<float, 8> BEE_phi{0.301, 0.478, 1.086, 1.263, 1.872, 2.049, 2.657, 2.834};
1606 float abs_eta = std::abs(eta);
1607 float abs_phi = std::abs(phi);
1609 if (abs_eta >= BEE_eta[0] && abs_eta <= BEE_eta[1]) {
1610 if ((abs_phi >= BEE_phi[0] && abs_phi <= BEE_phi[1]) || (abs_phi >= BEE_phi[2] && abs_phi <= BEE_phi[3]) ||
1611 (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 1584 of file MuonSelectionTool.cxx.
1585 static constexpr std::array<float, 2> BIS78_eta{1.05, 1.3};
1586 static constexpr std::array<float, 8> BIS78_phi{0.21, 0.57, 1.00, 1.33, 1.78, 2.14, 2.57, 2.93};
1588 float abs_eta = std::abs(eta);
1589 float abs_phi = std::abs(phi);
1591 if (abs_eta >= BIS78_eta[0] && abs_eta <= BIS78_eta[1]) {
1592 if ((abs_phi >= BIS78_phi[0] && abs_phi <= BIS78_phi[1]) || (abs_phi >= BIS78_phi[2] && abs_phi <= BIS78_phi[3]) ||
1593 (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 1620 of file MuonSelectionTool.cxx.
1621 static constexpr std::array<float, 6> BMG_eta{0.35, 0.47, 0.68, 0.80, 0.925, 1.04};
1622 static constexpr std::array<float, 4> BMG_phi{-1.93, -1.765, -1.38, -1.21};
1624 float abs_eta = std::abs(eta);
1626 if ((abs_eta >= BMG_eta[0] && abs_eta <= BMG_eta[1]) || (abs_eta >= BMG_eta[2] && abs_eta <= BMG_eta[3]) ||
1627 (abs_eta >= BMG_eta[4] && abs_eta <= BMG_eta[5])) {
1628 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 1200 of file MuonSelectionTool.cxx.
1203 if (std::abs(
mu.eta()) < 1.05) {
1213 double qOpRelResolution = std::hypot(
p1,
p2 *
mu.primaryTrackParticle()->pt() *
MeVtoGeV);
1215 double qOverPabs_unsmeared = std::abs(
mu.primaryTrackParticle()->definingParameters()[4]);
1216 double qOverPabs_smeared = 1.0 / (
mu.pt() * std::cosh(
mu.eta()));
1218 if ((qOverPabs_smeared - qOverPabs_unsmeared) / (qOpRelResolution * qOverPabs_unsmeared) <
1219 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 1276 of file MuonSelectionTool.cxx.
1284 int CaloMuonIDTag = -20;
1287 bool readID =
mu.parameter(CaloMuonIDTag, xAOD::Muon::CaloMuonIDTag);
1289 ATH_MSG_WARNING(
"Unable to read CaloMuonIDTag Quality information! Rejecting the CALO muon!");
1294 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 1095 of file MuonSelectionTool.cxx.
1099 double start_cut = 3.0;
1100 double end_cut = 1.6;
1101 double abs_eta = std::abs(
mu.eta());
1104 double p0(8.0),
p1(0.),
p2(0.);
1111 else if (abs_eta > 1.05 && abs_eta <= 1.3) {
1114 }
else if (abs_eta > 1.3 && abs_eta <= 1.7) {
1117 }
else if (abs_eta > 1.7 && abs_eta <= 2.0) {
1120 }
else if (abs_eta > 2.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) {
1155 if (abs_eta > 1.05 && abs_eta < 1.3) {
1158 }
else if (abs_eta >= 1.3 && abs_eta < 1.7) {
1161 }
else if (abs_eta >= 1.7 && abs_eta < 2.0) {
1164 }
else if (abs_eta >= 2.0) {
1170 bool passErrorCutCB =
false;
1175 double qOverP_CB = cbtrack->
qOverP();
1181 double a = (end_cut - start_cut) / 4000.0;
1182 double b = end_cut -
a * 5000.0;
1183 double coefficient = (pt_CB > 1000.) ? (
a * pt_CB +
b) : start_cut;
1184 if (std::abs(qOverPerr_CB / qOverP_CB) < coefficient *
sigma) { passErrorCutCB =
true; }
1191 ATH_MSG_DEBUG(
"The current event is a MC event. Use bad muon veto mimic.");
1197 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 917 of file MuonSelectionTool.cxx.
934 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - fail high-pT");
954 ATH_MSG_VERBOSE(
"passedHighPtCuts - No MS track available for muon. Using combined track.");
955 MS_track =
mu.trackParticle(xAOD::Muon::CombinedTrackParticle);
958 if (MS_track && CB_track) {
960 float phiMS = MS_track->
phi();
961 float etaCB = CB_track->
eta();
964 if (!
isRun3() && (std::abs(
etaMS) > 2.0 || std::abs(etaCB) > 2.0)) {
965 if (
summary.cscUnspoiledEtaHits == 0) {
972 if (!
isRun3() &&
mu.eta() < -1.899 && std::abs(
mu.phi()) < 0.211) {
973 ATH_MSG_VERBOSE(
"Muon is in eta/phi region vetoed due to disabled chambers in MC - fail high-pT");
978 if ((1.01 < std::abs(
etaMS) && std::abs(
etaMS) < 1.1) || (1.01 < std::abs(etaCB) && std::abs(etaCB) < 1.1)) {
979 ATH_MSG_VERBOSE(
"Muon is in barrel/endcap overlap region - fail high-pT");
1009 if (
summary.nprecisionLayers < 4) {
1010 ATH_MSG_VERBOSE(
"Muon is in BEE eta/phi region and does not have 4 precision layers - fail high-pT");
1014 if (std::abs(etaCB) > 1.4) {
1018 if (
summary.nprecisionLayers < 4 && (
summary.extendedSmallHits > 0 ||
summary.extendedSmallHoles > 0)) {
1019 ATH_MSG_VERBOSE(
"Muon is in BEE eta/phi region and does not have 4 precision layers - fail high-pT");
1024 ATH_MSG_WARNING(
"passedHighPtCuts - MS or CB track missing in muon! Failing High-pT selection...");
1030 const xAOD::TrackParticle* metrack =
mu.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
1035 if (std::abs(qOverPsignif) > 7) {
1047 if (std::abs(
mu.eta()) > 1.2 &&
summary.extendedSmallHits < 3 &&
summary.extendedLargeHits < 3) {
1071 if (
summary.nprecisionLayers < 3) {
1072 ATH_MSG_VERBOSE(
"Muon has less than 3 precision layers - fail high-pT");
1077 if (
summary.isSmallGoodSectors) {
1078 if (!(
summary.innerSmallHits > 2 &&
summary.middleSmallHits > 2 &&
1079 (
summary.outerSmallHits > 2 ||
summary.extendedSmallHits > 2))) {
1080 ATH_MSG_VERBOSE(
"Muon has small/large sectors overlap - fail high-pT");
1084 if (!(
summary.innerLargeHits > 2 &&
summary.middleLargeHits > 2 &&
1085 (
summary.outerLargeHits > 2 ||
summary.extendedLargeHits > 2))) {
1086 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 594 of file MuonSelectionTool.cxx.
597 if (isLRTmuon.isAvailable(
mu)) {
598 if (isLRTmuon(
mu))
return true;
604 if(!patternAcc.isAvailable(*idtrack)) {
605 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.");
606 throw std::runtime_error(
"MuonSelectionTool() - isLRT decor and patternRecoInfo both unavailable for a muon.");
608 std::bitset<xAOD::NumberOfTrackRecoInfo> patternBitSet(patternAcc(*idtrack));
616 }
else if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
618 if (cbtrack && std::abs(cbtrack->
eta()) > 2.5) {
return true; }
621 if (
mu.trackParticle(xAOD::Muon::InnerDetectorTrackParticle))
622 return passedIDCuts(*
mu.trackParticle(xAOD::Muon::InnerDetectorTrackParticle));
623 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 1244 of file MuonSelectionTool.cxx.
1249 " !! Tool configured with some of the ID hits requirements changed... FOR DEVELOPMENT ONLY: muon efficiency SF won't be "
1254 if ((value1 + value2 == 0) && !
m_PixCutOff)
return false;
1258 if ((value1 + value2 <= 4) && !
m_SctCutOff)
return false;
1265 const float abseta = std::abs(
track.eta());
1268 const uint8_t totTRThits = value1 + value2;
1269 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 680 of file MuonSelectionTool.cxx.
685 ATH_MSG_VERBOSE(
"LowPt WP currently not supported for run3 if not in expert mode");
701 ATH_MSG_VERBOSE(
"Muon is not combined or segment-tagged - fail low-pT");
714 ATH_MSG_VERBOSE(
"Muon is neither MuGirl / MuidCo / MuTagIMO - fail low-pT");
733 ATH_MSG_VERBOSE(
"Not using MVA selection, failing low-pT selection due to medium requirement in forward region");
741 ATH_MSG_VERBOSE(
"Muon has out-of-bounds precision hits - fail low-pT");
749 uint nStationsCut = (std::abs(
mu.eta()) > 1.3 && std::abs(
mu.eta()) < 1.55) ? 2 : 1;
750 if (
summary.nprecisionLayers < nStationsCut) {
751 ATH_MSG_VERBOSE(
"number of precision layers = " << (
int)
summary.nprecisionLayers <<
" is lower than cut value " << nStationsCut
752 <<
" - fail low-pT");
760 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 811 of file MuonSelectionTool.cxx.
814 ATH_MSG_VERBOSE(
"LowPt WP currently not supported for run3 if not in expert mode");
823 float momentumBalanceSig{-1}, CurvatureSig{-1}, energyLoss{-1}, muonSegmentDeltaEta{-1}, scatteringNeigbour{-1};
834 float seg1ChamberIdx{-1.}, seg2ChamberIdx{-1.}, middleHoles{-1.}, seg1NPrecisionHits{-1.}, seg1GlobalR{-1.}, seg1Chi2OverDoF{-1.};
839 ATH_MSG_WARNING(
"passedLowPtEfficiencyMVACut - found segment-tagged muon with no segments!");
841 seg1ChamberIdx = (!muonSegments.empty()) ? muonSegments[0]->chamberIndex() : -9;
842 seg2ChamberIdx = (muonSegments.size() > 1) ? muonSegments[1]->chamberIndex() : -9;
846 seg1NPrecisionHits = (!muonSegments.empty()) ? muonSegments[0]->nPrecisionHits() : -1;
847 seg1GlobalR = (!muonSegments.empty())
848 ? std::hypot(muonSegments[0]->
x(), muonSegments[0]->y(), muonSegments[0]->z())
850 seg1Chi2OverDoF = (!muonSegments.empty()) ? muonSegments[0]->
chiSquared() / muonSegments[0]->numberDoF() : -1;
859 std::vector<float> var_vector;
861 var_vector = {momentumBalanceSig, CurvatureSig, scatteringNeigbour, energyLoss,
862 middleHoles, muonSegmentDeltaEta, seg1ChamberIdx, seg2ChamberIdx};
864 if (std::abs(
mu.eta()) >= 1.3)
865 var_vector = {seg2ChamberIdx, seg1ChamberIdx, seg1NPrecisionHits, muonSegmentDeltaEta,
866 seg1GlobalR, seg1Chi2OverDoF, std::abs(CurvatureSig)};
868 var_vector = {seg1ChamberIdx, seg1NPrecisionHits, muonSegmentDeltaEta,
869 seg1GlobalR, seg1Chi2OverDoF, std::abs(CurvatureSig)};
874 if (eventInfo->eventNumber() % 2 == 1) {
884 if (std::abs(
mu.eta()) < 0.7)
886 else if (std::abs(
mu.eta()) < 1.3)
892 float BDTdiscriminant;
895 BDTdiscriminant = reader_MUID->EvaluateMVA(var_vector,
"BDTG");
897 BDTdiscriminant = reader_MUGIRL->EvaluateMVA(var_vector,
"BDTG");
899 BDTdiscriminant = reader_MUTAGIMO->EvaluateMVA(var_vector,
"BDT");
901 ATH_MSG_WARNING(
"Invalid author for low-pT MVA, failing selection...");
908 if (BDTdiscriminant > BDTcut) {
◆ passedMuonCuts()
Returns true if the muon passes a standardized loose preselection.
Implements CP::IMuonSelectionTool.
Definition at line 1225 of file MuonSelectionTool.cxx.
1229 if (
mu.muonType() == xAOD::Muon::CaloTagged && std::abs(
mu.eta()) < 0.105)
1236 if (
mu.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
1238 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 1326 of file MuonSelectionTool.cxx.
1329 ATH_MSG_VERBOSE(
"for run3, Tight WP is only supported when ExcludeNSWFromPrecisionLayers=False and RecalcPrecisionLayerswNSW=True");
1332 float symmetric_eta = std::abs(
mu.eta());
1336 if (pt < 4.0 || symmetric_eta >= 2.5)
return false;
1337 ATH_MSG_VERBOSE(
"Muon is passing tight WP kinematic cuts with pT,eta " <<
mu.pt() <<
" , " <<
mu.eta());
1344 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a low pt muon with (pt,eta) ( " <<
pt <<
" , " <<
mu.eta() <<
" ) ");
1346 ATH_MSG_VERBOSE(
"Momentum significance value " << oneOverPSig <<
", required to be less than " << qOverPCut);
1348 if (
rho > rhoCut)
return false;
1351 if (oneOverPSig > qOverPCut)
return false;
1352 ATH_MSG_VERBOSE(
"Muon passed tight WP, low pT momentum significance cut");
1360 else if (
pt < 100.0) {
1363 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a medium pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
1367 if (
rho > rhoCut)
return false;
1375 else if (
pt < 500.0) {
1377 ATH_MSG_VERBOSE(
"Applying tight WP cuts to a high pt muon with (pt,eta) (" <<
pt <<
"," <<
mu.eta() <<
")");
1380 ATH_MSG_VERBOSE(
"Rho value " <<
rho <<
", required to be less than " << rhoCut <<
" unless -1, in which no cut is applied");
1382 if (rhoCut < 0.0)
return true;
1383 if (
rho > rhoCut)
return false;
1390 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, 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, 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 380 of file MuonSelectionTool.cxx.
386 <<
" Momentum dependent cuts are disabled. Return 0.");
390 const xAOD::TrackParticle* metrack =
muon.trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
391 if (!idtrack || !metrack) {
392 ATH_MSG_VERBOSE(
"No ID / MS track. Return dummy large value of 1 mio");
395 float mePt{-1.}, idPt{-1.};
402 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 1451 of file MuonSelectionTool.cxx.
1453 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve parameter " << param
1454 <<
" for muon with pT:" <<
muon.pt() *
MeVtoGeV <<
", eta:" <<
muon.eta() <<
", phi: " <<
muon.phi()
1455 <<
", q:" <<
muon.charge() <<
", author: " <<
muon.author());
1456 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 148 of file MuonSelectionTool.h.
150 ATH_MSG_FATAL(__FILE__ <<
":" << __LINE__ <<
" Failed to retrieve summary value " <<
type);
151 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 229 of file MuonSelectionTool.h.
◆ m_BMVcutFunction_barrel
std::unique_ptr<TF1> CP::MuonSelectionTool::m_BMVcutFunction_barrel |
|
private |
◆ m_BMVcutFunction_endcap
std::unique_ptr<TF1> CP::MuonSelectionTool::m_BMVcutFunction_endcap |
|
private |
◆ m_calibration_version
Gaudi::Property<std::string> CP::MuonSelectionTool::m_calibration_version {this, "CalibrationRelease", "PreRec2016_2016-04-13"} |
|
private |
◆ m_caloScoreWP
Gaudi::Property<int> CP::MuonSelectionTool::m_caloScoreWP {this, "CaloScoreWP", 4,"Currently there are 4 CaloScore WPs for testing; WP4 is the recommended one"} |
|
private |
◆ m_custom_dir
Gaudi::Property<std::string> CP::MuonSelectionTool::m_custom_dir {this, "CustomInputFolder", ""} |
|
private |
◆ m_detStore
◆ m_developMode
Gaudi::Property<bool> CP::MuonSelectionTool::m_developMode {this, "ExpertDevelopMode", false} |
|
private |
◆ m_disablePtCuts
Gaudi::Property<bool> CP::MuonSelectionTool::m_disablePtCuts {this, "DisablePtCuts", false} |
|
private |
◆ m_doBadMuonVetoMimic
Gaudi::Property<bool> CP::MuonSelectionTool::m_doBadMuonVetoMimic {this, "DoBadMuonVetoMimic", false} |
|
private |
◆ m_eventInfo
◆ m_evtStore
◆ m_excludeNSWFromPrecisionLayers
Gaudi::Property<bool> CP::MuonSelectionTool::m_excludeNSWFromPrecisionLayers {this, "ExcludeNSWFromPrecisionLayers", false, "Cut on the nprecisionlayers ignoring the NSW"} |
|
private |
◆ m_geoOnTheFly
Gaudi::Property<bool> CP::MuonSelectionTool::m_geoOnTheFly {this, "AllowSettingGeometryOnTheFly", false,"avoids crash if run2/run3 geo is wrongly set"} |
|
private |
◆ m_isRun3
Gaudi::Property<bool> CP::MuonSelectionTool::m_isRun3 {this, "IsRun3Geo", false, "Switch to toggle the run 2 & run 3 geometry cuts. The tool will throw an exception if the run number does not match the expectations later"} |
|
private |
◆ m_low_pt_mva_mutex
std::mutex CP::MuonSelectionTool::m_low_pt_mva_mutex |
|
mutableprivate |
◆ m_maxEta
Gaudi::Property<double> CP::MuonSelectionTool::m_maxEta {this, "MaxEta", 2.7, "Maximum eta range to select the muons"} |
|
private |
◆ m_MVAreaderFile_EVEN_MuGirl
Gaudi::Property<std::string> CP::MuonSelectionTool::m_MVAreaderFile_EVEN_MuGirl |
|
private |
Initial value:{
this, "MVAreaderFile_EVEN_MuGirl",
"MuonSelectorTools/190118_PrelimLowPtMVA/LowPtMVA_Weights/BDTG_9JAN2019_MuGirl_EVEN.weights.xml"}
Definition at line 208 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 201 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 215 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 217 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 219 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 211 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 204 of file MuonSelectionTool.h.
◆ m_PixCutOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_PixCutOff {this, "PixCutOff", false} |
|
private |
◆ m_quality
Gaudi::Property<int> CP::MuonSelectionTool::m_quality {this, "MuQuality", 1,"Quality to select. Values correspond to 0=Tight, 1=Medium, 2=Loose, 3=VeryLoose (only for debug, not supported), 4=HighPt, 5=LowPtEfficiency"} |
|
private |
◆ m_reader_MUTAGIMO_etaBin1
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_reader_MUTAGIMO_etaBin1 {nullptr} |
|
private |
◆ m_reader_MUTAGIMO_etaBin2
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_reader_MUTAGIMO_etaBin2 {nullptr} |
|
private |
◆ m_reader_MUTAGIMO_etaBin3
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_reader_MUTAGIMO_etaBin3 {nullptr} |
|
private |
◆ m_readerE_MUGIRL
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_readerE_MUGIRL {nullptr} |
|
private |
◆ m_readerE_MUID
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_readerE_MUID {nullptr} |
|
private |
◆ m_readerO_MUGIRL
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_readerO_MUGIRL {nullptr} |
|
private |
◆ m_readerO_MUID
std::unique_ptr<TMVA::Reader> CP::MuonSelectionTool::m_readerO_MUID {nullptr} |
|
private |
◆ m_recalcPrecisionLayerswNSW
Gaudi::Property<bool> CP::MuonSelectionTool::m_recalcPrecisionLayerswNSW {this, "RecalcPrecisionLayerswNSW", true, "Recalculate nprecisionlayers with internal criteria for NSW"} |
|
private |
◆ m_SctCutOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_SctCutOff {this, "SctCutOff", false} |
|
private |
◆ m_SiHolesCutOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_SiHolesCutOff {this, "SiHolesCutOff", false} |
|
private |
◆ m_tightWP_highPt_rhoCuts
std::unique_ptr<TH1> CP::MuonSelectionTool::m_tightWP_highPt_rhoCuts |
|
private |
◆ m_tightWP_lowPt_qOverPCuts
std::unique_ptr<TH1> CP::MuonSelectionTool::m_tightWP_lowPt_qOverPCuts |
|
private |
◆ m_tightWP_lowPt_rhoCuts
std::unique_ptr<TH1> CP::MuonSelectionTool::m_tightWP_lowPt_rhoCuts |
|
private |
◆ m_tightWP_mediumPt_rhoCuts
std::unique_ptr<TH1> CP::MuonSelectionTool::m_tightWP_mediumPt_rhoCuts |
|
private |
◆ m_toroidOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_toroidOff {this, "ToroidOff", false, "Run the tool in Toroid off setup"} |
|
private |
◆ m_TrtCutOff
Gaudi::Property<bool> CP::MuonSelectionTool::m_TrtCutOff {this, "TrtCutOff", true} |
|
private |
◆ m_turnOffMomCorr
Gaudi::Property<bool> CP::MuonSelectionTool::m_turnOffMomCorr {this, "TurnOffMomCorr", false} |
|
private |
◆ m_use2stationMuonsHighPt
Gaudi::Property<bool> CP::MuonSelectionTool::m_use2stationMuonsHighPt {this, "Use2stationMuonsHighPt", true, "for users of high-pT working point to choose whether to include 'safe' 2-station muons"} |
|
private |
◆ m_useAllAuthors
Gaudi::Property<bool> CP::MuonSelectionTool::m_useAllAuthors {this, "UseAllAuthors", true} |
|
private |
◆ m_useBEEBISInHighPtRun3
Gaudi::Property<bool> CP::MuonSelectionTool::m_useBEEBISInHighPtRun3 {this, "UseBEEBISInHighPtRun3", false, "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
@ 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.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
@ extendedSmallHoles
number of precision holes in the extended small layer
@ scatteringNeighbourSignificance
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ middleLargeHoles
number of precision holes in the middle large layer
Helper class to provide constant type-safe access to aux data.
#define ATH_MSG_VERBOSE(x)
@ IS_SIMULATION
true: simulation, false: data
@ innerLargeHits
number of precision hits in the inner large layer
virtual void setOwner(IDataHandleHolder *o)=0
@ cscUnspoiledEtaHits
number of unspoiled CSC eta clusters on track
@ momentumBalanceSignificance
@ middleLargeHits
number of precision hits in the middle large layer
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
@ extendedLargeHits
number of precision hits in the extended large layer
@ segmentDeltaEta
MuTag parameters.
@ middleSmallHoles
number of precision holes in the middle small layer
@ combinedTrackOutBoundsPrecisionHits
total out-of-bounds hits on the combined track
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
@ numberOfSCTHoles
number of SCT holes [unit8_t].
@ isSmallGoodSectors
if non-deweighted track chambers are small
@ SiSpacePointsSeedMaker_LargeD0
@ etaLayer2STGCHits
number of eta hits in the second STGC trigger layer (STGC2)
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
@ scatteringCurvatureSignificance
float qOverP() const
Returns the parameter.
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
@ middleSmallHits
number of precision hits in the middle small layer
@ outerSmallHits
number of precision hits in the outer small layer
float chiSquared(const U &p)
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
struct TBPatternUnitContext Muon
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
@ outerLargeHits
number of precision hits in the outer large layer
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
#define ATH_MSG_WARNING(x)
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ etaLayer1STGCHits
number of eta hits in the first STGC trigger layer (STGC1)
@ numberOfGoodPrecisionLayers
layers with at least 3 hits that are not deweighted [uint8_t]
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ STACO
Tracks produced by STACO.
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
Class describing a TrackParticle.
@ extendedSmallHits
number of precision hits in the extended small layer
reader
read the goodrunslist xml file(s)
@ innerSmallHits
number of precision hits in the inner small layer
constexpr int pow(int base, int exp) noexcept
float theta() const
Returns the parameter, which has range 0 to .
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
int addCut(const std::string &cutName, const std::string &cutDescription)
Add a cut; returning the cut position.
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].