29 ATH_CHECK(config.setProperty(
"TurnOffMomCorr",
true));
36 return StatusCode::SUCCESS;
44 std::vector<bool>& promptMuonsSelectedToKeep,
45 std::vector<bool>& lrtMuonsSelectedToKeep )
const
49 promptMuonsSelectedToKeep.resize(promptMuonCol.
size(),
true);
50 lrtMuonsSelectedToKeep.resize(LRTMuonCol.
size(),
true);
51 std::fill(promptMuonsSelectedToKeep.begin(), promptMuonsSelectedToKeep.end(),
true);
52 std::fill(lrtMuonsSelectedToKeep.begin(), lrtMuonsSelectedToKeep.end(),
true);
55 std::vector<int> promptMuonsOverlapDecision, lrtMuonsOverlapDecision;
56 promptMuonsOverlapDecision.resize(promptMuonCol.
size(), 0);
57 lrtMuonsOverlapDecision.resize(LRTMuonCol.
size(), 0);
60 u_int promptMuonIndex = 0;
61 for (
const xAOD::Muon* promptMuon : promptMuonCol){
64 u_int lrtMuonIndex = 0;
67 std::pair<bool,bool> writeDecision = {
true,
true};
75 if ( (promptMuonsOverlapDecision.at(promptMuonIndex) == 0) && (lrtMuonsOverlapDecision.at(lrtMuonIndex) == 0) ) {
77 std::tie(promptMuonsOverlapDecision.at(promptMuonIndex), lrtMuonsOverlapDecision.at(lrtMuonIndex)) =
checkOverlapForDecor(promptMuon, lrtMuon);
81 ATH_MSG_FATAL(
"Unsupported overlap removal strategy type. Choose from 0 (`defaultStrategy`) or 1 (`passThroughAndDecorate`)");
85 if(!writeDecision.first){
86 promptMuonsSelectedToKeep.at(promptMuon->index()) =
false;
88 if(!writeDecision.second){
89 lrtMuonsSelectedToKeep.at(lrtMuon->index()) =
false;
98 static const SG::AuxElement::Decorator<int> MuonLRTOverlapDecision(
"MuonLRTOverlapDecision");
100 u_int promptMuonIndex = 0;
101 for (
const xAOD::Muon* promptMuon : promptMuonCol){
102 MuonLRTOverlapDecision(*promptMuon) = promptMuonsOverlapDecision.at(promptMuonIndex);
106 u_int lrtMuonIndex = 0;
108 MuonLRTOverlapDecision(*lrtMuon) = lrtMuonsOverlapDecision.at(lrtMuonIndex);
119 using enum xAOD::Muon::TrackParticleType;
124 if ( (!promptMsTrack && !lrtMsTrack) || (promptMsTrack != lrtMsTrack)){
130 ATH_MSG_DEBUG(
" Prompt muon has author "<< promptMuon->
author()<<
", type "<<promptMuon->
muonType()<<
", pT "<<promptMuon->
pt()<<
", eta "<<promptMuon->
eta()<<
", phi "<<promptMuon->
phi());
140 bool promptPassQuality = (
m_muonSelectionTool->getQuality(*promptMuon) < xAOD::Muon::Quality::VeryLoose);
141 bool lrtPassQuality = (
m_muonSelectionTool->getQuality(*lrtMuon) < xAOD::Muon::Quality::VeryLoose);
143 if (promptPassQuality && !lrtPassQuality) {
146 else if (!promptPassQuality && lrtPassQuality) {
151 bool promptIsCombined = promptMuon->
muonType() == xAOD::Muon::MuonType::Combined;
152 bool lrtIsCombined = lrtMuon->
muonType() == xAOD::Muon::MuonType::Combined;
154 if (promptIsCombined && !lrtIsCombined) {
157 else if (!promptIsCombined && lrtIsCombined) {
165 if (promptIDMEdEta <= lrtIDMEdEta) {
173 ATH_MSG_DEBUG(
"Resolution reached the fail-safe point. Why?");
182 return std::make_tuple(0, 0);
185 std::pair<bool, bool> overlapDecision =
resolveOverlap(promptMuon, lrtMuon);
186 if (overlapDecision.first && !overlapDecision.second) {
187 return std::make_tuple(2, 1);
190 return std::make_tuple(1, 2);
196 const xAOD::TrackParticle* ID_track =
muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
197 const xAOD::TrackParticle* ME_track =
muon->trackParticle(xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle);
198 if (!ID_track || !ME_track)
return FLT_MAX;
199 return ( std::abs( ID_track->
eta() - ME_track->
eta() ) );
#define ATH_CHECK
Evaluate an expression and check for errors.
size_type size() const noexcept
Returns the number of elements in the collection.
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual double pt() const
The transverse momentum ( ) of the particle.
MuonType muonType() const
const TrackParticle * trackParticle(TrackParticleType type) const
Returns a pointer (which can be NULL) to the TrackParticle used in identification of this muon.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Select isolated Photons, Electrons and Muons.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Muon_v1 Muon
Reference the current persistent version:
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".