diff --git a/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx b/Event/FaserByteStreamCnvSvc/src/EventInfoByteStreamAuxCnv.cxx index 341fa8d72af65d084dfeb1e41d73828599e0c1f7..531e74c5a0dac4b55899f05d953f4021ddbd3694 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 6e955b6a250599eaaf33d12baf0e55369803fd39..c9dda96331919df6f3ab97d9d3bcd85c62849360 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 54868f69ebbfabce756163e0c7180e00e794747f..e36f458c2b389a27fa4bcdde477dfbd3214f436d 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