From 746655c727bc88c20090589b1fe1c41ee6c9ba98 Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Fri, 14 Jan 2022 18:20:23 +0100 Subject: [PATCH 01/12] Space Point Monitoring On --- .../python/ITkSiliconPreProcessing.py | 8 ++ Tracking/Acts/ActsTrkFinding/CMakeLists.txt | 3 +- .../python/ActsMonitoringConfig.py | 90 +++++++++++++++++++ .../python/ActsSequenceConfiguration.py | 8 +- .../ActsTrackingSequenceFromAthenaConfig.py | 11 +++ .../src/ActsSpacePointMonitoringAlgorithm.cxx | 57 ++++++++++++ .../src/ActsSpacePointMonitoringAlgorithm.h | 31 +++++++ .../components/ActsTrackFinding_entries.cxx | 4 + 8 files changed, 207 insertions(+), 5 deletions(-) create mode 100644 Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py create mode 100644 Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.cxx create mode 100644 Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.h diff --git a/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py b/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py index 740bf414854..56e63b00e18 100644 --- a/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py +++ b/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py @@ -222,6 +222,14 @@ def ITkRecPreProcessingSiliconCfg(flags, **kwargs): if flags.ITk.Tracking.doTruth: acc.merge(ITkPRD_MultiTruthMakerSiCfg(flags)) + # ACTS here + from ActsTrkFinding.ActsTrackingSequenceFromAthenaConfig import ActsTrackingSequenceFromAthenaCfg + acc.merge(ActsTrackingSequenceFromAthenaCfg(flags, + inputCollections = [ + "ITkPixelSpacePoints", + "ITkStripSpacePoints" + ])) + return acc diff --git a/Tracking/Acts/ActsTrkFinding/CMakeLists.txt b/Tracking/Acts/ActsTrkFinding/CMakeLists.txt index becf15a5dd9..b136b40c03b 100644 --- a/Tracking/Acts/ActsTrkFinding/CMakeLists.txt +++ b/Tracking/Acts/ActsTrkFinding/CMakeLists.txt @@ -19,7 +19,8 @@ atlas_add_component( ActsTrkFinding src/*.h src/*.cxx src/components/*.cxx - LINK_LIBRARIES ActsTrkFindingLib ActsInteropLib MagFieldConditions) + LINK_LIBRARIES ActsTrkFindingLib ActsInteropLib MagFieldConditions + AthenaMonitoringKernelLib AthenaMonitoringLib ) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py new file mode 100644 index 00000000000..c3168b78c0a --- /dev/null +++ b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py @@ -0,0 +1,90 @@ +# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator +from AthenaConfiguration.ComponentFactory import CompFactory +from AthenaMonitoring import AthMonitorCfgHelper + +class PlotBinnings: + def __init__(self, + xbins: int, + xmin, + xmax): + self.nbins = xbins + self.min = xmin + self.max = xmax + +binning_bank = { + 'Pixel' : [ + PlotBinnings(xbins=10000, xmin=0, xmax=10000), # Nps + PlotBinnings(xbins=400, xmin=-400, xmax=400), # ps_pos_x + PlotBinnings(xbins=400, xmin=-400, xmax=400), # ps_pos_y + PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), # ps_pos_z + PlotBinnings(xbins=4300, xmin=0, xmax=350), # ps_pos_r + PlotBinnings(xbins=20, xmin=0, xmax=6), # sp_cov_r + PlotBinnings(xbins=20, xmin=0, xmax=6), # sp_cov_z + ], + 'Strip' : [ + PlotBinnings(xbins=10000, xmin=0, xmax=10000), + PlotBinnings(xbins=1200, xmin=-1200, xmax=1200), + PlotBinnings(xbins=1200, xmin=-1200, xmax=1200), + PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), + PlotBinnings(xbins=12000, xmin=400, xmax=1200), + PlotBinnings(xbins=20, xmin=0, xmax=6), + PlotBinnings(xbins=20, xmin=0, xmax=6) + ] +} + + +def ActsSpacePointMonitoringAlgorithmCfg(ConfigFlags, + name: str = 'ActsSpacePointMonitoringAlgorithm', + inputCollection: str = '', + **options) -> ComponentAccumulator: + assert isinstance(name, str) + assert isinstance(inputCollection, str) + + helper = AthMonitorCfgHelper(ConfigFlags,'ActsMonCfg') + + options['name'] = f'{name}_{inputCollection}' + options['InputSpacePointCollection'] = inputCollection + + acc = ComponentAccumulator() + ActsTrk__MonitoringAlgo = CompFactory.getComp("ActsTrk::ActsSpacePointMonitoringAlgorithm") + + # Set Monitoring + monitoringAlgorithm = helper.addAlgorithm(ActsTrk__MonitoringAlgo, **options) + monitoringGroup = helper.addGroup(monitoringAlgorithm, 'ActsMonitoring', f'ActsMonitoring/SpacePoints/{inputCollection}') + + binning_nps, binning_sp_pos_x, binning_sp_pos_y, binning_sp_pos_z, binning_sp_pos_r, binning_sp_cov_r, binning_sp_cov_z = binning_bank['Pixel' if 'Pixel' in inputCollection else 'Strip'] + + # Global + monitoringGroup.defineHistogram('Nsp', type="TH1I", title='Number of Space Points;N;Entries', + xbins=binning_nps.nbins, xmin=binning_nps.min, xmax=binning_nps.max) + + # 1D + monitoringGroup.defineHistogram('sp_pos_x', type='TH1F', title='x coordinate;x [mm];Entries', + xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max) + monitoringGroup.defineHistogram('sp_pos_y', type='TH1F', title='y coordinate;y [mm];Entries', + xbins=binning_sp_pos_y.nbins, xmin=binning_sp_pos_y.min, xmax=binning_sp_pos_y.max) + monitoringGroup.defineHistogram('sp_pos_z', type='TH1F', title='z coordinate;z [mm];Entries', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) + monitoringGroup.defineHistogram('sp_pos_r', type='TH1F', title='r coordinate;r [mm];Entries', + xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + + monitoringGroup.defineHistogram('sp_cov_r', type='TH1F', title='Covariance R;cov;Entries', + xbins=binning_sp_cov_r.nbins, xmin=binning_sp_cov_r.min, xmax=binning_sp_cov_r.max) + monitoringGroup.defineHistogram('sp_cov_z', type='TH1F', title='Covariance Z;cov;Entries', + xbins=binning_sp_cov_z.nbins, xmin=binning_sp_cov_z.min, xmax=binning_sp_cov_z.max) + + # 2D + monitoringGroup.defineHistogram('sp_pos_x,sp_pos_y', type='TH2F', title='X coordinate vs Y;x [mm];y [mm]', + xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max, + ybins=binning_sp_pos_y.nbins, ymin=binning_sp_pos_y.min, ymax=binning_sp_pos_y.max) + monitoringGroup.defineHistogram('sp_pos_z,sp_pos_y', type='TH2F', title='Z coordinate vs Y;z [mm];y [mm]', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, + ybins=binning_sp_pos_y.nbins, ymin=binning_sp_pos_y.min, ymax=binning_sp_pos_y.max) + monitoringGroup.defineHistogram('sp_pos_z,sp_pos_r', type='TH2F', title='Z coordinate vs R;z [mm];r [mm]', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, + ybins=binning_sp_pos_r.nbins, ymin=binning_sp_pos_r.min, ymax=binning_sp_pos_r.max) + + acc.merge(helper.result()) + return acc diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsSequenceConfiguration.py b/Tracking/Acts/ActsTrkFinding/python/ActsSequenceConfiguration.py index 1f1f0ddab12..ea573fcaffd 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsSequenceConfiguration.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsSequenceConfiguration.py @@ -15,10 +15,10 @@ def acts_sequence_configuration(func): # TO-DO: Add a flag (maybe in the config flags) that defines the output level # for our algorithms/tools # - # from AthenaCommon.Constants import DEBUG - # for el in acc._allSequences: - # for member in el.Members: - # member.OutputLevel = DEBUG + from AthenaCommon.Constants import DEBUG + for el in acc._allSequences: + for member in el.Members: + member.OutputLevel = DEBUG # the following is needed to reliably determine whether we're really being steered from an old-style job option # assume we're running CPython diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py index 7b005b036e6..0742681e00c 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py @@ -6,6 +6,8 @@ from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper from ActsTrkFinding.ActsSeedingAlgorithmConfig import ActsSeedingAlgorithmCfg from ActsTrkFinding.ActsSequenceConfiguration import acts_sequence_configuration +from ActsTrkFinding.ActsMonitoringConfig import ActsSpacePointMonitoringAlgorithmCfg + @acts_sequence_configuration def ActsTrackingSequenceFromAthenaCfg(ConfigFlags, inputCollections: list = []): @@ -26,6 +28,15 @@ def ActsTrackingSequenceFromAthenaCfg(ConfigFlags, outputCollection = o_collection, **seedingOptions)) + for i_collection in inputCollections: + collection = f'ActsSpacePoint_{i_collection}' + # Monitoring + acc.merge(ActsSpacePointMonitoringAlgorithmCfg(ConfigFlags, + name = 'ActsSpacePointMonitoringAlgorithm', + inputCollection = collection)) + + + return acc def ActsTrackingSequenceFromAthenaToAthena(ConfigFlags, diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.cxx new file mode 100644 index 00000000000..d2873eeb126 --- /dev/null +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.cxx @@ -0,0 +1,57 @@ +/* + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration +*/ + +#include "ActsSpacePointMonitoringAlgorithm.h" + +namespace ActsTrk { + + ActsSpacePointMonitoringAlgorithm::ActsSpacePointMonitoringAlgorithm(const std::string& name, ISvcLocator* pSvcLocator) + : AthMonitorAlgorithm(name, pSvcLocator) + {} + + StatusCode ActsSpacePointMonitoringAlgorithm::initialize() { + ATH_MSG_INFO("Initializing " << name() << " ..."); + + ATH_CHECK( m_inputSpacePointColletionKey.initialize() ); + + return AthMonitorAlgorithm::initialize(); + } + + StatusCode ActsSpacePointMonitoringAlgorithm::fillHistograms(const EventContext& ctx) const { + ATH_MSG_INFO( "Filling Histograms for " << name() << " ... " ); + + ATH_MSG_INFO( "Reading input collection with key " << m_inputSpacePointColletionKey.key() ); + SG::ReadHandle< ActsTrk::SpacePointContainer > handle = SG::makeHandle( m_inputSpacePointColletionKey, ctx ); + ATH_CHECK( handle.isValid() ); + const ActsTrk::SpacePointContainer* sp_collection = handle.get(); + ATH_MSG_INFO( "Retrieved " << sp_collection->size() << " input elements from key " << m_inputSpacePointColletionKey.key() ); + + auto monitor_nsp = Monitored::Scalar("Nsp", sp_collection->size()); + + auto monitor_pos_x = Monitored::Collection("sp_pos_x", *sp_collection, + [] (const auto* obj) { return obj->x(); }); + auto monitor_pos_y = Monitored::Collection("sp_pos_y", *sp_collection, + [] (const auto* obj) { return obj->y(); }); + auto monitor_pos_z = Monitored::Collection("sp_pos_z", *sp_collection, + [] (const auto* obj) { return obj->z(); }); + auto monitor_pos_r = Monitored::Collection("sp_pos_r", *sp_collection, + [] (const auto* obj) { + double x2 = obj->x() * obj->x(); + double y2 = obj->y() * obj->y(); + return std::sqrt(x2 + y2); }); + + auto monitor_cov_r = Monitored::Collection("sp_cov_r", *sp_collection, + [] (const auto* obj) { return obj->varianceR(); }); + auto monitor_cov_z = Monitored::Collection("sp_cov_z", *sp_collection, + [] (const auto* obj) { return obj->varianceZ(); }); + + + fill("ActsMonitoring", monitor_nsp); + fill("ActsMonitoring", monitor_pos_x, monitor_pos_y, monitor_pos_z, monitor_pos_r, + monitor_cov_r, monitor_cov_z); + + return StatusCode::SUCCESS; + } + +} diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.h b/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.h new file mode 100644 index 00000000000..e46ac236272 --- /dev/null +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.h @@ -0,0 +1,31 @@ +/* + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ACTS_MONITORING_ALGORITHM_SPACE_POINT_H +#define ACTS_MONITORING_ALGORITHM_SPACE_POINT_H + +#include "AthenaMonitoring/AthMonitorAlgorithm.h" +#include "AthenaMonitoringKernel/Monitored.h" +#include "StoreGate/ReadHandleKey.h" + +#include "ActsEDM/ActsSpacePoint.h" + +namespace ActsTrk { + + class ActsSpacePointMonitoringAlgorithm : + public AthMonitorAlgorithm { + public: + ActsSpacePointMonitoringAlgorithm(const std::string& name, ISvcLocator* pSvcLocator); + virtual ~ActsSpacePointMonitoringAlgorithm() override = default; + + virtual StatusCode initialize() override; + virtual StatusCode fillHistograms(const EventContext& ctx) const override; + + private: + SG::ReadHandleKey< ActsTrk::SpacePointContainer > m_inputSpacePointColletionKey {this, "InputSpacePointCollection", "", ""}; + }; + +} + +#endif diff --git a/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx b/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx index 2b40fdec6bb..e18efbd01c9 100644 --- a/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx @@ -9,3 +9,7 @@ DECLARE_COMPONENT( ActsTrk::ActsSeedingTool ) DECLARE_COMPONENT( ActsTrk::ActsSeedingAlgorithm ) DECLARE_COMPONENT( ActsTrk::ActsSeedingFromAthenaAlgorithm ) + +#include "src/ActsSpacePointMonitoringAlgorithm.h" + +DECLARE_COMPONENT( ActsTrk::ActsSpacePointMonitoringAlgorithm ) -- GitLab From f80c213f5172fdb186d7c9383ee0cab5c2dfe563 Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Fri, 14 Jan 2022 19:18:30 +0100 Subject: [PATCH 02/12] Support non ITk geometry --- .../share/ConfiguredNewTrackingSiPattern.py | 23 +++++-- .../python/ActsMonitoringConfig.py | 69 +++++++++++++------ 2 files changed, 66 insertions(+), 26 deletions(-) diff --git a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py index b07e38f35ac..ba1528c5b8f 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py @@ -108,7 +108,7 @@ class ConfiguredNewTrackingSiPattern: ServiceMgr.THistSvc.Output = ["valNtuples DATAFILE='SeedMakerValidation.root' OPT='RECREATE'"] - if NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS" or InDetFlags.doHeavyIon() or NewTrackingCuts.mode() == "ForwardTracks": + if NewTrackingCuts.mode() == "Offline" or InDetFlags.doHeavyIon() or NewTrackingCuts.mode() == "ForwardTracks": InDetSiSpacePointsSeedMaker.maxdImpactPPS = NewTrackingCuts.maxdImpactPPSSeeds() InDetSiSpacePointsSeedMaker.maxdImpactSSS = NewTrackingCuts.maxdImpactSSSSeeds() @@ -243,7 +243,7 @@ class ConfiguredNewTrackingSiPattern: useSCT = DetFlags.haveRIO.SCT_on() if not is_dbm else False, PixelClusterContainer = InDetKeys.PixelClusters(), SCT_ClusterContainer = InDetKeys.SCT_Clusters()) - if NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS": + if NewTrackingCuts.mode() == "Offline": track_finder.writeHolesFromPattern = InDetFlags.useHolesFromPattern() if is_dbm : track_finder.MagneticFieldMode = "NoField" @@ -256,7 +256,7 @@ class ConfiguredNewTrackingSiPattern: ToolSvc += track_finder - useBremMode = NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS" or NewTrackingCuts.mode() == "DBM" + useBremMode = NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "DBM" from SiTrackMakerTool_xk.SiTrackMakerTool_xkConf import InDet__SiTrackMaker_xk as SiTrackMaker InDetSiTrackMaker = SiTrackMaker(name = 'InDetSiTrackMaker'+NewTrackingCuts.extension(), useSCT = NewTrackingCuts.useSCT(), @@ -324,7 +324,6 @@ class ConfiguredNewTrackingSiPattern: if InDetFlags.doStoreTrackSeeds(): from SeedToTrackConversionTool.SeedToTrackConversionToolConf import InDet__SeedToTrackConversionTool InDet_SeedToTrackConversion = InDet__SeedToTrackConversionTool(name = "InDet_SeedToTrackConversion", - Extrapolator = TrackingCommon.getInDetExtrapolator(), OutputName = InDetKeys.SiSPSeedSegments()+NewTrackingCuts.extension()) InDetSiTrackMaker.SeedToTrackConversion = InDet_SeedToTrackConversion InDetSiTrackMaker.SeedSegmentsWrite = True @@ -376,7 +375,7 @@ class ConfiguredNewTrackingSiPattern: if InDetFlags.doHeavyIon() : InDetSiSPSeededTrackFinder.FreeClustersCut = 2 #Heavy Ion optimization from Igor - if NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS": + if NewTrackingCuts.mode() == "Offline": InDetSiSPSeededTrackFinder.writeHolesFromPattern = InDetFlags.useHolesFromPattern() #InDetSiSPSeededTrackFinder.OutputLevel =VERBOSE @@ -400,6 +399,16 @@ class ConfiguredNewTrackingSiPattern: TrackCollectionTruthKeys += [ InDetTracksTruth.TracksTruth() ] else: TrackCollectionKeys += [ self.__SiTrackCollection ] + + # Acts here + from ActsTrkFinding.ActsTrackingSequenceFromAthenaConfig import ActsTrackingSequenceFromAthenaToAthena as ActsTrackingSequenceToAthena + from AthenaConfiguration.AllConfigFlags import ConfigFlags + ActsTrackingSequenceToAthena(ConfigFlags, + inputCollections = [ + InDetKeys.PixelSpacePoints(), + InDetKeys.SCT_SpacePoints() + ]) + # ------------------------------------------------------------ # @@ -501,7 +510,7 @@ class ConfiguredNewTrackingSiPattern: # # --- load Ambiguity Processor # - useBremMode = NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS" + useBremMode = NewTrackingCuts.mode() == "Offline" # @TODO is the cluster split probability container needed here ? ambi_track_summary_tool = TrackingCommon.getInDetTrackSummaryTool(namePrefix = 'InDetAmbiguityProcessorSplitProb', @@ -588,6 +597,8 @@ class ConfiguredNewTrackingSiPattern: InDetAmbiguityScoreProcessor.sharedProbCut2 = prob2 if NewTrackingCuts.extension() == "": InDetAmbiguityScoreProcessor.SplitClusterMap_old = "" + elif NewTrackingCuts.extension() == "Disappearing": + InDetAmbiguityScoreProcessor.SplitClusterMap_old = InDetKeys.SplitClusterAmbiguityMap() InDetAmbiguityScoreProcessor.SplitClusterMap_new = InDetKeys.SplitClusterAmbiguityMap()+NewTrackingCuts.extension() if NewTrackingCuts.mode() == "Pixel" or NewTrackingCuts.mode() == "DBM": diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py index c3168b78c0a..87bb3f26f47 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py @@ -13,25 +13,47 @@ class PlotBinnings: self.min = xmin self.max = xmax -binning_bank = { - 'Pixel' : [ - PlotBinnings(xbins=10000, xmin=0, xmax=10000), # Nps - PlotBinnings(xbins=400, xmin=-400, xmax=400), # ps_pos_x - PlotBinnings(xbins=400, xmin=-400, xmax=400), # ps_pos_y - PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), # ps_pos_z - PlotBinnings(xbins=4300, xmin=0, xmax=350), # ps_pos_r - PlotBinnings(xbins=20, xmin=0, xmax=6), # sp_cov_r - PlotBinnings(xbins=20, xmin=0, xmax=6), # sp_cov_z - ], - 'Strip' : [ - PlotBinnings(xbins=10000, xmin=0, xmax=10000), - PlotBinnings(xbins=1200, xmin=-1200, xmax=1200), - PlotBinnings(xbins=1200, xmin=-1200, xmax=1200), - PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), - PlotBinnings(xbins=12000, xmin=400, xmax=1200), - PlotBinnings(xbins=20, xmin=0, xmax=6), - PlotBinnings(xbins=20, xmin=0, xmax=6) - ] +sp_binning_bank = { + 'ITk' : { + 'Pixel' : [ + PlotBinnings(xbins=10000, xmin=0, xmax=10000), # Nps + PlotBinnings(xbins=400, xmin=-400, xmax=400), # ps_pos_x + PlotBinnings(xbins=400, xmin=-400, xmax=400), # ps_pos_y + PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), # ps_pos_z + PlotBinnings(xbins=4300, xmin=0, xmax=350), # ps_pos_r + PlotBinnings(xbins=20, xmin=0, xmax=6), # sp_cov_r + PlotBinnings(xbins=20, xmin=0, xmax=6), # sp_cov_z + ], + 'Strip' : [ + PlotBinnings(xbins=10000, xmin=0, xmax=10000), + PlotBinnings(xbins=1200, xmin=-1200, xmax=1200), + PlotBinnings(xbins=1200, xmin=-1200, xmax=1200), + PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), + PlotBinnings(xbins=12000, xmin=400, xmax=1200), + PlotBinnings(xbins=20, xmin=0, xmax=6), + PlotBinnings(xbins=20, xmin=0, xmax=6) + ], + }, + 'InDet' : { + 'Pixel' : [ + PlotBinnings(xbins=100000, xmin=0, xmax=100000), + PlotBinnings(xbins=160, xmin=-160, xmax=160), + PlotBinnings(xbins=400, xmin=-160, xmax=160), + PlotBinnings(xbins=1100, xmin=-1100, xmax=1100), + PlotBinnings(xbins=1600, xmin=0, xmax=160), + PlotBinnings(xbins=20, xmin=0, xmax=6), + PlotBinnings(xbins=20, xmin=0, xmax=6), + ], + 'Strip' : [ + PlotBinnings(xbins=100000, xmin=0, xmax=100000), + PlotBinnings(xbins=600, xmin=-600, xmax=600), + PlotBinnings(xbins=600, xmin=-600, xmax=600), + PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), + PlotBinnings(xbins=3200, xmin=250, xmax=570), + PlotBinnings(xbins=20, xmin=0, xmax=6), + PlotBinnings(xbins=20, xmin=0, xmax=6) + ], + }, } @@ -54,7 +76,14 @@ def ActsSpacePointMonitoringAlgorithmCfg(ConfigFlags, monitoringAlgorithm = helper.addAlgorithm(ActsTrk__MonitoringAlgo, **options) monitoringGroup = helper.addGroup(monitoringAlgorithm, 'ActsMonitoring', f'ActsMonitoring/SpacePoints/{inputCollection}') - binning_nps, binning_sp_pos_x, binning_sp_pos_y, binning_sp_pos_z, binning_sp_pos_r, binning_sp_cov_r, binning_sp_cov_z = binning_bank['Pixel' if 'Pixel' in inputCollection else 'Strip'] + + geometry = '' + if ConfigFlags.Detector.GeometryITk: + geometry = 'ITk' + else: + geometry = 'InDet' + + binning_nps, binning_sp_pos_x, binning_sp_pos_y, binning_sp_pos_z, binning_sp_pos_r, binning_sp_cov_r, binning_sp_cov_z = sp_binning_bank[geometry]['Pixel' if 'Pixel' in inputCollection else 'Strip'] # Global monitoringGroup.defineHistogram('Nsp', type="TH1I", title='Number of Space Points;N;Entries', -- GitLab From 3b3b5fd010b82d63624aa48662db5c4679e543ed Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Thu, 27 Jan 2022 09:11:39 +0100 Subject: [PATCH 03/12] signed r --- .../SiSpacePointTool/src/SiSpacePointMakerTool.cxx | 2 +- .../ActsTrkFinding/python/ActsMonitoringConfig.py | 9 +++++++-- .../src/ActsSpacePointMonitoringAlgorithm.cxx | 12 ++++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx index 3665d411d5b..b8f76655115 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx @@ -690,7 +690,7 @@ namespace InDet { // Trk::SpacePoint* SiSpacePointMakerTool::makeSCT_SpacePoint (InDet::SCTinformation& In0,InDet::SCTinformation& In1,IdentifierHash ID0,IdentifierHash ID1,double limit,double slimit) const { - + std::cout <<"ECCOMI GENTE!!!!"<x() * obj->x(); double y2 = obj->y() * obj->y(); return std::sqrt(x2 + y2); }); - + auto monitoring_pos_signed_r = Monitored::Collection("sp_pos_signed_r", *sp_collection, + [] (const auto* obj) { + double x2 = obj->x() * obj->x(); + double y2 = obj->y() * obj->y(); + double r = std::sqrt(x2 + y2); + return obj->y() >= 0 ? r : -r; + }); + auto monitor_cov_r = Monitored::Collection("sp_cov_r", *sp_collection, [] (const auto* obj) { return obj->varianceR(); }); auto monitor_cov_z = Monitored::Collection("sp_cov_z", *sp_collection, @@ -48,7 +55,8 @@ namespace ActsTrk { fill("ActsMonitoring", monitor_nsp); - fill("ActsMonitoring", monitor_pos_x, monitor_pos_y, monitor_pos_z, monitor_pos_r, + fill("ActsMonitoring", monitor_pos_x, monitor_pos_y, monitor_pos_z, + monitor_pos_r, monitoring_pos_signed_r, monitor_cov_r, monitor_cov_z); return StatusCode::SUCCESS; -- GitLab From c732c1997a123055e57842a11086758c745c3a3b Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Mon, 31 Jan 2022 19:45:32 +0100 Subject: [PATCH 04/12] Seed Monitoring --- .../python/ActsMonitoringConfig.py | 74 ++++++++++++++ .../ActsTrackingSequenceFromAthenaConfig.py | 6 +- .../src/ActsSeedMonitoringAlgorithm.cxx | 96 +++++++++++++++++++ .../src/ActsSeedMonitoringAlgorithm.h | 32 +++++++ .../components/ActsTrackFinding_entries.cxx | 2 + 5 files changed, 208 insertions(+), 2 deletions(-) create mode 100644 Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx create mode 100644 Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py index 6a36e91233e..a7638fc2522 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py @@ -122,3 +122,77 @@ def ActsSpacePointMonitoringAlgorithmCfg(ConfigFlags, acc.merge(helper.result()) return acc + + + +def ActsSeedMonitoringAlgorithmCfg(ConfigFlags, + name: str = 'ActsSeedMonitoringAlgorithm', + inputCollection: str = '', + **options) -> ComponentAccumulator: + assert isinstance(name, str) + assert isinstance(inputCollection, str) + + helper = AthMonitorCfgHelper(ConfigFlags,'ActsMonCfg') + + options['name'] = f'{name}_{inputCollection}' + options['InputSeedCollection'] = inputCollection + + acc = ComponentAccumulator() + ActsTrk__MonitoringAlgo = CompFactory.getComp("ActsTrk::ActsSeedMonitoringAlgorithm") + + # Set Monitoring + monitoringAlgorithm = helper.addAlgorithm(ActsTrk__MonitoringAlgo, **options) + monitoringGroup = helper.addGroup(monitoringAlgorithm, 'ActsMonitoring', f'ActsMonitoring/Seeds/{inputCollection}') + + + geometry = '' + if ConfigFlags.Detector.GeometryITk: + geometry = 'ITk' + else: + geometry = 'InDet' + + binning_nps, binning_sp_pos_x, binning_sp_pos_y, binning_sp_pos_z, binning_sp_pos_r, binning_sp_cov_r, binning_sp_cov_z = sp_binning_bank[geometry]['Pixel' if 'Pixel' in inputCollection else 'Strip'] + + # Global + monitoringGroup.defineHistogram('Nseed', type="TH1I", title='Number of Seeds;N;Entries', + xbins=binning_nps.nbins, xmin=binning_nps.min, xmax=binning_nps.max) # CHANGE + + # 1D + monitoringGroup.defineHistogram('seed_bottom_sp_pos_z', type='TH1F', title='bottom sp - z coordinate;z [mm];Entries', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) + monitoringGroup.defineHistogram('seed_bottom_sp_pos_r', type='TH1F', title='bottom sp - r coordinate;r [mm];Entries', + xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + + monitoringGroup.defineHistogram('seed_middle_sp_pos_z', type='TH1F', title='middle sp - z coordinate;z [mm];Entries', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) + monitoringGroup.defineHistogram('seed_middle_sp_pos_r', type='TH1F', title='middle sp - r coordinate;r [mm];Entries', + xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + + monitoringGroup.defineHistogram('seed_top_sp_pos_z', type='TH1F', title='top sp - z coordinate;z [mm];Entries', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) + monitoringGroup.defineHistogram('seed_top_sp_pos_r', type='TH1F', title='top sp - r coordinate;r [mm];Entries', + xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + + # 2D + monitoringGroup.defineHistogram('seed_bottom_sp_pos_z,seed_bottom_sp_pos_r', type='TH2F', title='Bottom SP - Z coordinate vs R;z [mm];r [mm]', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, + ybins=binning_sp_pos_r.nbins, ymin=binning_sp_pos_r.min, ymax=binning_sp_pos_r.max) + monitoringGroup.defineHistogram('seed_middle_sp_pos_z,seed_middle_sp_pos_r', type='TH2F', title='Middle SP - Z coordinate vs R;z [mm];r [mm]', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, + ybins=binning_sp_pos_r.nbins, ymin=binning_sp_pos_r.min, ymax=binning_sp_pos_r.max) + monitoringGroup.defineHistogram('seed_top_sp_pos_z,seed_top_sp_pos_r', type='TH2F', title='Top SP - Z coordinate vs R;z [mm];r [mm]', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, + ybins=binning_sp_pos_r.nbins, ymin=binning_sp_pos_r.min, ymax=binning_sp_pos_r.max) + + monitoringGroup.defineHistogram('seed_bottom_sp_pos_z,seed_bottom_sp_pos_signed_r', type='TH2F', title='Bottom SP - Z coordinate vs R;z [mm];r [mm]', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, + ybins=2*binning_sp_pos_r.nbins, ymin=-binning_sp_pos_r.max, ymax=binning_sp_pos_r.max) + monitoringGroup.defineHistogram('seed_middle_sp_pos_z,seed_middle_sp_pos_signed_r', type='TH2F', title='Middle SP - Z coordinate vs R;z [mm];r [mm]', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, + ybins=2*binning_sp_pos_r.nbins, ymin=-binning_sp_pos_r.max, ymax=binning_sp_pos_r.max) + monitoringGroup.defineHistogram('seed_top_sp_pos_z,seed_top_sp_pos_signed_r', type='TH2F', title='Top SP - Z coordinate vs R;z [mm];r [mm]', + xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, + ybins=2*binning_sp_pos_r.nbins, ymin=-binning_sp_pos_r.max, ymax=binning_sp_pos_r.max) + + acc.merge(helper.result()) + return acc diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py index 0742681e00c..e0cc85d6138 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py @@ -6,7 +6,7 @@ from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper from ActsTrkFinding.ActsSeedingAlgorithmConfig import ActsSeedingAlgorithmCfg from ActsTrkFinding.ActsSequenceConfiguration import acts_sequence_configuration -from ActsTrkFinding.ActsMonitoringConfig import ActsSpacePointMonitoringAlgorithmCfg +from ActsTrkFinding.ActsMonitoringConfig import ActsSpacePointMonitoringAlgorithmCfg, ActsSeedMonitoringAlgorithmCfg @acts_sequence_configuration def ActsTrackingSequenceFromAthenaCfg(ConfigFlags, @@ -34,7 +34,9 @@ def ActsTrackingSequenceFromAthenaCfg(ConfigFlags, acc.merge(ActsSpacePointMonitoringAlgorithmCfg(ConfigFlags, name = 'ActsSpacePointMonitoringAlgorithm', inputCollection = collection)) - + acc.merge(ActsSeedMonitoringAlgorithmCfg(ConfigFlags, + name = 'ActsSeedMonitoringAlgorithm', + inputCollection = f'ActsSeeds_{i_collection}')) return acc diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx new file mode 100644 index 00000000000..848265e9f2d --- /dev/null +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx @@ -0,0 +1,96 @@ +/* + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration +*/ + +#include "ActsSeedMonitoringAlgorithm.h" + +namespace ActsTrk { + + ActsSeedMonitoringAlgorithm::ActsSeedMonitoringAlgorithm(const std::string& name, ISvcLocator* pSvcLocator) + : AthMonitorAlgorithm(name, pSvcLocator) + {} + + StatusCode ActsSeedMonitoringAlgorithm::initialize() { + ATH_MSG_INFO("Initializing " << name() << " ..."); + + ATH_CHECK( m_inputSeedColletionKey.initialize() ); + + return AthMonitorAlgorithm::initialize(); + } + + StatusCode ActsSeedMonitoringAlgorithm::fillHistograms(const EventContext& ctx) const { + ATH_MSG_INFO( "Filling Histograms for " << name() << " ... " ); + + ATH_MSG_INFO( "Reading input collection with key " << m_inputSeedColletionKey.key() ); + SG::ReadHandle< ActsTrk::SeedContainer > handle = SG::makeHandle( m_inputSeedColletionKey, ctx ); + ATH_CHECK( handle.isValid() ); + const ActsTrk::SeedContainer* seed_collection = handle.get(); + ATH_MSG_INFO( "Retrieved " << seed_collection->size() << " input elements from key " << m_inputSeedColletionKey.key() ); + + auto monitor_nseed = Monitored::Scalar("Nseed", seed_collection->size()); + + // Bottom + auto monitor_seed_bottom_sp_pos_z = Monitored::Collection("seed_bottom_sp_pos_z", *seed_collection, + [] (const auto* obj) { return obj->sp()[0]->z(); }); + auto monitor_seed_bottom_sp_pos_r = Monitored::Collection("seed_bottom_sp_pos_r", *seed_collection, + [] (const auto* obj) { + const auto* sp = obj->sp()[0]; + double x2 = sp->x() * sp->x(); + double y2 = sp->y() * sp->y(); + return std::sqrt(x2 + y2); }); + auto monitor_seed_bottom_sp_pos_signed_r = Monitored::Collection("seed_bottom_sp_pos_signed_r", *seed_collection, + [] (const auto* obj) { + const auto* sp = obj->sp()[0]; + double x2 = sp->x() * sp->x(); + double y2 = sp->y() * sp->y(); + double r = std::sqrt(x2 + y2); + return sp->y() >= 0 ? r : -r; + }); + + // Middle + auto monitor_seed_middle_sp_pos_z = Monitored::Collection("seed_middle_sp_pos_z", *seed_collection, + [] (const auto* obj) { return obj->sp()[1]->z(); }); + auto monitor_seed_middle_sp_pos_r = Monitored::Collection("seed_middle_sp_pos_r", *seed_collection, + [] (const auto* obj) { + const auto* sp = obj->sp()[1]; + double x2 = sp->x() * sp->x(); + double y2 = sp->y() * sp->y(); + return std::sqrt(x2 + y2); }); + auto monitor_seed_middle_sp_pos_signed_r = Monitored::Collection("seed_middle_sp_pos_signed_r", *seed_collection, + [] (const auto* obj) { + const auto* sp = obj->sp()[1]; + double x2 = sp->x() * sp->x(); + double y2 = sp->y() * sp->y(); + double r = std::sqrt(x2 + y2); + return sp->y() >= 0 ? r : -r; + }); + + // Top + auto monitor_seed_top_sp_pos_z = Monitored::Collection("seed_top_sp_pos_z", *seed_collection, + [] (const auto* obj) { return obj->sp()[2]->z(); }); + auto monitor_seed_top_sp_pos_r = Monitored::Collection("seed_top_sp_pos_r", *seed_collection, + [] (const auto* obj) { + const auto* sp = obj->sp()[2]; + double x2 = sp->x() * sp->x(); + double y2 = sp->y() * sp->y(); + return std::sqrt(x2 + y2); }); + auto monitor_seed_top_sp_pos_signed_r = Monitored::Collection("seed_top_sp_pos_signed_r", *seed_collection, + [] (const auto* obj) { + const auto* sp = obj->sp()[2]; + double x2 = sp->x() * sp->x(); + double y2 = sp->y() * sp->y(); + double r = std::sqrt(x2 + y2); + return sp->y() >= 0 ? r : -r; + }); + + + + fill("ActsMonitoring", monitor_nseed); + fill("ActsMonitoring", monitor_seed_bottom_sp_pos_z, monitor_seed_bottom_sp_pos_r, monitor_seed_bottom_sp_pos_signed_r, + monitor_seed_middle_sp_pos_z, monitor_seed_middle_sp_pos_r, monitor_seed_middle_sp_pos_signed_r, + monitor_seed_top_sp_pos_z, monitor_seed_top_sp_pos_r, monitor_seed_top_sp_pos_signed_r); + + return StatusCode::SUCCESS; + } + +} diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h new file mode 100644 index 00000000000..e2f3dee37e2 --- /dev/null +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h @@ -0,0 +1,32 @@ +/* + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ACTS_MONITORING_ALGORITHM_SEED_H +#define ACTS_MONITORING_ALGORITHM_SEED_H + +#include "AthenaMonitoring/AthMonitorAlgorithm.h" +#include "AthenaMonitoringKernel/Monitored.h" +#include "StoreGate/ReadHandleKey.h" + +#include "ActsEDM/ActsSpacePoint.h" +#include "ActsEDM/ActsSeed.h" + +namespace ActsTrk { + + class ActsSeedMonitoringAlgorithm : + public AthMonitorAlgorithm { + public: + ActsSeedMonitoringAlgorithm(const std::string& name, ISvcLocator* pSvcLocator); + virtual ~ActsSeedMonitoringAlgorithm() override = default; + + virtual StatusCode initialize() override; + virtual StatusCode fillHistograms(const EventContext& ctx) const override; + + private: + SG::ReadHandleKey< ActsTrk::SeedContainer > m_inputSeedColletionKey {this, "InputSeedCollection", "", ""}; + }; + +} + +#endif diff --git a/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx b/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx index e18efbd01c9..e08e6b81c64 100644 --- a/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx @@ -11,5 +11,7 @@ DECLARE_COMPONENT( ActsTrk::ActsSeedingAlgorithm ) DECLARE_COMPONENT( ActsTrk::ActsSeedingFromAthenaAlgorithm ) #include "src/ActsSpacePointMonitoringAlgorithm.h" +#include "src/ActsSeedMonitoringAlgorithm.h" DECLARE_COMPONENT( ActsTrk::ActsSpacePointMonitoringAlgorithm ) +DECLARE_COMPONENT( ActsTrk::ActsSeedMonitoringAlgorithm ) -- GitLab From 5b45830c34add6c1ac0fc7a9411c2fc161a2a0f8 Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Thu, 3 Feb 2022 01:36:50 +0100 Subject: [PATCH 05/12] Computing Eta from seed --- .../python/ITkTrackingSiPatternConfig.py | 1 + Tracking/Acts/ActsTrkFinding/CMakeLists.txt | 3 ++ .../python/ActsMonitoringConfig.py | 3 ++ .../src/ActsSeedMonitoringAlgorithm.cxx | 53 ++++++++++++++++++- 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py index 2a5a60118d7..5e7c2563ddb 100644 --- a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py +++ b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py @@ -61,6 +61,7 @@ def ITkSiSpacePointsSeedMakerCfg(flags, name="ITkSpSeedsMaker", InputCollections if flags.ITk.Tracking.Pass.extension == "LargeD0": kwargs.setdefault("usePixel", False) + kwargs['WriteNtuple'] = True ITkSiSpacePointsSeedMaker = SiSpacePointsSeedMaker (name = name+flags.ITk.Tracking.Pass.extension, **kwargs) acc.setPrivateTools(ITkSiSpacePointsSeedMaker) diff --git a/Tracking/Acts/ActsTrkFinding/CMakeLists.txt b/Tracking/Acts/ActsTrkFinding/CMakeLists.txt index b136b40c03b..5970e04d4cd 100644 --- a/Tracking/Acts/ActsTrkFinding/CMakeLists.txt +++ b/Tracking/Acts/ActsTrkFinding/CMakeLists.txt @@ -26,4 +26,7 @@ atlas_add_component( ActsTrkFinding atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) +atlas_add_test( ActsTrkFindingSeeding SCRIPT Reco_tf.py --CA --steering doRAWtoALL --inputRDOFile /afs/cern.ch/user/c/cvarni/work/ACTS/AlgoForCheckingSpacePoints/utils/RUN4_ttbar.mu200.RDO.pool.root --outputAODFile AOD.pool.root --maxEvents -1 + PROPERTIES TIMEOUT 300 + POST_EXEC_SCRIPT nopost.sh ) diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py index a7638fc2522..17c7f8b6a3f 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py @@ -173,6 +173,9 @@ def ActsSeedMonitoringAlgorithmCfg(ConfigFlags, monitoringGroup.defineHistogram('seed_top_sp_pos_r', type='TH1F', title='top sp - r coordinate;r [mm];Entries', xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + monitoringGroup.defineHistogram("seed_eta", type='TH1F', title='Eta from Seed;eta;Entries', + xbins=50, xmin=-5, xmax=5) + # 2D monitoringGroup.defineHistogram('seed_bottom_sp_pos_z,seed_bottom_sp_pos_r', type='TH2F', title='Bottom SP - Z coordinate vs R;z [mm];r [mm]', xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx index 848265e9f2d..28ca06bc837 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx @@ -82,13 +82,62 @@ namespace ActsTrk { double r = std::sqrt(x2 + y2); return sp->y() >= 0 ? r : -r; }); - - + + auto monitor_seed_eta = Monitored::Collection("seed_eta", *seed_collection, + [](const auto* seed){ + const auto* bottom = seed->sp()[0]; + const auto* medium = seed->sp()[1]; + const auto* top= seed->sp()[2]; + + // Central + float r_medium = std::sqrt(medium->x()*medium->x() + medium->y()*medium->y()); + float ax = medium->x() / r_medium; + float ay = medium->y() / r_medium; + + // Bottom + float dx_bottom = medium->x() - bottom->x(); + float dy_bottom = medium->y() - bottom->y(); + float dz_bottom = medium->z() - bottom->z(); + + float x_bottom = dx_bottom * ax + dy_bottom * ay; + float y_bottom = dy_bottom * ax - dx_bottom * ay; + float dxy_bottom = x_bottom * x_bottom + y_bottom * y_bottom; + float dr_bottom = std::sqrt( 1/dxy_bottom ); + + // Top + float dx_top = top->x() - medium->x(); + float dy_top = top->y() - medium->y(); + float dz_top = top->z() - medium->z(); + + float x_top = dx_top * ax + dy_top * ay; + float y_top = dy_top * ax - dx_top * ay; + float dxy_top = x_top * x_top + y_top * y_top; + float dr_top = std::sqrt( 1/dxy_top ); + + // Put together + float tz_bottom = dz_bottom * dr_bottom; + float tz_top = dz_top * dr_top; + std::cout<<"tz_bottom, tz_top = "< eta: "<z() > 0 ? eta : -eta; + }); fill("ActsMonitoring", monitor_nseed); fill("ActsMonitoring", monitor_seed_bottom_sp_pos_z, monitor_seed_bottom_sp_pos_r, monitor_seed_bottom_sp_pos_signed_r, monitor_seed_middle_sp_pos_z, monitor_seed_middle_sp_pos_r, monitor_seed_middle_sp_pos_signed_r, monitor_seed_top_sp_pos_z, monitor_seed_top_sp_pos_r, monitor_seed_top_sp_pos_signed_r); + fill("ActsMonitoring", monitor_seed_eta); return StatusCode::SUCCESS; } -- GitLab From ce1df2f4371104743868673672ce0f8a48b4d16e Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Thu, 3 Feb 2022 14:49:20 +0100 Subject: [PATCH 06/12] variables --- .../python/ITkTrackingSiPatternConfig.py | 4 + .../python/ActsMonitoringConfig.py | 32 ++- .../python/ActsSeedingToolConfig.py | 5 +- .../src/ActsSeedMonitoringAlgorithm.cxx | 214 +++++++++++++----- .../src/ActsSeedMonitoringAlgorithm.h | 12 + 5 files changed, 203 insertions(+), 64 deletions(-) diff --git a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py index 5e7c2563ddb..5158f053e6c 100644 --- a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py +++ b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py @@ -61,7 +61,11 @@ def ITkSiSpacePointsSeedMakerCfg(flags, name="ITkSpSeedsMaker", InputCollections if flags.ITk.Tracking.Pass.extension == "LargeD0": kwargs.setdefault("usePixel", False) + # Validation kwargs['WriteNtuple'] = True + HistService = CompFactory.THistSvc( Output = ["valNtuples DATAFILE='SeedMakerValidation.root' OPT='RECREATE'"] ) + acc.addService(HistService) + ITkSiSpacePointsSeedMaker = SiSpacePointsSeedMaker (name = name+flags.ITk.Tracking.Pass.extension, **kwargs) acc.setPrivateTools(ITkSiSpacePointsSeedMaker) diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py index 17c7f8b6a3f..e5cea0ab4ad 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py @@ -16,20 +16,20 @@ class PlotBinnings: sp_binning_bank = { 'ITk' : { 'Pixel' : [ - PlotBinnings(xbins=10000, xmin=0, xmax=10000), # Nps + PlotBinnings(xbins=1000, xmin=0, xmax=10000), # Nps PlotBinnings(xbins=400, xmin=-400, xmax=400), # ps_pos_x - PlotBinnings(xbins=400, xmin=-400, xmax=400), # ps_pos_y + PlotBinnings(xbins=200, xmin=-400, xmax=400), # ps_pos_y PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), # ps_pos_z - PlotBinnings(xbins=3500, xmin=0, xmax=350), # ps_pos_r + PlotBinnings(xbins=350, xmin=0, xmax=350), # ps_pos_r PlotBinnings(xbins=20, xmin=0, xmax=6), # sp_cov_r PlotBinnings(xbins=20, xmin=0, xmax=6), # sp_cov_z ], 'Strip' : [ PlotBinnings(xbins=10000, xmin=0, xmax=10000), PlotBinnings(xbins=1200, xmin=-1200, xmax=1200), - PlotBinnings(xbins=1200, xmin=-1200, xmax=1200), + PlotBinnings(xbins=600, xmin=-1200, xmax=1200), PlotBinnings(xbins=1000, xmin=-3000, xmax=3000), - PlotBinnings(xbins=12000, xmin=400, xmax=1200), + PlotBinnings(xbins=1200, xmin=300, xmax=1200), PlotBinnings(xbins=20, xmin=0, xmax=6), PlotBinnings(xbins=20, xmin=0, xmax=6) ], @@ -99,7 +99,7 @@ def ActsSpacePointMonitoringAlgorithmCfg(ConfigFlags, monitoringGroup.defineHistogram('sp_pos_r', type='TH1F', title='r coordinate;r [mm];Entries', xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) monitoringGroup.defineHistogram('sp_pos_signed_r', type='TH1F', title='signed r coordinate;r [mm];Entries', - xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + xbins=2*binning_sp_pos_r.nbins, xmin=-binning_sp_pos_r.max, xmax=binning_sp_pos_r.max) monitoringGroup.defineHistogram('sp_cov_r', type='TH1F', title='Covariance R;cov;Entries', xbins=binning_sp_cov_r.nbins, xmin=binning_sp_cov_r.min, xmax=binning_sp_cov_r.max) @@ -155,27 +155,43 @@ def ActsSeedMonitoringAlgorithmCfg(ConfigFlags, # Global monitoringGroup.defineHistogram('Nseed', type="TH1I", title='Number of Seeds;N;Entries', - xbins=binning_nps.nbins, xmin=binning_nps.min, xmax=binning_nps.max) # CHANGE + xbins=100, xmin=binning_nps.min, xmax=binning_nps.max) # CHANGE # 1D + monitoringGroup.defineHistogram('seed_bottom_sp_pos_x', type='TH1F', title='bottom sp - x coordinate;x [mm];Entries', + xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max) + monitoringGroup.defineHistogram('seed_bottom_sp_pos_y', type='TH1F', title='bottom sp - y coordinate;y [mm];Entries', + xbins=binning_sp_pos_y.nbins, xmin=binning_sp_pos_y.min, xmax=binning_sp_pos_y.max) monitoringGroup.defineHistogram('seed_bottom_sp_pos_z', type='TH1F', title='bottom sp - z coordinate;z [mm];Entries', xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) monitoringGroup.defineHistogram('seed_bottom_sp_pos_r', type='TH1F', title='bottom sp - r coordinate;r [mm];Entries', xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + monitoringGroup.defineHistogram('seed_middle_sp_pos_x', type='TH1F', title='middle sp - x coordinate;x [mm];Entries', + xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max) + monitoringGroup.defineHistogram('seed_middle_sp_pos_y', type='TH1F', title='middle sp - y coordinate;y [mm];Entries', + xbins=binning_sp_pos_y.nbins, xmin=binning_sp_pos_y.min, xmax=binning_sp_pos_y.max) monitoringGroup.defineHistogram('seed_middle_sp_pos_z', type='TH1F', title='middle sp - z coordinate;z [mm];Entries', xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) monitoringGroup.defineHistogram('seed_middle_sp_pos_r', type='TH1F', title='middle sp - r coordinate;r [mm];Entries', xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + monitoringGroup.defineHistogram('seed_top_sp_pos_x', type='TH1F', title='top sp - x coordinate;x [mm];Entries', + xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max) + monitoringGroup.defineHistogram('seed_top_sp_pos_y', type='TH1F', title='top sp - y coordinate;y [mm];Entries', + xbins=binning_sp_pos_y.nbins, xmin=binning_sp_pos_y.min, xmax=binning_sp_pos_y.max) monitoringGroup.defineHistogram('seed_top_sp_pos_z', type='TH1F', title='top sp - z coordinate;z [mm];Entries', xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) monitoringGroup.defineHistogram('seed_top_sp_pos_r', type='TH1F', title='top sp - r coordinate;r [mm];Entries', xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) + monitoringGroup.defineHistogram("seed_pt", type='TH1F', title='Pt from Seed;Pt [GeV];Entries', + xbins=50, xmin=0, xmax=5) monitoringGroup.defineHistogram("seed_eta", type='TH1F', title='Eta from Seed;eta;Entries', xbins=50, xmin=-5, xmax=5) - + monitoringGroup.defineHistogram("seed_d0", type='TH1F', title='d0 from Seed;d0 [mm];Entries', + xbins=100, xmin=-50, xmax=50) + # 2D monitoringGroup.defineHistogram('seed_bottom_sp_pos_z,seed_bottom_sp_pos_r', type='TH2F', title='Bottom SP - Z coordinate vs R;z [mm];r [mm]', xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py index 4d1fcec64dc..e7982f8d549 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py @@ -15,7 +15,10 @@ ActsSeedToolProperties = { }, 'ITkPixel' : { 'rMax' : 320 * UnitConstants.mm, - 'deltaRMax' : 120 * UnitConstants.mm + 'deltaRMax' : 100 * UnitConstants.mm, + 'zMin' : -3000 * UnitConstants.mm, + 'zMax' : 3000 * UnitConstants.mm, + 'cotThetaMax' : 27.3 }, 'ITkStrip' : { 'rMax' : 1100 * UnitConstants.mm, diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx index 28ca06bc837..7374101cbb6 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx @@ -3,6 +3,9 @@ */ #include "ActsSeedMonitoringAlgorithm.h" +#include "Acts/Definitions/Units.hpp" +#include "Acts/MagneticField/MagneticFieldContext.hpp" +#include "ActsGeometry/ATLASMagneticFieldWrapper.h" namespace ActsTrk { @@ -15,6 +18,9 @@ namespace ActsTrk { ATH_CHECK( m_inputSeedColletionKey.initialize() ); + ATH_CHECK( m_beamSpotKey.initialize() ); + ATH_CHECK( m_fieldCondObjInputKey.initialize() ); + return AthMonitorAlgorithm::initialize(); } @@ -27,9 +33,70 @@ namespace ActsTrk { const ActsTrk::SeedContainer* seed_collection = handle.get(); ATH_MSG_INFO( "Retrieved " << seed_collection->size() << " input elements from key " << m_inputSeedColletionKey.key() ); + + + + + // ================================================== // + // ===================== CONDS ====================== // + // ================================================== // + + // Read the Beam Spot information + SG::ReadCondHandle beamSpotHandle { m_beamSpotKey, ctx }; + ATH_CHECK( beamSpotHandle.isValid() ); + if (beamSpotHandle.cptr() == nullptr) { + ATH_MSG_ERROR("Retrieved Beam Spot Handle contains a nullptr"); + return StatusCode::FAILURE; + } + auto beamSpotData = beamSpotHandle.cptr(); + + // Read the b-field information + SG::ReadCondHandle readHandle { m_fieldCondObjInputKey, ctx }; + ATH_CHECK( readHandle.isValid() ); + + const AtlasFieldCacheCondObj* fieldCondObj{ *readHandle }; + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key()); + return StatusCode::FAILURE; + } + + // Get the magnetic field + // Using ACTS classes in order to be sure we are consistent + Acts::MagneticFieldContext magFieldContext(fieldCondObj); + + + // Beam Spot Position + Acts::Vector2 beamPos( beamSpotData->beamPos()[ Amg::x ] * Acts::UnitConstants::mm, + beamSpotData->beamPos()[ Amg::y ] * Acts::UnitConstants::mm ); + + // Magnetic Field + ATLASMagneticFieldWrapper magneticField; + Acts::MagneticFieldProvider::Cache magFieldCache = magneticField.makeCache( magFieldContext ); + Acts::Vector3 magfield = *magneticField.getField( Acts::Vector3(beamPos.x(), beamPos.y(), 0), + magFieldCache ); + + + + + + + + + auto monitor_nseed = Monitored::Scalar("Nseed", seed_collection->size()); + fill("ActsMonitoring", monitor_nseed); + + + + + + // Bottom + auto monitor_seed_bottom_sp_pos_x = Monitored::Collection("seed_bottom_sp_pos_x", *seed_collection, + [] (const auto* obj) { return obj->sp()[0]->x(); }); + auto monitor_seed_bottom_sp_pos_y = Monitored::Collection("seed_bottom_sp_pos_y", *seed_collection, + [] (const auto* obj) { return obj->sp()[0]->y(); }); auto monitor_seed_bottom_sp_pos_z = Monitored::Collection("seed_bottom_sp_pos_z", *seed_collection, [] (const auto* obj) { return obj->sp()[0]->z(); }); auto monitor_seed_bottom_sp_pos_r = Monitored::Collection("seed_bottom_sp_pos_r", *seed_collection, @@ -48,6 +115,11 @@ namespace ActsTrk { }); // Middle + auto monitor_seed_middle_sp_pos_x = Monitored::Collection("seed_middle_sp_pos_x", *seed_collection, + [] (const auto* obj) { return obj->sp()[1]->x(); }); + auto monitor_seed_middle_sp_pos_y = Monitored::Collection("seed_middle_sp_pos_y", *seed_collection, + [] (const auto* obj) { return obj->sp()[1]->y(); }); + auto monitor_seed_middle_sp_pos_z = Monitored::Collection("seed_middle_sp_pos_z", *seed_collection, [] (const auto* obj) { return obj->sp()[1]->z(); }); auto monitor_seed_middle_sp_pos_r = Monitored::Collection("seed_middle_sp_pos_r", *seed_collection, @@ -66,6 +138,11 @@ namespace ActsTrk { }); // Top + auto monitor_seed_top_sp_pos_x = Monitored::Collection("seed_top_sp_pos_x", *seed_collection, + [] (const auto* obj) { return obj->sp()[2]->x(); }); + auto monitor_seed_top_sp_pos_y = Monitored::Collection("seed_top_sp_pos_y", *seed_collection, + [] (const auto* obj) { return obj->sp()[2]->y(); }); + auto monitor_seed_top_sp_pos_z = Monitored::Collection("seed_top_sp_pos_z", *seed_collection, [] (const auto* obj) { return obj->sp()[2]->z(); }); auto monitor_seed_top_sp_pos_r = Monitored::Collection("seed_top_sp_pos_r", *seed_collection, @@ -83,61 +160,88 @@ namespace ActsTrk { return sp->y() >= 0 ? r : -r; }); - auto monitor_seed_eta = Monitored::Collection("seed_eta", *seed_collection, - [](const auto* seed){ - const auto* bottom = seed->sp()[0]; - const auto* medium = seed->sp()[1]; - const auto* top= seed->sp()[2]; - - // Central - float r_medium = std::sqrt(medium->x()*medium->x() + medium->y()*medium->y()); - float ax = medium->x() / r_medium; - float ay = medium->y() / r_medium; - - // Bottom - float dx_bottom = medium->x() - bottom->x(); - float dy_bottom = medium->y() - bottom->y(); - float dz_bottom = medium->z() - bottom->z(); - - float x_bottom = dx_bottom * ax + dy_bottom * ay; - float y_bottom = dy_bottom * ax - dx_bottom * ay; - float dxy_bottom = x_bottom * x_bottom + y_bottom * y_bottom; - float dr_bottom = std::sqrt( 1/dxy_bottom ); - - // Top - float dx_top = top->x() - medium->x(); - float dy_top = top->y() - medium->y(); - float dz_top = top->z() - medium->z(); - - float x_top = dx_top * ax + dy_top * ay; - float y_top = dy_top * ax - dx_top * ay; - float dxy_top = x_top * x_top + y_top * y_top; - float dr_top = std::sqrt( 1/dxy_top ); - - // Put together - float tz_bottom = dz_bottom * dr_bottom; - float tz_top = dz_top * dr_top; - std::cout<<"tz_bottom, tz_top = "< eta: "<z() > 0 ? eta : -eta; - }); - - fill("ActsMonitoring", monitor_nseed); - fill("ActsMonitoring", monitor_seed_bottom_sp_pos_z, monitor_seed_bottom_sp_pos_r, monitor_seed_bottom_sp_pos_signed_r, - monitor_seed_middle_sp_pos_z, monitor_seed_middle_sp_pos_r, monitor_seed_middle_sp_pos_signed_r, - monitor_seed_top_sp_pos_z, monitor_seed_top_sp_pos_r, monitor_seed_top_sp_pos_signed_r); - fill("ActsMonitoring", monitor_seed_eta); + for (const auto* seed : *seed_collection) { + const auto* bottom = seed->sp()[0]; + const auto* medium = seed->sp()[1]; + const auto* top = seed->sp()[2]; + + // Central + float r_medium = std::sqrt(medium->x()*medium->x() + medium->y()*medium->y()); // R + float ax = medium->x() / r_medium; + float ay = medium->y() / r_medium; + + // Bottom + float dx_bottom = medium->x() - bottom->x(); + float dy_bottom = medium->y() - bottom->y(); + float dz_bottom = medium->z() - bottom->z(); + + float x_bottom = dx_bottom * ax + dy_bottom * ay; + float y_bottom = dy_bottom * ax - dx_bottom * ay; + float dxy_bottom = x_bottom * x_bottom + y_bottom * y_bottom; + float r2_bottom = 1. / dxy_bottom; + float dr_bottom = std::sqrt( 1/dxy_bottom ); + + float u_bottom = x_bottom * r2_bottom; + float v_bottom = y_bottom * r2_bottom; + + + // Top + float dx_top = top->x() - medium->x(); + float dy_top = top->y() - medium->y(); + float dz_top = top->z() - medium->z(); + + float x_top = dx_top * ax + dy_top * ay; + float y_top = dy_top * ax - dx_top * ay; + float dxy_top = x_top * x_top + y_top * y_top; + float r2_top = 1/dxy_top; + float dr_top = std::sqrt( 1/dxy_top ); + + float u_top = x_top * r2_top; + float v_top = y_top * r2_top; + + // Put together + float dU = u_top - u_bottom; + float A = (v_top - v_bottom) * dU; + float B = v_bottom - A * u_bottom; + + float K = 2. / (300. * magfield[2]); + float onePlusAsquare = 1. + A * A; + float BSquare = B * B; + + float tz_bottom = dz_bottom * dr_bottom; + float tz_top = dz_top * dr_top; + + float meanOneOverTanThetaSquare= tz_bottom * tz_top; + float meanOneOverTanTheta = std::sqrt(meanOneOverTanThetaSquare); + if (meanOneOverTanTheta < 1e-8) + meanOneOverTanTheta = 1e-8; + + float theta = std::atan(1. / meanOneOverTanTheta); + + + float pt = std::sqrt(onePlusAsquare / BSquare) / (1000 * K); + float eta = -std::log(std::tan(0.5 * theta)); + float d0 = (A - B * r_medium) * r_medium; + + if (top->z() < medium->z()) eta = -eta; + + auto monitor_seed_pt = Monitored::Scalar("seed_pt", pt); + auto monitor_seed_eta = Monitored::Scalar("seed_eta", eta); + auto monitor_seed_d0 = Monitored::Scalar("seed_d0", d0); + + // fill + fill("ActsMonitoring", monitor_seed_pt, monitor_seed_eta, + monitor_seed_d0); + } + + // Fill + fill("ActsMonitoring", + monitor_seed_bottom_sp_pos_x, monitor_seed_bottom_sp_pos_y, monitor_seed_bottom_sp_pos_z, monitor_seed_bottom_sp_pos_r, monitor_seed_bottom_sp_pos_signed_r, + monitor_seed_middle_sp_pos_x, monitor_seed_middle_sp_pos_y, monitor_seed_middle_sp_pos_z, monitor_seed_middle_sp_pos_r, monitor_seed_middle_sp_pos_signed_r, + monitor_seed_top_sp_pos_x, monitor_seed_top_sp_pos_y, monitor_seed_top_sp_pos_z, monitor_seed_top_sp_pos_r, monitor_seed_top_sp_pos_signed_r); + + // fill("ActsMonitoring", monitor_seed_pt, monitor_seed_eta, + // monitor_seed_d0); return StatusCode::SUCCESS; } diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h index e2f3dee37e2..c324b5aa01f 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h @@ -9,6 +9,12 @@ #include "AthenaMonitoringKernel/Monitored.h" #include "StoreGate/ReadHandleKey.h" +// Athena +#include "BeamSpotConditionsData/BeamSpotData.h" +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" +#include "MagFieldElements/AtlasFieldCache.h" + +// Acts #include "ActsEDM/ActsSpacePoint.h" #include "ActsEDM/ActsSeed.h" @@ -25,6 +31,12 @@ namespace ActsTrk { private: SG::ReadHandleKey< ActsTrk::SeedContainer > m_inputSeedColletionKey {this, "InputSeedCollection", "", ""}; + + + SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey{this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}; + SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", + "Name of the Magnetic Field conditions object key"}; + }; } -- GitLab From dd0355226a3c8c22085fbe7f278f7f43746a47e6 Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Thu, 3 Feb 2022 18:00:33 +0100 Subject: [PATCH 07/12] z0 --- .../python/ActsMonitoringConfig.py | 8 +++++--- .../python/ActsSeedingToolConfig.py | 2 +- .../src/ActsSeedMonitoringAlgorithm.cxx | 16 +++++++++++----- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py index e5cea0ab4ad..6289cab6e08 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py @@ -188,10 +188,12 @@ def ActsSeedMonitoringAlgorithmCfg(ConfigFlags, monitoringGroup.defineHistogram("seed_pt", type='TH1F', title='Pt from Seed;Pt [GeV];Entries', xbins=50, xmin=0, xmax=5) monitoringGroup.defineHistogram("seed_eta", type='TH1F', title='Eta from Seed;eta;Entries', - xbins=50, xmin=-5, xmax=5) + xbins=50, xmin=0, xmax=5) monitoringGroup.defineHistogram("seed_d0", type='TH1F', title='d0 from Seed;d0 [mm];Entries', - xbins=100, xmin=-50, xmax=50) - + xbins=100, xmin=0, xmax=50) + monitoringGroup.defineHistogram("seed_z0", type='TH1F', title='Average z0 from Seed;z0 [mm];Entries', + xbins=100, xmin=-200, xmax=200) + # 2D monitoringGroup.defineHistogram('seed_bottom_sp_pos_z,seed_bottom_sp_pos_r', type='TH2F', title='Bottom SP - Z coordinate vs R;z [mm];r [mm]', xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py index e7982f8d549..7d9a507d468 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py @@ -14,7 +14,7 @@ ActsSeedToolProperties = { 'deltaRMax' : 400 * UnitConstants.mm }, 'ITkPixel' : { - 'rMax' : 320 * UnitConstants.mm, + 'rMax' : 360 * UnitConstants.mm, 'deltaRMax' : 100 * UnitConstants.mm, 'zMin' : -3000 * UnitConstants.mm, 'zMax' : 3000 * UnitConstants.mm, diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx index 7374101cbb6..43716fda807 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx @@ -167,10 +167,13 @@ namespace ActsTrk { // Central float r_medium = std::sqrt(medium->x()*medium->x() + medium->y()*medium->y()); // R + float z_medium = medium->z(); + float ax = medium->x() / r_medium; float ay = medium->y() / r_medium; - // Bottom + // Bottom + float r_bottom = std::sqrt(bottom->x()*bottom->x() + bottom->y()*bottom->y()); float dx_bottom = medium->x() - bottom->x(); float dy_bottom = medium->y() - bottom->y(); float dz_bottom = medium->z() - bottom->z(); @@ -185,7 +188,8 @@ namespace ActsTrk { float v_bottom = y_bottom * r2_bottom; - // Top + // Top + float r_top = std::sqrt(top->x()*top->x() + top->y()*top->y()); float dx_top = top->x() - medium->x(); float dy_top = top->y() - medium->y(); float dz_top = top->z() - medium->z(); @@ -221,17 +225,19 @@ namespace ActsTrk { float pt = std::sqrt(onePlusAsquare / BSquare) / (1000 * K); float eta = -std::log(std::tan(0.5 * theta)); - float d0 = (A - B * r_medium) * r_medium; + float d0 = std::abs( (A - B * r_medium) * r_medium ); - if (top->z() < medium->z()) eta = -eta; + float dZdR = ( top->z() - medium->z() ) * dr_top; + float z0 = z_medium - r_medium * dZdR; auto monitor_seed_pt = Monitored::Scalar("seed_pt", pt); auto monitor_seed_eta = Monitored::Scalar("seed_eta", eta); auto monitor_seed_d0 = Monitored::Scalar("seed_d0", d0); + auto monitor_seed_z0 = Monitored::Scalar("seed_z0", z0); // fill fill("ActsMonitoring", monitor_seed_pt, monitor_seed_eta, - monitor_seed_d0); + monitor_seed_d0, monitor_seed_z0); } // Fill -- GitLab From 7f03080a35f703146aab5d003b9e25a46fba3b62 Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Tue, 8 Feb 2022 17:09:09 +0100 Subject: [PATCH 08/12] Renage --- Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py index 6289cab6e08..4e027e3770e 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py @@ -186,7 +186,7 @@ def ActsSeedMonitoringAlgorithmCfg(ConfigFlags, xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) monitoringGroup.defineHistogram("seed_pt", type='TH1F', title='Pt from Seed;Pt [GeV];Entries', - xbins=50, xmin=0, xmax=5) + xbins=50, xmin=0, xmax=3) monitoringGroup.defineHistogram("seed_eta", type='TH1F', title='Eta from Seed;eta;Entries', xbins=50, xmin=0, xmax=5) monitoringGroup.defineHistogram("seed_d0", type='TH1F', title='d0 from Seed;d0 [mm];Entries', -- GitLab From 20e461b53fd9ed89aec1647816cad4d7198fca2b Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Thu, 10 Feb 2022 03:10:06 +0100 Subject: [PATCH 09/12] Define TTree, TBranches and Fill them --- .../ActsInterop/python/ActsConfigFlags.py | 1 + .../python/ActsSeedingAlgorithmConfig.py | 2 +- .../python/ActsSeedingToolConfig.py | 7 + .../ActsTrkFinding/src/ActsSeedingTool.cxx | 158 +++++++++++++++++- .../Acts/ActsTrkFinding/src/ActsSeedingTool.h | 43 ++++- 5 files changed, 205 insertions(+), 6 deletions(-) diff --git a/Tracking/Acts/ActsInterop/python/ActsConfigFlags.py b/Tracking/Acts/ActsInterop/python/ActsConfigFlags.py index b440f1f2284..4d121ed8abd 100644 --- a/Tracking/Acts/ActsInterop/python/ActsConfigFlags.py +++ b/Tracking/Acts/ActsInterop/python/ActsConfigFlags.py @@ -12,5 +12,6 @@ def createActsConfigFlags(): actscf.addFlag('Acts.TrackingGeometry.buildAllAvailableSubDetectors', False) # Build SCT, TRT and Calo if they are available # Track Finding Flags - TO BE ADDED + actscf.addFlag('Acts.TrackFinding.Seeding.WriteNtuple', False) # Write root file with ttree return actscf diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingAlgorithmConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingAlgorithmConfig.py index 2e1179d7d92..3311b459590 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingAlgorithmConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingAlgorithmConfig.py @@ -30,7 +30,7 @@ def ActsSeedingAlgorithmCfg(ConfigFlags, options['OutputSeeds'] = outputCollection options.setdefault('SeedTool', seedTool) options.setdefault('BeamSpotKey', 'BeamSpotData') - options.setdefault('AtlasFieldCacheCondObj', 'fieldCondObj') + options.setdefault('AtlasFieldCacheCondObj', 'fieldCondObj') ActsTrk__ActsSeedingAlgorithm = CompFactory.getComp(f"ActsTrk::{name}") acc.addEventAlgo(ActsTrk__ActsSeedingAlgorithm(**options)) diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py index 7d9a507d468..2b194f5157e 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py @@ -72,6 +72,13 @@ def ActsSeedingToolBaseCfg(ConfigFlags, options.setdefault('zBinEdges', []) options.setdefault('zBinNeighborsTop', []) options.setdefault('zBinNeighborsBottom', []) + options.setdefault('WriteNtuple', ConfigFlags.Acts.TrackFinding.Seeding.WriteNtuple) + + if ConfigFlags.Acts.TrackFinding.Seeding.WriteNtuple: + folder_name = 'actsValNtuples' + options.setdefault('TreeFolderName', folder_name) + HistService = CompFactory.THistSvc( Output = [f"{folder_name} DATAFILE='ActsSeedMakerValidation.root' OPT='RECREATE'"] ) + acc.addService(HistService) ActsTrk__ActsSeedingTool = CompFactory.getComp("ActsTrk::ActsSeedingTool") acc.setPrivateTools(ActsTrk__ActsSeedingTool(**options)) diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.cxx index c49287dd6c4..4ac9fc5f4f5 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #include "src/ActsSeedingTool.h" @@ -40,6 +40,8 @@ namespace ActsTrk { ATH_MSG_INFO( " " << m_minPt ); ATH_MSG_INFO( " " << m_impactMax ); ATH_MSG_INFO( " " << m_numPhiNeighbors ); + ATH_MSG_INFO( " " << m_writeNtuple ); + ATH_MSG_INFO( " " << m_treeFolder ); if (m_zBinEdges.size() - 1 != m_zBinNeighborsTop.size() and @@ -54,6 +56,40 @@ namespace ActsTrk { ATH_MSG_ERROR("Inconsistent config zBinNeighborsBottom"); return StatusCode::FAILURE; } + + // Validation + if (m_writeNtuple) { + if (m_treeFolder.empty()) { + ATH_MSG_ERROR("Requested seed validation, but tree folder is not defined!"); + return StatusCode::FAILURE; + } + + ATH_CHECK( service("THistSvc", m_thistSvc) ); + std::string tree_name = std::string("SeedTree_") + name(); + std::replace( tree_name.begin(), tree_name.end(), '.', '_' ); + + m_outputTree = new TTree( tree_name.c_str() , "ActsSeedMakerValTool"); + + m_outputTree->Branch("d0", &m_d0); + m_outputTree->Branch("z0", &m_z0); + m_outputTree->Branch("pt", &m_pt); + m_outputTree->Branch("eta", &m_eta); + m_outputTree->Branch("x1", &m_x1); + m_outputTree->Branch("x2", &m_x2); + m_outputTree->Branch("x3", &m_x3); + m_outputTree->Branch("y1", &m_y1); + m_outputTree->Branch("y2", &m_y2); + m_outputTree->Branch("y3", &m_y3); + m_outputTree->Branch("z1", &m_z1); + m_outputTree->Branch("z2", &m_z2); + m_outputTree->Branch("z3", &m_z3); + m_outputTree->Branch("r1", &m_r1); + m_outputTree->Branch("r2", &m_r2); + m_outputTree->Branch("r3", &m_r3); + + std::string full_tree_name = "/" + m_treeFolder + "/" + tree_name; + ATH_CHECK( m_thistSvc->regTree( full_tree_name.c_str(), m_outputTree ) ); + } return StatusCode::SUCCESS; } @@ -144,7 +180,42 @@ namespace ActsTrk { finder.createSeedsForGroup(state, std::back_inserter(seeds), group.bottom(), group.middle(), group.top()); } - + + // Validation + if (m_writeNtuple) { + for (const auto& seed : seeds) { + auto [pt, eta, d0, z0] = estimateTrackParamsFromSeed(seed, bField); + + auto* bottom = seed.sp()[0]; + auto* medium = seed.sp()[1]; + auto* top = seed.sp()[2]; + + std::lock_guard lock(m_mutex); + m_pt = pt; + m_eta = eta; + m_d0 = d0; + m_z0 = z0; + + // need to add r to sp EDM + m_x1 = bottom->x(); + m_y1 = bottom->y(); + m_z1 = bottom->z(); + m_r1 = std::sqrt(bottom->x()*bottom->x() + bottom->y()*bottom->y()); + + m_x2 = medium->x(); + m_y2 = medium->y(); + m_z2 = medium->z(); + m_r2 = std::sqrt(medium->x()*medium->x() + medium->y()*medium->y()); + + m_x3 = top->x(); + m_y3 = top->y(); + m_z3 = top->z(); + m_r3 = std::sqrt(top->x()*top->x() + top->y()*top->y()); + + m_outputTree->Fill(); + } + } + return seeds; } @@ -198,4 +269,87 @@ namespace ActsTrk { return std::make_pair( gridCfg,finderCfg ); } + template< typename external_spacepoint_t > + std::array + ActsSeedingTool::estimateTrackParamsFromSeed(const Acts::Seed< external_spacepoint_t >& seed, + const Acts::Vector3& magfield) const + { + // Computation is taken from what is done in ATLAS right now. + // We may want to change in the future to the ue of the dedicated function in ACTS Core instead + // Only 4 parameters for now, will add others in the future + + const auto* bottom = seed.sp()[0]; + const auto* medium = seed.sp()[1]; + const auto* top = seed.sp()[2]; + + // Central + float r_medium = std::sqrt(medium->x()*medium->x() + medium->y()*medium->y()); + float z_medium = medium->z(); + + float ax = medium->x() / r_medium; + float ay = medium->y() / r_medium; + + // Bottom + float r_bottom = std::sqrt(bottom->x()*bottom->x() + bottom->y()*bottom->y()); + float dx_bottom = medium->x() - bottom->x(); + float dy_bottom = medium->y() - bottom->y(); + float dz_bottom = medium->z() - bottom->z(); + + float x_bottom = dx_bottom * ax + dy_bottom * ay; + float y_bottom = dy_bottom * ax - dx_bottom * ay; + float dxy_bottom = x_bottom * x_bottom + y_bottom * y_bottom; + float r2_bottom = 1. / dxy_bottom; + float dr_bottom = std::sqrt( 1/dxy_bottom ); + + float u_bottom = x_bottom * r2_bottom; + float v_bottom = y_bottom * r2_bottom; + + + // Top + float r_top = std::sqrt(top->x()*top->x() + top->y()*top->y()); + float dx_top = top->x() - medium->x(); + float dy_top = top->y() - medium->y(); + float dz_top = top->z() - medium->z(); + + float x_top = dx_top * ax + dy_top * ay; + float y_top = dy_top * ax - dx_top * ay; + float dxy_top = x_top * x_top + y_top * y_top; + float r2_top = 1/dxy_top; + float dr_top = std::sqrt( 1/dxy_top ); + + float u_top = x_top * r2_top; + float v_top = y_top * r2_top; + + // Put together + float dU = u_top - u_bottom; + float A = (v_top - v_bottom) * dU; + float B = v_bottom - A * u_bottom; + + float K = 2. / (300. * magfield[2]); + float onePlusAsquare = 1. + A * A; + float BSquare = B * B; + + float tz_bottom = dz_bottom * dr_bottom; + float tz_top = dz_top * dr_top; + + float meanOneOverTanThetaSquare= tz_bottom * tz_top; + float meanOneOverTanTheta = std::sqrt(meanOneOverTanThetaSquare); + if (meanOneOverTanTheta < 1e-8) + meanOneOverTanTheta = 1e-8; + + float theta = std::atan(1. / meanOneOverTanTheta); + + + float pt = std::sqrt(onePlusAsquare / BSquare) / (1000 * K); + float eta = -std::log(std::tan(0.5 * theta)); + float d0 = std::abs( (A - B * r_medium) * r_medium ); + + float dZdR = ( top->z() - medium->z() ) * dr_top; + float z0 = z_medium - r_medium * dZdR; + + + std::array params = {pt, eta, d0, z0}; + return params; + } + } // namespace ActsTrk diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.h b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.h index cfa374316ab..695d37ac1dc 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.h +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #ifndef ACTSTRACKFINDING_ACTSSEEDINGTOOL_H @@ -30,6 +30,9 @@ #include "Acts/Seeding/Seedfinder.hpp" #include "Acts/Seeding/Seed.hpp" +#include "GaudiKernel/ServiceHandle.h" +#include "GaudiKernel/ITHistSvc.h" +#include "TTree.h" namespace ActsTrk { @@ -75,11 +78,17 @@ namespace ActsTrk { > prepareConfiguration( const Acts::Vector2& beamPos, const Acts::Vector3& bField ) const; - + + + // For Validation + template< typename external_spacepoint_t > + std::array + estimateTrackParamsFromSeed(const Acts::Seed< external_spacepoint_t >& seed, + const Acts::Vector3& magfield) const; + // ********************************************************************* // ********************************************************************* private: - // Properties Gaudi::Property< float > m_rMax {this,"rMax",200. * Acts::UnitConstants::mm,""}; Gaudi::Property< float > m_deltaRMin {this,"deltaRMin",1. * Acts::UnitConstants::mm,""}; @@ -98,6 +107,34 @@ namespace ActsTrk { Gaudi::Property< std::vector > m_zBinEdges {this, "zBinEdges", {} , ""}; Gaudi::Property< std::vector> > m_zBinNeighborsTop{this, "zBinNeighborsTop", {}, ""}; Gaudi::Property< std::vector> > m_zBinNeighborsBottom{this, "zBinNeighborsBottom", {}, ""}; + Gaudi::Property< bool > m_writeNtuple {this, "WriteNtuple", false, ""}; + + private: + // Validation + mutable std::mutex m_mutex; + + // ServiceHandle m_thistSvc {this, "THistSvc", "THistSvc/THistSvc"}; + ITHistSvc* m_thistSvc = nullptr; + TTree* m_outputTree = nullptr; + + Gaudi::Property< std::string > m_treeFolder {this, "TreeFolderName", "", ""}; + + mutable float m_d0 ATLAS_THREAD_SAFE = 0; + mutable float m_z0 ATLAS_THREAD_SAFE = 0; + mutable float m_pt ATLAS_THREAD_SAFE = 0; + mutable float m_eta ATLAS_THREAD_SAFE = 0; + mutable double m_x1 ATLAS_THREAD_SAFE = 0; + mutable double m_x2 ATLAS_THREAD_SAFE = 0; + mutable double m_x3 ATLAS_THREAD_SAFE = 0; + mutable double m_y1 ATLAS_THREAD_SAFE = 0; + mutable double m_y2 ATLAS_THREAD_SAFE = 0; + mutable double m_y3 ATLAS_THREAD_SAFE = 0; + mutable double m_z1 ATLAS_THREAD_SAFE = 0; + mutable double m_z2 ATLAS_THREAD_SAFE = 0; + mutable double m_z3 ATLAS_THREAD_SAFE = 0; + mutable double m_r1 ATLAS_THREAD_SAFE = 0; + mutable double m_r2 ATLAS_THREAD_SAFE = 0; + mutable double m_r3 ATLAS_THREAD_SAFE = 0; }; } // namespace -- GitLab From 9e52c6b1ee30e76ae9bbb0e583b5253d3eb5ff20 Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Thu, 10 Feb 2022 04:54:02 +0100 Subject: [PATCH 10/12] Adding ACTS to Athena Conversion for seeds --- .../src/ActsSeedingFromAthenaAlgorithm.cxx | 73 +++++++++++++++---- .../src/ActsSeedingFromAthenaAlgorithm.h | 6 ++ 2 files changed, 63 insertions(+), 16 deletions(-) diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.cxx index 43430a7b6d0..ea449df194c 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + 1;95;0c Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ #include "src/ActsSeedingFromAthenaAlgorithm.h" @@ -43,6 +43,9 @@ namespace ActsTrk { ATH_CHECK( m_seedKey.initialize() ); ATH_CHECK( m_actsSpacePointKey.initialize() ); ATH_CHECK( m_actsSpacePointDataKey.initialize() ); + + // ATH_CHECK( m_spacePointProSeedKey.initialize() ); + // ATH_CHECK( m_spacePointForSeedKey.initialize() ); return StatusCode::SUCCESS; } @@ -93,8 +96,14 @@ namespace ActsTrk { std::unique_ptr actsSpData = std::make_unique(); + // Concert result to Athena objects + std::unique_ptr< DataVector > spProSeeds = + std::make_unique< DataVector >(); + std::unique_ptr< DataVector > spForSeeds = + std::make_unique< DataVector >(); + // Conversion - // Supported collections are Pixel and SCT clusters + // Supported collections are Pixel and SCT/Strips clusters // The following piece of code converts Athena Clusters to Acts Space Points // This is a temporary solution used only for Acts validation purposes // @@ -106,32 +115,35 @@ namespace ActsTrk { for ( const SpacePointCollection* sp_collection: *spContainer) { for ( const Trk::SpacePoint* sp: *sp_collection ) { - - const Acts::Vector3 globalPos = sp->globalPosition(); - - InDet::SiSpacePointForSeed point; + + const Acts::Vector3 globalPos = sp->globalPosition(); float r[3] = { static_cast(globalPos[0]), static_cast(globalPos[1]), static_cast(globalPos[2]) }; - point.set( sp, r ); - Acts::Vector2 variance(point.covr(), point.covz()); + + std::unique_ptr< ITk::SiSpacePointForSeed > sp_for_seed = + std::make_unique< ITk::SiSpacePointForSeed >( sp, r ); - boost::container::static_vector indexes({counter++}); - std::unique_ptr toAdd = - std::make_unique( globalPos, - variance, + const Acts::Vector2 variance( sp_for_seed->covr(), sp_for_seed->covz() ); + + boost::container::static_vector indexes({counter++}); + std::unique_ptr toAdd = + std::make_unique( globalPos, + variance, *actsSpData.get(), - indexes ); - + indexes); + actsSpContainer->push_back( std::move(toAdd) ); + spForSeeds->push_back( std::move(sp_for_seed) ); + } } ATH_MSG_DEBUG( " \\__ Total of " << counter << " Space Points" ); - // ================================================== // + // ================================================== // // ===================== OUTPUTS ==================== // // ================================================== // @@ -144,7 +156,13 @@ namespace ActsTrk { SG::WriteHandle< ActsTrk::SpacePointData > spacePointDataHandle = SG::makeHandle( m_actsSpacePointDataKey, ctx ); ATH_MSG_DEBUG( " \\__ Space Point Data `" << m_actsSpacePointDataKey.key() << "` created ..." ); - + + // SG::WriteHandle< DataVector > spProSeedHandle = SG::makeHandle( m_spacePointProSeedKey, ctx ); + // ATH_MSG_DEBUG( " \\__ Space Point Pro Seed `" << m_spacePointProSeedKey.key() << "` created ..." ); + + // SG::WriteHandle< DataVector > spForSeedHandle = SG::makeHandle( m_spacePointForSeedKey, ctx ); + // ATH_MSG_DEBUG( " \\__ Space Point For Seed `" << m_spacePointForSeedKey.key() << "` created ..." ); + // ================================================== // // ===================== COMPUTATION ================ // // ================================================== // @@ -156,6 +174,26 @@ namespace ActsTrk { magFieldContext, *seedPtrs.get() ) ); ATH_MSG_DEBUG(" \\__ Created " << seedPtrs->size() << " seeds"); + + // Convert to Athena + spProSeeds->reserve( seedPtrs->size() ); + for (const ActsTrk::Seed* seed : *seedPtrs.get()) { + std::size_t bottom_idx = seed->sp()[0]->measurementIndexes()[0]; + std::size_t medium_idx = seed->sp()[1]->measurementIndexes()[0]; + std::size_t top_idx = seed->sp()[2]->measurementIndexes()[0]; + + ITk::SiSpacePointForSeed *bottom_sp = spForSeeds->at(bottom_idx); + ITk::SiSpacePointForSeed *medium_sp = spForSeeds->at(medium_idx); + ITk::SiSpacePointForSeed *top_sp = spForSeeds->at(top_idx); + + std::unique_ptr< ITk::SiSpacePointsProSeed > toAdd = + std::make_unique( bottom_sp, + medium_sp, + top_sp, + seed->z()); + + spProSeeds->push_back( std::move(toAdd) ); + } // ================================================== // // ===================== STORE OUTPUT =============== // @@ -166,6 +204,9 @@ namespace ActsTrk { ATH_CHECK( spacePointHandle.record( std::move( actsSpContainer ) ) ); ATH_CHECK( spacePointDataHandle.record( std::move( actsSpData ) ) ); + // ATH_CHECK( spProSeedHandle.record( std::move(spProSeed) ) ); + // ATH_CHECK( spForSeedHandle.record( std::move(spForSeed) ) ); + return StatusCode::SUCCESS; } diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.h b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.h index ee48056cf2d..abb433405f9 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.h +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.h @@ -20,6 +20,9 @@ #include "MagFieldElements/AtlasFieldCache.h" #include "TrkSpacePoint/SpacePointContainer.h" +#include "SiSPSeededTrackFinderData/ITkSiSpacePointForSeed.h" +#include "SiSPSeededTrackFinderData/ITkSiSpacePointsProSeed.h" + // Handle Keys #include "StoreGate/ReadCondHandleKey.h" #include "StoreGate/ReadHandleKey.h" @@ -52,6 +55,9 @@ namespace ActsTrk { SG::WriteHandleKey< ActsTrk::SeedContainer > m_seedKey {this,"OutputSeeds","","Output Seeds"}; SG::WriteHandleKey< ActsTrk::SpacePointContainer > m_actsSpacePointKey {this,"OutputSpacePoints","","Output Space Points"}; SG::WriteHandleKey< ActsTrk::SpacePointData > m_actsSpacePointDataKey {this,"OutputSpacePointData","","Output Space Points"}; + + /* SG::WriteHandleKey< DataVector > m_spacePointProSeedKey {this, "OutputSpacePointProSeed", "", ""}; */ + /* SG::WriteHandleKey< DataVector > m_spacePointForSeedKey {this, "OutputSpacePointForSeed", "", ""}; */ }; } // namespace -- GitLab From b6817cb76fe5a54e6344969ec64c9451355a97ef Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Thu, 10 Feb 2022 09:53:19 +0100 Subject: [PATCH 11/12] Code Cleaning --- .../share/ConfiguredNewTrackingSiPattern.py | 20 +- .../src/SiSpacePointMakerTool.cxx | 1 - Tracking/Acts/ActsTrkFinding/CMakeLists.txt | 6 +- .../python/ActsMonitoringConfig.py | 219 --------------- .../python/ActsSeedingAlgorithmConfig.py | 2 +- .../python/ActsSequenceConfiguration.py | 8 +- .../ActsTrackingSequenceFromAthenaConfig.py | 13 - .../src/ActsSeedMonitoringAlgorithm.cxx | 255 ------------------ .../src/ActsSeedMonitoringAlgorithm.h | 44 --- .../src/ActsSpacePointMonitoringAlgorithm.cxx | 65 ----- .../src/ActsSpacePointMonitoringAlgorithm.h | 31 --- .../components/ActsTrackFinding_entries.cxx | 6 - 12 files changed, 16 insertions(+), 654 deletions(-) delete mode 100644 Tracking/Acts/ActsTrkFinding/python/ActsMonitoringConfig.py delete mode 100644 Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx delete mode 100644 Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h delete mode 100644 Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.cxx delete mode 100644 Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.h diff --git a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py index ba1528c5b8f..7dfd26fa272 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py @@ -108,7 +108,7 @@ class ConfiguredNewTrackingSiPattern: ServiceMgr.THistSvc.Output = ["valNtuples DATAFILE='SeedMakerValidation.root' OPT='RECREATE'"] - if NewTrackingCuts.mode() == "Offline" or InDetFlags.doHeavyIon() or NewTrackingCuts.mode() == "ForwardTracks": + if NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS" or InDetFlags.doHeavyIon() or NewTrackingCuts.mode() == "ForwardTracks": InDetSiSpacePointsSeedMaker.maxdImpactPPS = NewTrackingCuts.maxdImpactPPSSeeds() InDetSiSpacePointsSeedMaker.maxdImpactSSS = NewTrackingCuts.maxdImpactSSSSeeds() @@ -243,7 +243,7 @@ class ConfiguredNewTrackingSiPattern: useSCT = DetFlags.haveRIO.SCT_on() if not is_dbm else False, PixelClusterContainer = InDetKeys.PixelClusters(), SCT_ClusterContainer = InDetKeys.SCT_Clusters()) - if NewTrackingCuts.mode() == "Offline": + if NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS": track_finder.writeHolesFromPattern = InDetFlags.useHolesFromPattern() if is_dbm : track_finder.MagneticFieldMode = "NoField" @@ -256,7 +256,7 @@ class ConfiguredNewTrackingSiPattern: ToolSvc += track_finder - useBremMode = NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "DBM" + useBremMode = NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS" or NewTrackingCuts.mode() == "DBM" from SiTrackMakerTool_xk.SiTrackMakerTool_xkConf import InDet__SiTrackMaker_xk as SiTrackMaker InDetSiTrackMaker = SiTrackMaker(name = 'InDetSiTrackMaker'+NewTrackingCuts.extension(), useSCT = NewTrackingCuts.useSCT(), @@ -324,6 +324,7 @@ class ConfiguredNewTrackingSiPattern: if InDetFlags.doStoreTrackSeeds(): from SeedToTrackConversionTool.SeedToTrackConversionToolConf import InDet__SeedToTrackConversionTool InDet_SeedToTrackConversion = InDet__SeedToTrackConversionTool(name = "InDet_SeedToTrackConversion", + Extrapolator = TrackingCommon.getInDetExtrapolator(), OutputName = InDetKeys.SiSPSeedSegments()+NewTrackingCuts.extension()) InDetSiTrackMaker.SeedToTrackConversion = InDet_SeedToTrackConversion InDetSiTrackMaker.SeedSegmentsWrite = True @@ -375,7 +376,7 @@ class ConfiguredNewTrackingSiPattern: if InDetFlags.doHeavyIon() : InDetSiSPSeededTrackFinder.FreeClustersCut = 2 #Heavy Ion optimization from Igor - if NewTrackingCuts.mode() == "Offline": + if NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS": InDetSiSPSeededTrackFinder.writeHolesFromPattern = InDetFlags.useHolesFromPattern() #InDetSiSPSeededTrackFinder.OutputLevel =VERBOSE @@ -399,7 +400,7 @@ class ConfiguredNewTrackingSiPattern: TrackCollectionTruthKeys += [ InDetTracksTruth.TracksTruth() ] else: TrackCollectionKeys += [ self.__SiTrackCollection ] - + # Acts here from ActsTrkFinding.ActsTrackingSequenceFromAthenaConfig import ActsTrackingSequenceFromAthenaToAthena as ActsTrackingSequenceToAthena from AthenaConfiguration.AllConfigFlags import ConfigFlags @@ -408,8 +409,9 @@ class ConfiguredNewTrackingSiPattern: InDetKeys.PixelSpacePoints(), InDetKeys.SCT_SpacePoints() ]) - - + + + # ------------------------------------------------------------ # # ---------- Ambiguity solving @@ -510,7 +512,7 @@ class ConfiguredNewTrackingSiPattern: # # --- load Ambiguity Processor # - useBremMode = NewTrackingCuts.mode() == "Offline" + useBremMode = NewTrackingCuts.mode() == "Offline" or NewTrackingCuts.mode() == "BLS" # @TODO is the cluster split probability container needed here ? ambi_track_summary_tool = TrackingCommon.getInDetTrackSummaryTool(namePrefix = 'InDetAmbiguityProcessorSplitProb', @@ -597,8 +599,6 @@ class ConfiguredNewTrackingSiPattern: InDetAmbiguityScoreProcessor.sharedProbCut2 = prob2 if NewTrackingCuts.extension() == "": InDetAmbiguityScoreProcessor.SplitClusterMap_old = "" - elif NewTrackingCuts.extension() == "Disappearing": - InDetAmbiguityScoreProcessor.SplitClusterMap_old = InDetKeys.SplitClusterAmbiguityMap() InDetAmbiguityScoreProcessor.SplitClusterMap_new = InDetKeys.SplitClusterAmbiguityMap()+NewTrackingCuts.extension() if NewTrackingCuts.mode() == "Pixel" or NewTrackingCuts.mode() == "DBM": diff --git a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx index b8f76655115..07d06bb790a 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx @@ -690,7 +690,6 @@ namespace InDet { // Trk::SpacePoint* SiSpacePointMakerTool::makeSCT_SpacePoint (InDet::SCTinformation& In0,InDet::SCTinformation& In1,IdentifierHash ID0,IdentifierHash ID1,double limit,double slimit) const { - std::cout <<"ECCOMI GENTE!!!!"< ComponentAccumulator: - assert isinstance(name, str) - assert isinstance(inputCollection, str) - - helper = AthMonitorCfgHelper(ConfigFlags,'ActsMonCfg') - - options['name'] = f'{name}_{inputCollection}' - options['InputSpacePointCollection'] = inputCollection - - acc = ComponentAccumulator() - ActsTrk__MonitoringAlgo = CompFactory.getComp("ActsTrk::ActsSpacePointMonitoringAlgorithm") - - # Set Monitoring - monitoringAlgorithm = helper.addAlgorithm(ActsTrk__MonitoringAlgo, **options) - monitoringGroup = helper.addGroup(monitoringAlgorithm, 'ActsMonitoring', f'ActsMonitoring/SpacePoints/{inputCollection}') - - - geometry = '' - if ConfigFlags.Detector.GeometryITk: - geometry = 'ITk' - else: - geometry = 'InDet' - - binning_nps, binning_sp_pos_x, binning_sp_pos_y, binning_sp_pos_z, binning_sp_pos_r, binning_sp_cov_r, binning_sp_cov_z = sp_binning_bank[geometry]['Pixel' if 'Pixel' in inputCollection else 'Strip'] - - # Global - monitoringGroup.defineHistogram('Nsp', type="TH1I", title='Number of Space Points;N;Entries', - xbins=binning_nps.nbins, xmin=binning_nps.min, xmax=binning_nps.max) - - # 1D - monitoringGroup.defineHistogram('sp_pos_x', type='TH1F', title='x coordinate;x [mm];Entries', - xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max) - monitoringGroup.defineHistogram('sp_pos_y', type='TH1F', title='y coordinate;y [mm];Entries', - xbins=binning_sp_pos_y.nbins, xmin=binning_sp_pos_y.min, xmax=binning_sp_pos_y.max) - monitoringGroup.defineHistogram('sp_pos_z', type='TH1F', title='z coordinate;z [mm];Entries', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) - monitoringGroup.defineHistogram('sp_pos_r', type='TH1F', title='r coordinate;r [mm];Entries', - xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) - monitoringGroup.defineHistogram('sp_pos_signed_r', type='TH1F', title='signed r coordinate;r [mm];Entries', - xbins=2*binning_sp_pos_r.nbins, xmin=-binning_sp_pos_r.max, xmax=binning_sp_pos_r.max) - - monitoringGroup.defineHistogram('sp_cov_r', type='TH1F', title='Covariance R;cov;Entries', - xbins=binning_sp_cov_r.nbins, xmin=binning_sp_cov_r.min, xmax=binning_sp_cov_r.max) - monitoringGroup.defineHistogram('sp_cov_z', type='TH1F', title='Covariance Z;cov;Entries', - xbins=binning_sp_cov_z.nbins, xmin=binning_sp_cov_z.min, xmax=binning_sp_cov_z.max) - - # 2D - monitoringGroup.defineHistogram('sp_pos_x,sp_pos_y', type='TH2F', title='X coordinate vs Y;x [mm];y [mm]', - xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max, - ybins=binning_sp_pos_y.nbins, ymin=binning_sp_pos_y.min, ymax=binning_sp_pos_y.max) - monitoringGroup.defineHistogram('sp_pos_z,sp_pos_y', type='TH2F', title='Z coordinate vs Y;z [mm];y [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=binning_sp_pos_y.nbins, ymin=binning_sp_pos_y.min, ymax=binning_sp_pos_y.max) - monitoringGroup.defineHistogram('sp_pos_z,sp_pos_r', type='TH2F', title='Z coordinate vs R;z [mm];r [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=binning_sp_pos_r.nbins, ymin=binning_sp_pos_r.min, ymax=binning_sp_pos_r.max) - monitoringGroup.defineHistogram('sp_pos_z,sp_pos_signed_r', type='TH2F', title='Z coordinate vs signed R;z [mm];r [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=2*binning_sp_pos_r.nbins, ymin=-binning_sp_pos_r.max, ymax=binning_sp_pos_r.max) - - acc.merge(helper.result()) - return acc - - - -def ActsSeedMonitoringAlgorithmCfg(ConfigFlags, - name: str = 'ActsSeedMonitoringAlgorithm', - inputCollection: str = '', - **options) -> ComponentAccumulator: - assert isinstance(name, str) - assert isinstance(inputCollection, str) - - helper = AthMonitorCfgHelper(ConfigFlags,'ActsMonCfg') - - options['name'] = f'{name}_{inputCollection}' - options['InputSeedCollection'] = inputCollection - - acc = ComponentAccumulator() - ActsTrk__MonitoringAlgo = CompFactory.getComp("ActsTrk::ActsSeedMonitoringAlgorithm") - - # Set Monitoring - monitoringAlgorithm = helper.addAlgorithm(ActsTrk__MonitoringAlgo, **options) - monitoringGroup = helper.addGroup(monitoringAlgorithm, 'ActsMonitoring', f'ActsMonitoring/Seeds/{inputCollection}') - - - geometry = '' - if ConfigFlags.Detector.GeometryITk: - geometry = 'ITk' - else: - geometry = 'InDet' - - binning_nps, binning_sp_pos_x, binning_sp_pos_y, binning_sp_pos_z, binning_sp_pos_r, binning_sp_cov_r, binning_sp_cov_z = sp_binning_bank[geometry]['Pixel' if 'Pixel' in inputCollection else 'Strip'] - - # Global - monitoringGroup.defineHistogram('Nseed', type="TH1I", title='Number of Seeds;N;Entries', - xbins=100, xmin=binning_nps.min, xmax=binning_nps.max) # CHANGE - - # 1D - monitoringGroup.defineHistogram('seed_bottom_sp_pos_x', type='TH1F', title='bottom sp - x coordinate;x [mm];Entries', - xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max) - monitoringGroup.defineHistogram('seed_bottom_sp_pos_y', type='TH1F', title='bottom sp - y coordinate;y [mm];Entries', - xbins=binning_sp_pos_y.nbins, xmin=binning_sp_pos_y.min, xmax=binning_sp_pos_y.max) - monitoringGroup.defineHistogram('seed_bottom_sp_pos_z', type='TH1F', title='bottom sp - z coordinate;z [mm];Entries', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) - monitoringGroup.defineHistogram('seed_bottom_sp_pos_r', type='TH1F', title='bottom sp - r coordinate;r [mm];Entries', - xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) - - monitoringGroup.defineHistogram('seed_middle_sp_pos_x', type='TH1F', title='middle sp - x coordinate;x [mm];Entries', - xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max) - monitoringGroup.defineHistogram('seed_middle_sp_pos_y', type='TH1F', title='middle sp - y coordinate;y [mm];Entries', - xbins=binning_sp_pos_y.nbins, xmin=binning_sp_pos_y.min, xmax=binning_sp_pos_y.max) - monitoringGroup.defineHistogram('seed_middle_sp_pos_z', type='TH1F', title='middle sp - z coordinate;z [mm];Entries', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) - monitoringGroup.defineHistogram('seed_middle_sp_pos_r', type='TH1F', title='middle sp - r coordinate;r [mm];Entries', - xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) - - monitoringGroup.defineHistogram('seed_top_sp_pos_x', type='TH1F', title='top sp - x coordinate;x [mm];Entries', - xbins=binning_sp_pos_x.nbins, xmin=binning_sp_pos_x.min, xmax=binning_sp_pos_x.max) - monitoringGroup.defineHistogram('seed_top_sp_pos_y', type='TH1F', title='top sp - y coordinate;y [mm];Entries', - xbins=binning_sp_pos_y.nbins, xmin=binning_sp_pos_y.min, xmax=binning_sp_pos_y.max) - monitoringGroup.defineHistogram('seed_top_sp_pos_z', type='TH1F', title='top sp - z coordinate;z [mm];Entries', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max) - monitoringGroup.defineHistogram('seed_top_sp_pos_r', type='TH1F', title='top sp - r coordinate;r [mm];Entries', - xbins=binning_sp_pos_r.nbins, xmin=binning_sp_pos_r.min, xmax=binning_sp_pos_r.max) - - monitoringGroup.defineHistogram("seed_pt", type='TH1F', title='Pt from Seed;Pt [GeV];Entries', - xbins=50, xmin=0, xmax=3) - monitoringGroup.defineHistogram("seed_eta", type='TH1F', title='Eta from Seed;eta;Entries', - xbins=50, xmin=0, xmax=5) - monitoringGroup.defineHistogram("seed_d0", type='TH1F', title='d0 from Seed;d0 [mm];Entries', - xbins=100, xmin=0, xmax=50) - monitoringGroup.defineHistogram("seed_z0", type='TH1F', title='Average z0 from Seed;z0 [mm];Entries', - xbins=100, xmin=-200, xmax=200) - - # 2D - monitoringGroup.defineHistogram('seed_bottom_sp_pos_z,seed_bottom_sp_pos_r', type='TH2F', title='Bottom SP - Z coordinate vs R;z [mm];r [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=binning_sp_pos_r.nbins, ymin=binning_sp_pos_r.min, ymax=binning_sp_pos_r.max) - monitoringGroup.defineHistogram('seed_middle_sp_pos_z,seed_middle_sp_pos_r', type='TH2F', title='Middle SP - Z coordinate vs R;z [mm];r [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=binning_sp_pos_r.nbins, ymin=binning_sp_pos_r.min, ymax=binning_sp_pos_r.max) - monitoringGroup.defineHistogram('seed_top_sp_pos_z,seed_top_sp_pos_r', type='TH2F', title='Top SP - Z coordinate vs R;z [mm];r [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=binning_sp_pos_r.nbins, ymin=binning_sp_pos_r.min, ymax=binning_sp_pos_r.max) - - monitoringGroup.defineHistogram('seed_bottom_sp_pos_z,seed_bottom_sp_pos_signed_r', type='TH2F', title='Bottom SP - Z coordinate vs R;z [mm];r [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=2*binning_sp_pos_r.nbins, ymin=-binning_sp_pos_r.max, ymax=binning_sp_pos_r.max) - monitoringGroup.defineHistogram('seed_middle_sp_pos_z,seed_middle_sp_pos_signed_r', type='TH2F', title='Middle SP - Z coordinate vs R;z [mm];r [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=2*binning_sp_pos_r.nbins, ymin=-binning_sp_pos_r.max, ymax=binning_sp_pos_r.max) - monitoringGroup.defineHistogram('seed_top_sp_pos_z,seed_top_sp_pos_signed_r', type='TH2F', title='Top SP - Z coordinate vs R;z [mm];r [mm]', - xbins=binning_sp_pos_z.nbins, xmin=binning_sp_pos_z.min, xmax=binning_sp_pos_z.max, - ybins=2*binning_sp_pos_r.nbins, ymin=-binning_sp_pos_r.max, ymax=binning_sp_pos_r.max) - - acc.merge(helper.result()) - return acc diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingAlgorithmConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingAlgorithmConfig.py index 3311b459590..2e1179d7d92 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingAlgorithmConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingAlgorithmConfig.py @@ -30,7 +30,7 @@ def ActsSeedingAlgorithmCfg(ConfigFlags, options['OutputSeeds'] = outputCollection options.setdefault('SeedTool', seedTool) options.setdefault('BeamSpotKey', 'BeamSpotData') - options.setdefault('AtlasFieldCacheCondObj', 'fieldCondObj') + options.setdefault('AtlasFieldCacheCondObj', 'fieldCondObj') ActsTrk__ActsSeedingAlgorithm = CompFactory.getComp(f"ActsTrk::{name}") acc.addEventAlgo(ActsTrk__ActsSeedingAlgorithm(**options)) diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsSequenceConfiguration.py b/Tracking/Acts/ActsTrkFinding/python/ActsSequenceConfiguration.py index ea573fcaffd..1f1f0ddab12 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsSequenceConfiguration.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsSequenceConfiguration.py @@ -15,10 +15,10 @@ def acts_sequence_configuration(func): # TO-DO: Add a flag (maybe in the config flags) that defines the output level # for our algorithms/tools # - from AthenaCommon.Constants import DEBUG - for el in acc._allSequences: - for member in el.Members: - member.OutputLevel = DEBUG + # from AthenaCommon.Constants import DEBUG + # for el in acc._allSequences: + # for member in el.Members: + # member.OutputLevel = DEBUG # the following is needed to reliably determine whether we're really being steered from an old-style job option # assume we're running CPython diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py index e0cc85d6138..7b005b036e6 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsTrackingSequenceFromAthenaConfig.py @@ -6,8 +6,6 @@ from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper from ActsTrkFinding.ActsSeedingAlgorithmConfig import ActsSeedingAlgorithmCfg from ActsTrkFinding.ActsSequenceConfiguration import acts_sequence_configuration -from ActsTrkFinding.ActsMonitoringConfig import ActsSpacePointMonitoringAlgorithmCfg, ActsSeedMonitoringAlgorithmCfg - @acts_sequence_configuration def ActsTrackingSequenceFromAthenaCfg(ConfigFlags, inputCollections: list = []): @@ -28,17 +26,6 @@ def ActsTrackingSequenceFromAthenaCfg(ConfigFlags, outputCollection = o_collection, **seedingOptions)) - for i_collection in inputCollections: - collection = f'ActsSpacePoint_{i_collection}' - # Monitoring - acc.merge(ActsSpacePointMonitoringAlgorithmCfg(ConfigFlags, - name = 'ActsSpacePointMonitoringAlgorithm', - inputCollection = collection)) - acc.merge(ActsSeedMonitoringAlgorithmCfg(ConfigFlags, - name = 'ActsSeedMonitoringAlgorithm', - inputCollection = f'ActsSeeds_{i_collection}')) - - return acc def ActsTrackingSequenceFromAthenaToAthena(ConfigFlags, diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx deleted file mode 100644 index 43716fda807..00000000000 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.cxx +++ /dev/null @@ -1,255 +0,0 @@ -/* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration -*/ - -#include "ActsSeedMonitoringAlgorithm.h" -#include "Acts/Definitions/Units.hpp" -#include "Acts/MagneticField/MagneticFieldContext.hpp" -#include "ActsGeometry/ATLASMagneticFieldWrapper.h" - -namespace ActsTrk { - - ActsSeedMonitoringAlgorithm::ActsSeedMonitoringAlgorithm(const std::string& name, ISvcLocator* pSvcLocator) - : AthMonitorAlgorithm(name, pSvcLocator) - {} - - StatusCode ActsSeedMonitoringAlgorithm::initialize() { - ATH_MSG_INFO("Initializing " << name() << " ..."); - - ATH_CHECK( m_inputSeedColletionKey.initialize() ); - - ATH_CHECK( m_beamSpotKey.initialize() ); - ATH_CHECK( m_fieldCondObjInputKey.initialize() ); - - return AthMonitorAlgorithm::initialize(); - } - - StatusCode ActsSeedMonitoringAlgorithm::fillHistograms(const EventContext& ctx) const { - ATH_MSG_INFO( "Filling Histograms for " << name() << " ... " ); - - ATH_MSG_INFO( "Reading input collection with key " << m_inputSeedColletionKey.key() ); - SG::ReadHandle< ActsTrk::SeedContainer > handle = SG::makeHandle( m_inputSeedColletionKey, ctx ); - ATH_CHECK( handle.isValid() ); - const ActsTrk::SeedContainer* seed_collection = handle.get(); - ATH_MSG_INFO( "Retrieved " << seed_collection->size() << " input elements from key " << m_inputSeedColletionKey.key() ); - - - - - - // ================================================== // - // ===================== CONDS ====================== // - // ================================================== // - - // Read the Beam Spot information - SG::ReadCondHandle beamSpotHandle { m_beamSpotKey, ctx }; - ATH_CHECK( beamSpotHandle.isValid() ); - if (beamSpotHandle.cptr() == nullptr) { - ATH_MSG_ERROR("Retrieved Beam Spot Handle contains a nullptr"); - return StatusCode::FAILURE; - } - auto beamSpotData = beamSpotHandle.cptr(); - - // Read the b-field information - SG::ReadCondHandle readHandle { m_fieldCondObjInputKey, ctx }; - ATH_CHECK( readHandle.isValid() ); - - const AtlasFieldCacheCondObj* fieldCondObj{ *readHandle }; - if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key()); - return StatusCode::FAILURE; - } - - // Get the magnetic field - // Using ACTS classes in order to be sure we are consistent - Acts::MagneticFieldContext magFieldContext(fieldCondObj); - - - // Beam Spot Position - Acts::Vector2 beamPos( beamSpotData->beamPos()[ Amg::x ] * Acts::UnitConstants::mm, - beamSpotData->beamPos()[ Amg::y ] * Acts::UnitConstants::mm ); - - // Magnetic Field - ATLASMagneticFieldWrapper magneticField; - Acts::MagneticFieldProvider::Cache magFieldCache = magneticField.makeCache( magFieldContext ); - Acts::Vector3 magfield = *magneticField.getField( Acts::Vector3(beamPos.x(), beamPos.y(), 0), - magFieldCache ); - - - - - - - - - - auto monitor_nseed = Monitored::Scalar("Nseed", seed_collection->size()); - fill("ActsMonitoring", monitor_nseed); - - - - - - - - // Bottom - auto monitor_seed_bottom_sp_pos_x = Monitored::Collection("seed_bottom_sp_pos_x", *seed_collection, - [] (const auto* obj) { return obj->sp()[0]->x(); }); - auto monitor_seed_bottom_sp_pos_y = Monitored::Collection("seed_bottom_sp_pos_y", *seed_collection, - [] (const auto* obj) { return obj->sp()[0]->y(); }); - auto monitor_seed_bottom_sp_pos_z = Monitored::Collection("seed_bottom_sp_pos_z", *seed_collection, - [] (const auto* obj) { return obj->sp()[0]->z(); }); - auto monitor_seed_bottom_sp_pos_r = Monitored::Collection("seed_bottom_sp_pos_r", *seed_collection, - [] (const auto* obj) { - const auto* sp = obj->sp()[0]; - double x2 = sp->x() * sp->x(); - double y2 = sp->y() * sp->y(); - return std::sqrt(x2 + y2); }); - auto monitor_seed_bottom_sp_pos_signed_r = Monitored::Collection("seed_bottom_sp_pos_signed_r", *seed_collection, - [] (const auto* obj) { - const auto* sp = obj->sp()[0]; - double x2 = sp->x() * sp->x(); - double y2 = sp->y() * sp->y(); - double r = std::sqrt(x2 + y2); - return sp->y() >= 0 ? r : -r; - }); - - // Middle - auto monitor_seed_middle_sp_pos_x = Monitored::Collection("seed_middle_sp_pos_x", *seed_collection, - [] (const auto* obj) { return obj->sp()[1]->x(); }); - auto monitor_seed_middle_sp_pos_y = Monitored::Collection("seed_middle_sp_pos_y", *seed_collection, - [] (const auto* obj) { return obj->sp()[1]->y(); }); - - auto monitor_seed_middle_sp_pos_z = Monitored::Collection("seed_middle_sp_pos_z", *seed_collection, - [] (const auto* obj) { return obj->sp()[1]->z(); }); - auto monitor_seed_middle_sp_pos_r = Monitored::Collection("seed_middle_sp_pos_r", *seed_collection, - [] (const auto* obj) { - const auto* sp = obj->sp()[1]; - double x2 = sp->x() * sp->x(); - double y2 = sp->y() * sp->y(); - return std::sqrt(x2 + y2); }); - auto monitor_seed_middle_sp_pos_signed_r = Monitored::Collection("seed_middle_sp_pos_signed_r", *seed_collection, - [] (const auto* obj) { - const auto* sp = obj->sp()[1]; - double x2 = sp->x() * sp->x(); - double y2 = sp->y() * sp->y(); - double r = std::sqrt(x2 + y2); - return sp->y() >= 0 ? r : -r; - }); - - // Top - auto monitor_seed_top_sp_pos_x = Monitored::Collection("seed_top_sp_pos_x", *seed_collection, - [] (const auto* obj) { return obj->sp()[2]->x(); }); - auto monitor_seed_top_sp_pos_y = Monitored::Collection("seed_top_sp_pos_y", *seed_collection, - [] (const auto* obj) { return obj->sp()[2]->y(); }); - - auto monitor_seed_top_sp_pos_z = Monitored::Collection("seed_top_sp_pos_z", *seed_collection, - [] (const auto* obj) { return obj->sp()[2]->z(); }); - auto monitor_seed_top_sp_pos_r = Monitored::Collection("seed_top_sp_pos_r", *seed_collection, - [] (const auto* obj) { - const auto* sp = obj->sp()[2]; - double x2 = sp->x() * sp->x(); - double y2 = sp->y() * sp->y(); - return std::sqrt(x2 + y2); }); - auto monitor_seed_top_sp_pos_signed_r = Monitored::Collection("seed_top_sp_pos_signed_r", *seed_collection, - [] (const auto* obj) { - const auto* sp = obj->sp()[2]; - double x2 = sp->x() * sp->x(); - double y2 = sp->y() * sp->y(); - double r = std::sqrt(x2 + y2); - return sp->y() >= 0 ? r : -r; - }); - - for (const auto* seed : *seed_collection) { - const auto* bottom = seed->sp()[0]; - const auto* medium = seed->sp()[1]; - const auto* top = seed->sp()[2]; - - // Central - float r_medium = std::sqrt(medium->x()*medium->x() + medium->y()*medium->y()); // R - float z_medium = medium->z(); - - float ax = medium->x() / r_medium; - float ay = medium->y() / r_medium; - - // Bottom - float r_bottom = std::sqrt(bottom->x()*bottom->x() + bottom->y()*bottom->y()); - float dx_bottom = medium->x() - bottom->x(); - float dy_bottom = medium->y() - bottom->y(); - float dz_bottom = medium->z() - bottom->z(); - - float x_bottom = dx_bottom * ax + dy_bottom * ay; - float y_bottom = dy_bottom * ax - dx_bottom * ay; - float dxy_bottom = x_bottom * x_bottom + y_bottom * y_bottom; - float r2_bottom = 1. / dxy_bottom; - float dr_bottom = std::sqrt( 1/dxy_bottom ); - - float u_bottom = x_bottom * r2_bottom; - float v_bottom = y_bottom * r2_bottom; - - - // Top - float r_top = std::sqrt(top->x()*top->x() + top->y()*top->y()); - float dx_top = top->x() - medium->x(); - float dy_top = top->y() - medium->y(); - float dz_top = top->z() - medium->z(); - - float x_top = dx_top * ax + dy_top * ay; - float y_top = dy_top * ax - dx_top * ay; - float dxy_top = x_top * x_top + y_top * y_top; - float r2_top = 1/dxy_top; - float dr_top = std::sqrt( 1/dxy_top ); - - float u_top = x_top * r2_top; - float v_top = y_top * r2_top; - - // Put together - float dU = u_top - u_bottom; - float A = (v_top - v_bottom) * dU; - float B = v_bottom - A * u_bottom; - - float K = 2. / (300. * magfield[2]); - float onePlusAsquare = 1. + A * A; - float BSquare = B * B; - - float tz_bottom = dz_bottom * dr_bottom; - float tz_top = dz_top * dr_top; - - float meanOneOverTanThetaSquare= tz_bottom * tz_top; - float meanOneOverTanTheta = std::sqrt(meanOneOverTanThetaSquare); - if (meanOneOverTanTheta < 1e-8) - meanOneOverTanTheta = 1e-8; - - float theta = std::atan(1. / meanOneOverTanTheta); - - - float pt = std::sqrt(onePlusAsquare / BSquare) / (1000 * K); - float eta = -std::log(std::tan(0.5 * theta)); - float d0 = std::abs( (A - B * r_medium) * r_medium ); - - float dZdR = ( top->z() - medium->z() ) * dr_top; - float z0 = z_medium - r_medium * dZdR; - - auto monitor_seed_pt = Monitored::Scalar("seed_pt", pt); - auto monitor_seed_eta = Monitored::Scalar("seed_eta", eta); - auto monitor_seed_d0 = Monitored::Scalar("seed_d0", d0); - auto monitor_seed_z0 = Monitored::Scalar("seed_z0", z0); - - // fill - fill("ActsMonitoring", monitor_seed_pt, monitor_seed_eta, - monitor_seed_d0, monitor_seed_z0); - } - - // Fill - fill("ActsMonitoring", - monitor_seed_bottom_sp_pos_x, monitor_seed_bottom_sp_pos_y, monitor_seed_bottom_sp_pos_z, monitor_seed_bottom_sp_pos_r, monitor_seed_bottom_sp_pos_signed_r, - monitor_seed_middle_sp_pos_x, monitor_seed_middle_sp_pos_y, monitor_seed_middle_sp_pos_z, monitor_seed_middle_sp_pos_r, monitor_seed_middle_sp_pos_signed_r, - monitor_seed_top_sp_pos_x, monitor_seed_top_sp_pos_y, monitor_seed_top_sp_pos_z, monitor_seed_top_sp_pos_r, monitor_seed_top_sp_pos_signed_r); - - // fill("ActsMonitoring", monitor_seed_pt, monitor_seed_eta, - // monitor_seed_d0); - - return StatusCode::SUCCESS; - } - -} diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h b/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h deleted file mode 100644 index c324b5aa01f..00000000000 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedMonitoringAlgorithm.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef ACTS_MONITORING_ALGORITHM_SEED_H -#define ACTS_MONITORING_ALGORITHM_SEED_H - -#include "AthenaMonitoring/AthMonitorAlgorithm.h" -#include "AthenaMonitoringKernel/Monitored.h" -#include "StoreGate/ReadHandleKey.h" - -// Athena -#include "BeamSpotConditionsData/BeamSpotData.h" -#include "MagFieldConditions/AtlasFieldCacheCondObj.h" -#include "MagFieldElements/AtlasFieldCache.h" - -// Acts -#include "ActsEDM/ActsSpacePoint.h" -#include "ActsEDM/ActsSeed.h" - -namespace ActsTrk { - - class ActsSeedMonitoringAlgorithm : - public AthMonitorAlgorithm { - public: - ActsSeedMonitoringAlgorithm(const std::string& name, ISvcLocator* pSvcLocator); - virtual ~ActsSeedMonitoringAlgorithm() override = default; - - virtual StatusCode initialize() override; - virtual StatusCode fillHistograms(const EventContext& ctx) const override; - - private: - SG::ReadHandleKey< ActsTrk::SeedContainer > m_inputSeedColletionKey {this, "InputSeedCollection", "", ""}; - - - SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey{this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}; - SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", - "Name of the Magnetic Field conditions object key"}; - - }; - -} - -#endif diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.cxx deleted file mode 100644 index 69804610ecd..00000000000 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.cxx +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration -*/ - -#include "ActsSpacePointMonitoringAlgorithm.h" - -namespace ActsTrk { - - ActsSpacePointMonitoringAlgorithm::ActsSpacePointMonitoringAlgorithm(const std::string& name, ISvcLocator* pSvcLocator) - : AthMonitorAlgorithm(name, pSvcLocator) - {} - - StatusCode ActsSpacePointMonitoringAlgorithm::initialize() { - ATH_MSG_INFO("Initializing " << name() << " ..."); - - ATH_CHECK( m_inputSpacePointColletionKey.initialize() ); - - return AthMonitorAlgorithm::initialize(); - } - - StatusCode ActsSpacePointMonitoringAlgorithm::fillHistograms(const EventContext& ctx) const { - ATH_MSG_INFO( "Filling Histograms for " << name() << " ... " ); - - ATH_MSG_INFO( "Reading input collection with key " << m_inputSpacePointColletionKey.key() ); - SG::ReadHandle< ActsTrk::SpacePointContainer > handle = SG::makeHandle( m_inputSpacePointColletionKey, ctx ); - ATH_CHECK( handle.isValid() ); - const ActsTrk::SpacePointContainer* sp_collection = handle.get(); - ATH_MSG_INFO( "Retrieved " << sp_collection->size() << " input elements from key " << m_inputSpacePointColletionKey.key() ); - - auto monitor_nsp = Monitored::Scalar("Nsp", sp_collection->size()); - - auto monitor_pos_x = Monitored::Collection("sp_pos_x", *sp_collection, - [] (const auto* obj) { return obj->x(); }); - auto monitor_pos_y = Monitored::Collection("sp_pos_y", *sp_collection, - [] (const auto* obj) { return obj->y(); }); - auto monitor_pos_z = Monitored::Collection("sp_pos_z", *sp_collection, - [] (const auto* obj) { return obj->z(); }); - auto monitor_pos_r = Monitored::Collection("sp_pos_r", *sp_collection, - [] (const auto* obj) { - double x2 = obj->x() * obj->x(); - double y2 = obj->y() * obj->y(); - return std::sqrt(x2 + y2); }); - auto monitoring_pos_signed_r = Monitored::Collection("sp_pos_signed_r", *sp_collection, - [] (const auto* obj) { - double x2 = obj->x() * obj->x(); - double y2 = obj->y() * obj->y(); - double r = std::sqrt(x2 + y2); - return obj->y() >= 0 ? r : -r; - }); - - auto monitor_cov_r = Monitored::Collection("sp_cov_r", *sp_collection, - [] (const auto* obj) { return obj->varianceR(); }); - auto monitor_cov_z = Monitored::Collection("sp_cov_z", *sp_collection, - [] (const auto* obj) { return obj->varianceZ(); }); - - - fill("ActsMonitoring", monitor_nsp); - fill("ActsMonitoring", monitor_pos_x, monitor_pos_y, monitor_pos_z, - monitor_pos_r, monitoring_pos_signed_r, - monitor_cov_r, monitor_cov_z); - - return StatusCode::SUCCESS; - } - -} diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.h b/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.h deleted file mode 100644 index e46ac236272..00000000000 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSpacePointMonitoringAlgorithm.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef ACTS_MONITORING_ALGORITHM_SPACE_POINT_H -#define ACTS_MONITORING_ALGORITHM_SPACE_POINT_H - -#include "AthenaMonitoring/AthMonitorAlgorithm.h" -#include "AthenaMonitoringKernel/Monitored.h" -#include "StoreGate/ReadHandleKey.h" - -#include "ActsEDM/ActsSpacePoint.h" - -namespace ActsTrk { - - class ActsSpacePointMonitoringAlgorithm : - public AthMonitorAlgorithm { - public: - ActsSpacePointMonitoringAlgorithm(const std::string& name, ISvcLocator* pSvcLocator); - virtual ~ActsSpacePointMonitoringAlgorithm() override = default; - - virtual StatusCode initialize() override; - virtual StatusCode fillHistograms(const EventContext& ctx) const override; - - private: - SG::ReadHandleKey< ActsTrk::SpacePointContainer > m_inputSpacePointColletionKey {this, "InputSpacePointCollection", "", ""}; - }; - -} - -#endif diff --git a/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx b/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx index e08e6b81c64..2b40fdec6bb 100644 --- a/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/components/ActsTrackFinding_entries.cxx @@ -9,9 +9,3 @@ DECLARE_COMPONENT( ActsTrk::ActsSeedingTool ) DECLARE_COMPONENT( ActsTrk::ActsSeedingAlgorithm ) DECLARE_COMPONENT( ActsTrk::ActsSeedingFromAthenaAlgorithm ) - -#include "src/ActsSpacePointMonitoringAlgorithm.h" -#include "src/ActsSeedMonitoringAlgorithm.h" - -DECLARE_COMPONENT( ActsTrk::ActsSpacePointMonitoringAlgorithm ) -DECLARE_COMPONENT( ActsTrk::ActsSeedMonitoringAlgorithm ) -- GitLab From b5ad96023eb9dd2e1a0dcda46ad0f6964c5dd3a8 Mon Sep 17 00:00:00 2001 From: Carlo Varni Date: Fri, 11 Feb 2022 07:28:44 +0100 Subject: [PATCH 12/12] Code cleaning and adding Event number to ttree --- .../src/SiSpacePointMakerTool.cxx | 1 + .../ActsInterop/python/ActsConfigFlags.py | 1 + .../python/ActsSeedingToolConfig.py | 5 ++--- .../src/ActsSeedingFromAthenaAlgorithm.cxx | 2 +- .../ActsTrkFinding/src/ActsSeedingTool.cxx | 22 ++++++++++++++----- .../Acts/ActsTrkFinding/src/ActsSeedingTool.h | 9 +++++++- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx index 07d06bb790a..3665d411d5b 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx @@ -691,6 +691,7 @@ namespace InDet { Trk::SpacePoint* SiSpacePointMakerTool::makeSCT_SpacePoint (InDet::SCTinformation& In0,InDet::SCTinformation& In1,IdentifierHash ID0,IdentifierHash ID1,double limit,double slimit) const { + double a =-In0.traj_direction().dot(In1.normal()); double b = In0.strip_direction().dot(In1.normal()); double l0 = In0.oneOverStrip()*slimit+limit ; diff --git a/Tracking/Acts/ActsInterop/python/ActsConfigFlags.py b/Tracking/Acts/ActsInterop/python/ActsConfigFlags.py index 4d121ed8abd..db96bf6fcd5 100644 --- a/Tracking/Acts/ActsInterop/python/ActsConfigFlags.py +++ b/Tracking/Acts/ActsInterop/python/ActsConfigFlags.py @@ -13,5 +13,6 @@ def createActsConfigFlags(): # Track Finding Flags - TO BE ADDED actscf.addFlag('Acts.TrackFinding.Seeding.WriteNtuple', False) # Write root file with ttree + actscf.addFlag('Acts.TrackFinding.Seeding.NtupleFolderName', 'actsValNtuples') # Folder for Seeding TTree return actscf diff --git a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py index 2b194f5157e..3745755aa27 100644 --- a/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py +++ b/Tracking/Acts/ActsTrkFinding/python/ActsSeedingToolConfig.py @@ -73,11 +73,10 @@ def ActsSeedingToolBaseCfg(ConfigFlags, options.setdefault('zBinNeighborsTop', []) options.setdefault('zBinNeighborsBottom', []) options.setdefault('WriteNtuple', ConfigFlags.Acts.TrackFinding.Seeding.WriteNtuple) + options.setdefault('TreeFolderName', ConfigFlags.Acts.TrackFinding.Seeding.NtupleFolderName) if ConfigFlags.Acts.TrackFinding.Seeding.WriteNtuple: - folder_name = 'actsValNtuples' - options.setdefault('TreeFolderName', folder_name) - HistService = CompFactory.THistSvc( Output = [f"{folder_name} DATAFILE='ActsSeedMakerValidation.root' OPT='RECREATE'"] ) + HistService = CompFactory.THistSvc( Output = [f"{ConfigFlags.Acts.TrackFinding.Seeding.NtupleFolderName} DATAFILE='ActsSeedMakerValidation.root' OPT='RECREATE'"] ) acc.addService(HistService) ActsTrk__ActsSeedingTool = CompFactory.getComp("ActsTrk::ActsSeedingTool") diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.cxx index ea449df194c..d7b6a27ce11 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingFromAthenaAlgorithm.cxx @@ -1,5 +1,5 @@ /* - 1;95;0c Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #include "src/ActsSeedingFromAthenaAlgorithm.h" diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.cxx b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.cxx index 4ac9fc5f4f5..62477bbf007 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.cxx +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.cxx @@ -43,6 +43,8 @@ namespace ActsTrk { ATH_MSG_INFO( " " << m_writeNtuple ); ATH_MSG_INFO( " " << m_treeFolder ); + ATH_CHECK( m_evtKey.initialize() ); + if (m_zBinEdges.size() - 1 != m_zBinNeighborsTop.size() and not m_zBinNeighborsTop.empty()) { @@ -70,6 +72,7 @@ namespace ActsTrk { m_outputTree = new TTree( tree_name.c_str() , "ActsSeedMakerValTool"); + m_outputTree->Branch("eventNumber", &m_event_number, "eventNumber/L"); m_outputTree->Branch("d0", &m_d0); m_outputTree->Branch("z0", &m_z0); m_outputTree->Branch("pt", &m_pt); @@ -95,7 +98,7 @@ namespace ActsTrk { } StatusCode - ActsSeedingTool::createSeeds(const EventContext& /*ctx*/, + ActsSeedingTool::createSeeds(const EventContext& ctx, const ActsTrk::SpacePointContainer& spContainer, const InDet::BeamSpotData& beamSpotData, const Acts::MagneticFieldContext& magFieldContext, @@ -103,7 +106,8 @@ namespace ActsTrk { { // Create Seeds auto groupSeeds = - createSeeds( spContainer.begin(), + createSeeds( ctx, + spContainer.begin(), spContainer.end(), beamSpotData, magFieldContext ); @@ -126,7 +130,8 @@ namespace ActsTrk { typename external_spacepoint_t > std::vector< Acts::Seed< external_spacepoint_t > > - ActsSeedingTool::createSeeds( spacepoint_iterator_t spBegin, + ActsSeedingTool::createSeeds( const EventContext& ctx, + spacepoint_iterator_t spBegin, spacepoint_iterator_t spEnd, const InDet::BeamSpotData& beamSpotData, const Acts::MagneticFieldContext& magFieldContext ) const { @@ -183,6 +188,12 @@ namespace ActsTrk { // Validation if (m_writeNtuple) { + // Retrieve event number as well + long EvNumber = -1.0; + SG::ReadHandle eventInfo = SG::makeHandle( m_evtKey, ctx ); + if(eventInfo.isValid()) + EvNumber = eventInfo->eventNumber(); + for (const auto& seed : seeds) { auto [pt, eta, d0, z0] = estimateTrackParamsFromSeed(seed, bField); @@ -191,6 +202,8 @@ namespace ActsTrk { auto* top = seed.sp()[2]; std::lock_guard lock(m_mutex); + m_event_number = EvNumber; + m_pt = pt; m_eta = eta; m_d0 = d0; @@ -290,7 +303,6 @@ namespace ActsTrk { float ay = medium->y() / r_medium; // Bottom - float r_bottom = std::sqrt(bottom->x()*bottom->x() + bottom->y()*bottom->y()); float dx_bottom = medium->x() - bottom->x(); float dy_bottom = medium->y() - bottom->y(); float dz_bottom = medium->z() - bottom->z(); @@ -304,9 +316,7 @@ namespace ActsTrk { float u_bottom = x_bottom * r2_bottom; float v_bottom = y_bottom * r2_bottom; - // Top - float r_top = std::sqrt(top->x()*top->x() + top->y()*top->y()); float dx_top = top->x() - medium->x(); float dy_top = top->y() - medium->y(); float dz_top = top->z() - medium->z(); diff --git a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.h b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.h index 695d37ac1dc..c08b03de23d 100644 --- a/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.h +++ b/Tracking/Acts/ActsTrkFinding/src/ActsSeedingTool.h @@ -15,6 +15,7 @@ #include "StoreGate/ReadCondHandleKey.h" #include "ActsGeometry/ATLASMagneticFieldWrapper.h" +#include "xAODEventInfo/EventInfo.h" // ACTS CORE #include "Acts/Definitions/Units.hpp" @@ -64,7 +65,8 @@ namespace ActsTrk { >::type > std::vector< Acts::Seed< external_spacepoint_t > > - createSeeds( spacepoint_iterator_t spBegin, + createSeeds( const EventContext& ctx, + spacepoint_iterator_t spBegin, spacepoint_iterator_t spEnd, const InDet::BeamSpotData& beamSpotData, const Acts::MagneticFieldContext& magFieldContext ) const; @@ -88,6 +90,10 @@ namespace ActsTrk { // ********************************************************************* // ********************************************************************* + private: + // Additional keys + SG::ReadHandleKey< xAOD::EventInfo > m_evtKey {this, "EventInfoKey", "EventInfo"}; + private: // Properties Gaudi::Property< float > m_rMax {this,"rMax",200. * Acts::UnitConstants::mm,""}; @@ -119,6 +125,7 @@ namespace ActsTrk { Gaudi::Property< std::string > m_treeFolder {this, "TreeFolderName", "", ""}; + mutable long m_event_number ATLAS_THREAD_SAFE = 0; mutable float m_d0 ATLAS_THREAD_SAFE = 0; mutable float m_z0 ATLAS_THREAD_SAFE = 0; mutable float m_pt ATLAS_THREAD_SAFE = 0; -- GitLab