97 m_PVkey(
"PrimaryVertices"),
98 m_acc_jetJvtMoment(nullptr),
99 m_acc_jetRejectionDec(nullptr),
100 m_JvtCutTight(-100.0),
101 m_JvtTightPtMax(-100.0),
102 m_JvtCutMedium(-100.0),
103 m_JvtMediumPtMax(-100.0),
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");
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;
240 ATH_MSG_INFO(
"Requesting simplified overlap removal procedure in MET calculation");
243 return StatusCode::SUCCESS;
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;
303 bool removeOverlap =
true;
304 if(!collection->
empty()) {
308 removeOverlap =
false;
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;
339 dec_constitObjLinks(*
met) = vector<iplink_t>(0);
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;
480 const std::string& softKey,
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,
528 const std::string& softKey,
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,
565 const std::string& softClusKey,
566 const std::string& softTrkKey,
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,
618 bool tracksForHardJets,
619 std::vector<const xAOD::IParticle*>* softConst) {
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;
648 dec_constitObjLinks(*metSoftClus) = vector<iplink_t>(0);
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");
670 dec_constitObjLinks(*metSoftTrk) = vector<iplink_t>(0);
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() );
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;
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);
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++) {
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();
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);
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++) {
1209 <<
" this calvec E: " << assoc->
calVec(iKey).
ce());
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;
1248 if(
fillMET(
met,metCont,
"Invisibles" , invisSource) != StatusCode::SUCCESS) {
1250 return StatusCode::FAILURE;
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;
1317 return StatusCode::SUCCESS;
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);
1395 return static_cast<bool>(
m_trkseltool->accept( *trk, vx ));
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) {