diff --git a/configuration/python/AllenConf/HLT1_LightIon.py b/configuration/python/AllenConf/HLT1_LightIon.py new file mode 100644 index 0000000000000000000000000000000000000000..aa9ff14721badd95ca6bd9d28571e914ff72e301 --- /dev/null +++ b/configuration/python/AllenConf/HLT1_LightIon.py @@ -0,0 +1,693 @@ +############################################################################### +# (c) Copyright 2021 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), copied verbatim in the file "LICENSE". # +# # +# 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. # +############################################################################### +from AllenConf.filters import * +from AllenConf.utils import line_maker +from AllenConf.hlt1_reconstruction import hlt1_reconstruction, validator_node +from AllenConf.hlt1_calibration_lines import * +from AllenConf.hlt1_monitoring_lines import * +from AllenConf.hlt1_heavy_ions_lines import * + +from AllenConf.hlt1_inclusive_hadron_lines import * +from AllenConf.hlt1_charm_lines import * +from AllenConf.hlt1_muon_lines import * +from AllenConf.velo_reconstruction import decode_velo +from AllenConf.calo_reconstruction import decode_calo +from AllenConf.validators import rate_validation +from PyConf.control_flow import NodeLogic, CompositeNode +from AllenConf.odin import make_bxtype, odin_error_filter, tae_filter, make_event_type, make_odin_orbit +from AllenConf.persistency import make_persistency +from AllenConf.lumi_reconstruction import lumi_reconstruction +from AllenConf.enum_types import TrackingType, ActivityType, includes_matching +from .HLT1 import default_bgi_activity_lines +import re + + +def default_physics_lines(reconstructed_objects, prescale, reco_particles, + with_muon, chi2_cuts): + + velo_tracks = reconstructed_objects["velo_tracks"] + long_tracks = reconstructed_objects["long_tracks"] + long_track_particles = reconstructed_objects["long_track_particles"] + decoded_calo = reconstructed_objects["decoded_calo"] + pvs = reconstructed_objects["pvs"] + dihadrons = reconstructed_objects["dihadron_secondary_vertices"] + dileptons = reconstructed_objects["dilepton_secondary_vertices"] + v0s = reconstructed_objects["v0_secondary_vertices"] + muon_stubs = reconstructed_objects["muon_stubs"] + + lines = [ + make_heavy_ion_event_line( + name="Hlt1LightIonMicroBias", + velo_tracks=velo_tracks, + long_track_particles=long_track_particles, + pvs=pvs, + decoded_calo=decoded_calo, + min_velo_tracks_PbPb=1, + pre_scaler=0.5 if prescale else 1), + make_heavy_ion_event_line( + name="Hlt1LightIonSMOGMicroBias", + velo_tracks=velo_tracks, + long_track_particles=long_track_particles, + pvs=pvs, + decoded_calo=decoded_calo, + min_velo_tracks_SMOG=1, + pre_scaler=0.5 if prescale else 1), + ] + if reco_particles: + lines += [ + make_kstopipi_line( + long_tracks, v0s, name="Hlt1KsToPiPi", post_scaler=0.001), + make_kstopipi_line( + long_tracks, + v0s, + name="Hlt1KsToPiPiDoubleMuonMisID", + double_muon_misid=True, + ), + make_d2kk_line(long_tracks, dihadrons, name="Hlt1D2KK"), + make_d2kpi_line(long_tracks, dihadrons, name="Hlt1D2KPi"), + make_d2pipi_line(long_tracks, dihadrons, name="Hlt1D2PiPi"), + make_lambda2ppi_line(v0s, name="Hlt1L02PPi") + ] + if with_muon: + muonid = reconstructed_objects["muonID"] + lines += [ + make_di_muon_mass_line( + long_tracks, dileptons, muonid, name="Hlt1DiMuonHighMass"), + make_di_muon_mass_line( + long_tracks, + dileptons, + muonid, + name="Hlt1DiMuonLowMass", + enable_monitoring=False, + minHighMassTrackPt=500., + minHighMassTrackP=3000., + minMass=0., + maxDoca=0.2, + maxVertexChi2=25., + minIPChi2=4.) + ] + + return [line_maker(line) for line in lines] + + +def upc_physics_lines(reconstructed_objects): + + pvs = reconstructed_objects["pvs"] + velo_tracks = reconstructed_objects["velo_tracks"] + ecal_clusters = reconstructed_objects["ecal_clusters"] + + # upc photon lines + lines = [ + make_diphoton_lowmult_line( + name="Hlt1LightIonUPCDiPhoton_LowPt_Ycut", + calo=ecal_clusters, + velo_tracks=velo_tracks, + pvs=pvs, + min_absY=100, + max_velo_tracks=10, + max_ecal_clusters=10, + maxPt=1000), + make_photon_lowmult_line( + name="Hlt1LightIonUPCPhoton_Ycut", + calo=ecal_clusters, + min_absY=100, + max_ecal_clusters=10, + pre_scaler=0.02), + make_photon_lowmult_line( + name="Hlt1LightIonUPCPhoton", + calo=ecal_clusters, + max_ecal_clusters=10, + pre_scaler=0.002), + make_diphoton_lowmult_line( + name="Hlt1LightIonUPCDiPhoton_HighMass", + calo=ecal_clusters, + velo_tracks=velo_tracks, + pvs=pvs, + minMass=1300, + minEt_clusters=500, + maxPt=2000, + max_velo_tracks=10, + max_ecal_clusters=10, + mass_histogram_range=[1300, 40000], + pre_scaler=0.1), + make_photon_lowmult_line( + name="Hlt1LightIonUPCPhoton_HighEt", + calo=ecal_clusters, + minEt=800, + max_ecal_clusters=10, + pre_scaler=0.1) + ] + return [line_maker(line) for line in lines] + + +def mini_physics_lines(reconstructed_objects): + + velo_tracks = reconstructed_objects["velo_tracks"] + long_track_particles = reconstructed_objects["long_track_particles"] + decoded_calo = reconstructed_objects["decoded_calo"] + pvs = reconstructed_objects["pvs"] + ecal_clusters = reconstructed_objects["ecal_clusters"] + + # default ion lines + lines = [ + make_heavy_ion_event_line( + name="Hlt1HeavyIonLightIonUPCMB", + velo_tracks=velo_tracks, + long_track_particles=long_track_particles, + pvs=pvs, + decoded_calo=decoded_calo, + max_ecal_e=94000, + min_long_tracks=1, + min_velo_tracks_PbPb=2, + pre_scaler=1), + make_photon_lowmult_line( + name="Hlt1LightIonUPCPhoton", + pre_scaler_hash_string="LightIonUPCPhoton_line_pre", + post_scaler_hash_string="LightIonUPCPhoton_line_post", + calo=ecal_clusters, + max_ecal_clusters=10) + ] + + return [line_maker(line) for line in lines] + + +def odin_monitoring_lines(lumiline_name, lumilinefull_name, with_gec, + odin_err_filter, odin_lumi): + lines = [] + + if with_gec: + with line_maker.bind(prefilter=odin_err_filter): + lines.append( + line_maker( + make_odin_event_type_with_decoding_line( + name=lumiline_name, odin_event_type='Lumi'))) + else: + with line_maker.bind(prefilter=odin_err_filter + [odin_lumi]): + lines += [ + line_maker( + make_passthrough_line(name=lumiline_name, pre_scaler=1.)) + ] + + odin_orbit = make_odin_orbit(odin_orbit_modulo=30, odin_orbit_remainder=1) + with line_maker.bind(prefilter=odin_err_filter + [odin_lumi, odin_orbit]): + lines += [ + line_maker( + make_passthrough_line(name=lumilinefull_name, pre_scaler=1.)) + ] + + return lines + + +def alignment_monitoring_lines(reconstructed_objects, + reco_particles, + chi2_cuts, + with_muon=True): + + velo_tracks = reconstructed_objects["velo_tracks"] + material_interaction_tracks = reconstructed_objects[ + "material_interaction_tracks"] + long_tracks = reconstructed_objects["long_tracks"] + long_track_particles = reconstructed_objects["long_track_particles"] + velo_states = reconstructed_objects["velo_states"] + dihadrons = reconstructed_objects["dihadron_secondary_vertices"] + dileptons = reconstructed_objects["dilepton_secondary_vertices"] + dstars = reconstructed_objects["dstars"] + muon_stubs = reconstructed_objects["muon_stubs"] + + lines = [ + make_rich_1_line( + long_tracks, + long_track_particles, + maxTrChi2=chi2_cuts.Hlt1RICH1Alignment_maxTrChi2, + name="Hlt1RICH1Alignment"), + make_rich_2_line( + long_tracks, + long_track_particles, + maxTrChi2=chi2_cuts.Hlt1RICH2Alignment_maxTrChi2, + name="Hlt1RICH2Alignment"), + make_z_range_materialvertex_seed_line( + material_interaction_tracks, + min_z_materialvertex_seed=300, + max_z_materialvertex_seed=1000, + name="Hlt1MaterialVertexSeedsDownstreamz", + pre_scaler=0.005), + make_z_range_materialvertex_seed_line( + material_interaction_tracks, + min_z_materialvertex_seed=700, + max_z_materialvertex_seed=1000, + name="Hlt1MaterialVertexSeeds_DWFS", + pre_scaler=0.1) + ] + + if reco_particles: + lines += [ + make_d2kpi_align_line( + long_tracks, dihadrons, name="Hlt1D2KPiAlignment"), + make_dst_line(dstars, name="Hlt1Dst2D0PiAlignment") + ] + if with_muon: + muonid = reconstructed_objects["muonID"] + lines += [ + make_di_muon_mass_align_line( + long_tracks, + dileptons, + muonid, + name="Hlt1DiMuonJpsiMassAlignment"), + make_one_muon_track_line( + muon_stubs["consolidated_muon_tracks"], + muon_stubs["dev_muon_tracks_offsets"], + muon_stubs["host_muon_total_number_of_tracks"], + name="Hlt1OneMuonTrackLine", + post_scaler=0.001), + make_di_muon_mass_line( + long_tracks, + dileptons, + muonid, + maxChi2Corr=1.8, + name="Hlt1UpsilonAlignment", + minMass=8000., + minHighMassTrackPt=550), + make_det_jpsitomumu_tap_line( + long_tracks, + dihadrons, + name="Hlt1DetJpsiToMuMuPosTagLine", + posTag=True, + enable_monitoring=True, + enable_tupling=False), + make_det_jpsitomumu_tap_line( + long_tracks, + dihadrons, + name="Hlt1DetJpsiToMuMuNegTagLine", + posTag=False, + enable_monitoring=True, + enable_tupling=False) + ] + + return [line_maker(line) for line in lines] + + +def setup_hlt1_node(withMCChecking=False, + max_ecal_upc=94000, + min_ecal_hadro=94000, + EnableGEC=False, + enableBGI=True, + enableRateValidator=True, + with_lumi=True, + with_odin_filter=True, + tracking_type=TrackingType.FORWARD, + with_ut=True, + with_AC_split=False, + prescale=False, + with_calo=True, + with_muon=True, + with_rich=True, + velo_open=False, + enableDownstream=True, + reco_particles=True, + bx_type=None, + tae_passthrough=True, + tae_activity=True, + minimal_activity_type=ActivityType.VELO_CLUSTERS, + ActivityForClosing=ActivityType.VELO_CLUSTERS, + DisableLinesDuringVPClosing=False, + mini=False, + with_fullKF=False, + enableBGI_full=False, + enabled_lines=[r'.*?'], + disabled_lines=[]): + + if with_fullKF: + from AllenConf.secondary_vertex_reconstruction import ParKF_cuts as chi2_cuts + else: + from AllenConf.secondary_vertex_reconstruction import Velo_only_cuts as chi2_cuts + + hlt1_config = {} + + # Reconstruct objects needed as input for selection lines + reconstructed_objects = hlt1_reconstruction( + with_calo=with_calo, + with_ut=with_ut, + with_muon=with_muon, + enableDownstream=enableDownstream, + tracking_type=tracking_type, + velo_open=velo_open, + with_AC_split=with_AC_split, + with_rich=with_rich, + with_fullKF=with_fullKF, + track_max_chi2ndof=chi2_cuts.SV_track_max_chi2ndof) + + hlt1_config['reconstruction'] = reconstructed_objects + + # GEC for UPC events + decoded_calo = decode_calo() + gec_ecal_upc = [ + make_checkEcalEnergy( + decoded_calo['dev_total_ecal_e'], + name='CheckEcalEnergyUPC', + ecalCut=max_ecal_upc, + cutHigh=True) + ] + + gec_photon_nvelo_upc = [ + make_lowmult( + reconstructed_objects["velo_tracks"], + reconstructed_objects["ecal_clusters"], + name="CheckPhotonUPC", + maxTracks=10, + max_ecal_clusters=10) + ] + + gec_ecal_periph = [ + make_checkEcalEnergy( + decoded_calo['dev_total_ecal_e'], + name='CheckEcalEnergyHadronic', + ecalCut=min_ecal_hadro, + cutHigh=False) + ] + + gec = [ + make_gec( + count_ut=False, + count_velo=True, + max_scifi_clusters=30000, + max_velo_clusters=60000) + ] if EnableGEC else [] + odin_err_filter = [odin_error_filter("odin_error_filter") + ] if with_odin_filter else [] + + velo_open_event = make_event_type(event_type="VeloOpen") + velo_closed = [ + make_event_type( + name="ODIN_EvenType_VeloClosed", + event_type="VeloOpen", + invert=True) + ] if DisableLinesDuringVPClosing else [] + + #activity filter needed for SD monitoring + activity_filter = make_minimal_activity_filter( + reconstructed_objects, + minimal_activity_type, + min_activity=200, + max_activity=999999999) + #activity filter needed for SD monitoring + + velo_closing_gec = [] + + #reject extremely busy events that give rise to fake PVs for VeloClosingMon and VeloMon + pv_activity_filter = make_minimal_activity_filter( + reconstructed_objects, + minimal_activity_type=ActivityType.PRIMARY_VERTICES, + min_activity=1., + max_activity=100.) + velo_clusters_filter = [ + make_gec( + gec_name="closing_filter", + count_velo=True, + count_scifi=False, + count_ut=False, + min_velo_clusters=200, + max_velo_clusters=5000) + ] + + if ActivityForClosing == ActivityType.VELO_CLUSTERS: + velo_closing_gec = velo_clusters_filter + elif ActivityForClosing == ActivityType.PRIMARY_VERTICES: + velo_closing_gec = pv_activity_filter + else: + raise Exception("VeloClosing activity not supported") + + veloMicroBias_scifi_clusters_filter = [ + scifi_gec( + 'veloMicroBias_scifi_clusters_filter', + min_clusters=0, + max_clusters=7000) + ] + veloMicroBias_velo_clusters_filter = [ + velo_gec( + 'veloMicroBias_velo_clusters_filter', + min_clusters=200, + max_clusters=7000) + ] + veloMicroBias_clusters_filter = [ + CompositeNode( + "veloMicroBias_clusters_filter_node", + veloMicroBias_scifi_clusters_filter + + veloMicroBias_velo_clusters_filter, + NodeLogic.LAZY_AND, + force_order=False) + ] + + if ActivityForClosing == ActivityType.VELO_CLUSTERS: + veloMicroBias_gec = veloMicroBias_clusters_filter + elif ActivityForClosing == ActivityType.PRIMARY_VERTICES: + veloMicroBias_gec = pv_activity_filter + else: + raise Exception("VeloClosing activity not supported") + bx_BB = [make_bxtype(bx_type=3)] + + prefilters = odin_err_filter + gec + velo_closed + prefilter_upc = prefilters + gec_ecal_upc + velo_closed + prefilter_photon_velo_upc = prefilters + gec_photon_nvelo_upc + velo_closed + prefilter_hadronic = prefilters + gec_ecal_periph + velo_closed + prefilter_veloMicroBias = odin_err_filter + bx_BB + velo_closed + veloMicroBias_gec + # The lumi filter should be the same as for the physics lines but without the bx_type filter + prefilters_lumi = odin_err_filter + if mini: + prefilters_lumi = prefilters_lumi + gec_ecal_upc + else: + prefilters_lumi = prefilters_lumi + gec + # the filters for the BGI lines must exclude the BX filters + prefilters_bgi = odin_err_filter + gec + prefilter_upc_bgi = prefilters_bgi + gec_ecal_upc + + if bx_type is not None: + if not isinstance(bx_type, list): + bx_type = [bx_type] + prefilters = prefilters + [ + CompositeNode( + "bx_selection", + [make_bxtype(bx_type=ibx_type) + for ibx_type in bx_type], NodeLogic.NONLAZY_OR) + ] + + # Setup physics lines. + physics_lines = [] + if mini: + with line_maker.bind(prefilter=prefilter_upc): + physics_lines = mini_physics_lines(reconstructed_objects) + with line_maker.bind(prefilter=prefilter_hadronic): + physics_lines += [ + line_maker( + make_passthrough_line( + name="Hlt1GECCentPassthrough", pre_scaler=1)) + ] + with line_maker.bind(prefilter=prefilter_upc): + physics_lines += [ + line_maker( + make_passthrough_line(name="Hlt1GECUPCPassthrough")) + ] + with line_maker.bind(prefilter=prefilters): + physics_lines += [ + line_maker( + make_passthrough_line(name="Hlt1GECSciFiPassthrough")) + ] + else: + with line_maker.bind(prefilter=prefilters): + physics_lines = default_physics_lines(reconstructed_objects, + prescale, reco_particles, + with_muon, chi2_cuts) + with line_maker.bind(prefilter=prefilter_photon_velo_upc): + physics_lines += upc_physics_lines(reconstructed_objects) + + if EnableGEC: + physics_lines += [ + line_maker( + make_passthrough_line(name="Hlt1GECPassthrough")) + ] + + lumiline_name = "Hlt1ODINLumi" + lumilinefull_name = "Hlt1ODIN1kHzLumi" + # decoding based lumi line + with line_maker.bind(prefilter=odin_err_filter): + physics_lines += [line_maker(make_passthrough_line())] + + monitoring_lines = [] + if with_lumi: + odin_lumi_event = make_event_type(event_type='Lumi') + monitoring_lines += odin_monitoring_lines( + lumiline_name, lumilinefull_name, EnableGEC, odin_err_filter, + odin_lumi_event) + + with line_maker.bind(prefilter=odin_err_filter): + monitoring_lines += [ + line_maker(make_odin_calib_line(name="Hlt1ODINCalib")) + ] + #Minimal activity line, for SD monitoring + with line_maker.bind(prefilter=odin_err_filter + activity_filter): + monitoring_lines += [ + line_maker( + make_passthrough_line( + name="Hlt1MinimalActivity", pre_scaler=0.01)) + ] + + # alignment lines within the GEC + with line_maker.bind(prefilter=(prefilter_upc if mini else prefilters)): + monitoring_lines += alignment_monitoring_lines( + reconstructed_objects, reco_particles, chi2_cuts, with_muon) + + # velo microbias lines for Velo closing & alignment inside minimal activity filter + with line_maker.bind(prefilter=odin_err_filter + [velo_open_event] + gec + + velo_closing_gec): + monitoring_lines += [ + line_maker( + make_velo_micro_bias_line( + reconstructed_objects["velo_tracks"], + name="Hlt1VeloMicroBiasVeloClosing", + pre_scaler=1., + post_scaler=1.)) + ] + with line_maker.bind(prefilter=prefilter_veloMicroBias): + monitoring_lines += [ + line_maker( + make_velo_micro_bias_line( + reconstructed_objects["velo_tracks"], + name="Hlt1VeloMicroBias", + pre_scaler=0.15, + post_scaler=1., + min_velo_tracks=3)) + ] + + bx_BE = make_bxtype(bx_type=1) + with line_maker.bind( + prefilter=(prefilter_upc if mini else prefilters) + [bx_BE]): + monitoring_lines += [ + line_maker( + make_beam_gas_line( + reconstructed_objects["velo_tracks"], + reconstructed_objects["velo_states"], + beam_crossing_type=1, + name="Hlt1BeamGas")) + ] + + if tae_passthrough: + if tae_activity: + + tae_filters = CompositeNode( + "taefilter_node", + gec + pv_activity_filter + [tae_filter()], + NodeLogic.LAZY_AND, + force_order=True) + else: + tae_filters = tae_filter() + + with line_maker.bind(prefilter=odin_err_filter + [tae_filters]): + physics_lines += [ + line_maker( + make_passthrough_line( + name="Hlt1TAEPassthrough", pre_scaler=1)) + ] + + if enableBGI: + monitoring_lines += default_bgi_activity_lines( + reconstructed_objects["pvs"], + reconstructed_objects["velo_states"], + prefilter=(prefilter_upc_bgi if mini else prefilters_bgi), + enableBGI_full=enableBGI_full, + PbPb_collision=True) + + with line_maker.bind(prefilter=[sd_error_filter()]): + physics_lines += [ + line_maker( + make_passthrough_line(name="Hlt1ErrorBank", pre_scaler=0.01)) + ] + + # list of line algorithms, required for the gather selection and DecReport algorithms + line_algorithms = [tup[0] for tup in physics_lines + ] + [tup[0] for tup in monitoring_lines] + # list of line nodes, required to set up the CompositeNode + line_nodes = [tup[1] for tup in physics_lines + ] + [tup[1] for tup in monitoring_lines] + + lines = CompositeNode( + "SetupAllLines", line_nodes, NodeLogic.NONLAZY_OR, force_order=False) + + line_algorithms = [ + line for line in line_algorithms if any( + re.match(r, line.name) for r in enabled_lines) + ] + line_algorithms = [ + line for line in line_algorithms + if not any(re.match(r, line.name) for r in disabled_lines) + ] + + persistency_node, persistency_algorithms = make_persistency( + line_algorithms) + + hlt1_node = CompositeNode( + "Allen", [ + lines, + persistency_node, + ], + NodeLogic.NONLAZY_AND, + force_order=True) + + hlt1_config['line_nodes'] = line_nodes + hlt1_config['line_algorithms'] = line_algorithms + hlt1_config.update(persistency_algorithms) + + if with_lumi: + lumi_node = CompositeNode( + "AllenLumiNode", + lumi_reconstruction( + gather_selections=hlt1_config['gather_selections'], + lumiline_name=lumiline_name, + lumilinefull_name=lumilinefull_name)["algorithms"], + NodeLogic.NONLAZY_AND, + force_order=False) + + lumi_with_prefilter = CompositeNode( + "LumiWithPrefilter", + prefilters_lumi + [lumi_node], + NodeLogic.LAZY_AND, + force_order=True) + + hlt1_config['lumi_node'] = lumi_with_prefilter + + hlt1_node = CompositeNode( + "AllenWithLumi", [hlt1_node, lumi_with_prefilter], + NodeLogic.NONLAZY_AND, + force_order=False) + + if enableRateValidator: + hlt1_node = CompositeNode( + "AllenRateValidation", [ + hlt1_node, + rate_validation(lines=line_algorithms), + ], + NodeLogic.NONLAZY_AND, + force_order=True) + + if not withMCChecking: + hlt1_config['control_flow_node'] = hlt1_node + else: + validation_node = validator_node( + reconstructed_objects, line_algorithms, + includes_matching(tracking_type), with_ut, with_muon, + with_AC_split, with_fullKF, prefilters) + hlt1_config['validator_node'] = validation_node + + node = CompositeNode( + "AllenWithValidators", [hlt1_node, validation_node], + NodeLogic.NONLAZY_AND, + force_order=False) + hlt1_config['control_flow_node'] = node + + return hlt1_config diff --git a/configuration/python/AllenConf/persistency.py b/configuration/python/AllenConf/persistency.py index e1ae2ad467bd64897d21dadf0d74282eb4db145f..4f730fa5945806c1201293e8724438ff331c9ab2 100644 --- a/configuration/python/AllenConf/persistency.py +++ b/configuration/python/AllenConf/persistency.py @@ -181,6 +181,48 @@ rb_map_PbPb = { 26 } +#routing bits for Light ions +rb_map_LightIon = { + # RB 1 Lumi after HLT1 + '^Hlt1.*Lumi.*': 1, + # RB 2 Velo alignment + 'Hlt1(VeloMicroBias|BeamGas|Hlt1LightIonMicroBias)': 2, + # RB 3 Tracker alignment + 'Hlt1D2KPiAlignment|Hlt1LightIonUPCMB': 3, + # RB 4 Muon alignment + 'Hlt1DiMuonJpsiMassAlignment': 4, + # RB 5 RICH1 alignment + 'Hlt1RICH1Alignment': 5, + # RB 6 TAE passthrough + 'Hlt1TAEPassthrough': 6, + # RB 7 RICH2 alignment + 'Hlt1RICH2Alignment': 7, + # RB 8 Velo (closing) monitoring + 'Hlt1VeloMicroBias.*': 8, + # RB 9 ECAL pi0 calibration + 'Hlt1LightIonUPCDiPhoton_LowPt': 9, + # RB 10 ODIN calibration triggers + 'Hlt1ODINCalib': 10, + # RB 11 BGI lines + 'Hlt1BGI.*': 11, + # RB 12 Upsilon Alignment + 'Hlt1UpsilonAlignment': 12, + #RB 13 for minimal PbPb activity + 'Hlt1MinimalActivity': 13, + # RB 14 HLT1 beam-beam physics for monitoring and alignment + 'Hlt1(Hlt1LightIonMicroBias|GECCentPassthrough)': 14, + # RB 15 HLT1 beam-gas physics for monitoring and alignment + 'Hlt1(Hlt1LightIonSMOGMicroBias|GECCentPassthrough)': 15, + # RB 17 physics for CalibMon + 'Hlt1(Dst2D0Pi|DetJpsiToMuMuPosTagLine|DetJpsiToMuMuNegTagLine)': 17, + # RB 21 HLT1 physics for NZS + 'Hlt1NonZeroSuppress': 21, + # RB 25 error banks + 'Hlt1ErrorBank': 25, + # RB 26 HLT1 large-event passthrough + 'Hlt1PassthroughLargeEvent': 26 +} + def make_gather_selections(lines): from AllenConf.odin import decode_odin diff --git a/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG.py b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG.py new file mode 100644 index 0000000000000000000000000000000000000000..c24f19f4102d934b615996bca6c716ffbc39e91e --- /dev/null +++ b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG.py @@ -0,0 +1,29 @@ +############################################################################### +# (c) Copyright 2025 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), 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. # +############################################################################### +from AllenConf.HLT1_LightIon import setup_hlt1_node +from AllenCore.generator import generate +from AllenConf.enum_types import TrackingType +from AllenConf.calo_reconstruction import make_ecal_clusters +from AllenConf.persistency import make_routingbits_writer, rb_map_LightIon +from AllenConf.hlt1_heavy_ions_lines import make_heavy_ion_event_line + +with make_routingbits_writer.bind(rb_map=rb_map_LightIon): + with make_heavy_ion_event_line.bind(PbPb_SMOG_z_separation=-330.): + with make_ecal_clusters.bind( + seed_min_adc=10, neighbour_min_adc=2, min_et=200, min_e19=0): + hlt1_node = setup_hlt1_node( + prescale=False, + with_ut=True, + EnableGEC=True, + reco_particles=True, + with_fullKF=True, + tracking_type=TrackingType.FORWARD_THEN_MATCHING) + generate(hlt1_node) diff --git a/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_prescaled.py b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_prescaled.py new file mode 100644 index 0000000000000000000000000000000000000000..abec09e9db3c202f67e4c713acb9a9a58175fad1 --- /dev/null +++ b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_prescaled.py @@ -0,0 +1,29 @@ +############################################################################### +# (c) Copyright 2025 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), 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. # +############################################################################### +from AllenConf.HLT1_LightIon import setup_hlt1_node +from AllenCore.generator import generate +from AllenConf.enum_types import TrackingType +from AllenConf.calo_reconstruction import make_ecal_clusters +from AllenConf.persistency import make_routingbits_writer, rb_map_LightIon +from AllenConf.hlt1_heavy_ions_lines import make_heavy_ion_event_line + +with make_routingbits_writer.bind(rb_map=rb_map_LightIon): + with make_heavy_ion_event_line.bind(PbPb_SMOG_z_separation=-330.): + with make_ecal_clusters.bind( + seed_min_adc=10, neighbour_min_adc=2, min_et=200, min_e19=0): + hlt1_node = setup_hlt1_node( + prescale=True, + with_ut=True, + EnableGEC=True, + reco_particles=True, + with_fullKF=True, + tracking_type=TrackingType.FORWARD_THEN_MATCHING) + generate(hlt1_node) diff --git a/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP.py b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP.py new file mode 100644 index 0000000000000000000000000000000000000000..cb7b16b591ca738ef3e6f2c3ae398549aecf9af3 --- /dev/null +++ b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP.py @@ -0,0 +1,31 @@ +############################################################################### +# (c) Copyright 2025 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), 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. # +############################################################################### +from AllenConf.HLT1_LightIon import setup_hlt1_node +from AllenCore.generator import generate +from AllenConf.enum_types import TrackingType +from AllenConf.velo_reconstruction import decode_velo +from AllenConf.persistency import make_routingbits_writer, rb_map_LightIon +from AllenConf.hlt1_heavy_ions_lines import make_heavy_ion_event_line +from AllenConf.calo_reconstruction import make_ecal_clusters + +with decode_velo.bind(retina_decoding=False): + with make_routingbits_writer.bind(rb_map=rb_map_LightIon): + with make_ecal_clusters.bind( + seed_min_adc=10, neighbour_min_adc=2, min_et=200, min_e19=0): + with make_heavy_ion_event_line.bind(PbPb_SMOG_z_separation=-330.): + hlt1_node = setup_hlt1_node( + prescale=False, + with_ut=True, + EnableGEC=True, + reco_particles=True, + with_fullKF=True, + tracking_type=TrackingType.FORWARD_THEN_MATCHING) + generate(hlt1_node) diff --git a/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP_lumi.py b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP_lumi.py new file mode 100644 index 0000000000000000000000000000000000000000..abc653686807044612ca64b8146d29017d1dfeaa --- /dev/null +++ b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP_lumi.py @@ -0,0 +1,32 @@ +############################################################################### +# (c) Copyright 2025 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), 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. # +############################################################################### +from AllenConf.HLT1_LightIon import setup_hlt1_node +from AllenCore.generator import generate +from AllenConf.enum_types import TrackingType +from AllenConf.velo_reconstruction import decode_velo +from AllenConf.persistency import make_routingbits_writer, rb_map_LightIon +from AllenConf.hlt1_heavy_ions_lines import make_heavy_ion_event_line +from AllenConf.calo_reconstruction import make_ecal_clusters + +with decode_velo.bind(retina_decoding=False): + with make_routingbits_writer.bind(rb_map=rb_map_LightIon): + with make_ecal_clusters.bind( + seed_min_adc=10, neighbour_min_adc=2, min_et=200, min_e19=0): + with make_heavy_ion_event_line.bind(PbPb_SMOG_z_separation=-330.): + hlt1_node = setup_hlt1_node( + prescale=False, + with_ut=True, + EnableGEC=True, + reco_particles=True, + with_fullKF=True, + enableBGI_full=True, + tracking_type=TrackingType.FORWARD_THEN_MATCHING) + generate(hlt1_node) diff --git a/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP_prescaled.py b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP_prescaled.py new file mode 100644 index 0000000000000000000000000000000000000000..2a14b3d6ed370e1291a006bf9b04e41a5db9f448 --- /dev/null +++ b/configuration/python/AllenSequences/hlt1_LightIon_IonSMOG_veloSP_prescaled.py @@ -0,0 +1,31 @@ +############################################################################### +# (c) Copyright 2023 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), 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. # +############################################################################### +from AllenConf.HLT1_LightIon import setup_hlt1_node +from AllenCore.generator import generate +from AllenConf.enum_types import TrackingType +from AllenConf.velo_reconstruction import decode_velo +from AllenConf.persistency import make_routingbits_writer, rb_map_LightIon +from AllenConf.hlt1_heavy_ions_lines import make_heavy_ion_event_line +from AllenConf.calo_reconstruction import make_ecal_clusters + +with decode_velo.bind(retina_decoding=False): + with make_routingbits_writer.bind(rb_map=rb_map_LightIon): + with make_ecal_clusters.bind( + seed_min_adc=10, neighbour_min_adc=2, min_et=200, min_e19=0): + with make_heavy_ion_event_line.bind(PbPb_SMOG_z_separation=-330.): + hlt1_node = setup_hlt1_node( + prescale=True, + with_ut=True, + EnableGEC=True, + reco_particles=True, + with_fullKF=True, + tracking_type=TrackingType.FORWARD_THEN_MATCHING) + generate(hlt1_node) diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/beamline.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/beamline.bin new file mode 100644 index 0000000000000000000000000000000000000000..8f8501619a515e694b6c314a4fd45470c0c0b19b Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/beamline.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ecal_geometry.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ecal_geometry.bin new file mode 100644 index 0000000000000000000000000000000000000000..d60cae49416908e9d617b23916219a103f68347b Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ecal_geometry.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/muon_geometry.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/muon_geometry.bin new file mode 100644 index 0000000000000000000000000000000000000000..08f1b02d15f55447c9190f4331aa97300694af14 Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/muon_geometry.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/muon_tables.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/muon_tables.bin new file mode 100644 index 0000000000000000000000000000000000000000..1a3887c38de133a6d12db2770840234a5dcb7606 Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/muon_tables.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/polarity.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/polarity.bin new file mode 100644 index 0000000000000000000000000000000000000000..9c12e8adf98ba3c9bdad8481352f1dac07f3df52 Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/polarity.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/rich_pdmdbmaps.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/rich_pdmdbmaps.bin new file mode 100644 index 0000000000000000000000000000000000000000..ab799be80ee34140be1a5bada9452557f522bdc3 Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/rich_pdmdbmaps.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/rich_tel40maps.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/rich_tel40maps.bin new file mode 100644 index 0000000000000000000000000000000000000000..bfe642fc2eca8d4f814029686b27316163c16f4f Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/rich_tel40maps.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/scifi_geometry.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/scifi_geometry.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd165036d3ea8ecc25c0fa6458f8da5c924eba9f Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/scifi_geometry.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_boards.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_boards.bin new file mode 100644 index 0000000000000000000000000000000000000000..7fc0e0bcad175883fdb9912388ba36aec4ce1718 Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_boards.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_geometry.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_geometry.bin new file mode 100644 index 0000000000000000000000000000000000000000..4e7aaf7a55b17f34759bbbe8fc28501969186653 Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_geometry.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_tables.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_tables.bin new file mode 100644 index 0000000000000000000000000000000000000000..58396ed12be821a1485a643c599b9ae73f418a21 Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/ut_tables.bin differ diff --git a/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/velo_geometry.bin b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/velo_geometry.bin new file mode 100644 index 0000000000000000000000000000000000000000..1b77af049e6ab3ee4c7c859b7e02aaf1fa3ee2a0 Binary files /dev/null and b/input/allen_geometries/geometry_2025-v00.02_sim10-2025-v00.01-mu100/velo_geometry.bin differ diff --git a/scripts/ci/test_config.yaml b/scripts/ci/test_config.yaml index 23f71699ae3e91cc4d2136ffc959acc968dc3094..ed05a2aba72ecee399e5faf9252857edbf59d894 100644 --- a/scripts/ci/test_config.yaml +++ b/scripts/ci/test_config.yaml @@ -145,7 +145,7 @@ full: geometry: "geometry_dddb-20240427_sim10-2024.Q1.2-v1.1-md100" - # run throughput, PbPb samples, 2024 default PbPb sequence + # run throughput, PbPb samples, 2024 default PbPb sequence - type: "throughput" sequence: - hlt1_PbPb_PbSMOG @@ -172,6 +172,20 @@ full: - a5000 - geforcertx3090 + # run throughput, OO samples, 2025 default OO sequence + # Just use PbPb running options. + - type: "throughput" + sequence: + - hlt1_LightIon_IonSMOG_veloSP + dataset: "official-expected-2025-OO-minbias" + geometry: "geometry_2025-v00.02_sim10-2025-v00.01-mu100" + timeout: 2400 + collision_type: "PbPb" + allowed_devices: + - epyc7502 + - a5000 + - geforcertx3090 + #throughput test with RICH decoding -> medium/long term development - type: "throughput"