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/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfig.py b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfig.py index efeba22b22474a433802cec7a2560523e6058f5f..3d9ec7a072ce801067ae843341e5ca9b8f84ce40 100644 --- a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfig.py +++ b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfig.py @@ -126,9 +126,7 @@ def getFaserSCT_FrontEnd(name="FaserSCT_FrontEnd", **kwargs): kwargs.setdefault("SCT_ReadCalibChipDataTool", sct_ReadCalibChipDataToolSetup.getTool()) # DataCompressionMode: 1 is level mode x1x (default), 2 is edge mode 01x, 3 is expanded any hit xxx from AthenaCommon.BeamFlags import jobproperties - if digitizationFlags.PileUpPremixing: - kwargs.setdefault("DataCompressionMode", 3) - elif globalflags.isOverlay() and globalflags.DataSource == 'geant4': + if globalflags.isOverlay() and globalflags.DataSource == 'geant4': kwargs.setdefault("DataCompressionMode", 2) elif (jobproperties.Beam.bunchSpacing() <= 50): kwargs.setdefault("DataCompressionMode", 1) @@ -201,13 +199,8 @@ def commonFaserSCT_DigitizationConfig(name,**kwargs): def FaserSCT_DigitizationTool(name="FaserSCT_DigitizationTool", **kwargs): from Digitization.DigitizationFlags import digitizationFlags - if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi(): - from OverlayCommonAlgs.OverlayFlags import overlayFlags - kwargs.setdefault("OutputObjectName", overlayFlags.bkgPrefix() + "SCT_RDOs") - kwargs.setdefault("OutputSDOName", overlayFlags.bkgPrefix() + "SCT_SDO_Map") - else: - kwargs.setdefault("OutputObjectName", "SCT_RDOs") - kwargs.setdefault("OutputSDOName", "SCT_SDO_Map") + kwargs.setdefault("OutputObjectName", "SCT_RDOs") + kwargs.setdefault("OutputSDOName", "SCT_SDO_Map") # kwargs.setdefault("HardScatterSplittingMode", 0) return commonFaserSCT_DigitizationConfig(name,**kwargs) diff --git a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py index 95d6b690ce2a9579c10d9c8e60f3daa614dc4e8b..a4bd9fb2c54f97e9983106eb6743c00bb772e585 100644 --- a/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py +++ b/Tracker/TrackerDigitization/FaserSCT_Digitization/python/FaserSCT_DigitizationConfigNew.py @@ -58,12 +58,8 @@ def FaserSCT_DigitizationCommonCfg(flags, name="FaserSCT_DigitizationToolCommon" def FaserSCT_DigitizationToolCfg(flags, name="FaserSCT_DigitizationTool", **kwargs): """Return ComponentAccumulator with configured FaserSCT digitization tool""" - if flags.Digitization.PileUpPremixing: - kwargs.setdefault("OutputObjectName", flags.Overlay.BkgPrefix + "SCT_RDOs") - kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "SCT_SDO_Map") - else: - kwargs.setdefault("OutputObjectName", "SCT_RDOs") - kwargs.setdefault("OutputSDOName", "SCT_SDO_Map") + kwargs.setdefault("OutputObjectName", "SCT_RDOs") + kwargs.setdefault("OutputSDOName", "SCT_SDO_Map") #kwargs.setdefault("HardScatterSplittingMode", 0) return FaserSCT_DigitizationCommonCfg(flags, name, **kwargs) @@ -194,9 +190,7 @@ def FaserSCT_FrontEndCfg(flags, name="FaserSCT_FrontEnd", **kwargs): acc = FaserSCT_ReadCalibChipDataCfg(flags) kwargs.setdefault("SCT_ReadCalibChipDataTool", acc.popPrivateTools()) # DataCompressionMode: 1 is level mode x1x (default), 2 is edge mode 01x, 3 is expanded any hit xxx - if flags.Digitization.PileUpPremixing: - kwargs.setdefault("DataCompressionMode", 3) - elif False and flags.Input.isMC: # obsolete(?) Overlay flag + if False and flags.Input.isMC: # obsolete(?) Overlay flag kwargs.setdefault("DataCompressionMode", 2) elif flags.Beam.BunchSpacing <= 50: kwargs.setdefault("DataCompressionMode", 1) 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