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