Skip to content
Snippets Groups Projects
Commit 313ef595 authored by Davide Fazzini's avatar Davide Fazzini Committed by Patrick Koppenburg
Browse files

Improving design of DV add_filter function

parent 2f6c15da
No related branches found
No related tags found
2 merge requests!1103Draft: Add AnalysisHelpers to DaVinci Stack,!591Improving design of DV add_filter function
...@@ -22,7 +22,7 @@ from FunTuple import FunctorCollection ...@@ -22,7 +22,7 @@ from FunTuple import FunctorCollection
from FunTuple import FunTuple_Particles as Funtuple from FunTuple import FunTuple_Particles as Funtuple
from PyConf.application import make_data_with_FetchDataFromFile from PyConf.application import make_data_with_FetchDataFromFile
from DaVinci.reco_objects import make_pvs_for from DaVinci.reco_objects import make_pvs_for
from DaVinci.algorithms import set_hlt_config, add_filter from DaVinci.algorithms import add_filter
from DaVinci import options from DaVinci import options
# #
...@@ -151,10 +151,8 @@ def alg_config(): ...@@ -151,10 +151,8 @@ def alg_config():
# #
# Sprucing filter # Sprucing filter
# #
hlt_dec_reports, spruce_dec_reports = set_hlt_config(options)
my_filter = add_filter("HDRFilter_B0DsK", my_filter = add_filter("HDRFilter_B0DsK",
f"HLT_PASS('{bd2dsk_line}Decision')", f"HLT_PASS('{bd2dsk_line}Decision')")
hlt_dec_reports, spruce_dec_reports)
# #
# FunTuple # FunTuple
......
...@@ -15,7 +15,7 @@ from FunTuple import FunctorCollection ...@@ -15,7 +15,7 @@ from FunTuple import FunctorCollection
from FunTuple import FunTuple_Particles as Funtuple from FunTuple import FunTuple_Particles as Funtuple
from FunTuple.NewTupleTools import Kinematics from FunTuple.NewTupleTools import Kinematics
from PyConf.application import make_data_with_FetchDataFromFile from PyConf.application import make_data_with_FetchDataFromFile
from DaVinci.algorithms import add_filter, set_hlt_config from DaVinci.algorithms import add_filter
bd2dsk_line = make_data_with_FetchDataFromFile( bd2dsk_line = make_data_with_FetchDataFromFile(
"/Event/Spruce/SpruceB2OC_BdToDsmK_DsmToHHH_FEST_Line/Particles") "/Event/Spruce/SpruceB2OC_BdToDsmK_DsmToHHH_FEST_Line/Particles")
...@@ -91,15 +91,12 @@ def main(): ...@@ -91,15 +91,12 @@ def main():
options.evt_pre_filters = {"Hlt2TopoLineFilter": evt_filter} options.evt_pre_filters = {"Hlt2TopoLineFilter": evt_filter}
options.output_level = 3 options.output_level = 3
hlt_dec_reports, spruce_dec_reports = set_hlt_config(options)
filter_B0DsK = add_filter( filter_B0DsK = add_filter(
"HDRFilter_B0DsK", "HDRFilter_B0DsK",
"HLT_PASS('SpruceB2OC_BdToDsmK_DsmToHHH_FEST_LineDecision')", "HLT_PASS('SpruceB2OC_BdToDsmK_DsmToHHH_FEST_LineDecision')")
hlt_dec_reports, spruce_dec_reports)
filter_B0Dspi = add_filter( filter_B0Dspi = add_filter(
"HDRFilter_B0Dspi", "HDRFilter_B0Dspi",
"HLT_PASS('SpruceB2OC_BdToDsmPi_DsmToHHH_LineDecision')", "HLT_PASS('SpruceB2OC_BdToDsmPi_DsmToHHH_LineDecision')")
hlt_dec_reports, spruce_dec_reports)
tools = [] tools = []
algs = { algs = {
......
...@@ -16,7 +16,7 @@ from FunTuple import FunctorCollection ...@@ -16,7 +16,7 @@ from FunTuple import FunctorCollection
from FunTuple import FunTuple_Particles as Funtuple from FunTuple import FunTuple_Particles as Funtuple
from PyConf.application import make_data_with_FetchDataFromFile from PyConf.application import make_data_with_FetchDataFromFile
from DaVinci.reco_objects import make_pvs_for from DaVinci.reco_objects import make_pvs_for
from DaVinci.algorithms import add_filter, set_hlt_config from DaVinci.algorithms import add_filter
from DaVinci import options from DaVinci import options
branches = { branches = {
...@@ -53,11 +53,9 @@ def main(): ...@@ -53,11 +53,9 @@ def main():
d02kpi_line = "Hlt2CharmD0ToKmPipLine" d02kpi_line = "Hlt2CharmD0ToKmPipLine"
d02kpi_data = make_data_with_FetchDataFromFile(f"/Event/HLT2/{d02kpi_line}/Particles") d02kpi_data = make_data_with_FetchDataFromFile(f"/Event/HLT2/{d02kpi_line}/Particles")
hlt_dec_reports, _ = set_hlt_config(options)
my_filter = add_filter( my_filter = add_filter(
"HDRFilter_D0Kpi", "HDRFilter_D0Kpi",
f"HLT_PASS('{d02kpi_line}Decision')", f"HLT_PASS('{d02kpi_line}Decision')")
hlt_dec_reports, None)
my_tuple = Funtuple( my_tuple = Funtuple(
name="Tuple", name="Tuple",
tree_name="DecayTree", tree_name="DecayTree",
......
...@@ -16,7 +16,7 @@ from FunTuple import FunctorCollection ...@@ -16,7 +16,7 @@ from FunTuple import FunctorCollection
from FunTuple import FunTuple_Particles as Funtuple from FunTuple import FunTuple_Particles as Funtuple
from PyConf.application import make_data_with_FetchDataFromFile from PyConf.application import make_data_with_FetchDataFromFile
from DaVinci.reco_objects import make_pvs_for from DaVinci.reco_objects import make_pvs_for
from DaVinci.algorithms import set_hlt_config, add_filter from DaVinci.algorithms import add_filter
from DaVinci import options from DaVinci import options
bd2dsk_line = "SpruceB2OC_BdToDsmK_DsmToHHH_FEST_Line" bd2dsk_line = "SpruceB2OC_BdToDsmK_DsmToHHH_FEST_Line"
...@@ -40,17 +40,14 @@ def alg_config(): ...@@ -40,17 +40,14 @@ def alg_config():
'B0': variables_pvs, 'B0': variables_pvs,
} }
hlt_dec_reports, spruce_dec_reports = set_hlt_config(options)
my_filter = add_filter( my_filter = add_filter(
"HDRFilter_B0DsK", "HDRFilter_B0DsK",
f"HLT_PASS('{bd2dsk_line}Decision')", f"HLT_PASS('{bd2dsk_line}Decision')")
hlt_dec_reports, spruce_dec_reports)
my_tuple = Funtuple( my_tuple = Funtuple(
name="B0DsK_Tuple", name="B0DsK_Tuple",
tree_name="DecayTree", tree_name="DecayTree",
branches=branches_dsk, branches=branches_dsk,
variables=variables_dsk, variables=variables_dsk,
loki_preamble=[],
inputs=bd2dsk_data) inputs=bd2dsk_data)
return {"UserAlgs" : [v2_pvs, my_filter, my_tuple]}, [] return {"UserAlgs" : [v2_pvs, my_filter, my_tuple]}, []
...@@ -16,7 +16,7 @@ from PyConf.Algorithms import EventAccounting ...@@ -16,7 +16,7 @@ from PyConf.Algorithms import EventAccounting
from DaVinci.configOptions import (check_options, set_job_options, from DaVinci.configOptions import (check_options, set_job_options,
set_args_options, set_input_file_options) set_args_options, set_input_file_options)
from DaVinci.algorithms import (setup_algorithms, define_fsr_writer, from DaVinci.algorithms import (setup_algorithms, define_fsr_writer,
set_hlt_config, apply_filters_and_unpacking) set_hltAnn_svc, apply_filters_and_unpacking)
from DaVinci.config import davinci_control_flow, prepare_davinci_nodes from DaVinci.config import davinci_control_flow, prepare_davinci_nodes
...@@ -90,10 +90,8 @@ def add_davinci_configurables(options): ...@@ -90,10 +90,8 @@ def add_davinci_configurables(options):
check_options(options) check_options(options)
config = configure_input(options) config = configure_input(options)
hlt_dec_reports, spruce_dec_reports = set_hlt_config(options, config) set_hltAnn_svc(config, options.getProp("annsvc_config"))
dvMainFlow.update( dvMainFlow.update(apply_filters_and_unpacking(options, userAlgs))
apply_filters_and_unpacking(options, userAlgs, hlt_dec_reports,
spruce_dec_reports))
if options.write_fsr: if options.write_fsr:
if options.simulation: if options.simulation:
......
...@@ -60,42 +60,58 @@ def setup_algorithms(options): ...@@ -60,42 +60,58 @@ def setup_algorithms(options):
return dvAlgs, publicTools return dvAlgs, publicTools
def add_filter(name, code, hlt_dec_reports, spruce_dec_reports): def set_filter(name, code, dec_reports):
""" """
Adding HDR filter to FunTuple algorithms checking is the corresponding SpruceLine fired. Adding an HDR filter to FunTuple algorithms checking if the corresponding HLT/Sprucing line fired.
Args: Args:
- name: filter's name. - name: filter's name.
- code: filter's code. - code: filter's code.
- hlt_dec_reports: HltDecReportsDecoder containing the configuration for spruced lines. - dec_reports: HltDecReportsDecoder containing the configuration for HLT/Sprucing lines.
- spruce_dec_reports: HltDecReportsDecoder containing the configuration for spruced lines.
Returns: Returns:
- Filter with name and code defined by the user. - Filter with name and code defined by the user.
""" """
if "Spruce" in code: if dec_reports:
algFilter = HDRFilter(name=name,
Code=code,
Location=spruce_dec_reports.OutputHltDecReportsLocation)
elif "Hlt" in code:
algFilter = HDRFilter(name=name, algFilter = HDRFilter(name=name,
Code=code, Code=code,
Location=hlt_dec_reports.OutputHltDecReportsLocation) Location=dec_reports.OutputHltDecReportsLocation)
else: else:
algFilter = VoidFilter(name=name, Code=code) algFilter = VoidFilter(name=name, Code=code)
return algFilter
def add_filter(name, code):
"""
Adding an event pre-filter using a code defined by the user
Args:
- name: filter's name.
- code: filter's code.
Returns:
- Filter with name and code defined by the user.
"""
import re
from DaVinci import options
dec_reports = None
for source in ["Hlt2", "Spruce"]:
if re.search("^HLT_PASS.*"+source, code):
dec_reports = get_hlt_reports(options, source)
break
algFilter = set_filter(name, code, dec_reports)
return algFilter return algFilter
def apply_filters_and_unpacking(options, algs_dict, hlt_dec_reports, spruce_dec_reports): def apply_filters_and_unpacking(options, algs_dict):
""" """
Adding filter and unpacking algorithms. Adding filter and unpacking algorithms.
Args: Args:
- options: list of DaVinci options. - options: list of DaVinci options.
- algs_dict: dict of the user algorithms. - algs_dict: dict of the user algorithms.
- hlt_dec_reports: HltDecReportsDecoder containing the configuration for hlt2 lines.
- spruce_dec_reports: HltDecReportsDecoder containing the configuration for spruced lines.
Returns: Returns:
- Dict where at each node filters and unpacking algorithms are prepended to the initial list of user algorithms. - Dict where at each node filters and unpacking algorithms are prepended to the initial list of user algorithms.
...@@ -107,7 +123,7 @@ def apply_filters_and_unpacking(options, algs_dict, hlt_dec_reports, spruce_dec_ ...@@ -107,7 +123,7 @@ def apply_filters_and_unpacking(options, algs_dict, hlt_dec_reports, spruce_dec_
evt_pre_filters = [] evt_pre_filters = []
code_filters = options.evt_pre_filters code_filters = options.evt_pre_filters
for title, code in code_filters.items(): for title, code in code_filters.items():
evt_filter = add_filter(title, code, hlt_dec_reports, spruce_dec_reports) evt_filter = add_filter(title, code)
evt_pre_filters.append(evt_filter) evt_pre_filters.append(evt_filter)
algs_list += evt_pre_filters algs_list += evt_pre_filters
...@@ -259,14 +275,14 @@ def unpack_locations(options): ...@@ -259,14 +275,14 @@ def unpack_locations(options):
return reading_algs return reading_algs
def set_hlt_config(options, config=None): def get_hlt_reports(options, source=''):
""" """
Set the Hlt service and algorithms. Set the Hlt service and algorithms.
Args: Args:
- options: list of DaVinci options. - options: list of DaVinci options.
- config: dict of configured Configurable instances. - source: source ID required by the user.
Returns: Returns:
- HltDecReportsDecoder containing the configuration for hlt2 lines. - HltDecReportsDecoder containing the configuration for hlt2 lines.
...@@ -275,30 +291,17 @@ def set_hlt_config(options, config=None): ...@@ -275,30 +291,17 @@ def set_hlt_config(options, config=None):
from PyConf.Algorithms import HltDecReportsDecoder from PyConf.Algorithms import HltDecReportsDecoder
from PyConf.application import default_raw_event from PyConf.application import default_raw_event
from PyConf.dataflow import force_location from PyConf.dataflow import force_location
annsvc_config = get_option_value(options, "annsvc_config")
if config: dec_reports = HltDecReportsDecoder(
set_hltAnn_svc(config, annsvc_config)
hlt_dec_reports = HltDecReportsDecoder(
RawEventLocations=default_raw_event(raw_event_format=options.input_raw_format, RawEventLocations=default_raw_event(raw_event_format=options.input_raw_format,
bank_types=["HltDecReports"]), bank_types=["HltDecReports"]),
SourceID='Hlt2', SourceID=source,
outputs={ outputs={
"OutputHltDecReportsLocation": "OutputHltDecReportsLocation":
force_location("/Event/Hlt2/DecReports") force_location("/Event/%s/DecReports"%source)
}) })
spruce_dec_reports = HltDecReportsDecoder( return dec_reports
RawEventLocations=default_raw_event(raw_event_format=options.input_raw_format,
bank_types=["HltDecReports"]),
SourceID="Spruce",
outputs={
"OutputHltDecReportsLocation":
force_location("/Event/Spruce/DecReports")
})
return hlt_dec_reports, spruce_dec_reports
def get_hltAnn_dict(annsvc_config): def get_hltAnn_dict(annsvc_config):
...@@ -386,11 +389,8 @@ def ConfiguredFuntuple(config): ...@@ -386,11 +389,8 @@ def ConfiguredFuntuple(config):
""" """
from FunTuple import FunTuple_Particles as Funtuple from FunTuple import FunTuple_Particles as Funtuple
from PyConf.application import make_data_with_FetchDataFromFile from PyConf.application import make_data_with_FetchDataFromFile
from DaVinci import options
hlt_dec_reports, spruce_dec_reports = set_hlt_config(options)
dictAlgs = {} dictAlgs = {}
for key in config.keys(): for key in config.keys():
inputs = make_data_with_FetchDataFromFile(config[key]["location"]) inputs = make_data_with_FetchDataFromFile(config[key]["location"])
dictAlgs[key] = [] dictAlgs[key] = []
...@@ -404,8 +404,7 @@ def ConfiguredFuntuple(config): ...@@ -404,8 +404,7 @@ def ConfiguredFuntuple(config):
tupleFilter = add_filter( tupleFilter = add_filter(
filter_name, filter_name,
line, line)
hlt_dec_reports, spruce_dec_reports)
dictAlgs[key].append(tupleFilter) dictAlgs[key].append(tupleFilter)
funTuple = Funtuple( funTuple = Funtuple(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment