Skip to content

Draft: Add PV splitting for vertex resolution studies (primarily BGI)

Adds PVSplitter which takes as input a set of VELO tracks, reconstructs PVs in the event and then splits and re-fits each PV using a specified algorithm for dividing the tracks into two subsets. Also modifies LumiPVs_nobeamline to tuple split-vertex information. Addresses #183.

Example options to test in Moore:

from Moore import options
from RecoConf.decoders import default_VeloCluster_source
from RecoConf.legacy_rec_hlt1_tracking import all_velo_track_types
from RecoConf.config import Reconstruction, run_reconstruction
from PyConf.application import make_odin, default_raw_banks, default_raw_event
from PyConf.Algorithms import HltRoutingBitsFilter, LumiPVs_nobeamline, PVSplitter
from PyConf.reading import get_decreports

default_raw_event.global_bind(stream="beamgas")

def make_reconstruction():
    phys_filter = HltRoutingBitsFilter(
        RawBanks=default_raw_banks('HltRoutingBits'),
        RequireMask=(0x0, 0x0, 0x80000000)
        )
    algs = []
    for splitalg in ['random', 'byvelohalf', 'equalvelohalf', 'bytopbottom', 'equaltopbottom']:
        pvsplit = PVSplitter(
            InputVeloTracks=all_velo_track_types()['v1'],
            SplitMethod=splitalg
            )
        tuple_maker = LumiPVs_nobeamline(
            name=f'PVs_{splitalg}',
            ODIN=make_odin(),
            InputPVs=pvsplit.OutputPVs,
            InputSplitPVs1=pvsplit.OutputSplitPVs1,
            InputSplitPVs2=pvsplit.OutputSplitPVs2,
            InputHlt=get_decreports('Hlt1')
            )
        algs += [pvsplit, tuple_maker]
    return Reconstruction("BeamGasTuple", algs, [phys_filter])

options.input_files = ['root://xrootd.echo.stfc.ac.uk//lhcb:prod/lhcb/LHCb/Vdm24/BEAMGAS.DST/00242987/0000/00242987_00005402_1.beamgas.dst']
options.ntuple_file = 'split_pvs.root'
options.input_type = 'ROOT'
options.evt_max = 100
options.geometry_version = 'run3/2024.Q1.2-v00.00'
options.conditions_version = 'master'
options.simulation = False

with default_VeloCluster_source.bind(bank_type="VPRetinaCluster"):
    run_reconstruction(options, make_reconstruction)

To do before un-drafting:

  • Get things building against master
  • Test PVSplitter runs and produces some output
  • Test PVSplitter produces sensible output. Probably the easiest way to do this is to run over a reasonable sample of BGI vertices, and check the resolution de-convolved bunch width is approximately stable along z/with changing ntracks
  • Add reco options in separate MR to Moore, alongside/to replace pvreco_beamgasstream_tupling_vdm_2024.py?

cc Lumi conveners @efranzos @vazhovko @elniel @fferrari

Merge request reports

Loading