119 "EXPERIMENTAL: whether to use simplified OR based on nominal jets "
120 "and for jet-related systematics only. "
121 "WARNING: this property is strictly for doing physics studies of the feasibility "
122 "of this OR scheme, it should not be used in a regular analysis");
156 ATH_MSG_INFO(
"Custom jet selection configured. *** FOR EXPERT USE ONLY ***");
163 ATH_MSG_INFO(
"Jet selection for hadronic recoil calculation is configured.");
171 ATH_MSG_ERROR(
"Error: No available jet selection found! Please update JetSelection in ColumnarMETMaker. Choose one: Loose, Tight (recommended), Tighter, Tenacious" );
172 return StatusCode::FAILURE;
202 ATH_MSG_INFO(
"Requesting simplified overlap removal procedure in MET calculation");
212 return StatusCode::SUCCESS;
228 return StatusCode::FAILURE;
232 ATH_MSG_ERROR(
"No input collection provided for MET term \"" << metKey <<
"\"");
233 return StatusCode::FAILURE;
261 ATH_MSG_WARNING(
"Incorrect use of rebuildMET -- use rebuildJetMET for RefJet term");
262 return StatusCode::FAILURE;
265 return StatusCode::FAILURE;
274 return StatusCode::FAILURE;
289 return StatusCode::FAILURE;
293 ATH_MSG_ERROR(
"No input collection provided for MET term \"" <<
met->name() <<
"\"");
294 return StatusCode::FAILURE;
306 bool removeOverlap =
true;
309 removeOverlap =
false;
313 return rebuildMET(
met,collection,helper,p,removeOverlap,objScale);
322 if(!
met || !collection) {
324 <<
"MET (" <<
met <<
") or "
325 <<
"collection (" << collection <<
").");
326 return StatusCode::FAILURE;
338 if(helper.map().empty()) {
339 ATH_MSG_WARNING(
"Incomplete association map received. Cannot rebuild MET.");
340 ATH_MSG_WARNING(
"Note: ColumnarMETMaker should only be run on events containing at least one PV");
341 return StatusCode::SUCCESS;
346 if(collection.empty())
return StatusCode::SUCCESS;
349 if(collectionOriginals.isShallowCopy() && collectionOriginals.originalInputs()) {
350 ATH_MSG_WARNING(
"Shallow copy provided without \"originalObjectLinks\" decoration! "
351 <<
"Overlap removal cannot be done. "
352 <<
"Will not compute this term.");
353 ATH_MSG_WARNING(
"Please apply xAOD::setOriginalObjectLink() from xAODBase/IParticleHelpers.h");
354 return StatusCode::SUCCESS;
356 ATH_MSG_VERBOSE(
"Original inputs? " << collectionOriginals.originalInputs());
357 for(
const auto obj : collection) {
359 bool selected =
false;
360 auto orig = collectionOriginals.getOriginal(obj);
361 auto assocs = helper.getAssociations(orig);
363 std::string message =
"Object is not in association map. Did you make a deep copy but fail to set the \"originalObjectLinks\" decoration? "
364 "If not, Please apply xAOD::setOriginalObjectLink() from xAODBase/IParticleHelpers.h";
373 metWeights.emplace_back( obj, 0 );
374 message =
"Missing an electron from the MET map. Included as a track in the soft term. pT: " + std::to_string(
m_inputMomAcc.pt(obj)/1e3) +
" GeV";
387 if(helper.objSelected(orig))
continue;
388 selected = helper.selectIfNoOverlaps(orig,p) || !removeOverlap;
390 <<
" is " << ( selected ?
"non-" :
"") <<
"overlapping");
394 for(
auto assoc : assocs){
395 auto indices =
m_assocAcc.overlapIndices(assoc,orig);
397 for (
size_t index : indices){
399 if(!thisObj)
continue;
402 helper.setObjSelectionFlag(assoc, thisObj,
true);
409 for (
decltype(
auto) assoc : assocs) {
410 auto ind =
m_assocAcc.overlapIndices(assoc,orig);
412 for (
size_t indi = 0; indi < ind.size(); indi++)
if (allObjects[ind[indi]]) {
413 if (allObjects[ind[indi]].isContainer<columnar::ContainerId::electron>()
414 && helper.objSelected(assoc, ind[indi])) {
433 metWeights.emplace_back( obj, 1. );
437 return StatusCode::SUCCESS;
441 const std::string& softKey,
448 if (!metCont || !metCoreCont)
451 return StatusCode::FAILURE;
455 ATH_MSG_ERROR(
"No input collection provided for MET term \"" << metJetKey <<
"\" and soft term: " << softKey);
456 return StatusCode::FAILURE;
463 const std::string& softKey,
470 ATH_MSG_VERBOSE(
"Rebuild jet term: " << metJetKey <<
" and soft term: " << softKey);
480 return StatusCode::FAILURE;
483 coreSoftTrk = coreSoft;
487 coreSoftClus = coreSoft;
493 metSoftClus, coreSoftClus,
494 metSoftTrk, coreSoftTrk,
499 const std::string& softKey,
509 return StatusCode::FAILURE;
513 ATH_MSG_ERROR(
"No input collection provided for MET term \"" << metJetKey <<
"\" and soft term: " << softKey);
514 return StatusCode::FAILURE;
521 const std::string& softKey,
528 ATH_MSG_VERBOSE(
"Rebuild jet term: " << metJetKey <<
" and soft term: " << softKey);
535 return StatusCode::FAILURE;
537 auto coreSoftTrk = coreSoft.value();
542 metSoftTrk, coreSoftTrk,
547 const std::string& softClusKey,
548 const std::string& softTrkKey,
558 return StatusCode::FAILURE;
562 ATH_MSG_ERROR(
"No input collection provided for MET term \"" << metJetKey <<
"\" and soft term: " << softClusKey <<
" and " << softTrkKey);
563 return StatusCode::FAILURE;
570 const std::string& softClusKey,
571 const std::string& softTrkKey,
586 ATH_MSG_WARNING(
"Invalid cluster soft term key supplied: " << softClusKey);
587 return StatusCode::FAILURE;
590 ATH_MSG_WARNING(
"Invalid track soft term key supplied: " << softTrkKey);
591 return StatusCode::FAILURE;
598 metSoftClus, coreSoftClus,
599 metSoftTrk, coreSoftTrk,
611 bool tracksForHardJets,
612 std::vector<const xAOD::IParticle*>* softConst)
const {
613 if(!metJet || !jets) {
615 <<
"MET (" << metJet <<
") or "
616 <<
"jet collection (" << jets <<
").");
617 return StatusCode::FAILURE;
623 doJetJVT, tracksForHardJets, softConst);
635 bool tracksForHardJets,
636 std::vector<const xAOD::IParticle*>* softConst)
const {
638 ATH_MSG_WARNING(
"Requested soft track element links, but no track selection tool supplied.");
642 if(helper.map().empty()) {
643 ATH_MSG_WARNING(
"Incomplete association map received. Cannot rebuild MET.");
644 ATH_MSG_WARNING(
"Note: ColumnarMETMaker should only be run on events containing at least one PV");
645 return StatusCode::SUCCESS;
648 if(doJetJVT &&
m_JvtWP ==
"None"){
654 if(!metSoftClus && !metSoftTrk) {
655 ATH_MSG_WARNING(
"Neither soft cluster nor soft track term has been supplied!");
656 return StatusCode::SUCCESS;
659 std::optional<columnar::MetHelpers::ObjectWeightHandle<columnar::ContainerId::mutableMet,columnar::ContainerId::jet>> metSoftClusLinks;
663 ATH_MSG_ERROR(
"Soft cluster term provided without a core term!");
664 return StatusCode::FAILURE;
674 if(softConst && acc_softConst.
isAvailable(*coreSoftClus.getXAODObject())) {
675 for(
const auto& constit : acc_softConst(*coreSoftClus.getXAODObject())) {
676 softConst->push_back(*constit);
678 ATH_MSG_DEBUG(softConst->size() <<
" soft constituents from core term");
681 std::optional<columnar::MetHelpers::ObjectWeightHandle<columnar::ContainerId::mutableMet,columnar::ContainerId::jet>> metSoftTrkLinks;
685 ATH_MSG_ERROR(
"Soft track term provided without a core term!");
686 return StatusCode::FAILURE;
694 for(
const auto& constit : acc_softConst(*coreSoftTrk.getXAODObject())) {
695 softConst->push_back(*constit);
697 ATH_MSG_DEBUG(softConst->size() <<
" soft constituents from trk core term");
711 for(
auto jet : jets) {
712 auto originalJet = jetsOriginals.getOriginal(
jet);
713 auto assoc = helper.getJetAssociation(originalJet);
726 ATH_MSG_ERROR(
"No nominal calibrated jet available for jet " <<
jet <<
". Cannot simplify overlap removal!");
731 bool JVT_reject(
false);
732 bool isMuFSRJet(
false);
741 ATH_MSG_VERBOSE(
"Jet " << (JVT_reject ?
"fails" :
"passes") <<
" JVT selection");
748 bool caloverlap =
false;
749 caloverlap = calvec.
ce()>0;
750 ATH_MSG_DEBUG(
"Jet " <<
jet <<
" is " << ( caloverlap ?
"" :
"non-") <<
"overlapping");
753 for(
const auto object :
m_assocAcc.objects(*assoc)) {
762 constjet =
m_assocAcc.getAlternateConstVec(*assoc);
766 constSF = denom>1
e-9 ? constjet.E()/denom : 0.;
770 double jpx = constjet.Px();
771 double jpy = constjet.Py();
772 double jpt = constjet.Pt();
773 double opx = jpx - calvec.
cpx();
774 double opy = jpy - calvec.
cpy();
781 ATH_MSG_WARNING(
"Attempted to apply muon Eloss correction, but corresponding MET term does not exist!");
782 return StatusCode::FAILURE;
786 float total_eloss(0);
788 std::vector<columnar::MuonId> muons_in_jet;
789 std::vector<columnar::ElectronId> electrons_in_jet;
790 bool passJetForEl=
false;
794 return StatusCode::FAILURE;
798 ATH_MSG_ERROR(
"Invalid element link to ghost muon! Quitting.");
799 return StatusCode::FAILURE;
801 muons_in_jet.push_back(*
static_cast<const xAOD::Muon*
>(*el));
804 for(
const auto obj :
m_assocAcc.objects(*assoc)) {
813 if(helper.objSelected(mu_test)) {
814 muons_in_jet.push_back(mu_test);
824 if(helper.objSelected(*assoc,el_test)){
826 electrons_in_jet.push_back(el_test);
834 float jet_ORtrk_sumpt = helper.overlapTrkVec(*assoc).sumpt();
835 float jet_all_trk_pt = initialTrkMom.
sumpt();
836 float jet_unique_trk_pt = jet_all_trk_pt - jet_ORtrk_sumpt;
839 for(
const auto& elec : electrons_in_jet) {
841 el_trkvec +=
m_assocAcc.trkVec(*assoc,&elec.getXAODObject());
843 float el_cal_pt = el_calvec.
cpt();
844 float el_trk_pt = el_trkvec.
cpt();
846 <<
" jetalltrk: " << jet_all_trk_pt
847 <<
" jetORtrk: " << jet_ORtrk_sumpt
848 <<
" electrk-jetORtrk: " << (el_trk_pt-jet_ORtrk_sumpt)
849 <<
" elec cal: " << el_cal_pt
850 <<
" jetalltrk-electrk: " << (jet_all_trk_pt-el_trk_pt)
851 <<
" jetalltrk-jetORtrk: " << (jet_all_trk_pt-jet_ORtrk_sumpt) );
855 if(el_trk_pt>1
e-9 && jet_unique_trk_pt>10.0e3) passJetForEl=
true;
858 for(
auto mu_in_jet : muons_in_jet) {
859 float mu_Eloss =
acc_Eloss(mu_in_jet.getXAODObject());
864 float mu_id_pt = mu_in_jet.getXAODObject().trackParticle(xAOD::Muon::InnerDetectorTrackParticle) ? mu_in_jet.getXAODObject().trackParticle(xAOD::Muon::InnerDetectorTrackParticle)->pt() : 0.;
868 if(0.9999*mu_id_pt>jet_trk_sumpt)
869 jet_trk_sumpt+=mu_id_pt;
882 float mu_id_pt = mu_in_jet.getXAODObject().trackParticle(xAOD::Muon::InnerDetectorTrackParticle) ? mu_in_jet.getXAODObject().trackParticle(xAOD::Muon::InnerDetectorTrackParticle)->pt() : 0.;
885 if(0.9999*mu_id_pt>jet_trk_sumpt)
886 jet_trk_sumpt+=mu_id_pt;
895 ATH_MSG_ERROR(
"Jet PS fraction or sampling energy must be available to calculate MET with doSetMuonJetEMScale");
896 return StatusCode::FAILURE;
904 ATH_MSG_VERBOSE(
"Jet is from muon -- set to EM scale and subtract Eloss.");
907 ATH_MSG_VERBOSE(
"Jet e: " << constjet.E() <<
", mu Eloss: " << mu_Eloss);
908 float elosscorr = mu_Eloss >= constjet.e() ? 0. : 1.-mu_Eloss/constjet.e();
913 ATH_MSG_VERBOSE(
" Jet eloss factor " << elosscorr <<
", final pt: " << sqrt(opx*opx+opy*opy));
920 switch(mu_in_jet.getXAODObject().energyLossType()) {
921 case xAOD::Muon::Parametrized:
922 case xAOD::Muon::MOP:
923 case xAOD::Muon::Tail:
924 case xAOD::Muon::FSRcandidate:
925 case xAOD::Muon::NotIsolated:
929 total_eloss += mu_Eloss;
930 muons_selflags |= (1<<
m_assocAcc.findIndex(*assoc,mu_in_jet));
938 for(
size_t iKey = 0; iKey <
m_assocAcc.sizeCal(*assoc); iKey++) {
939 bool selector = (muons_selflags &
m_assocAcc.calkey(*assoc)[iKey]);
940 if(selector) mu_calovec +=
m_assocAcc.calVec(*assoc,iKey);
944 if(
m_muEloss) mu_calovec *= std::max<float>(0.,1-(total_eloss/mu_calovec.
ce()));
950 opx += mu_calovec.
cpx();
951 opy += mu_calovec.
cpy();
952 double opt = sqrt( opx*opx+opy*opy );
953 ATH_MSG_VERBOSE(
"Jet " <<
jet <<
" const pT diff after OR readding muon clusters " << opt-jpt);
954 double uniquefrac = 1. - (calvec.
ce() - mu_calovec.
ce()) / constjet.E();
955 ATH_MSG_VERBOSE(
"Jet constscale px, py, pt, E = " << jpx <<
", " << jpy <<
", " << jpt <<
", " << constjet.E() );
957 ATH_MSG_VERBOSE(
"Jet OR px, py, pt, E = " << opx <<
", " << opy <<
", " << opt <<
", " << constjet.E() - calvec.
ce() );
961 ATH_MSG_ERROR(
"Attempted to apply muon Eloss correction, but corresponding MET term does not exist!");
962 return StatusCode::FAILURE;
968 if(selected && !JVT_reject) {
972 if (!tracksForHardJets) {
982 if(!tracksForHardJets) {
992 m_outputMetMomAcc.addParticle(metJet,uniquefrac*jpx,uniquefrac*jpy,uniquefrac*jpt);
1006 metJetWeights.emplace_back(
jet, uniquefrac);
1008 if(metSoftClus && !JVT_reject) {
1012 metSoftClusLinks->emplace_back (
jet, uniquefrac);
1022 for(
size_t iConst=0; iConst<
jet.getXAODObject().numConstituents(); ++iConst) {
1023 const IParticle* constit =
jet.getXAODObject().rawConstituent(iConst);
1024 softConst->push_back(constit);
1030 if(!metSoftTrk || (hardJet && !tracksForHardJets))
continue;
1036 if(jettrkvec.
ce()>1
e-9) {
1037 jpx = jettrkvec.
cpx();
1038 jpy = jettrkvec.
cpy();
1039 jpt = jettrkvec.
sumpt();
1040 jettrkvec -= trkvec;
1041 opx = jettrkvec.
cpx();
1042 opy = jettrkvec.
cpy();
1043 opt = jettrkvec.
sumpt();
1044 ATH_MSG_VERBOSE(
"Jet track px, py, sumpt = " << jpx <<
", " << jpy <<
", " << jpt );
1045 ATH_MSG_VERBOSE(
"Jet OR px, py, sumpt = " << opx <<
", " << opy <<
", " << opt );
1047 opx = opy = opt = 0;
1055 if (metSoftTrkLinks) metSoftTrkLinks->emplace_back (
jet, uniquefrac);
1064 std::vector<const IParticle*> jettracks;
1066 for(
size_t iConst=0; iConst<jettracks.size(); ++iConst) {
1068 if (
acceptTrack(pTrk,pv)) softConst->push_back(pTrk);
1074 ATH_MSG_DEBUG(
"Number of selected jets: " << metJetWeights.size());
1077 ATH_MSG_DEBUG(
"Number of softtrk jets: " << metSoftTrkLinks->size());
1081 ATH_MSG_DEBUG(
"Number of softclus jets: " << metSoftClusLinks->size());
1084 if(softConst)
ATH_MSG_DEBUG(softConst->size() <<
" soft constituents from core term + jets");
1086 auto assoc = helper.getMiscAssociation();
1087 if(!assoc)
return StatusCode::SUCCESS;
1093 double opx = trkvec.
cpx();
1094 double opy = trkvec.
cpy();
1095 double osumpt = trkvec.
sumpt();
1096 ATH_MSG_VERBOSE(
"Misc track px, py, sumpt = " << opx <<
", " << opy <<
", " << osumpt );
1106 float total_eloss(0.);
1109 double opx = calvec.
cpx();
1110 double opy = calvec.
cpy();
1111 double osumpt = calvec.
sumpt();
1112 for(
const auto objId :
m_assocAcc.objects(*assoc)) {
1113 auto *obj = objId.getXAODObject();
1117 if(helper.objSelected(mu_test)) {
1120 case xAOD::Muon::Parametrized:
1121 case xAOD::Muon::MOP:
1122 case xAOD::Muon::Tail:
1123 case xAOD::Muon::FSRcandidate:
1124 case xAOD::Muon::NotIsolated:
1128 total_eloss += mu_Eloss;
1129 muons_selflags |= (1<<
m_assocAcc.findIndex(*assoc,mu_test));
1139 for(
size_t iKey = 0; iKey <
m_assocAcc.sizeCal(*assoc); iKey++) {
1140 bool selector = (muons_selflags &
m_assocAcc.calkey(*assoc)[iKey]);
1142 <<
" this calvec E: " <<
m_assocAcc.calVec(*assoc,iKey).ce());
1143 if(selector) mu_calovec +=
m_assocAcc.calVec(*assoc,iKey);
1146 mu_calovec *= std::max<float>(0.,1-(total_eloss/mu_calovec.
ce()));
1147 opx += mu_calovec.
cpx();
1148 opy += mu_calovec.
cpy();
1149 osumpt += mu_calovec.
sumpt();
1153 ATH_MSG_VERBOSE(
"Misc cluster px, py, sumpt = " << opx <<
", " << opy <<
", " << osumpt );
1160 return StatusCode::SUCCESS;
1168 bool doJetJVT)
const {
1170 ATH_MSG_ERROR(
"No MET object provided for track MET rebuilding");
1171 return StatusCode::FAILURE;
1174 ATH_MSG_ERROR(
"No MET object provided for soft track MET rebuilding");
1175 return StatusCode::FAILURE;
1178 ATH_MSG_ERROR(
"No jet container provided for track MET rebuilding");
1179 return StatusCode::FAILURE;
1192 bool doJetJVT)
const {
1193 return rebuildJetMET(metJet,metCont,jets,helper,std::nullopt,
nullptr,metSoftTrk,coreSoftTrk,doJetJVT,
true);
1202 ATH_MSG_ERROR(
"No object container provided for marking invisible");
1203 return StatusCode::FAILURE;
1206 ATH_MSG_ERROR(
"No MET container provided for marking invisible");
1207 return StatusCode::FAILURE;
1223 return static_cast<bool>(
m_trkseltool->accept( *trk, vx ));
1231 ATH_MSG_WARNING(
"Unable to retrieve primary vertex container PrimaryVertices");
1234 ATH_MSG_DEBUG(
"Successfully retrieved primary vertex container");
1255 throw std::runtime_error (
"Failed to rebuild MET");
1260 throw std::runtime_error (
"Failed to rebuild jet MET");
1265 throw std::runtime_error (
"Failed to rebuild track MET");
1268 throw std::runtime_error (
"Unknown columnar operation");
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
Base class for elements of a container that can have aux data.
Defines enum to access jet attribute and associated particles/objects.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
ElementLink implementation for ROOT usage.
SG::ConstAccessor< T, ALLOC > ConstAccessor
SG::Accessor< T, ALLOC > Accessor
const SG::AuxVectorData * container() const
Return the container holding this element.
size_t index() const
Return the index of this element within its container.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode setProperty(const std::string &name, const T &value)
set the given property
a "handle" for recording object weights via ObjectWeightDecorator
double m_jetMinWeightedPt
Gaudi::Property< std::string > m_inputPreselectionName
bool m_skipSystematicJetSelection
columnar::MetHelpers::MapLookupAccessor< columnar::ContainerId::mutableMet > m_outputMetMapAcc
void callEvents(columnar::EventContextRange events) const override
Gaudi::Property< std::string > m_columnarJetKey
bool acceptTrack(const xAOD::TrackParticle *trk, const xAOD::Vertex *vx) const
columnar::MetHelpers::ObjectWeightDecorator< columnar::ContainerId::mutableMet, columnar::ContainerId::jet > m_jetOutputMetWeightDecSoft
columnar::JetAccessor< float > m_acc_width
columnar::JetAccessor< std::vector< int > > m_acc_trkN
float m_missObjWarningPtThreshold
std::optional< columnar::ParticleAccessor< char > > m_inputPreselectionAcc
double m_customCenJetPtCut
columnar::MetAssocationAccessors m_assocAcc
virtual ~ColumnarMETMaker()
Destructor:
virtual StatusCode markInvisible(const xAOD::IParticleContainer *collection, xAOD::MissingETAssociationHelper &helper, xAOD::MissingETContainer *metCont) const override final
virtual StatusCode initialize() override final
Dummy implementation of the initialisation function.
columnar::MetHelpers::MetMomentumAccessors< columnar::ContainerId::mutableMet > m_outputMetMomAcc
columnar::Met1Accessor< columnar::ObjectColumn > m_inputMetHandle
columnar::ColumnAccessor< columnar::ContainerId::metAssociation, columnar::ObjectColumn > m_metAssocHandle
columnar::ParticleAccessor< columnar::RetypeColumn< xAOD::Muon::MuonType, std::uint16_t > > m_inputMuonTypeAcc
columnar::MutableMetAccessor< std::string > m_outputMetNameAcc
double m_customFwdJetPtCut
columnar::JetAccessor< float > m_acc_emf
std::optional< columnar::MetHelpers::InputMomentumAccessors< columnar::ContainerId::jet > > m_jetConstitScaleMomFixedAcc
columnar::MetHelpers::MapLookupAccessor< columnar::ContainerId::met1 > m_inputMetMapAcc
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkseltool
columnar::JetAccessor< columnar::ObjectColumn > m_jetsHandle
columnar::MutableMetAccessor< columnar::ObjectColumn > m_outputMetHandle
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) const override final
std::string m_jetJvtMomentName
Gaudi::Property< bool > m_columnarDoJetJVT
columnar::JetAccessor< std::vector< float > > m_acc_trksumpt
columnar::MetHelpers::ObjectTypeAccessor< columnar::ContainerId::particle > m_inputObjTypeAcc
columnar::Met1Accessor< MissingETBase::Types::bitmask_t > m_inputMetSourceAcc
Gaudi::Property< std::string > m_columnarTermName
columnar::MetHelpers::MetMomentumAccessors< columnar::ContainerId::met1 > m_inputMetMomAcc
SG::ReadHandleKey< xAOD::VertexContainer > m_PVkey
std::string m_jetConstitScaleMom
columnar::JetAccessor< std::vector< float > > m_acc_sampleE
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) const override final
columnar::MetHelpers::InputMomentumAccessors m_inputMomAcc
columnar::MetHelpers::ObjectWeightDecorator m_outputMetWeightDecRegular
columnar::JetAccessor< float > m_acc_psf
bool m_doRemoveElecTrksEM
const xAOD::Vertex * getPV() const
SG::ReadHandleKey< xAOD::JetContainer > m_jetContainer
columnar::ParticleAccessor< columnar::ObjectColumn > m_particlesHandle
ColumnarMETMaker()
Default constructor:
Gaudi::Property< unsigned > m_columnarOperation
ToolHandle< IAsgSelectionTool > m_JvtTool
columnar::ElectronAccessor< columnar::RetypeColumn< double, float > > m_electronPtAcc
std::string m_jetSelection
std::optional< columnar::MetHelpers::InputMomentumAccessors< columnar::ContainerId::jet > > m_jetConstitScaleMomAcc
std::string m_jetRejectionDec
bool m_doSetMuonJetEMScale
std::string m_customJvtWP
Gaudi::Property< std::string > m_columnarSoftClusKey
std::optional< columnar::JetAccessor< char > > m_acc_jetRejectionDec
double m_muIDPTJetPtRatioMuOlap
columnar::MetHelpers::InputMomentumAccessors< columnar::ContainerId::jet > m_jetMomAcc
Gaudi::Property< unsigned > m_columnarParticleType
columnar::MetHelpers::ObjectWeightDecorator< columnar::ContainerId::mutableMet, columnar::ContainerId::jet > m_jetOutputMetWeightDecRegular
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) const override final
Class providing the definition of the 4-vector interface.
virtual Type::ObjectType type() const =0
The type of the object as a simple enumeration.
A vector of jet constituents at the scale used during jet finding.
float ce() const
Returns .
float sumpt() const
Returns sum of component pt.
float cpt() const
Returns .
float cpx() const
Returns .
float cpy() const
Returns .
EnergyLossType energyLossType(void) const
Energy determined from parametrization or not (measured).
xAOD::MissingETAssociation_v1::ConstVec constvec_t
Type for constituent vector.
uint64_t bitmask_t
Type for status word bit mask.
Policy
Policies on usage checks.
@ OnlyTrack
Track based only.
@ OnlyCluster
CaloCluster based only.
@ TruthParticle
Truth particle based.
@ ParticleFlow
Particle Flow Object based.
@ PhysicsObject
Physics object based.
ObjectRange< ContainerId::particle > ParticleRange
ObjectId< ContainerId::met1 > Met1Id
OptObjectId< ContainerId::met1 > OptMet1Id
ObjectId< ContainerId::mutableMet > MutableMetId
OptObjectId< ContainerId::mutableMet > OptMutableMetId
ObjectRange< ContainerId::eventContext > EventContextRange
ObjectId< ContainerId::eventContext > EventContextId
ObjectRange< ContainerId::jet > JetRange
ObjectRange< ContainerId::met1 > Met1Range
ObjectRange< ContainerId::mutableMet > MutableMetRange
static const SG::AuxElement::ConstAccessor< iplink_t > acc_nominalObject("nominalObjectLink")
ElementLink< xAOD::IParticleContainer > iplink_t
static const SG::AuxElement::ConstAccessor< iplink_t > acc_originalObject("originalObjectLink")
static const SG::AuxElement::ConstAccessor< float > acc_Eloss("EnergyLoss")
static const SG::AuxElement::Accessor< std::vector< iplink_t > > dec_constitObjLinks("ConstitObjectLinks")
static const SG::AuxElement::Accessor< std::vector< float > > dec_constitObjWeights("ConstitObjectWeights")
static const SG::AuxElement::ConstAccessor< std::vector< iplink_t > > acc_ghostMuons("GhostMuon")
static const MissingETBase::Types::bitmask_t invisSource
ObjectType
Type of objects that have a representation in the xAOD EDM.
@ Jet
The object is a jet.
@ Photon
The object is a photon.
@ Muon
The object is a muon.
@ Electron
The object is an electron.
@ Tau
The object is a tau (jet)
Jet_v1 Jet
Definition of the current "jet version".
MissingETAssociation_v1 MissingETAssociation
Version control by type definition.
MissingET_v1 MissingET
Version control by type defintion.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
MissingETContainer_v1 MissingETContainer
Muon_v1 Muon
Reference the current persistent version:
setBGCode setTAP setLVL2ErrorBits bool
MissingETAuxContainer_v1 MissingETAuxContainer
JetContainer_v1 JetContainer
Definition of the current "jet container version".
MissingETAssociationMap_v1 MissingETAssociationMap
Version control by type defintion.
Electron_v1 Electron
Definition of the current "egamma version".
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
static Types::bitmask_t muon(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed muons.
static Types::bitmask_t jet(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed jets.
@ Calo
Indicator for MET terms reconstructed from calorimeter signals alone.
static Types::bitmask_t track(Region reg=Region::FullAcceptance)
Bit mask for MET term from Track signal objects.
static bool isTrackTerm(Types::bitmask_t bits, Region reg=Region::FullAcceptance)
static Types::bitmask_t tau(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed tau leptons.
static Types::bitmask_t electron(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed electrons.
static Types::bitmask_t photon(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed photons.
@ Central
Indicator for MET contribution from the central region.
static constexpr bool isXAOD
Whether this is the xAOD mode.
Collection of functions managing the MET composition map and association map.