Skip to content
Snippets Groups Projects
Commit ce6cbc88 authored by Thomas Strebler's avatar Thomas Strebler Committed by Peter Berta
Browse files

Enable ThinInDetForwardTrackParticlesAlg if muons are not available for CA config

Enable ThinInDetForwardTrackParticlesAlg if muons are not available for CA config
parent 2de7240b
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@ class ThinInDetForwardTrackParticles(Configured):
mlog = logging.getLogger ('ThinInDetForwardTrackParticles.py::configure:')
from InDetRecExample.InDetJobProperties import InDetFlags
from InDetRecExample.InDetKeys import InDetKeys
from RecExConfig.RecFlags import rec
from PyUtils.MetaReaderPeeker import convert_itemList
eventdata_items = convert_itemList()
......@@ -29,6 +30,11 @@ class ThinInDetForwardTrackParticles(Configured):
ThinInDetForwardTrackParticles = True,
StreamName = 'StreamAOD'
)
if not rec.doMuonCombined():
mlog.info("Combined muon reconstruction is disabled so all InDetForwardTrackParticles will be thinned")
theInDetFwdThinner.MuonsKey = ""
print (theInDetFwdThinner)
except Exception:
import traceback
......
......@@ -15,9 +15,13 @@ def ThinInDetForwardTrackParticlesCfg(flags, name="ThinInDetForwardTrackParticle
acc = ComponentAccumulator()
if "xAOD::TrackParticleContainer#InDetForwardTrackParticles" not in flags.Input.TypedCollections and not (flags.Detector.GeometryPixel and flags.InDet.Tracking.doForwardTracks):
mlog.info("Not attempting to thin InDetForwardParticles, because the container InDetForwardTrackParticles does not seem to be available")
mlog.info("Not attempting to thin InDetForwardTrackParticles, because the container InDetForwardTrackParticles does not seem to be available")
return acc
if not flags.Reco.EnableCombinedMuon:
mlog.info("Combined muon reconstruction is disabled so all InDetForwardTrackParticles will be thinned")
kwargs.setdefault("MuonsKey", "")
kwargs.setdefault("StreamName", "StreamAOD")
acc.addEventAlgo(CompFactory.ThinInDetForwardTrackParticlesAlg(name, **kwargs))
mlog.info("InDetForwardTrackParticles Thinning configured")
......
......@@ -63,7 +63,7 @@ ThinInDetForwardTrackParticlesAlg::initialize()
return StatusCode::FAILURE;
}
ATH_CHECK(m_tracksKey.initialize(m_streamName, m_doThinning));
ATH_CHECK(m_muonsKey.initialize(m_doThinning));
ATH_CHECK(m_muonsKey.initialize(m_doThinning && !m_muonsKey.empty()));
ATH_MSG_DEBUG("==> done with initialize " << name() << "...");
return StatusCode::SUCCESS;
......@@ -95,37 +95,44 @@ ThinInDetForwardTrackParticlesAlg::execute(const EventContext& ctx) const
return StatusCode::SUCCESS;
}
// Retrieve InDetForwardTrackParticles and Muons containers
// Retrieve InDetForwardTrackParticles container
SG::ThinningHandle<xAOD::TrackParticleContainer> tracks(m_tracksKey, ctx);
SG::ReadHandle<xAOD::MuonContainer> muons(m_muonsKey, ctx);
// Set up mask and set the main counters
std::vector<bool> trackMask;
unsigned int nTracks = tracks->size();
m_nTracksProcessed.fetch_add(nTracks, std::memory_order_relaxed);
trackMask.assign(nTracks, false);
m_nMuons.fetch_add(muons->size(), std::memory_order_relaxed);
unsigned int nSiFwdAssoc = 0;
unsigned int nSiFwdMuons = 0;
// Loop over the muons. Identify which are SiliconAssociatedForwardMuon.
// Get their associated inner detector track. Find that track in the
// InDetForwardTrackParticles. Set the mask element.
unsigned int nSiFwdAssoc = 0;
unsigned int nSiFwdMuons = 0;
for (const auto* muon : *muons) {
if (muon->muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
++nSiFwdMuons;
const xAOD::TrackParticle* muTrk(nullptr);
if (muon->inDetTrackParticleLink().isValid())
muTrk = *(muon->inDetTrackParticleLink());
if (muTrk != nullptr) {
auto search = std::find(tracks->begin(), tracks->end(), muTrk);
if (search != tracks->end()) {
++nSiFwdAssoc;
trackMask[(*search)->index()] = true;
}
// Only if muons are provided as inputs
if(!m_muonsKey.empty()){
SG::ReadHandle<xAOD::MuonContainer> muons(m_muonsKey, ctx);
m_nMuons.fetch_add(muons->size(), std::memory_order_relaxed);
for (const auto* muon : *muons) {
if (muon->muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
++nSiFwdMuons;
const xAOD::TrackParticle* muTrk(nullptr);
if (muon->inDetTrackParticleLink().isValid())
muTrk = *(muon->inDetTrackParticleLink());
if (muTrk != nullptr) {
auto search = std::find(tracks->begin(), tracks->end(), muTrk);
if (search != tracks->end()) {
++nSiFwdAssoc;
trackMask[(*search)->index()] = true;
}
}
}
}
}
m_nSiFwdAssoc.fetch_add(nSiFwdAssoc, std::memory_order_relaxed);
m_nSiFwdMuons.fetch_add(nSiFwdMuons, std::memory_order_relaxed);
......
......@@ -68,7 +68,7 @@ def createRecoConfigFlags():
prevFlags.Input.isMC)
flags.addFlag("Reco.PostProcessing.InDetForwardTrackParticleThinning",
lambda prevFlags: prevFlags.Reco.EnablePostProcessing and
prevFlags.Reco.EnableTracking and prevFlags.Reco.EnableCombinedMuon)
prevFlags.Reco.EnableTracking)
return flags
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment