8. Apply Particle Filter

This tutorial shows how to apply a filter to particles before putting them into your tuple.

from DaVinci import Options, make_config
from DaVinci.algorithms import create_lines_filter
from PyConf.reading import get_particles
from FunTuple import FunTuple_Particles as Funtuple
import FunTuple.functorcollections as FC
from RecoConf.algorithms_thor import ParticleFilter
import Functors as F


def main(options: Options):
    # Define a dictionary of "field name" -> "decay descriptor component".
    fields1 = {
        "Bs": "B_s0 -> (J/psi(1S) -> mu+ mu-) (phi(1020) ->K+ K-)",
        "mup": "B_s0 -> (J/psi(1S) -> ^mu+ mu-)  (phi(1020) ->K+ K-)",
        "mum": "B_s0 -> (J/psi(1S) -> mu+ ^mu-) (phi(1020) ->K+ K-)",
    }

    # Define variables dictionary "field name" -> Collections of functor
    variables = {"ALL": FC.Kinematics()}

    # Load data from dst onto a TES
    turbo_line1 = "Hlt2B2CC_BsToJpsiPhi_Detached"
    input_data1 = get_particles(f"/Event/HLT2/{turbo_line1}/Particles")
    my_filter1 = create_lines_filter("HDRFilter_SeeNoEvil1", lines=[f"{turbo_line1}"])

    # Make a filter with a selection on the Bs transverse momentum
    filter_bs = F.FILTER(F.require_all(F.PT < 5000))
    pt_filter = ParticleFilter(input_data1, Cut=filter_bs)
    mytuple1 = Funtuple(
        "TDirectoryName1",
        "TTreeName1",
        fields=fields1,
        variables=variables,
        inputs=pt_filter,
    )

    user_algorithms = {
        "Alg1": [my_filter1, mytuple1],
    }
    return make_config(options, user_algorithms)

To run the example:

lbexec DaVinciTutorials.tutorial8_apply_particle_filter:main $DAVINCITUTORIALSROOT/options.yaml

For reference, these are the options of this example

testfiledb_key: DaVinciTutorials
input_manifest_file: 'root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp3/tests/hlt2_passthrough_thor_lines.tck.json'
evt_max: 100
ntuple_file: davinci_ntuple.root
input_process: TurboPass
print_freq: 1
lumi: False
persistreco_version: 0.0