From a725428f5cb797c15274bb3b2abe061538928e63 Mon Sep 17 00:00:00 2001 From: mwaterla <markwaterlaat@gmail.com> Date: Thu, 6 Mar 2025 13:31:15 +0100 Subject: [PATCH 1/4] Restore VPHitEfficiencies from v1r2405 --- VPHitEfficiencies/info.yaml | 49 ++++++++ VPHitEfficiencies/moore_data.py | 200 ++++++++++++++++++++++++++++++++ 2 files changed, 249 insertions(+) create mode 100644 VPHitEfficiencies/info.yaml create mode 100644 VPHitEfficiencies/moore_data.py diff --git a/VPHitEfficiencies/info.yaml b/VPHitEfficiencies/info.yaml new file mode 100644 index 0000000000..835f3f1003 --- /dev/null +++ b/VPHitEfficiencies/info.yaml @@ -0,0 +1,49 @@ +defaults: + application: "Moore/v55r17" + inform: + - mark.waterlaat@cern.ch + wg: Calib + +{%- set samples = [ + "95100000/TURCAL_RAWBANKS.DST", + "95100000/TURCAL_PERSISTRECORAWBANKS.DST", + "96000000/NOBIAS.DST", +] %} + +# Split the jobs into batches of 42 sensors to reduce the memory usage +{%- set sensor_step = 42 %} +{%- set n_sensors = 208 %} + +{%- for filetype in samples %} +{%- for begin_sensor in range(0, n_sensors, sensor_step) %} + +{%- set stream = filetype.split("/")[1].rsplit(".", 1)[0] %} +{#- Subtract one as the sensors are zero indexed #} +{%- set end_sensor = [begin_sensor + sensor_step, n_sensors] | min - 1 %} + +MagUp_Collision24_{{ stream }}_{{ begin_sensor }}-{{ end_sensor }}: + input: + bk_query: "/LHCb/Collision24/Beam6800GeV-VeloClosed-MagUp/RealData/Sprucing24c2/{{ filetype }}" + keep_running: false + runs: + - 303092:304604 + dq_flags: + - OK + output: VPHITEFFICIENCIES.ROOT + options: + entrypoint: VPHitEfficiencies.moore_data:main + extra_args: + - {{ stream | lower }} + - {{ begin_sensor }} + - {{ end_sensor }} + extra_options: + input_type: ROOT + input_raw_format: 0.5 + evt_max: -1 + output_type: "ROOT" + simulation: False + data_type: "Upgrade" + geometry_version: "run3/2024.Q1.2-v00.00" + conditions_version: "master" +{%- endfor %} +{%- endfor %} diff --git a/VPHitEfficiencies/moore_data.py b/VPHitEfficiencies/moore_data.py new file mode 100644 index 0000000000..2280b1349a --- /dev/null +++ b/VPHitEfficiencies/moore_data.py @@ -0,0 +1,200 @@ +############################################################################### +# (c) Copyright 2023 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +import argparse + +from Moore import run_reconstruction, Options +from Moore.config import Reconstruction +from PyConf.Algorithms import ( + fromPrVeloTracksV1TracksMerger, + VPHitEfficiencyMonitor, + VeloRetinaClusterTrackingSIMDFull, + TrackEventFitter, + TrackListRefiner, + TrackSelectionToContainer, + DeterministicPrescaler, +) +from GaudiKernel.SystemOfUnits import mm +from PyConf.Tools import ( + TrackMasterFitter, + TrackInterpolator, + TrackLinearExtrapolator, +) +from PyConf.application import( + default_raw_banks, + make_odin, + default_raw_event, +) +from RecoConf.legacy_rec_hlt1_tracking import ( + make_reco_pvs, + make_PatPV3DFuture_pvs, + make_RetinaClusters, + get_default_ut_clusters, + get_global_clusters_on_track_tool_only_velo, +) +from RecoConf.hlt2_tracking import ( + TrackBestTrackCreator, + make_PrStoreUTHit_empty_hits, + get_global_measurement_provider, + get_track_master_fitter, +) +from RecoConf.decoders import default_VeloCluster_source +from PyConf import configurable +import Functors as F + +make_reco_pvs.global_bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs) + +velo_clusters_algorithm_light = make_RetinaClusters +velo_tracking_algorithm = VeloRetinaClusterTrackingSIMDFull +bankType = "VPRetinaCluster" +default_VeloCluster_source.global_bind(bank_type="VPRetinaCluster") + +# get the TMF +def get_my_track_master_fitter(): + with TrackMasterFitter.bind( + MaxNumberOutliers=2, + NumberFitIterations=10, + FastMaterialApproximation=True): + return get_track_master_fitter( + clusters_on_track_tool=get_global_clusters_on_track_tool_only_velo) + +@configurable +def make_my_sequence( + *, + beginSensor = 0, + endSensor = 1, + ): + data = [] + + filterList = [] + + prescaler = DeterministicPrescaler( + name="MyEventPrescaler", + AcceptFraction=float( + 0.1, + ), # make sure prescale is not interpreted as 'int' because it changes the hash computation... + SeedName="KSPrescaler", + ODINLocation=make_odin()) + + filterList += [prescaler] + + with get_default_ut_clusters.bind(disable_ut=True),\ + get_global_measurement_provider.bind( + ignoreUT=True, + velo_hits=velo_clusters_algorithm_light, + ignoreFT=True, + ignoreMuon=True, + ut_hits=make_PrStoreUTHit_empty_hits): + + for sensor_under_study in range(beginSensor, endSensor + 1): + + my_mask = [sensor in [sensor_under_study] + for sensor in range(208)] + + vpClustering = velo_tracking_algorithm( + RawBanks=default_raw_banks(bankType), + SensorMasks=tuple(my_mask), + MaxScatterSeeding=0.1, + MaxScatterForwarding=0.1, + MaxScatter3hits=0.02, + SeedingWindow=8, + SkipForward=4) + + clusters = vpClustering.HitsLocation + vpTracks = vpClustering.TracksLocation + vpTracks_backwards = vpClustering.TracksBackwardLocation + + vpTracks_v1 = fromPrVeloTracksV1TracksMerger( # converts Pr -> v1 tracks and merges forward/backward + InputTracksLocation1=vpTracks, + InputTracksLocation2=vpTracks_backwards, + TrackAddClusterTool=get_global_clusters_on_track_tool_only_velo(), + ).OutputTracksLocation + + my_TrackMasterFitter = get_my_track_master_fitter() + + fittedTracks = TrackEventFitter( + TracksInContainer=vpTracks_v1, + Fitter=(my_TrackMasterFitter), + MaxChi2DoF=2.8, + name="TrackEventFitter_{hash}").TracksOutContainer + + bestTracks = TrackBestTrackCreator( + name="TrackBestTrackCreator_{hash}", + TracksInContainers=[fittedTracks], + DoNotRefit=True, + AddGhostProb=False, + FitTracks=False, + MaxChi2DoF=2.8, + ).TracksOutContainer + + pvs = make_PatPV3DFuture_pvs( + {"v1": bestTracks}, + None, + )["v3"] + + tracks_selection = TrackListRefiner( + inputLocation=bestTracks, + Code=F.require_all( + F.NVPHITS >= 5, + F.MINIP(pvs)<0.05*mm, + F.ETA >= 1.3, + F.P >= 0, # Here to make it explicit + F.PT >= 0)).outputLocation + + filtered_tracks = TrackSelectionToContainer( + name="TrackSelectionToContainer_{hash}", + InputLocation=tracks_selection).OutputLocation + + trackExtrapolator = TrackLinearExtrapolator() + trackInterpolator = TrackInterpolator(Extrapolator=trackExtrapolator) + + my_vp_efficiency_alg = VPHitEfficiencyMonitor( + name="VPHitEfficiencyMonitorSensor_{0}".format( + sensor_under_study), + TrackLocation=filtered_tracks, + PrVPHitsLocation=clusters, + UseAandCSide=False, + MaxTrackCov=100.0, + SensorUnderStudy=sensor_under_study, + Interpolator=trackInterpolator, + Extrapolator=trackExtrapolator, + ExpertMode=False, + ResidualTolerance=0.4, + ) + data += [my_vp_efficiency_alg] + + return Reconstruction('hlt2_hit_eff_reco', data, filters = filterList) + +from PyConf.application import default_raw_event + + +def main(options: Options, *args): + parser = argparse.ArgumentParser(description="Moore HLT2 Hit Efficiency") + parser.add_argument("stream", choices=["turcal_rawbanks", "turcal_persistrecorawbanks", "nobias"]) + parser.add_argument("begin_sensor", type=int) + parser.add_argument("end_sensor", type=int) + args = parser.parse_args(args) + + # DO NOT COPY THIS THIS WITHOUT CONSULTING DPA-WP2 FIRST + # This is a horrible hack to make it so the histograms are written to the + # file that is expected by Analysis Productions. Ideally we should have a + # better way of managing output/ntuples/histograms but it's currently an + # extremely niche use case. + + raw_options = options.dict() + raw_options["histo_file"] = raw_options["ntuple_file"] + raw_options["ntuple_file"] = None + options = Options(**raw_options) + # DO NOT COPY THIS THIS WITHOUT CONSULTING DPA-WP2 FIRST + + default_raw_event.global_bind(stream=args.stream) + make_my_sequence.global_bind(beginSensor=args.begin_sensor, endSensor=args.end_sensor) + config = run_reconstruction(options, make_my_sequence) + return config -- GitLab From 7da24d8d3e06f81f7c38055efebd0526212c03ed Mon Sep 17 00:00:00 2001 From: mwaterla <markwaterlaat@gmail.com> Date: Thu, 6 Mar 2025 13:56:28 +0100 Subject: [PATCH 2/4] prelim. run for block 7 --- VPHitEfficiencies/info.yaml | 4 ++-- VPHitEfficiencies/moore_data.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/VPHitEfficiencies/info.yaml b/VPHitEfficiencies/info.yaml index 835f3f1003..907ca0f90d 100644 --- a/VPHitEfficiencies/info.yaml +++ b/VPHitEfficiencies/info.yaml @@ -23,10 +23,10 @@ defaults: MagUp_Collision24_{{ stream }}_{{ begin_sensor }}-{{ end_sensor }}: input: - bk_query: "/LHCb/Collision24/Beam6800GeV-VeloClosed-MagUp/RealData/Sprucing24c2/{{ filetype }}" + bk_query: "/LHCb/Collision24/Beam6800GeV-VeloClosed-MagDown/RealData/Sprucing24c4/{{ filetype }}" keep_running: false runs: - - 303092:304604 + - 307576:308098 dq_flags: - OK output: VPHITEFFICIENCIES.ROOT diff --git a/VPHitEfficiencies/moore_data.py b/VPHitEfficiencies/moore_data.py index 2280b1349a..d0c6760f3d 100644 --- a/VPHitEfficiencies/moore_data.py +++ b/VPHitEfficiencies/moore_data.py @@ -104,7 +104,7 @@ def make_my_sequence( MaxScatterSeeding=0.1, MaxScatterForwarding=0.1, MaxScatter3hits=0.02, - SeedingWindow=8, + SeedingWindow=10, SkipForward=4) clusters = vpClustering.HitsLocation @@ -142,7 +142,7 @@ def make_my_sequence( tracks_selection = TrackListRefiner( inputLocation=bestTracks, Code=F.require_all( - F.NVPHITS >= 5, + F.NVPHITS >= 4, F.MINIP(pvs)<0.05*mm, F.ETA >= 1.3, F.P >= 0, # Here to make it explicit @@ -165,7 +165,7 @@ def make_my_sequence( SensorUnderStudy=sensor_under_study, Interpolator=trackInterpolator, Extrapolator=trackExtrapolator, - ExpertMode=False, + ExpertMode=True, ResidualTolerance=0.4, ) data += [my_vp_efficiency_alg] -- GitLab From 317696fceec574e1b7e177f4e29c7f2dc0c83072 Mon Sep 17 00:00:00 2001 From: mwaterla <markwaterlaat@gmail.com> Date: Thu, 6 Mar 2025 13:59:53 +0100 Subject: [PATCH 3/4] fix non full --- VPHitEfficiencies/moore_data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VPHitEfficiencies/moore_data.py b/VPHitEfficiencies/moore_data.py index d0c6760f3d..c66f29a000 100644 --- a/VPHitEfficiencies/moore_data.py +++ b/VPHitEfficiencies/moore_data.py @@ -52,7 +52,7 @@ import Functors as F make_reco_pvs.global_bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs) velo_clusters_algorithm_light = make_RetinaClusters -velo_tracking_algorithm = VeloRetinaClusterTrackingSIMDFull +velo_tracking_algorithm = VeloRetinaClusterTrackingSIMD bankType = "VPRetinaCluster" default_VeloCluster_source.global_bind(bank_type="VPRetinaCluster") -- GitLab From df64b0e54ea8311e8ad02f8093b73383f77e2e74 Mon Sep 17 00:00:00 2001 From: mwaterla <markwaterlaat@gmail.com> Date: Thu, 6 Mar 2025 14:17:55 +0100 Subject: [PATCH 4/4] fix config --- VPHitEfficiencies/moore_data.py | 1 + 1 file changed, 1 insertion(+) diff --git a/VPHitEfficiencies/moore_data.py b/VPHitEfficiencies/moore_data.py index c66f29a000..46927b8a69 100644 --- a/VPHitEfficiencies/moore_data.py +++ b/VPHitEfficiencies/moore_data.py @@ -16,6 +16,7 @@ from PyConf.Algorithms import ( fromPrVeloTracksV1TracksMerger, VPHitEfficiencyMonitor, VeloRetinaClusterTrackingSIMDFull, + VeloRetinaClusterTrackingSIMD, TrackEventFitter, TrackListRefiner, TrackSelectionToContainer, -- GitLab