![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
#include <METMaker.h>
|
| METMaker (const std::string &name) |
| Constructor with parameters: More...
|
|
virtual | ~METMaker () |
| Destructor: More...
|
|
virtual StatusCode | initialize () override final |
| Dummy implementation of the initialisation function. More...
|
|
virtual StatusCode | rebuildMET (const std::string &metKey, xAOD::Type::ObjectType metType, xAOD::MissingETContainer *metCont, const xAOD::IParticleContainer *collection, xAOD::MissingETAssociationHelper &helper, MissingETBase::UsageHandler::Policy objScale) override final |
|
virtual StatusCode | rebuildMET (xAOD::MissingET *met, const xAOD::IParticleContainer *collection, xAOD::MissingETAssociationHelper &helper, MissingETBase::UsageHandler::Policy objScale) override final |
|
virtual StatusCode | rebuildMET (xAOD::MissingET *met, const xAOD::IParticleContainer *collection, xAOD::MissingETAssociationHelper &helper, MissingETBase::UsageHandler::Policy p, bool removeOverlap, MissingETBase::UsageHandler::Policy objScale) override final |
|
virtual StatusCode | rebuildJetMET (const std::string &metJetKey, const std::string &softClusKey, const std::string &softTrkKey, xAOD::MissingETContainer *metCont, const xAOD::JetContainer *jets, const xAOD::MissingETContainer *metCoreCont, xAOD::MissingETAssociationHelper &helper, bool doJetJVT) override final |
|
virtual StatusCode | rebuildJetMET (const std::string &metJetKey, const std::string &metSoftKey, xAOD::MissingETContainer *metCont, const xAOD::JetContainer *jets, const xAOD::MissingETContainer *metCoreCont, xAOD::MissingETAssociationHelper &helper, bool doJetJVT) override final |
|
virtual StatusCode | rebuildJetMET (xAOD::MissingET *metJet, const xAOD::JetContainer *jets, xAOD::MissingETAssociationHelper &helper, xAOD::MissingET *metSoftClus, const xAOD::MissingET *coreSoftClus, xAOD::MissingET *metSoftTrk, const xAOD::MissingET *coreSoftTrk, bool doJetJVT, bool tracksForHardJets=false, std::vector< const xAOD::IParticle * > *softConst=0) override final |
|
virtual StatusCode | rebuildTrackMET (const std::string &metJetKey, const std::string &softTrkKey, xAOD::MissingETContainer *metCont, const xAOD::JetContainer *jets, const xAOD::MissingETContainer *metCoreCont, xAOD::MissingETAssociationHelper &helper, bool doJetJVT) override final |
|
virtual StatusCode | retrieveOverlapRemovedConstituents (const xAOD::PFOContainer *cpfo, const xAOD::PFOContainer *npfo, xAOD::MissingETAssociationHelper &metHelper, xAOD::PFOContainer *OR_cpfos, xAOD::PFOContainer *OR_npfos, bool retainMuon=false, const xAOD::IParticleContainer *muonCollection=0) override final |
|
virtual StatusCode | retrieveOverlapRemovedConstituents (const xAOD::PFOContainer *pfo, xAOD::MissingETAssociationHelper &metHelper, const xAOD::PFOContainer **OR_pfos, bool retainMuon, const xAOD::IParticleContainer *muonCollection) override final |
|
virtual const xAOD::PFOContainer * | retrieveOverlapRemovedConstituents (const xAOD::PFOContainer *signals, xAOD::MissingETAssociationHelper &helper, bool retainMuon=false, const xAOD::IParticleContainer *muonCollection=0, MissingETBase::UsageHandler::Policy p=MissingETBase::UsageHandler::ParticleFlow) override final |
|
virtual StatusCode | rebuildTrackMET (xAOD::MissingET *metJet, const xAOD::JetContainer *jets, xAOD::MissingETAssociationHelper &helper, xAOD::MissingET *metSoftTrk, const xAOD::MissingET *coreSoftTrk, bool doJetJVT) override final |
|
virtual StatusCode | markInvisible (const xAOD::IParticleContainer *collection, xAOD::MissingETAssociationHelper &helper, xAOD::MissingETContainer *metCont) override final |
|
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 |
|
Definition at line 40 of file METMaker.h.
◆ StoreGateSvc_t
◆ METMaker() [1/2]
met::METMaker::METMaker |
( |
const std::string & |
name | ) |
|
Constructor with parameters:
Definition at line 95 of file METMaker.cxx.
146 "EXPERIMENTAL: whether to use simplified OR based on nominal jets "
147 "and for jet-related systematics only. "
148 "WARNING: this property is strictly for doing physics studies of the feasibility "
149 "of this OR scheme, it should not be used in a regular analysis");
◆ ~METMaker()
met::METMaker::~METMaker |
( |
| ) |
|
|
virtualdefault |
◆ METMaker() [2/2]
met::METMaker::METMaker |
( |
| ) |
|
|
private |
◆ acceptTrack()
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ getKey()
Get the (hashed) key of an object that is in the event store.
This is a bit of a special one. StoreGateSvc
and xAOD::TEvent
both provide ways for getting the SG::sgkey_t
key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.
In order to allow tools to efficiently perform this operation, they can use this helper function.
- See also
- asg::AsgTool::getName
- Parameters
-
ptr | The bare pointer to the object that the event store should know about |
- Returns
- The hashed key of the object in the store. If not found, an invalid (zero) key.
Definition at line 119 of file AsgTool.cxx.
121 #ifdef XAOD_STANDALONE
124 return evtStore()->event()->getKey( ptr );
127 return (
proxy ==
nullptr ? 0 :
proxy->sgkey() );
128 #endif // XAOD_STANDALONE
◆ getName()
const std::string & asg::AsgTool::getName |
( |
const void * |
ptr | ) |
const |
|
inherited |
Get the name of an object that is / should be in the event store.
This is a bit of a special one. StoreGateSvc
and xAOD::TEvent
both provide ways for getting the std::string
name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.
In order to allow tools to efficiently perform this operation, they can use this helper function.
- See also
- asg::AsgTool::getKey
- Parameters
-
ptr | The bare pointer to the object that the event store should know about |
- Returns
- The string name of the object in the store. If not found, an empty string.
Definition at line 106 of file AsgTool.cxx.
108 #ifdef XAOD_STANDALONE
111 return evtStore()->event()->getName( ptr );
114 static const std::string
dummy =
"";
116 #endif // XAOD_STANDALONE
◆ getProperty()
template<class T >
const T* asg::AsgTool::getProperty |
( |
const std::string & |
name | ) |
const |
|
inherited |
Get one of the tool's properties.
◆ getPV()
Definition at line 1398 of file METMaker.cxx.
1404 if (!h_PV.isValid()) {
1406 ATH_MSG_WARNING(
"Unable to retrieve primary vertex container PrimaryVertices");
1408 }
else if(h_PV->empty()) {
1414 ATH_MSG_DEBUG(
"Successfully retrieved primary vertex container");
1416 for(
const auto *
const vx : *h_PV) {
◆ initialize()
StatusCode met::METMaker::initialize |
( |
| ) |
|
|
finaloverridevirtual |
Dummy implementation of the initialisation function.
It's here to allow the dual-use tools to skip defining an initialisation function. Since many are doing so...
Reimplemented from asg::AsgTool.
Definition at line 172 of file METMaker.cxx.
186 ATH_MSG_INFO(
"Custom jet selection configured. *** FOR EXPERT USE ONLY ***");
194 ATH_MSG_INFO(
"Jet selection for hadronic recoil calculation is configured.");
205 ATH_MSG_ERROR(
"Error: No available jet selection found! Please update JetSelection in METMaker. Choose one: Loose, Tight (recommended), Tighter, Tenacious" );
206 return StatusCode::FAILURE;
219 ATH_CHECK(config_jvt.setProperty(
"JvtMomentName",
"NNJvt"));
240 ATH_MSG_INFO(
"Requesting simplified overlap removal procedure in MET calculation");
243 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.
◆ markInvisible()
Implements IMETMaker.
Definition at line 1242 of file METMaker.cxx.
1248 if(
fillMET(
met,metCont,
"Invisibles" , invisSource) != StatusCode::SUCCESS) {
1250 return StatusCode::FAILURE;
◆ 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.
◆ print()
void asg::AsgTool::print |
( |
| ) |
const |
|
virtualinherited |
Print the state of the tool.
Implements asg::IAsgTool.
Reimplemented in JetRecTool, JetFinder, JetModifiedMassDrop, JetFromPseudojet, JetReclusterer, JetReclusteringTool, JetTruthLabelingTool, JetPileupLabelingTool, HI::HIPileupTool, top::TopObjectSelection, JetDumper, JetBottomUpSoftDrop, JetRecursiveSoftDrop, JetSoftDrop, JetConstituentsRetriever, JetSubStructureMomentToolsBase, JetSplitter, JetToolRunner, JetPruner, JetPseudojetRetriever, JetTrimmer, AsgHelloTool, and KtDeltaRTool.
Definition at line 131 of file AsgTool.cxx.
◆ rebuildJetMET() [1/3]
Implements IMETMaker.
Definition at line 479 of file METMaker.cxx.
487 ATH_MSG_VERBOSE(
"Rebuild jet term: " << metJetKey <<
" and soft term: " << softKey);
491 ATH_MSG_ERROR(
"failed to fill MET term \"" << metJetKey <<
"\"");
492 return StatusCode::FAILURE;
495 const MissingET *coreSoftClus(
nullptr), *coreSoftTrk(
nullptr);
496 MissingET *metSoftClus(
nullptr), *metSoftTrk(
nullptr);
498 const MissingET* coreSoft = (*metCoreCont)[softKey+
"Core"];
501 return StatusCode::FAILURE;
504 coreSoftTrk = coreSoft;
506 metSoftTrk =
nullptr;
507 if(
fillMET(metSoftTrk,metCont, softKey , coreSoftTrk->source() ) != StatusCode::SUCCESS) {
508 ATH_MSG_ERROR(
"failed to fill MET term \"" << softKey <<
"\"");
509 return StatusCode::FAILURE;
512 coreSoftClus = coreSoft;
514 metSoftClus =
nullptr;
515 if(
fillMET(metSoftClus, metCont, softKey , coreSoftClus->source() ) != StatusCode::SUCCESS) {
516 ATH_MSG_ERROR(
"failed to fill MET term \"" << softKey <<
"\"");
517 return StatusCode::FAILURE;
522 metSoftClus, coreSoftClus,
523 metSoftTrk, coreSoftTrk,
◆ rebuildJetMET() [2/3]
Implements IMETMaker.
Definition at line 564 of file METMaker.cxx.
577 ATH_MSG_ERROR(
"failed to fill MET term \"" << metJetKey <<
"\"");
578 return StatusCode::FAILURE;
581 const MissingET* coreSoftClus = (*metCoreCont)[softClusKey+
"Core"];
583 const MissingET* coreSoftTrk = (*metCoreCont)[softTrkKey+
"Core"];
585 ATH_MSG_WARNING(
"Invalid cluster soft term key supplied: " << softClusKey);
586 return StatusCode::FAILURE;
589 ATH_MSG_WARNING(
"Invalid track soft term key supplied: " << softTrkKey);
590 return StatusCode::FAILURE;
593 if(
fillMET(metSoftClus, metCont, softClusKey, coreSoftClus->source()) != StatusCode::SUCCESS) {
594 ATH_MSG_ERROR(
"failed to fill MET term \"" << softClusKey <<
"\"");
595 return StatusCode::FAILURE;
599 if(
fillMET(metSoftTrk, metCont, softTrkKey, coreSoftTrk->source()) != StatusCode::SUCCESS) {
600 ATH_MSG_ERROR(
"failed to fill MET term \"" << softTrkKey <<
"\"");
601 return StatusCode::FAILURE;
605 metSoftClus, coreSoftClus,
606 metSoftTrk, coreSoftTrk,
◆ rebuildJetMET() [3/3]
Implements IMETMaker.
Definition at line 610 of file METMaker.cxx.
620 if(!metJet || !
jets) {
622 <<
"MET (" << metJet <<
") or "
623 <<
"jet collection (" <<
jets <<
").");
624 return StatusCode::SUCCESS;
628 ATH_MSG_WARNING(
"MET Association Helper isn't associated with a MissingETAssociationMap!");
629 return StatusCode::SUCCESS;
632 ATH_MSG_WARNING(
"Requested soft track element links, but no track selection tool supplied.");
637 ATH_MSG_WARNING(
"Incomplete association map received. Cannot rebuild MET.");
638 ATH_MSG_WARNING(
"Note: METMaker should only be run on events containing at least one PV");
639 return StatusCode::SUCCESS;
642 if(!metSoftClus && !metSoftTrk) {
643 ATH_MSG_WARNING(
"Neither soft cluster nor soft track term has been supplied!");
644 return StatusCode::SUCCESS;
652 <<
", mpy " << coreSoftClus->
mpy()
653 <<
" sumet " << coreSoftClus->
sumet());
654 *metSoftClus += *coreSoftClus;
657 return StatusCode::SUCCESS;
662 if(softConst && acc_softConst.isAvailable(*coreSoftClus)) {
663 for(
const auto& constit : acc_softConst(*coreSoftClus)) {
664 softConst->push_back(*constit);
666 ATH_MSG_DEBUG(softConst->size() <<
" soft constituents from core term");
674 <<
", mpy " << coreSoftTrk->
mpy()
675 <<
" sumet " << coreSoftTrk->
sumet());
676 *metSoftTrk += *coreSoftTrk;
679 return StatusCode::SUCCESS;
682 for(
const auto& constit : acc_softConst(*coreSoftTrk)) {
683 softConst->push_back(*constit);
685 ATH_MSG_DEBUG(softConst->size() <<
" soft constituents from trk core term");
689 dec_constitObjLinks(*metJet) = std::vector<iplink_t>(0);
690 dec_constitObjWeights(*metJet) = std::vector<float>(0);
691 std::vector<iplink_t>& uniqueLinks = dec_constitObjLinks(*metJet);
692 std::vector<float>& uniqueWeights = dec_constitObjWeights(*metJet);
693 uniqueLinks.reserve(
jets->size());
694 uniqueWeights.reserve(
jets->size());
695 std::vector<iplink_t> softJetLinks;
696 std::vector<float> softJetWeights;
697 bool originalInputs =
jets->empty() ? false : !acc_originalObject.isAvailable(*
jets->front());
710 return StatusCode::FAILURE;
714 for(
const auto *
const jet : *
jets) {
722 if(assoc && !assoc->isMisc()) {
728 if (acc_nominalObject.isAvailable(*
jet))
729 nominal_jet =
static_cast<const xAOD::Jet*
>(*acc_nominalObject(*
jet));
731 ATH_MSG_ERROR(
"No nominal calibrated jet available for jet " <<
jet->index() <<
". Cannot simplify overlap removal!");
743 bool JVT_reject(
false);
744 bool isMuFSRJet(
false);
762 jvt = (*m_acc_jetJvtMoment)(*jet);
766 ATH_MSG_VERBOSE(
"Jet " << (JVT_reject ?
"fails" :
"passes") <<
" JVT selection");
769 ATH_MSG_WARNING(
"Tried to retrieve JVT but this was not set. Failing this jet.");
773 ATH_MSG_VERBOSE(
"Jet " << (JVT_reject ?
"fails" :
"passes") <<
" JVT selection");
781 bool caloverlap =
false;
782 caloverlap = calvec.
ce()>0;
783 ATH_MSG_DEBUG(
"Jet " <<
jet->index() <<
" is " << ( caloverlap ?
"" :
"non-") <<
"overlapping");
785 for(
const auto&
object : assoc->objects()) {
786 if(
helper.objSelected(assoc,
object)) {
788 <<
" with pt " <<
object->pt() <<
", phi " <<
object->phi() );
800 constjet = assoc->getAlternateConstVec();
803 double denom = (assoc->hasAlternateConstVec() ? assoc->getAlternateConstVec() :
jet->jetP4(
"JetConstitScaleMomentum")).
E();
808 double jpx = constjet.Px();
809 double jpy = constjet.Py();
810 double jpt = constjet.Pt();
811 double opx = jpx - calvec.
cpx();
812 double opy = jpy - calvec.
cpy();
818 met_muonEloss = (*metCont)[
"MuonEloss"];
820 ATH_MSG_WARNING(
"Attempted to apply muon Eloss correction, but corresponding MET term does not exist!");
821 return StatusCode::FAILURE;
825 float total_eloss(0);
827 std::vector<const xAOD::Muon*> muons_in_jet;
828 std::vector<const xAOD::Electron*> electrons_in_jet;
829 bool passJetForEl=
false;
831 if(acc_ghostMuons.isAvailable(*
jet)) {
832 for(
const auto&
el : acc_ghostMuons(*
jet)) {
834 muons_in_jet.push_back(
static_cast<const xAOD::Muon*
>(*
el));
837 return StatusCode::FAILURE;
842 return StatusCode::FAILURE;
845 for(
const auto&
obj : assoc->objects()) {
846 if (!
obj) {
continue; }
851 if(acc_originalObject.isAvailable(*mu_test)) mu_test =
static_cast<const xAOD::Muon*
>(*acc_originalObject(*mu_test));
853 muons_in_jet.push_back(mu_test);
860 if(acc_originalObject.isAvailable(*el_test)) el_test =
static_cast<const xAOD::Electron*
>(*acc_originalObject(*el_test));
861 if(
helper.objSelected(assoc,el_test)){
862 if(el_test->pt()>90.0e3) {
863 electrons_in_jet.push_back(el_test);
871 float jet_ORtrk_sumpt = assoc->overlapTrkVec(
helper).
sumpt();
872 float jet_all_trk_pt = initialTrkMom.
sumpt();
873 float jet_unique_trk_pt = jet_all_trk_pt - jet_ORtrk_sumpt;
876 for(
const auto& elec : electrons_in_jet) {
877 el_calvec += assoc->calVec(elec);
878 el_trkvec += assoc->trkVec(elec);
880 float el_cal_pt = el_calvec.
cpt();
881 float el_trk_pt = el_trkvec.
cpt();
883 <<
" jetalltrk: " << jet_all_trk_pt
884 <<
" jetORtrk: " << jet_ORtrk_sumpt
885 <<
" electrk-jetORtrk: " << (el_trk_pt-jet_ORtrk_sumpt)
886 <<
" elec cal: " << el_cal_pt
887 <<
" jetalltrk-electrk: " << (jet_all_trk_pt-el_trk_pt)
888 <<
" jetalltrk-jetORtrk: " << (jet_all_trk_pt-jet_ORtrk_sumpt) );
892 if(el_trk_pt>1
e-9 && jet_unique_trk_pt>10.0
e3) passJetForEl=
true;
895 for(
const xAOD::Muon* mu_in_jet : muons_in_jet) {
896 if (not mu_in_jet)
continue;
897 float mu_Eloss = acc_Eloss(*mu_in_jet);
902 float mu_id_pt = mu_in_jet->trackParticle(xAOD::Muon::InnerDetectorTrackParticle) ? mu_in_jet->trackParticle(xAOD::Muon::InnerDetectorTrackParticle)->pt() : 0.;
903 float jet_trk_sumpt = acc_trksumpt.isAvailable(*
jet) && this->
getPV() ? acc_trksumpt(*
jet)[this->
getPV()->
index()] : 0.;
906 if(0.9999*mu_id_pt>jet_trk_sumpt)
907 jet_trk_sumpt+=mu_id_pt;
908 float jet_trk_N = acc_trkN.isAvailable(*
jet) && this->
getPV() ? acc_trkN(*
jet)[this->
getPV()->
index()] : 0.;
910 ATH_MSG_VERBOSE(
"Jet has pt " <<
jet->pt() <<
", trk sumpt " << jet_trk_sumpt <<
", trk N " << jet_trk_N);
921 float mu_id_pt = mu_in_jet->trackParticle(xAOD::Muon::InnerDetectorTrackParticle) ? mu_in_jet->trackParticle(xAOD::Muon::InnerDetectorTrackParticle)->pt() : 0.;
922 float jet_trk_sumpt = acc_trksumpt.isAvailable(*
jet) && this->
getPV() ? acc_trksumpt(*
jet)[this->
getPV()->
index()] : 0.;
924 if(0.9999*mu_id_pt>jet_trk_sumpt)
925 jet_trk_sumpt+=mu_id_pt;
926 float jet_trk_N = acc_trkN.isAvailable(*
jet) && this->
getPV() ? acc_trkN(*
jet)[this->
getPV()->
index()] : 0.;
929 if (acc_psf.isAvailable(*
jet)){
930 jet_psE = acc_psf(*
jet);
931 }
else if (acc_sampleE.isAvailable(*
jet)){
932 jet_psE = acc_sampleE(*
jet)[0] + acc_sampleE(*
jet)[4];
934 ATH_MSG_ERROR(
"Jet PS fraction or sampling energy must be available to calculate MET with doSetMuonJetEMScale");
935 return StatusCode::FAILURE;
940 ATH_MSG_VERBOSE(
"Jet has trk sumpt " << jet_trk_sumpt <<
", trk N " << jet_trk_N <<
", PS E " << jet_psE <<
", width " << acc_width(*
jet) <<
", emfrac " << acc_emf(*
jet));
943 ATH_MSG_VERBOSE(
"Jet is from muon -- set to EM scale and subtract Eloss.");
946 ATH_MSG_VERBOSE(
"Jet e: " << constjet.E() <<
", mu Eloss: " << mu_Eloss);
947 float elosscorr = mu_Eloss >= constjet.e() ? 0. : 1.-mu_Eloss/constjet.e();
952 ATH_MSG_VERBOSE(
" Jet eloss factor " << elosscorr <<
", final pt: " << sqrt(opx*opx+opy*opy));
959 switch(mu_in_jet->energyLossType()) {
960 case xAOD::Muon::Parametrized:
961 case xAOD::Muon::MOP:
962 case xAOD::Muon::Tail:
963 case xAOD::Muon::FSRcandidate:
964 case xAOD::Muon::NotIsolated:
968 total_eloss += mu_Eloss;
969 muons_selflags |= (1<<assoc->findIndex(mu_in_jet));
977 for(
size_t iKey = 0; iKey < assoc->sizeCal(); iKey++) {
978 bool selector = (muons_selflags & assoc->calkey()[iKey]);
979 if(
selector) mu_calovec += assoc->calVec(iKey);
983 if(
m_muEloss) mu_calovec *= std::max<float>(0.,1-(total_eloss/mu_calovec.
ce()));
988 ATH_MSG_VERBOSE(
"Jet " <<
jet->index() <<
" const pT after OR " << sqrt(opx*opx+opy*opy));
989 opx += mu_calovec.
cpx();
990 opy += mu_calovec.
cpy();
991 double opt = sqrt( opx*opx+opy*opy );
992 ATH_MSG_VERBOSE(
"Jet " <<
jet->index() <<
" const pT diff after OR readding muon clusters " <<
opt-jpt);
993 double uniquefrac = 1. - (calvec.
ce() - mu_calovec.
ce()) / constjet.E();
994 ATH_MSG_VERBOSE(
"Jet constscale px, py, pt, E = " << jpx <<
", " << jpy <<
", " << jpt <<
", " << constjet.E() );
996 ATH_MSG_VERBOSE(
"Jet OR px, py, pt, E = " << opx <<
", " << opy <<
", " <<
opt <<
", " << constjet.E() - calvec.
ce() );
1001 met_muonEloss->add(opx,opy,
opt);
1003 ATH_MSG_WARNING(
"Attempted to apply muon Eloss correction, but corresponding MET term does not exist!");
1004 return StatusCode::FAILURE;
1007 if(selected && !JVT_reject) {
1011 if (!tracksForHardJets) {
1013 metJet->
add(jpx,jpy,jpt);
1014 }
else {*metJet +=
jet;}
1021 if(!tracksForHardJets) {
1025 double jesF =
jet->pt() / jpt;
1026 metJet->
add(opx*jesF,opy*jesF,
opt*jesF);
1030 metJet->
add(uniquefrac*jpx,uniquefrac*jpy,uniquefrac*jpt);
1035 else metJet->
add(uniquefrac*
jet->px(),uniquefrac*
jet->py(),uniquefrac*
jet->pt());
1037 metJet->
add(uniquefrac*
jet->px(),uniquefrac*
jet->py(),uniquefrac*
jet->pt());
1048 if(jetsSgKey == 0) {
1058 uniqueLinks.push_back( jetLink );
1059 uniqueWeights.push_back( uniquefrac );
1061 if(metSoftClus && !JVT_reject) {
1065 softJetLinks.push_back( jetLink );
1066 softJetWeights.push_back( uniquefrac );
1067 metSoftClus->
add(opx,opy,
opt);
1076 for(
size_t iConst=0; iConst<
jet->numConstituents(); ++iConst) {
1077 const IParticle* constit =
jet->rawConstituent(iConst);
1078 softConst->push_back(constit);
1084 if(metSoftTrk && (!hardJet || tracksForHardJets)) {
1089 if(jettrkvec.
ce()>1
e-9) {
1090 jpx = jettrkvec.
cpx();
1091 jpy = jettrkvec.
cpy();
1092 jpt = jettrkvec.
sumpt();
1093 jettrkvec -= trkvec;
1094 opx = jettrkvec.
cpx();
1095 opy = jettrkvec.
cpy();
1097 ATH_MSG_VERBOSE(
"Jet track px, py, sumpt = " << jpx <<
", " << jpy <<
", " << jpt );
1100 opx = opy =
opt = 0;
1103 if (hardJet) metJet->
add(opx,opy,
opt);
1106 metSoftTrk->
add(opx,opy,
opt);
1109 softJetLinks.push_back( jetLink );
1110 softJetWeights.push_back( uniquefrac );
1119 std::vector<const IParticle*> jettracks;
1121 for(
size_t iConst=0; iConst<jettracks.size(); ++iConst) {
1136 ATH_MSG_DEBUG(
"Number of selected jets: " << dec_constitObjLinks(*metJet).size());
1139 dec_constitObjLinks(*metSoftTrk) = softJetLinks;
1140 ATH_MSG_DEBUG(
"Number of softtrk jets: " << dec_constitObjLinks(*metSoftTrk).size());
1144 dec_constitObjLinks(*metSoftClus) = softJetLinks;
1145 ATH_MSG_DEBUG(
"Number of softclus jets: " << dec_constitObjLinks(*metSoftClus).size());
1148 if(softConst)
ATH_MSG_DEBUG(softConst->size() <<
" soft constituents from core term + jets");
1156 double opx = trkvec.
cpx();
1157 double opy = trkvec.
cpy();
1158 double osumpt = trkvec.
sumpt();
1159 ATH_MSG_VERBOSE(
"Misc track px, py, sumpt = " << opx <<
", " << opy <<
", " << osumpt );
1160 metSoftTrk->
add(opx,opy,osumpt);
1162 <<
", mpy " << metSoftTrk->
mpy()
1163 <<
" sumet " << metSoftTrk->
sumet());
1172 float total_eloss(0.);
1175 double opx = calvec.
cpx();
1176 double opy = calvec.
cpy();
1177 double osumpt = calvec.
sumpt();
1178 for(
const auto&
obj : assoc->objects()) {
1182 if(acc_originalObject.isAvailable(*mu_test)) mu_test =
static_cast<const xAOD::Muon*
>(*acc_originalObject(*mu_test));
1184 float mu_Eloss = acc_Eloss(*mu_test);
1185 switch(mu_test->energyLossType()) {
1186 case xAOD::Muon::Parametrized:
1187 case xAOD::Muon::MOP:
1188 case xAOD::Muon::Tail:
1189 case xAOD::Muon::FSRcandidate:
1190 case xAOD::Muon::NotIsolated:
1194 total_eloss += mu_Eloss;
1195 muons_selflags |= (1<<assoc->findIndex(mu_test));
1206 for(
size_t iKey = 0; iKey < assoc->sizeCal(); iKey++) {
1207 bool selector = (muons_selflags & assoc->calkey()[iKey]);
1209 <<
" this calvec E: " << assoc->calVec(iKey).ce());
1210 if(
selector) mu_calovec += assoc->calVec(iKey);
1213 mu_calovec *= std::max<float>(0.,1-(total_eloss/mu_calovec.
ce()));
1214 opx += mu_calovec.
cpx();
1215 opy += mu_calovec.
cpy();
1216 osumpt += mu_calovec.
sumpt();
1220 ATH_MSG_VERBOSE(
"Misc cluster px, py, sumpt = " << opx <<
", " << opy <<
", " << osumpt );
1221 metSoftClus->
add(opx,opy,osumpt);
1223 <<
", mpy " << metSoftClus->
mpy()
1224 <<
" sumet " << metSoftClus->
sumet());
1228 return StatusCode::SUCCESS;
◆ rebuildMET() [1/3]
Implements IMETMaker.
Definition at line 249 of file METMaker.cxx.
271 ATH_MSG_WARNING(
"Incorrect use of rebuildMET -- use rebuildJetMET for RefJet term");
272 return StatusCode::FAILURE;
275 return StatusCode::FAILURE;
279 if(
fillMET(
met,metCont, metKey , metSource) != StatusCode::SUCCESS) {
280 ATH_MSG_ERROR(
"failed to fill MET term \"" << metKey <<
"\"");
281 return StatusCode::FAILURE;
287 if(
fillMET(met_muEloss,metCont,
"MuonEloss",
290 return StatusCode::FAILURE;
◆ rebuildMET() [2/3]
Implements IMETMaker.
Definition at line 297 of file METMaker.cxx.
303 bool removeOverlap =
true;
304 if(!collection->
empty()) {
308 removeOverlap =
false;
◆ rebuildMET() [3/3]
Implements IMETMaker.
Definition at line 316 of file METMaker.cxx.
322 if(!
met || !collection) {
324 <<
"MET (" <<
met <<
") or "
325 <<
"collection (" << collection <<
").");
326 return StatusCode::SUCCESS;
330 ATH_MSG_WARNING(
"MET Association Helper isn't associated with a MissingETAssociationMap!");
331 return StatusCode::SUCCESS;
334 ATH_MSG_WARNING(
"Incomplete association map received. Cannot rebuild MET.");
335 ATH_MSG_WARNING(
"Note: METMaker should only be run on events containing at least one PV");
336 return StatusCode::SUCCESS;
341 std::vector<iplink_t>& uniqueLinks = dec_constitObjLinks(*
met);
342 std::vector<float>& uniqueWeights = dec_constitObjWeights(*
met);
343 uniqueLinks.reserve(collection->
size());
344 uniqueWeights.reserve(collection->
size());
355 collectionSgKey =
getKey(collection);
356 if(collectionSgKey == 0) {
359 return StatusCode::FAILURE;
363 if(!collection->
empty()) {
364 bool originalInputs = !acc_originalObject.isAvailable(*collection->
front());
367 if(isShallowCopy && originalInputs) {
368 ATH_MSG_WARNING(
"Shallow copy provided without \"originalObjectLinks\" decoration! "
369 <<
"Overlap removal cannot be done. "
370 <<
"Will not compute this term.");
371 ATH_MSG_WARNING(
"Please apply xAOD::setOriginalObjectLinks() from xAODBase/IParticleHelpers.h");
372 return StatusCode::SUCCESS;
376 for(
const auto *
const obj : *collection) {
378 bool selected =
false;
379 if(!originalInputs) { orig = *acc_originalObject(*
obj); }
382 std::string
message =
"Object is not in association map. Did you make a deep copy but fail to set the \"originalObjectLinks\" decoration? "
383 "If not, Please apply xAOD::setOriginalObjectLinks() from xAODBase/IParticleHelpers.h";
393 if(collectionSgKey == 0) {
399 uniqueLinks.emplace_back( objLink );
400 uniqueWeights.emplace_back( 0. );
401 message =
"Missing an electron from the MET map. Included as a track in the soft term. pT: " +
std::to_string(
obj->pt()/1
e3) +
" GeV";
409 ATH_MSG_ERROR(
"Missing an object: " << orig->type() <<
" pT: " <<
obj->pt()/1
e3 <<
" GeV, may be duplicated in the soft term.");
417 <<
" is " << ( selected ?
"non-" :
"") <<
"overlapping");
422 std::vector<size_t>
indices = assoc->overlapIndices(orig);
423 std::vector<const xAOD::IParticle*> allObjects = assoc->objects();
426 if(!thisObj)
continue;
429 helper.setObjSelectionFlag(assoc, thisObj,
true);
436 for (
size_t i = 0;
i < assocs.size();
i++) {
437 std::vector<size_t>
ind = assocs[
i]->overlapIndices(orig);
438 std::vector<const xAOD::IParticle*> allObjects = assocs[
i]->objects();
439 for (
size_t indi = 0; indi <
ind.size(); indi++)
if (allObjects[
ind[indi]]) {
441 &&
helper.objSelected(assocs[
i],
ind[indi])) {
463 if(collectionSgKey == 0) {
470 uniqueLinks.push_back( objLink );
471 uniqueWeights.push_back( 1. );
476 return StatusCode::SUCCESS;
◆ rebuildTrackMET() [1/2]
Implements IMETMaker.
Definition at line 527 of file METMaker.cxx.
535 ATH_MSG_VERBOSE(
"Rebuild jet term: " << metJetKey <<
" and soft term: " << softKey);
539 ATH_MSG_ERROR(
"failed to fill MET term \"" << metJetKey <<
"\"");
540 return StatusCode::FAILURE;
546 const MissingET* coreSoft = (*metCoreCont)[softKey+
"Core"];
549 return StatusCode::FAILURE;
551 coreSoftTrk = coreSoft;
553 metSoftTrk =
nullptr;
554 if(
fillMET(metSoftTrk , metCont, softKey , coreSoftTrk->source()) != StatusCode::SUCCESS) {
555 ATH_MSG_ERROR(
"failed to fill MET term \"" << softKey <<
"\"");
556 return StatusCode::FAILURE;
560 metSoftTrk, coreSoftTrk,
◆ rebuildTrackMET() [2/2]
◆ renounce()
◆ renounceArray()
◆ retrieveOverlapRemovedConstituents() [1/3]
Implements IMETMaker.
Definition at line 1263 of file METMaker.cxx.
1278 *constit=*tmp_constit;
1281 for (
const auto *
const ORconstit : *OR_cpfos_tmp){
1282 if (ORconstit->index()==tmp_constit->index() && ORconstit->charge()==tmp_constit->charge()) {
keep=
true;}
1284 if (!
keep){constit->
setP4(0., 0., 0., 0.);}
1286 ATH_MSG_VERBOSE(
"Constituent with index " << tmp_constit->index() <<
", charge " << tmp_constit->charge()<<
" pT " << tmp_constit->pt() << ((
keep==
true) ?
"" :
" not ") <<
" in OverlapRemovedCHSParticleFlowObjects");
1292 *constit=*tmp_constit;
1295 for (
const auto *
const ORconstit : *OR_npfos_tmp){
1296 if (ORconstit->index()==tmp_constit->index() && ORconstit->charge()==tmp_constit->charge()) {
keep=
true;}
1298 if (!
keep){ constit->
setP4(0., 0., 0., 0.); }
1300 ATH_MSG_VERBOSE(
"Constituent with index " << tmp_constit->index() <<
", charge " << tmp_constit->charge()<<
" pT " << tmp_constit->pt() << ((
keep==
true) ?
"" :
" not ") <<
" in OverlapRemovedCHSParticleFlowObjects");
1305 return StatusCode::SUCCESS;
◆ retrieveOverlapRemovedConstituents() [2/3]
◆ retrieveOverlapRemovedConstituents() [3/3]
Implements IMETMaker.
Definition at line 1321 of file METMaker.cxx.
1329 std::vector<size_t> muon_index;
1331 bool originalInputs = !acc_originalObject.isAvailable(*muonCollection->
front());
1333 for(
const auto *
const obj : *muonCollection) {
1335 if(!originalInputs) { orig = *acc_originalObject(*
obj); }
1337 if(assocs.empty()) {
1338 ATH_MSG_WARNING(
"Object is not in association map. Did you make a deep copy but fail to set the \"originalObjectLinks\" decoration?");
1339 ATH_MSG_WARNING(
"If not, Please apply xAOD::setOriginalObjectLinks() from xAODBase/IParticleHelpers.h");
1342 ATH_MSG_DEBUG(
"Muon with index "<<orig->index() <<
" is selected. Flag it as non selected before getOverlapRemovedSignals");
1343 muon_index.push_back(orig->index());
1344 for(
size_t i = 0;
i < assocs.size();
i++)
helper.setObjSelectionFlag(assocs[
i],orig,
false);
1367 if (retainMuon && !muon_index.empty()){
1368 bool originalInputs = !acc_originalObject.isAvailable(*muonCollection->front());
1369 for(
const auto *
const obj : *muonCollection) {
1371 if(!originalInputs) { orig = *acc_originalObject(*
obj); }
1373 for (
size_t ind=0;
ind<muon_index.size();
ind++){
1374 if(orig->index()==muon_index.at(
ind)) {
1375 for(
size_t i = 0;
i < assocs.size();
i++)
helper.setObjSelectionFlag(assocs[
i],orig,
true);
◆ 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_acc_jetJvtMoment
◆ m_acc_jetRejectionDec
◆ m_CenJetPtCut
double met::METMaker::m_CenJetPtCut |
|
private |
◆ m_customCenJetPtCut
double met::METMaker::m_customCenJetPtCut |
|
private |
◆ m_customFwdJetPtCut
double met::METMaker::m_customFwdJetPtCut |
|
private |
◆ m_customJvtCut
double met::METMaker::m_customJvtCut |
|
private |
◆ m_customJvtPtMax
double met::METMaker::m_customJvtPtMax |
|
private |
◆ m_customJvtWP
std::string met::METMaker::m_customJvtWP |
|
private |
◆ m_detStore
◆ m_doConstJet
bool met::METMaker::m_doConstJet |
|
private |
◆ m_doPFlow
bool met::METMaker::m_doPFlow |
|
private |
◆ m_doRemoveElecTrks
bool met::METMaker::m_doRemoveElecTrks |
|
private |
◆ m_doRemoveElecTrksEM
bool met::METMaker::m_doRemoveElecTrksEM |
|
private |
◆ m_doRemoveMuonJets
bool met::METMaker::m_doRemoveMuonJets |
|
private |
◆ m_doSetMuonJetEMScale
bool met::METMaker::m_doSetMuonJetEMScale |
|
private |
◆ m_doSoftTruth
bool met::METMaker::m_doSoftTruth |
|
private |
◆ m_evtStore
◆ m_FwdJetPtCut
double met::METMaker::m_FwdJetPtCut |
|
private |
◆ m_greedyPhotons
bool met::METMaker::m_greedyPhotons |
|
private |
◆ m_jetConstitScaleMom
std::string met::METMaker::m_jetConstitScaleMom |
|
private |
◆ m_jetCorrectPhi
bool met::METMaker::m_jetCorrectPhi |
|
private |
◆ m_jetEmfMuOlap
double met::METMaker::m_jetEmfMuOlap |
|
private |
◆ m_JetEtaForw
double met::METMaker::m_JetEtaForw |
|
private |
◆ m_JetEtaMax
double met::METMaker::m_JetEtaMax |
|
private |
◆ m_jetJvtMomentName
std::string met::METMaker::m_jetJvtMomentName |
|
private |
◆ m_jetMinEfrac
double met::METMaker::m_jetMinEfrac |
|
private |
◆ m_jetMinWeightedPt
double met::METMaker::m_jetMinWeightedPt |
|
private |
◆ m_jetPsEMuOlap
double met::METMaker::m_jetPsEMuOlap |
|
private |
◆ m_jetRejectionDec
std::string met::METMaker::m_jetRejectionDec |
|
private |
◆ m_jetSelection
std::string met::METMaker::m_jetSelection |
|
private |
◆ m_jetTrkNMuOlap
int met::METMaker::m_jetTrkNMuOlap |
|
private |
◆ m_jetTrkPtMuPt
double met::METMaker::m_jetTrkPtMuPt |
|
private |
◆ m_jetWidthMuOlap
double met::METMaker::m_jetWidthMuOlap |
|
private |
◆ m_JvtCut
double met::METMaker::m_JvtCut |
|
private |
◆ m_JvtCutMedium
double met::METMaker::m_JvtCutMedium |
|
private |
◆ m_JvtCutTight
double met::METMaker::m_JvtCutTight |
|
private |
◆ m_JvtMediumPtMax
double met::METMaker::m_JvtMediumPtMax |
|
private |
◆ m_JvtPtMax
double met::METMaker::m_JvtPtMax |
|
private |
◆ m_JvtTightPtMax
double met::METMaker::m_JvtTightPtMax |
|
private |
◆ m_JvtTool
◆ m_JvtWP
std::string met::METMaker::m_JvtWP |
|
private |
◆ m_missObjWarningPtThreshold
float met::METMaker::m_missObjWarningPtThreshold |
|
private |
◆ m_muEloss
bool met::METMaker::m_muEloss |
|
private |
◆ m_muIDPTJetPtRatioMuOlap
double met::METMaker::m_muIDPTJetPtRatioMuOlap |
|
private |
◆ m_orCaloTaggedMuon
bool met::METMaker::m_orCaloTaggedMuon |
|
private |
◆ m_PVkey
◆ m_skipSystematicJetSelection
bool met::METMaker::m_skipSystematicJetSelection |
|
private |
◆ m_trkseltool
◆ m_useGhostMuons
bool met::METMaker::m_useGhostMuons |
|
private |
◆ m_useR21JvtFallback
bool met::METMaker::m_useR21JvtFallback |
|
private |
◆ m_varHandleArraysDeclared
◆ m_veryGreedyPhotons
bool met::METMaker::m_veryGreedyPhotons |
|
private |
◆ m_vhka
The documentation for this class was generated from the following files:
Electron_v1 Electron
Definition of the current "egamma version".
bool m_skipSystematicJetSelection
static Types::bitmask_t muon(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed muons.
virtual StatusCode rebuildJetMET(const std::string &metJetKey, const std::string &softClusKey, const std::string &softTrkKey, xAOD::MissingETContainer *metCont, const xAOD::JetContainer *jets, const xAOD::MissingETContainer *metCoreCont, xAOD::MissingETAssociationHelper &helper, bool doJetJVT) override final
@ PhysicsObject
Physics object based.
double m_customFwdJetPtCut
@ TruthParticle
Truth particle based.
virtual StatusCode rebuildTrackMET(const std::string &metJetKey, const std::string &softTrkKey, xAOD::MissingETContainer *metCont, const xAOD::JetContainer *jets, const xAOD::MissingETContainer *metCoreCont, xAOD::MissingETAssociationHelper &helper, bool doJetJVT) override final
float m_missObjWarningPtThreshold
MET association descriptor contains object links and corresponding parameters.
std::unique_ptr< SG::AuxElement::ConstAccessor< float > > m_acc_jetJvtMoment
float sumet() const
Returns.
bool m_doSetMuonJetEMScale
const IParticleContainer * getOverlapRemovedSignals(const MissingETAssociationHelper &helper, const IParticleContainer *signals, MissingETBase::UsageHandler::Policy p=MissingETBase::UsageHandler::TrackCluster) const
Extract a container of constituents that do not overlap physics objects.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
std::string m_jetConstitScaleMom
std::pair< long int, long int > indices
static Types::bitmask_t electron(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed electrons.
std::string m_jetSelection
static bool objSelected(const MissingETAssociationHelper &helper, const IParticle *obj)
Class creating a shallow copy of an existing auxiliary container.
static Types::bitmask_t track(Region reg=Region::FullAcceptance)
Bit mask for MET term from Track signal objects.
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
virtual Type::ObjectType type() const =0
The type of the object as a simple enumeration.
@ Central
Indicator for MET contribution from the central region.
Helper class to provide constant type-safe access to aux data.
#define ATH_MSG_VERBOSE(x)
uint64_t bitmask_t
Type for status word bit mask.
MissingETAssociation_v1 MissingETAssociation
Version control by type definition.
Class providing the definition of the 4-vector interface.
@ OnlyCluster
CaloCluster based only.
static bool isTrackTerm(Types::bitmask_t bits, Region reg=Region::FullAcceptance)
double m_muIDPTJetPtRatioMuOlap
virtual double pt() const =0
transverse momentum
double m_customCenJetPtCut
Vector sum of constituents for subtractive overlap removal.
@ Muon
Indicator for the MET term from reconstructed or MC truth muons.
virtual void setOwner(IDataHandleHolder *o)=0
TrackParticle_v1 TrackParticle
Reference the current persistent version:
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
static MissingETBase::Types::constvec_t getConstVec(const MissingETAssociationMap *pMap, const IParticle *pPart, MissingETBase::UsageHandler::Policy p)
@ OWN_ELEMENTS
this data object owns its elements
PFO_v1 PFO
Definition of the current "pfo version".
static Types::bitmask_t jet(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed jets.
float cpy() const
Returns .
float sumpt() const
Returns sum of component pt.
const T * front() const
Access the first element in the collection as an rvalue.
@ Calo
Indicator for MET terms reconstructed from calorimeter signals alone.
SG::ReadHandleKey< xAOD::VertexContainer > m_PVkey
float mpx() const
Returns .
std::string m_customJvtWP
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)
const MissingETAssociation_v1 * getMiscAssociation() const
Get an association for miscellaneous objects not associated to jets.
size_t index() const
Return the index of this element within its container.
const std::string & name() const
Identifier getters.
bool m_doRemoveElecTrksEM
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Policy
Policies on usage checks.
void add(const IParticle *particle)
Add particle kinematics to MET.
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Class describing a particle flow object.
static Types::bitmask_t tau(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed tau leptons.
std::string to_string(const DetectorType &type)
@ OnlyTrack
Track based only.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
MissingETBase::Types::bitmask_t source() const
MET object source tag.
static const MissingETAssociation * getAssociation(const MissingETAssociationMap *pMap, const Jet *pJet)
uint32_t sgkey_t
Type used for hashed StoreGate key+CLID pairs.
std::unique_ptr< SG::AuxElement::ConstAccessor< char > > m_acc_jetRejectionDec
double m_jetMinWeightedPt
virtual StatusCode rebuildMET(const std::string &metKey, xAOD::Type::ObjectType metType, xAOD::MissingETContainer *metCont, const xAOD::IParticleContainer *collection, xAOD::MissingETAssociationHelper &helper, MissingETBase::UsageHandler::Policy objScale) override final
@ ParticleFlow
Particle Flow Object based.
Photon_v1 Photon
Definition of the current "egamma version".
struct TBPatternUnitContext Muon
void setP4(const FourMom_t &vec)
set the 4-vec
Class describing a Vertex.
#define ATH_MSG_WARNING(x)
const xAOD::Vertex * getPV() const
float cpt() const
Returns .
bool acceptTrack(const xAOD::TrackParticle *trk, const xAOD::Vertex *vx) const
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
SG::OwnershipPolicy ownPolicy() const
Return the ownership policy setting for this container.
std::string m_jetJvtMomentName
@ Tau
The object is a tau (jet)
static Types::bitmask_t photon(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed photons.
StatusCode fillMET(xAOD::MissingET *&met, xAOD::MissingETContainer *metCont, const std::string &metKey, const MissingETBase::Types::bitmask_t metSource)
const SG::AuxVectorData * container() const
Return the container holding this element.
float cpx() const
Returns .
float mpy() const
Returns .
virtual StatusCode retrieveOverlapRemovedConstituents(const xAOD::PFOContainer *cpfo, const xAOD::PFOContainer *npfo, xAOD::MissingETAssociationHelper &metHelper, xAOD::PFOContainer *OR_cpfos, xAOD::PFOContainer *OR_npfos, bool retainMuon=false, const xAOD::IParticleContainer *muonCollection=0) override final
setBGCode setTAP setLVL2ErrorBits bool
virtual double pt() const
The transverse momentum ( ) of the particle.
static bool selectIfNoOverlaps(MissingETAssociationHelper &helper, const IParticle *obj, MissingETBase::UsageHandler::Policy p)
ToolHandle< IAsgSelectionTool > m_JvtTool
size_type size() const noexcept
Returns the number of elements in the collection.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
float ce() const
Returns .
Jet_v1 Jet
Definition of the current "jet version".
std::string m_jetRejectionDec
bool empty() const noexcept
Returns true if the collection is empty.
static std::vector< const MissingETAssociation * > getAssociations(const MissingETAssociationMap *pMap, const IParticle *pPart)
Access non-modifiable contribution object.
MuonType muonType() const
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkseltool
ElementLink< xAOD::IParticleContainer > iplink_t