From 069a8f1918c556904f07841642da6e2f44dc9c00 Mon Sep 17 00:00:00 2001 From: Eric Torrence <eric.torrence@cern.ch> Date: Fri, 13 Aug 2021 20:18:38 +0000 Subject: [PATCH] Cluster Limit --- .../src/EventInfoByteStreamAuxCnv.cxx | 4 +-- .../TrackerClusterFit/src/ClusterFitAlg.cxx | 25 ++++++++++++++++++- .../TrackerClusterFit/src/ClusterFitAlg.h | 7 +++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx b/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx index 341fa8d72..531e74c5a 100644 --- a/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx +++ b/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx @@ -155,8 +155,8 @@ StatusCode EventInfoByteStreamAuxCnv::createObj(IOpaqueAddress* pAddr, DataObjec // Run Number int runNumber = re->run_number(); - // Event Number - uint64_t eventNumber = re->event_id(); + // Event Number (ordinal number of event in file) + uint64_t eventNumber = re->event_counter(); // Time Stamp uint32_t bc_time_sec = re->timestamp()/1E6; // timestamp is in usec diff --git a/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.cxx b/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.cxx index 6e955b6a2..c9dda9633 100644 --- a/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.cxx +++ b/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.cxx @@ -99,6 +99,29 @@ StatusCode ClusterFitAlg::execute(const EventContext& ctx) const FaserSCT_ClusterContainer::const_iterator clusterCollections {clusterContainer->begin()}; FaserSCT_ClusterContainer::const_iterator clusterCollectionsEnd {clusterContainer->end()}; + + // Make a first pass and count clusters + // Only if cluster limit is set to non-zero value + if (m_clusterLimit > 0) { + unsigned int n_clusters(0); + for (; clusterCollections != clusterCollectionsEnd; ++clusterCollections) + { + const Tracker::FaserSCT_ClusterCollection* cl{*clusterCollections}; + n_clusters += cl->size(); + } + + // Give up if too many clusters found + if (n_clusters > m_clusterLimit) { + m_numberOfSkippedEvents++; + ATH_MSG_WARNING("Skipping event with " << n_clusters << " clusters!"); + ATH_CHECK(trackContainer.record(std::move(outputTracks))); + return StatusCode::SUCCESS; + } + + // Reset begin pointer and tabulate cluster info by wafer + clusterCollections = clusterContainer->begin(); + } + for (; clusterCollections != clusterCollectionsEnd; ++clusterCollections) { ++m_numberOfClusterCollection; @@ -352,11 +375,11 @@ StatusCode ClusterFitAlg::finalize() ATH_MSG_INFO("ClusterFitAlg::finalize()"); ATH_MSG_INFO( m_numberOfEvents << " events processed" ); ATH_MSG_INFO( m_numberOfTriggeredEvents << " triggered events processed" ); + ATH_MSG_INFO( m_numberOfSkippedEvents << " events skipped for too many clusters" ); ATH_MSG_INFO( m_numberOfClusterCollection<< " cluster collections processed" ); ATH_MSG_INFO( m_numberOfCluster<< " cluster processed" ); ATH_MSG_INFO( m_numberOfFits << " fits performed" ); - return StatusCode::SUCCESS; } diff --git a/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.h b/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.h index 54868f69e..e36f458c2 100644 --- a/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.h +++ b/Tracker/TrackerRecAlgs/TrackerClusterFit/src/ClusterFitAlg.h @@ -69,7 +69,6 @@ class ClusterFitAlg : public AthReentrantAlgorithm, AthHistogramming //@} const ServiceHandle<ITHistSvc>& histSvc() const; - private: /** @name Disallow default instantiation, copy, assignment */ //@{ @@ -192,6 +191,11 @@ class ClusterFitAlg : public AthReentrantAlgorithm, AthHistogramming DoubleArrayProperty m_zCenter { this, "ZCenter", { -1452.2925, 47.7075 , 1237.7075, 2427.7075 }, "Global z position at which to reconstruct track parameters"}; UnsignedIntegerProperty m_triggerMask { this, "TriggerMask", 0x0, "Trigger mask to analyze (0 = pass all)" }; + + // Add property to skip reconstruction if cluster multiplicity is too large + // Set to 0 for no limit + UnsignedIntegerProperty m_clusterLimit { this, "ClusterLimit", 200, "Limit on cluster multiplicity to run algorithm" }; + /// a handle on the Hist/TTree registration service ServiceHandle<ITHistSvc> m_histSvc; @@ -209,6 +213,7 @@ class ClusterFitAlg : public AthReentrantAlgorithm, AthHistogramming mutable std::atomic<int> m_numberOfClusterCollection{0}; mutable std::atomic<int> m_numberOfCluster{0}; mutable std::atomic<int> m_numberOfFits{0}; + mutable std::atomic<int> m_numberOfSkippedEvents{0}; }; // For the THistSvc -- GitLab