From f8bbf733c8955386fd4b0e919b3967580ccc0496 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Tue, 31 May 2022 12:45:18 +0200 Subject: [PATCH 001/102] require (and generate) an explicit encoding key to configure encoding --- Hlt/Moore/python/Moore/config.py | 194 ++++++++---------- .../python/Moore/persistence/__init__.py | 114 ++++++---- .../python/Moore/persistence/serialisation.py | 4 +- Hlt/Moore/python/Moore/selreports.py | 18 +- Hlt/Moore/python/Moore/tcks.py | 97 ++++++++- 5 files changed, 260 insertions(+), 167 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 93e2f63b3e9..128c1fefe77 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -11,6 +11,7 @@ from __future__ import absolute_import import re, logging, inspect, itertools from collections import namedtuple +from Configurables import ApplicationMgr from PyConf import configurable from PyConf.Algorithms import ( ExecutionReportsWriter, HltDecReportsWriter, HltSelReportsWriter, @@ -18,11 +19,12 @@ from PyConf.Algorithms import ( CombineRawBankViewsToRawEvent, RawEventCombiner, RawEventSimpleCombiner, AddressKillerAlg, VoidFilter) import Functors as F -from PyConf.components import force_location +from PyConf.components import force_location, setup_component from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, ROOT_KEY, + ApplicationOptions, mdf_writer, online_writer, root_copy_input_writer, @@ -30,8 +32,8 @@ from PyConf.application import ( default_raw_event, root_writer, make_data_with_FetchDataFromFile, + register_encoding_dictionary, ) -from PyConf.filecontent_metadata import generate_encoding_dictionary, register_encoding_dictionary from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError from PyConf.application import all_nodes_and_algs @@ -54,7 +56,11 @@ from .selreports import make_selreports log = logging.getLogger(__name__) -from .options import options +# TODO move the options global to a separate module such that functions +# defined here cannot access it +# FIXME _enabled is a workaround for using ConfigurableUser +#: Global ApplicationOptions instance holding the options for Moore +options = ApplicationOptions(_enabled=False) ROOT_RAW_EVENT_LOCATION = '/Event/DAQ/RawEvent' @@ -110,12 +116,29 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name +def _build_decision_ids(decision_names, offset=1): + """Return a dict of decision names to integer IDs. + + Decision report IDs must not be zero. This method generates IDs starting + from offset. + + Args: + decision_names (list of str) + offset (int): needed so that there are no identical ints in the int->str relations + of HltRawBankDecoderBase + + Returns: + decision_ids (dict of str to int): Mapping from decision name to ID. + """ + return {name: idx for idx, name in enumerate(decision_names, offset)} + + @configurable -def report_writers_nodes(streams, - data_type, - process, - associate_mc=False, - clone_mc=False): +def report_writers_node(streams, + data_type, + process, + associate_mc=False, + clone_mc=False): """Return the control flow node and locations to persist of the default reports writers. Args: @@ -159,51 +182,42 @@ def report_writers_nodes(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - source_id = { - "hlt1": "Hlt1", - "hlt2": "Hlt2", - "spruce": "Spruce", - "pass": "Spruce" - }[process] - major_name = { - "hlt1": "Hlt1SelectionID", - "hlt2": "Hlt2SelectionID", - "spruce": "SpruceSelectionID", - "pass": "SpruceSelectionID" - }[process] - dec_key = int( - register_encoding_dictionary( - major_name, - generate_encoding_dictionary(major_name, - [l.decision_name for l in lines])), - 16) # TODO unsigned? Stick to hex string? - if process == "hlt1" or process == "hlt2": + major_name = "{}SelectionID".format(process.capitalize()) + key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=dec_key, + TCK=key, ) drw = HltDecReportsWriter( - SourceID=source_id, + SourceID=process.capitalize(), InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=dec_key, + EncodingKey=key, ) algs.extend([erw, drw]) new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - srm = make_selreports(process, physics_lines, erw) + encoding_key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? + srm = make_selreports(physics_lines, erw, encoding_key) + algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) barrier_algorithms.append(srm) srw = HltSelReportsWriter( - SourceID=source_id, + SourceID=process.capitalize(), DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=srm.properties['EncodingKey']) + EncodingKey=encoding_key) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -216,15 +230,18 @@ def report_writers_nodes(streams, extra_locations_to_persist.extend(line_output_locations) else: ##spruce and passthrough jobs will write a Spruce report + major = "SpruceSelectionID" erw = ExecutionReportsWriter( Persist=[line.name for line in lines], - ANNSvcKey=major_name, - TCK=dec_key # TODO unsigned? Stick to hex string? + ANNSvcKey=major, + TCK=int( + register_encoding_dictionary( + major, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( - SourceID=source_id, + SourceID='Spruce', InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=dec_key, ) algs.extend([erw, drw]) @@ -254,9 +271,7 @@ def report_writers_nodes(streams, # Transform to a list of unique str extra_locations_to_persist = _unique(extra_locations_to_persist) - return [ - node - ], new_hlt_banks, extra_locations_to_persist, barrier_algorithms, erw + return node, new_hlt_banks, extra_locations_to_persist, barrier_algorithms, erw @configurable @@ -444,8 +459,22 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): streams[stream] = sorted(stream_lines, key=lambda line: line.name) lines = streams_dict_to_lines_list(streams) - - rw_nodes, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_nodes( + ann_config = dict( + hlt1_decision_ids={}, hlt2_decision_ids={}, spruce_decision_ids={}) + if allen_hlt1: + ann_config["hlt1_decision_ids"] = get_allen_hlt1_decision_ids() + key = process + "_decision_ids" + #For passthrough lines want decisions a la Sprucing + if process == "pass": + key = "spruce_decision_ids" + if process == "hlt2": offset = 1000 + elif process == "spruce" or process == "pass": offset = 5000 + else: offset = 1 + ann_config[key] = _build_decision_ids([l.decision_name for l in lines], + offset) + # register the decision_ids and get their oids back... setup_ann_service(**ann_config) + + rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, options.data_type, process, @@ -465,8 +494,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): stream_writers_setup = [] unpack = [] - if (options.output_file or options.output_type == ONLINE) and ( - process == "hlt1" or process == "hlt2") and not analytics: + if (process == "hlt1" or process == "hlt2") and not analytics: for stream, stream_lines in streams.items(): rbw = Hlt__RoutingBitsWriter( RoutingBits=get_default_routing_bits({ @@ -534,10 +562,14 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): extra_locations=extra_outputs) stream_writers_setup += pre_algs + # Use a regex instead of individual OR functors to avoid + # super deep function stack in generated C++ + stream_filter_code = "|".join( + line.decision_name for line in stream_lines) streamFilter = VoidFilter( name='Streaming_filter', - Cut=F.DECREPORTS_FILTER( - Lines=list(line.decision_name for line in stream_lines), + Cut=F.DECREPORTS_RE_FILTER( + Regex=stream_filter_code, DecReports=dec_reports.DecReportsLocation)) stream_node_children = [streamFilter] + post_algs stream_node = CompositeNode( @@ -558,8 +590,8 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): else: stream_writers_nodes = [] - moore_children = (stream_writers_setup + unpack + [dec] + rw_nodes + - stream_writers_nodes) + moore_children = ( + stream_writers_setup + unpack + [dec, rw_node] + stream_writers_nodes) moore = CompositeNode( 'moore', combine_logic=NodeLogic.LAZY_AND, @@ -569,40 +601,11 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): return moore, barriers -def get_all_algs_cpp_types(top_node): - return [alg.type() for alg in all_nodes_and_algs(top_node, True)[1]] - - -def is_DVCommonBase_alg(alg): - # a Gaudi::Property registers it's owner and appends it to the doc string - # e.g. the doc of ModifyLocations in DVCommonBase is: - # ' if set to false, does not append /Particles to outputParticles location [DVCommonBase] ' - # so as a proxy if something inherits from DVCommonBase we check if we can find this property - return '[DVCommonBase<' in alg._propertyDocDct.get("ModifyLocations", "") - - -def is_GaudiHistoAlg(alg): - return '[GaudiHistos<' in alg._propertyDocDct.get( - "UseSequencialNumericAutoIDs", "") - - -def check_for_known_issues(line): - all_algs = get_all_algs_cpp_types(line.node) - # filter out lines which will crash in multi threaded mode - # this check is likely incomplete.... - # what else is not thread safe? - # For now we just look for anything that inherits from DVCommonBase or GaudiHistos - return [ - a for a in all_algs if is_DVCommonBase_alg(a) or is_GaudiHistoAlg(a) - ] - - def run_moore(options, make_streams=None, public_tools=[], allen_hlt1=False, - analytics=False, - exclude_incompatible=True): + analytics=False): """Configure Moore's entire control and data flow. Convenience function that configures all services, creates the @@ -618,7 +621,6 @@ def run_moore(options, public_tools (list): list of public `Tool` instances to configure allen_hlt1: Configure Allen Hlt1 lines when processing Hlt2 on Allen filtered Hlt1 sample, Moore Hlt1 lines are confiugred when allen_hlt1=False analytics (bool, optional): For use only in rate/event size analysis. Defaults to False. - exclude_incompatible (bool, optional): Exclude the lines that are incompatible with multithreaded mode. Defaults to True. """ # First call configure_input for its important side effect of # changing the default values of default_raw_event's arguments. @@ -629,30 +631,6 @@ def run_moore(options, # Create default streams definition if make_streams returned a list if not isinstance(streams, dict): streams = dict(default=streams) - - # Exclude the lines with known issues (with non-thread safe algos etc.) - if exclude_incompatible: - filtered_streams = {} - excluded_lines = [] - for stream, lines in streams.items(): - filtered_lines = [] - for l in lines: - reason = check_for_known_issues(l) - if not reason: filtered_lines += [l] - else: excluded_lines += [(l.name, reason)] - if len(filtered_lines) > 0: - filtered_streams[stream] = filtered_lines - streams = filtered_streams - if len(excluded_lines) > 0: - log.warning( - f"Following {len(excluded_lines)} lines were automatically excluded:" - ) - log.warning( - "Name of Line ---- list of found algos that are known to be not thread safe" - ) - for line_name, reason in excluded_lines: - log.warning(f"{line_name} ---- {reason}") - lines = streams_dict_to_lines_list(streams) # Determine whether Hlt1, Hlt2 or Spruce is being processed hlt1 = all(l.name.startswith('Hlt1') for l in lines) @@ -695,22 +673,18 @@ def get_allen_hlt1_decision_ids(): from AllenConf.persistency import build_decision_ids return build_decision_ids(get_allen_line_names()) - def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) from Allen.config import setup_allen_non_event_data_service - from AllenConf.persistency import make_dec_reporter, register_decision_ids + from AllenConf.persistency import make_dec_reporter options.finalize() non_event_data_node = setup_allen_non_event_data_service() - ids = get_allen_hlt1_decision_ids() - encoding_key = register_decision_ids(ids) - # TODO: remove when full configuration of Allen from TCK is implemented - make_dec_reporter.global_bind(TCK=encoding_key) + if options.tck: make_dec_reporter.global_bind(TCK=options.tck) # Write DecReports raw banks allen_cf, allen_barriers = allen_gaudi_node_barriers() @@ -722,6 +696,8 @@ def allen_control_flow(options, write_detector_raw_banks=True): algs.extend([srw]) new_hlt_banks['HltSelReports'] = srw.OutputRawReports + decision_ids = get_allen_hlt1_decision_ids() + # register the decision_ids... and get the oid of their mapping # hlt1_decision_ids=decision_ids, hlt2_decision_ids={}, spruce_decision_ids={}) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index a57514811d0..cf61706136d 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -16,16 +16,17 @@ from pprint import pformat from Configurables import HltLinePersistenceSvc +from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix -from PyConf.filecontent_metadata import register_encoding_dictionary -from GaudiConf.reading import type_map +from PyConf.object_types import type_map, classid_map +from PyConf.application import register_encoding_dictionary from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations +from .packing import pack_stream_objects, pack_stream_mc from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed from .serialisation import serialise_packed_containers from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC @@ -61,26 +62,37 @@ def _referenced_inputs(lines, inputs): #fill the packer inputs dictionary based on object type for dh in line_locs: - typ = get_type(dh) - if typ and typ in inputs.keys(): - inputs[typ] += [dh] + type = get_type(dh) + + if type and type in inputs.keys(): + inputs[type] += [dh.location] return inputs def _referenced_locations(lines): all_locs = {} + all_types = {} for l in lines: # Include the locations of the line outputs themselves line_locs = set() # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - all_locs[l.decision_name] = [dh for dh in line_locs] + + # Convert DataHandle to str, for configuring the ANN service + all_locs[l.decision_name] = [dh.location for dh in line_locs] + all_types[l.decision_name] = [] + for dh in line_locs: + if get_type(dh): + all_types[l.decision_name] += [get_type(dh)] + else: + all_types[l.decision_name] += [dh.type] + #zipped = zip(all_locs[l.decision_name], all_types[l.decision_name]) return all_locs def get_type(dh): - #For this to work, one needs to add new types to object_types.py in GaudiConf + #For this to work, one needs to add new types to object_types.py in Pyconf types = type_map() if dh.type in types.keys(): return types[dh.type] @@ -111,7 +123,7 @@ def persist_line_outputs( associate_mc, source_id, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes - reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from + reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from clone_mc=True): """Return CF node and output locations of the HLT2 line persistence. @@ -124,6 +136,7 @@ def persist_line_outputs( i.e. the DstData bank. """ + cf = [] protoparticle_relations = [] if associate_mc: @@ -153,29 +166,27 @@ def persist_line_outputs( if log.isEnabledFor(logging.DEBUG): log.debug('line_locations: ' + pformat(persistence_svc.Locations)) - # Make a dictionary for all known object types with empty values + # Make a dictinary for all known object types with emty values inputs = PersistRecoPacking().dictionary() #add line outputs to fill the dictionary inputs = _referenced_inputs(lines, inputs) - #add the locations from reco objects to the dictionary + #add the locations from reco objects to the dictinary prdict = persistreco_line_outputs() + prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - for val in prdict.values(): + for key, val in prdict.items(): name = get_type(val) #find type of object for this DH - if name: inputs[name] += [get_output(val)] - else: - log.warning( - '*** WARNING: get_type failed for {} -- {} not supported for persistence, skipping!' - .format(val, val.type)) + if name: + inputs[name] += [get_output(val).location] # add proto particle relations if they exist for p in protoparticle_relations: - inputs["PP2MCPRelations"] += [p] - - locify = lambda i: i.location if hasattr(i, 'location') else i - inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} + if isinstance(p, str): + inputs["PP2MCPRelations"] += [p] + else: + inputs["PP2MCPRelations"] += [p.location] #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -191,7 +202,7 @@ def persist_line_outputs( dec_reports, protoparticle_relations, stream, - # need to declare outputs, see usage inside clone_line_outputs + # need to delcare outputs, see usage inside clone_line_outputs outputs=list(itertools.chain.from_iterable(inputs.values())), clone_mc=clone_mc, ) @@ -204,7 +215,6 @@ def persist_line_outputs( #For line outputs, "stream+/p" added to input locations #For reco objects, there are pre-defined output locations #This is to be able to find reco objects regardless of their producer - prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) outputs = {} for key, value in inputs.items(): outputs[key] = [] @@ -222,40 +232,66 @@ def persist_line_outputs( ) ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ - set([ i for i in prpacking.unpackedLocations()]) | \ - set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) - - if clone_mc: - mc_stream = stream - if reco_stream not in stream: mc_stream = prefix(reco_stream, stream) - locations = locations.union(pack_stream_mc_locations(mc_stream)) - encoding_key = int( - register_encoding_dictionary("PackedObjectLocations", - sorted(locations)), 16) - - packer_cf, packer_handles = pack_stream_objects(stream, prpacking, - encoding_key) + register_encoding_dictionary( + "PackedObjectLocations", + sorted( + set([i for i in prpacking.packedLocations()]) + | set([ + unpacked_prefix(i, stream) + for i in prpacking.packedLocations() + ]) + | set([i for i in prpacking.unpackedLocations()]) + | set([ + i for i in itertools.chain( + *_referenced_locations(lines).values()) + ]))), 16) + + packer_cf, packer_locations = pack_stream_objects(stream, prpacking, + encoding_key) cf.append(packer_cf) packer_mc_locations = [] if clone_mc: + mc_stream = stream + if reco_stream not in stream: + mc_stream = prefix(reco_stream, stream) mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) if log.isEnabledFor(logging.DEBUG): - log.debug('packer_handles: ' + pformat(packer_handles)) + log.debug('packer_locations: ' + pformat(packer_locations)) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) serialisation_cf, output_raw_data = serialise_packed_containers( - packer_handles, source_id) + packer_locations, source_id) if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) cf.append(serialisation_cf) + unpacked_mc = unpacked_mc_locations() + unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] + + # Gather all possible locations which might be referenced... + #registered_locs = list( + # itertools.chain( + # packer_locations, + # [ unpacked_prefix(keys, stream) for keys in prpacking.packedLocations() ], + # prpacking.packedLocations(), + # prpacking.unpackedLocations(), + # unpacked_mc_locations().values(), + # [prefix(l, stream) for l in unpacked_mc_loc], + # itertools.chain(*_referenced_locations(lines).values()), + # )) + + # ...including all prefixed (post-cloning) locations + #registered_locs += [prefix(l, tes_prefix=stream) for l in registered_locs] + + #if log.isEnabledFor(logging.DEBUG): + # log.debug('registered_locs: ' + pformat(registered_locs)) + control_flow_node = CompositeNode( "hlt2_line_output_persistence", combine_logic=NodeLogic.NONLAZY_OR, diff --git a/Hlt/Moore/python/Moore/persistence/serialisation.py b/Hlt/Moore/python/Moore/persistence/serialisation.py index 658a8210a88..a66b767eee5 100644 --- a/Hlt/Moore/python/Moore/persistence/serialisation.py +++ b/Hlt/Moore/python/Moore/persistence/serialisation.py @@ -20,7 +20,7 @@ from PyConf.control_flow import CompositeNode from Gaudi.Configuration import WARNING as OUTPUTLEVEL -def serialise_packed_containers(packed_handles, source_id): +def serialise_packed_containers(packed_locations, source_id): """Return CF node that serialises a set of packed containers to a raw bank. Args: @@ -33,7 +33,7 @@ def serialise_packed_containers(packed_handles, source_id): """ bank_writer = HltPackedBufferWriter( - PackedContainers=packed_handles, + PackedContainers=packed_locations, OutputLevel=OUTPUTLEVEL, SourceID=source_id) diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 362bce4dc36..6bc65f3f7f5 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,7 +38,6 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) -from PyConf.filecontent_metadata import retrieve_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -209,11 +208,12 @@ def convert_output(alg): alg.type)) -def make_selreports(process, lines, decreports, **kwargs): +def make_selreports(lines, decreports, encoding_key, **kwargs): """Return a SelReportsMaker instance configured for the given lines. Args: - lines: The list of lines for which to create SelReport objects + lines (list of DecisionLine): The lines to create SelReport objects + for. decreports: DecReports data used as input to the SelReports maker. kwargs: Passed to the SelReportsMaker. """ @@ -226,16 +226,6 @@ def make_selreports(process, lines, decreports, **kwargs): else: # No lines we can handle, so do nothing names, outputs, types = [], [], [] - - dec_props = decreports.properties - # TODO: perhaps ExecutionReportsWriter should get an explicit encoding key.. - key = dec_props.get('EncodingKey', dec_props.get('TCK', None)) - assert key is not None - # get the content for this key, and verify it contains SelectionIDs - table = retrieve_encoding_dictionary('{:08x}'.format(key)) - sid = table["{}SelectionID".format(process.capitalize())] - assert all(n in sid.values() for n in names) - # Each line output should be unique; we expect no two lines to do exactly # the same work assert len(outputs) == len( @@ -246,5 +236,5 @@ def make_selreports(process, lines, decreports, **kwargs): SelectionNames=names, CandidateTypes=types, Inputs=outputs, - EncodingKey=key, + EncodingKey=encoding_key, **kwargs) diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index 05541a736da..f402d56755d 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -47,8 +47,99 @@ The functions in this module currently support persisting the configuration of .. _TCK: https://twiki.cern.ch/twiki/bin/view/LHCb/TCK """ -import GaudiConf +import json -def load_manifest(fname): - return GaudiConf.reading.load_manifest(fname) +class _ConfigurableEncoder(json.JSONEncoder): + def default(self, obj): + try: + # Try to serialise assuming Configurable + name = obj.getFullName() + props = obj.getDefaultProperties() + props.update(obj.getValuedProperties()) + obj = {name: props} + except AttributeError: + pass + return obj + + +def dump_hlt2_configuration(config, fname): + """Dump the HLT2 configuration in to a JSON TCK file. + + Note: + The `config` argument is currently unused as the configuration + dictionary returned by `Moore.run_moore` does not contain all + configurables. This will change once LHCb#141 has been addressed. + + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): + """Instantiate configurables based on an HLT2 TCK. + + Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 + application. + + Args: + fname -- Filename of the JSON TCK file produced by + ``dump_hlt2_configuration``. + annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. + """ + with open(fname) as f: + config = json.load(f) + + dicts = config["HltANNSvc/HltANNSvc"] + cfg = json.dumps({ + 'Hlt1SelectionID': dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': dicts["Hlt2SelectionID"], + 'SpruceSelectionID': dicts["SpruceSelectionID"], + 'PackedObjectLocations': dicts["PackedObjectLocations"] + }) + + from Configurables import GitANNSvc + return GitANNSvc(annsvc_name, Overrule={0: cfg}) + + +def dump_sprucing_configuration(config, fname): + """Dump the Sprucing configuration in to a JSON TCK file. + Note we need the `Hlt{1,2}SelectionID`s from the Hlt2 ANNSvc + that we read into "HltANNSvcReading" + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def dump_passthrough_configuration(config, fname): + """Dump the pass-through Sprucing configuration in to a JSON TCK file. + Here we need the `Hlt{1,2}SelectionID`s and `PackedObjectLocations` from the + Hlt2 job ANNSvc that we read into "HltANNSvcReading" + + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def load_sprucing_configuration(fname, annsvc_name): + """Instantiate configurables based on a Sprucing TCK. + + Returns an HltANNSvc loaded with the HltANNSvc configuration of the + Sprucing application. + + Args: + fname -- Filename of the JSON TCK file produced by + ``dump_sprucing_configuration``. + annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. + """ + + return load_hlt2_configuration(fname, annsvc_name) -- GitLab From 2d3d7c933ec71c205984d3dc0ac9e12b5fe89bc1 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Wed, 1 Jun 2022 12:31:29 +0200 Subject: [PATCH 002/102] remove no longer required configuration of ANNSvc for readback --- Hlt/Moore/python/Moore/config.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 128c1fefe77..a5e68dc5d54 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -11,7 +11,6 @@ from __future__ import absolute_import import re, logging, inspect, itertools from collections import namedtuple -from Configurables import ApplicationMgr from PyConf import configurable from PyConf.Algorithms import ( ExecutionReportsWriter, HltDecReportsWriter, HltSelReportsWriter, @@ -19,7 +18,7 @@ from PyConf.Algorithms import ( CombineRawBankViewsToRawEvent, RawEventCombiner, RawEventSimpleCombiner, AddressKillerAlg, VoidFilter) import Functors as F -from PyConf.components import force_location, setup_component +from PyConf.components import force_location from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, -- GitLab From 49ef1d4b03b88446e338f8152680c7450777cb3a Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Fri, 3 Jun 2022 14:12:51 +0200 Subject: [PATCH 003/102] replace dump_xyz_config with options.output_manifest_file --- .../bandq/spruce_bandq_example_fromfile.py | 4 +- .../examples/b_to_charmonia/spruce_b2cc.py | 4 +- .../b_to_open_charm/spruce_b2oc_fromfile.py | 4 +- .../b_to_open_charm/spruce_b2oc_realtime.py | 4 +- .../hlt2_all_lines_with_reco_with_streams.py | 3 +- ...t2_all_lines_with_reco_with_streams_mdf.py | 3 +- .../options/hlt2_2or3bodytopo_fromfile.py | 3 +- .../options/hlt2_2or3bodytopo_realtime.py | 3 +- .../options/hlt2_2or3bodytopo_realtime_dst.py | 3 +- .../options/hlt2_noUT_trackeff_test.py | 38 +++--------- .../options/hlt2_persistreco_fromfile.py | 14 ++--- Hlt/Hlt2Conf/options/hlt2_trackeff_test.py | 11 ++-- .../options/qee/spruce_qee_example.py | 6 +- .../sprucing/hlt2_2or3bodytopo_realtime.py | 7 +-- .../sprucing/spruce_all_lines_realtime.py | 61 +++++++++++++++---- .../sprucing/spruce_example_fromfile.py | 4 +- .../sprucing/spruce_example_realtime.py | 4 +- .../spruce_example_realtime_dstinput.py | 4 +- .../spruce_example_realtime_extraoutputs.py | 4 +- .../spruce_example_realtime_persistreco.py | 4 +- .../options/sprucing/spruce_hlt2filter.py | 4 +- .../options/sprucing/spruce_passthrough.py | 4 +- .../sprucing/spruce_passthrough_dstinput.py | 4 +- .../streaming/spruce_test_streaming.py | 4 +- Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py | 35 +++++++++-- .../options/hlt_filters_test_sprucepass.py | 4 +- Hlt/Moore/python/Moore/tcks.py | 49 ++------------- 27 files changed, 157 insertions(+), 135 deletions(-) diff --git a/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py b/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py index 568445a385a..96c6777f6c1 100644 --- a/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_bandq_example_fromfile.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -25,7 +26,6 @@ input_files = [ ] options.input_files = input_files -options.input_manifest_file = "Hlt2DiMuonLines_test.tck.json" options.input_type = 'ROOT' # When running from Upgrade MC, must use the post-juggling locations of the raw # event @@ -40,6 +40,8 @@ options.output_file = 'spruce_B2JpsiK.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_onia_example_fromfile.tck.json" +load_hlt2_configuration("Hlt2DiMuonLines_test.tck.json") + def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py b/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py index 2d372f0d549..2f1463cb8eb 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py @@ -18,6 +18,7 @@ ./Moore/run gaudirun.py spruce_b2cc_example.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -27,7 +28,6 @@ input_files = ['./dst/fromPersistReco/Bs2JpsiPhi.dst'] options.input_files = input_files options.input_type = 'ROOT' -options.input_manifest_file = "Hlt2DiMuonLines_Bs2JpsiPhi.tck.json" # When running from Upgrade MC, must use the post-juggling locations of the raw # event @@ -41,6 +41,8 @@ options.output_file = 'spruce_Bs2JpsiPhi.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2cc_example.tck.json" +load_hlt2_configuration("Hlt2DiMuonLines_Bs2JpsiPhi.tck.json") + def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py index cbac1a7f9b6..7af6e3077e9 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_fromfile.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -23,7 +24,6 @@ from Hlt2Conf.lines.b_to_open_charm import sprucing_lines input_files = ['hlt2_2or3bodytopo_fromfile.mdf'] options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_fromfile.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -36,6 +36,8 @@ options.output_file = 'spruce_fromfilereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2oc_example_fromfile.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_fromfile.tck.json") + def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py index 96d0d8bfafd..b15aa67fc58 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_realtime.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -23,7 +24,6 @@ from Hlt2Conf.lines.b_to_open_charm import sprucing_lines input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -36,6 +36,8 @@ options.output_file = 'spruce_b2oc_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2oc_example_realtime.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams.py b/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams.py index 944eae3292e..20da3790999 100644 --- a/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams.py +++ b/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams.py @@ -79,5 +79,4 @@ print("Number of HLT2 lines {}".format(len(hlt2_lines))) public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False): - config = run_moore( - options, make_streams, public_tools, exclude_incompatible=False) + config = run_moore(options, make_streams, public_tools) diff --git a/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams_mdf.py b/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams_mdf.py index 63479b0a341..ae1751f594b 100755 --- a/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams_mdf.py +++ b/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams_mdf.py @@ -75,5 +75,4 @@ options.lines_maker = make_streams public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False), pack_stream_objects.bind( enable_check=False): - config = run_moore( - options, public_tools=public_tools, exclude_incompatible=False) + config = run_moore(options, public_tools=public_tools) diff --git a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_fromfile.py b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_fromfile.py index cee77086011..04ab39d2e1d 100644 --- a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_fromfile.py +++ b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_fromfile.py @@ -48,5 +48,4 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=True): - config = run_moore( - options, make_lines, public_tools, exclude_incompatible=False) + config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime.py b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime.py index c7fe18ebca8..c822113a4b3 100644 --- a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime.py +++ b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime.py @@ -52,5 +52,4 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False): - config = run_moore( - options, make_lines, public_tools, exclude_incompatible=False) + config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime_dst.py b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime_dst.py index 5beabeb7d35..20d1dd52648 100644 --- a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime_dst.py +++ b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime_dst.py @@ -54,5 +54,4 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False): - config = run_moore( - options, make_lines, public_tools, exclude_incompatible=False) + config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py b/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py index e95b95b9d42..6232eb824ba 100644 --- a/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py +++ b/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py @@ -17,10 +17,11 @@ Run like any other options file: from Moore import options, run_moore from RecoConf.reconstruction_objects import reconstruction as reconstruction +from RecoConf.hlt2_global_reco import reconstruction as reconstruction_from_reco, make_fastest_reconstruction from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.decoders import default_ft_decoding_version -from Hlt2Conf.lines.trackeff.DiMuonTrackEfficiency import all_lines -import re +from RecoConf.hlt2_tracking import get_global_ut_hits_tool +from Hlt2Conf.lines.DiMuonTrackEfficiency import all_lines from Configurables import HiveDataBrokerSvc HiveDataBrokerSvc().OutputLevel = 5 @@ -41,37 +42,18 @@ options.input_type = 'ROOT' options.input_raw_format = 0.3 options.evt_max = 100 -options.output_file = 'hlt2_trackeff_noUT.dst' +options.output_file = 'hlt2_alltriggerlines.dst' options.output_type = 'ROOT' -options.output_manifest_file = "hlt2_trackeff_noUT.tck.json" - - -def remove_lines(lines_dict, pattern_to_remove): - filtered = { - name: line - for name, line in lines_dict.items() - if re.search(pattern_to_remove, name) is None - } - return filtered - - -# Remove lines which need UT -muonut_to_remove = "Hlt2TrackEff_DiMuon_MuonUT.*" -downstream_to_remove = "Hlt2TrackEff_DiMuon_Downstream.*" - -hlt2_lines = remove_lines(all_lines, muonut_to_remove) -trackeff_lines = remove_lines(hlt2_lines, downstream_to_remove) - -print("Removed lines: ", all_lines.keys() - trackeff_lines.keys()) - -print("Number of HLT2 lines {}".format(len(trackeff_lines))) - +options.output_manifest_file = "my_hlt2.tck.json" def make_lines(): - return [builder() for builder in trackeff_lines.values()] + return [builder() for builder in all_lines.values()] public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind(from_file=False): +with reconstruction.bind(from_file=False),\ + reconstruction_from_reco.bind(make_reconstruction=make_fastest_reconstruction),\ + make_fastest_reconstruction.bind(skipUT=True),\ + get_global_ut_hits_tool.bind(enable=False): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py index 2b443848468..052741e159d 100644 --- a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py +++ b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py @@ -123,13 +123,6 @@ options.conddb_tag = 'sim-20171127-vc-md100' # options.output_file = 'hlt2_test_persistreco_fromfile.mdf' # options.output_type = 'ROOT' -# This options file is used with different output types; subsequent tests -# require TCKs for each case -if options.output_type == "ROOT": - options.output_manifest_file = "hlt2_persistreco_fromfile_root_output.tck.json" -elif options.output_type == "MDF": - options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" - def make_lines(): return [test_persistreco_line(), test_nopersistreco_line()] @@ -138,3 +131,10 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=True): config = run_moore(options, make_lines, public_tools) + +# This options file is used with different output types; subsequent tests +# require TCKs for each case +if options.output_type == "ROOT": + options.output_manifest_file = "hlt2_persistreco_fromfile_root_output.tck.json" +elif options.output_type == "MDF": + options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" diff --git a/Hlt/Hlt2Conf/options/hlt2_trackeff_test.py b/Hlt/Hlt2Conf/options/hlt2_trackeff_test.py index c76e59b04e5..f2267c9adda 100644 --- a/Hlt/Hlt2Conf/options/hlt2_trackeff_test.py +++ b/Hlt/Hlt2Conf/options/hlt2_trackeff_test.py @@ -17,8 +17,7 @@ Run like any other options file: from Moore import options, run_moore from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_fastest_reconstruction -from Hlt2Conf.lines.trackeff.DiMuonTrackEfficiency import all_lines +from Hlt2Conf.lines.DiMuonTrackEfficiency import all_lines from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.decoders import default_ft_decoding_version @@ -29,9 +28,9 @@ options.set_input_and_conds_from_testfiledb('upgrade_DC19_01_Bs2JPsiPhi_MD') options.input_raw_format = 0.3 options.evt_max = 100 default_ft_decoding_version.global_bind(value=6) -options.output_file = 'hlt2_trackeff_alllines.dst' +options.output_file = 'hlt2_alltriggerlines.dst' options.output_type = 'ROOT' -options.output_manifest_file = "hlt2_trackeff_withUT.tck.json" +options.output_manifest_file = "my_hlt2.tck.json" def make_lines(): @@ -40,7 +39,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind(from_file=False),\ - hlt2_reconstruction.bind(make_reconstruction=make_fastest_reconstruction),\ - make_fastest_reconstruction.bind(skipUT=False): +with reconstruction.bind(from_file=False): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py index dfb7bf07c23..4b2a4a831d9 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py @@ -17,6 +17,7 @@ Run like any other options file: ./Moore/run gaudirun.py hlt2_qee_spruce_example.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.qee import sprucing_lines @@ -25,7 +26,6 @@ input_files = ['hlt2_qee_zmumu.mdf'] options.input_files = input_files options.input_type = 'MDF' -options.input_manifest_file = "hlt2_qee_zmumu.tck.json" options.evt_max = -1 options.simulation = True options.data_type = 'Upgrade' @@ -33,7 +33,9 @@ options.dddb_tag = 'dddb-20201211' options.conddb_tag = 'sim-20201218-vc-mu100' options.output_file = 'qee_zmumu_spruce.dst' options.output_type = 'ROOT' -options.output_manifest_file = "qee_zmumu_spruce.tck.json" +options.ouptut_manifest_file = "qee_zmumu_spruce.tck.json" + +load_hlt2_configuration('hlt2_qee_zmumu.tck.json') def make_lines(): diff --git a/Hlt/Hlt2Conf/options/sprucing/hlt2_2or3bodytopo_realtime.py b/Hlt/Hlt2Conf/options/sprucing/hlt2_2or3bodytopo_realtime.py index b680a9a6440..eda8b0e6b7a 100644 --- a/Hlt/Hlt2Conf/options/sprucing/hlt2_2or3bodytopo_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/hlt2_2or3bodytopo_realtime.py @@ -46,9 +46,9 @@ options.data_type = 'Upgrade' options.dddb_tag = 'dddb-20171126' options.conddb_tag = 'sim-20171127-vc-md100' -options.output_file = 'hlt2_2or3bodytopo_realtime_newPacking_newDst.mdf' +options.output_file = 'hlt2_2or3bodytopo_realtime_newPacking.mdf' options.output_type = 'MDF' -options.output_manifest_file = "hlt2_2or3bodytopo_realtime_newPacking_newDst.tck.json" +options.output_manifest_file = "hlt2_2or3bodytopo_realtime_newPacking.tck.json" ft_decoding_version = 2 #4,6 default_ft_decoding_version.global_bind(value=ft_decoding_version) @@ -60,5 +60,4 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False): - config = run_moore( - options, make_lines, public_tools, exclude_incompatible=False) + config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index f6b21aa966f..b204ae544d6 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -18,37 +18,72 @@ Run like any other options file: """ from __future__ import absolute_import, division, print_function +import json from Moore import options, run_moore from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines import sprucing_lines -from PyConf.application import metainfo_repos + +import XRootD.client +from Configurables import HltANNSvc + + +## Return HltANNSvc when tck is on eos +def tck_from_eos(url): + with XRootD.client.File() as f: + status, _ = f.open(url) + if not status.ok: + raise RuntimeError(f"could not open {url}: {status.message}") + status, data = f.read() + if not status.ok: + raise RuntimeError(f"could not read {url}: {status.message}") + dict = json.loads(data.decode('utf-8')) + ann_config = dict["HltANNSvc/HltANNSvc"] + packed_object_locs = { + str(k): v + for k, v in ann_config["PackedObjectLocations"].items() + } + packed_object_types = { + str(k): v + for k, v in ann_config["PackedObjectTypes"].items() + } + + hlt2_sel_ids = { + str(k): v + for k, v in ann_config["Hlt2SelectionID"].items() + } + + return HltANNSvc( + "HltANNSvcReading", + Hlt2SelectionID=hlt2_sel_ids, + PackedObjectLocations=packed_object_locs, + PackedObjectTypes=packed_object_types, + ) + + +## Configure `HltANNSvc` +url = 'root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.tck.json' +tck_from_eos(url) ##Run over HLT1 filtered Min bias sample that has been processed by TOPO{2, 3} HLT2 lines. ##To produce this see `Hlt/Hlt2Conf/options/Sprucing/hlt2_2or3bodytopo_realtime.py` +input_files = [ + 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' +] options.input_raw_format = 0.3 +options.input_files = input_files options.input_type = 'MDF' -options.input_files = [ - 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking_newDst.mdf' -] -options.input_manifest_file = 'root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking_newDst.tck.json' -metainfo_repos.global_bind(extra_central_tags=['key-5b3d0522']) - options.evt_max = -1 options.simulation = True options.data_type = 'Upgrade' options.dddb_tag = 'dddb-20171126' options.conddb_tag = 'sim-20171127-vc-md100' -options.output_file = 'spruce_all_lines_realtimereco_newPacking_newDst.dst' +options.output_file = 'spruce_all_lines_realtimereco_newPacking.dst' options.output_type = 'ROOT' -options.output_manifest_file = "spruce_all_lines_realtime_newPacking_newDst.tck.json" - -# and then in the readback application configure the GitANNSvc to use the branch key-43a25419 by doing -# from PyConf.application import metainfo_repos -# metainfo_repos.global_bind( extra_central_tags = [ 'key-43a25419' ] ) +options.output_manifest_file = "spruce_all_lines_realtime_newPacking.tck.json" def make_lines(): diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py index 077670f45f2..bfe33817c1b 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_fromfile.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -24,7 +25,6 @@ input_files = ['hlt2_2or3bodytopo_fromfile.mdf'] options.input_raw_format = 0.3 options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_fromfile.tck.json" options.input_type = 'MDF' # When running from Upgrade MC, must use the post-juggling locations of the raw @@ -40,6 +40,8 @@ options.output_file = 'spruce_fromfilereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_fromfile.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_fromfile.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index e33bfe845b4..ae249a2b82a 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -11,6 +11,7 @@ """Test running Sprucing line on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_example_realtimereco.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -19,7 +20,6 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -32,6 +32,8 @@ options.output_file = 'spruce_example_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py index a4b16217e03..889033bb622 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py @@ -15,6 +15,7 @@ Input from HLT2 is DST as will be the case for simulation. Produces spruce_realtimereco_dstinput.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -23,7 +24,6 @@ input_files = ['hlt2_2or3bodytopo_realtime_dst.dst'] options.input_raw_format = 0.3 options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_realtime_dst.tck.json" options.input_type = 'ROOT' options.evt_max = -1 @@ -36,6 +36,8 @@ options.output_file = 'spruce_realtimereco_dstinput.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_dstinput.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime_dst.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py index eb7e27b1615..c6372bb2010 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py @@ -11,6 +11,7 @@ """Test Sprucing line with `extra_outputs` on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_realtimereco_extraoutputs.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_extraoutputs_sprucing_line @@ -19,7 +20,6 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -32,6 +32,8 @@ options.output_file = 'spruce_realtimereco_extraoutputs.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_extraoutputs.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py index b7a659ce77f..19c0480b332 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py @@ -11,6 +11,7 @@ """Test Sprucing line with `persistreco` on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_realtimereco_persistreco.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_persistreco_sprucing_line @@ -19,7 +20,6 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -32,6 +32,8 @@ options.output_file = 'spruce_realtimereco_persistreco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_persistreco.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py index 1415f674cb5..64e5e6f491a 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py @@ -16,6 +16,7 @@ Run like any other options file: """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import SpruceLine @@ -26,7 +27,6 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -39,6 +39,8 @@ options.output_file = 'spruce_HLT2filter.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_HLT2filter.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def Sprucing_line_1(name='Spruce_filteronTopo2'): line_alg = b_to_dh.make_BdToDsmK_DsmToKpKmPim(process='spruce') diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py index 0c01ac28536..60d766800a6 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py @@ -17,6 +17,7 @@ Run like any other options file: from __future__ import absolute_import, division, print_function from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import PassLine @@ -26,7 +27,6 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files options.input_type = 'MDF' -options.input_manifest_file = 'hlt2_2or3bodytopo_realtime.tck.json' options.evt_max = -1 options.simulation = True @@ -38,6 +38,8 @@ options.output_file = 'spruce_passthrough.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_passthrough.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def pass_through_line(name="PassThrough"): """Return a Sprucing line that performs no selection diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py index e6eef9269a7..c99532700f2 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py @@ -19,6 +19,7 @@ Run like any other options file: from __future__ import absolute_import, division, print_function from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import PassLine @@ -28,7 +29,6 @@ input_files = ['hlt2_2or3bodytopo_realtime_dst.dst'] options.input_raw_format = 0.3 options.input_files = input_files options.input_type = 'ROOT' -options.input_manifest_file = 'hlt2_2or3bodytopo_realtime_dst.tck.json' options.evt_max = -1 options.simulation = True @@ -40,6 +40,8 @@ options.output_file = 'spruce_passthrough_dstinput.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_passthrough_dstinput.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime_dst.tck.json") + def pass_through_line(name="PassThrough"): """Return a Sprucing line that performs no selection diff --git a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py index 96ed793e66d..c2f3dc4d1fa 100644 --- a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py +++ b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_test_streaming.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line, Test_extraoutputs_sprucing_line @@ -24,7 +25,6 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files -options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' # When running from Upgrade MC, must use the post-juggling locations of the raw # event @@ -39,6 +39,8 @@ options.output_file = 'spruce_streaming.{stream}.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_streaming.tck.json" +# load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_streams(): linedict = dict( diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py b/Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py index 9d6fe5272c9..e5fe413ed3d 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py @@ -11,14 +11,19 @@ from Moore import options, run_moore from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction -from Hlt2Conf.lines.charm.d0_to_hh import dzero2kpi_line +from Hlt2Conf.lines.charm.d0_to_hh import ( + dzero2kpi_line, + make_dzeros, + make_selected_particles, +) +from GaudiKernel.SystemOfUnits import MeV, mm, mrad from RecoConf.hlt1_tracking import default_ft_decoding_version -options.output_file = "hlt2_D0_Kpi_100evts_newPacking_newDst.dst" +options.output_file = "hlt2_D0_Kpi_10evts_newPacking.dst" options.output_type = "ROOT" -options.output_manifest_file = "hlt2_D0_Kpi_100evts_newPacking_newDst.tck.json" -options.evt_max = 100 +options.output_manifest_file = "hlt2_D0_Kpi_10evts_newPacking.tck.json" +options.evt_max = 10 default_ft_decoding_version.global_bind(value=6) options.set_input_and_conds_from_testfiledb( 'upgrade-magdown-sim10-up08-27163003-digi') @@ -28,7 +33,27 @@ def make_lines(): return [dzero2kpi_line()] +D0_params = dict( + am_min=1715 * MeV, + am_max=2015 * MeV, + amaxchild_pt_min=0 * MeV, + apt_min=0 * MeV, + amindoca_max=5.0 * mm, + vchi2pdof_max=100, + bpvvdchi2_min=0, + acos_bpvdira_min=10 * mrad, +) + +stable_params = dict( + trchi2_max=3, # not used yet + trghostprob_max=0.4, # not used yet + mipchi2_min=0, # this is not available offline? + pt_min=0.0, + p_min=0.0, +) + public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind(from_file=False): +with reconstruction.bind(from_file=False), make_dzeros.bind( + **D0_params), make_selected_particles.bind(**stable_params): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py index 0dde20d357f..ea18977b7cc 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py +++ b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py @@ -18,6 +18,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_filters_test.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction, upfront_reconstruction ##Make dummy SpruceLine @@ -32,7 +33,6 @@ input_files = ['hlt_filterstest_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files -options.input_manifest_file = "hlt_filterstest_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -45,6 +45,8 @@ options.output_file = 'spruce_filterstest.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_filterstest.tck.json" +load_hlt2_configuration("hlt_filterstest_realtime.tck.json") + ## Make 2 identical lines except for filters def make_line1(name='SpruceTest1'): diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index f402d56755d..ffb1e662061 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -63,23 +63,7 @@ class _ConfigurableEncoder(json.JSONEncoder): return obj -def dump_hlt2_configuration(config, fname): - """Dump the HLT2 configuration in to a JSON TCK file. - - Note: - The `config` argument is currently unused as the configuration - dictionary returned by `Moore.run_moore` does not contain all - configurables. This will change once LHCb#141 has been addressed. - - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): +def load_hlt2_configuration(fname): """Instantiate configurables based on an HLT2 TCK. Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 @@ -102,35 +86,10 @@ def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): }) from Configurables import GitANNSvc - return GitANNSvc(annsvc_name, Overrule={0: cfg}) - - -def dump_sprucing_configuration(config, fname): - """Dump the Sprucing configuration in to a JSON TCK file. - Note we need the `Hlt{1,2}SelectionID`s from the Hlt2 ANNSvc - that we read into "HltANNSvcReading" - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def dump_passthrough_configuration(config, fname): - """Dump the pass-through Sprucing configuration in to a JSON TCK file. - Here we need the `Hlt{1,2}SelectionID`s and `PackedObjectLocations` from the - Hlt2 job ANNSvc that we read into "HltANNSvcReading" - - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") + return GitANNSvc('HltANNSvc', Overrule={0: cfg}) -def load_sprucing_configuration(fname, annsvc_name): +def load_sprucing_configuration(fname): """Instantiate configurables based on a Sprucing TCK. Returns an HltANNSvc loaded with the HltANNSvc configuration of the @@ -142,4 +101,4 @@ def load_sprucing_configuration(fname, annsvc_name): annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. """ - return load_hlt2_configuration(fname, annsvc_name) + return load_hlt2_configuration(fname) -- GitLab From 1a117f251fdb8b61e70a7a9e3c2f3ffcbae3326f Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Mon, 6 Jun 2022 12:27:26 +0200 Subject: [PATCH 004/102] propagate file manifest instead of hijacking the ANNSvc configurable --- Hlt/Hlt1Conf/tests/options/test_decreports.py | 33 ++++--- Hlt/Hlt2Conf/options/hlt2_check_output.py | 7 +- .../streaming/spruce_test_streaming.py | 2 +- .../python/Moore/persistence/__init__.py | 80 ++++++----------- Hlt/Moore/python/Moore/tcks.py | 36 +++++--- .../RecoConf/reco_objects_for_spruce.py | 86 ++++++++----------- 6 files changed, 109 insertions(+), 135 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 3a7238c9be6..081eb753ec0 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -19,12 +19,16 @@ configure the HltANNSvc for the job ran by this script. from __future__ import print_function import argparse -from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp) +from Configurables import ( + ApplicationMgr, + HistogramPersistencySvc, + IODataManager, + LHCbApp, +) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import configured_ann_svc + from PyConf.utilities import read_options # Top-level control flow node @@ -57,18 +61,19 @@ IOHelper("MDF").inputFiles([args.input_mdf]) IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) - # Decode Hlt DecReports -appMgr = ApplicationMgr( +ApplicationMgr( TopAlg=[DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()]) -# Configure TCKANNSvc (as that is what DecoderDB wants...) -appMgr.ExtSvc += [configured_ann_svc(name='TCKANNSvc')] -# Get expected lines from the previous job +# Get expected lines and HltANNSvc configuration from the previous job options = read_options(args.input_options) +lines = options["ExecutionReportsWriter"]["Persist"] +#Hlt1SelectionIDs = options["HltANNSvc"]["Hlt1SelectionID"] +#HltANNSvc().Hlt1SelectionID = Hlt1SelectionIDs +#print(Hlt1SelectionIDs) # Set up counters for recording decisions from MDF -counts_from_mdf = {} # key: 0 for key in Hlt1SelectionIDs} +counts_from_mdf = {key: 0 for key in Hlt1SelectionIDs} counts_from_mdf[MOORE_KEY] = 0 # Extract counters from log file of the previous job counts_from_log = get_counts_from_log(args.input_log) @@ -85,12 +90,12 @@ while TES["/Event"]: break triggered = False - for name in (str(i) for i in decs.decisionNames()): - if name not in counts_from_mdf.keys(): counts_from_mdf[name] = 0 - dr = decs.decReport(name) - if dr and dr.decision(): + for key in counts_from_mdf.keys(): + if key == MOORE_KEY: + continue + counts_from_mdf[key] += int(decs.decReport(key).decision()) + if decs.decReport(key).decision(): triggered = True - counts_from_mdf[name] += 1 if triggered: counts_from_mdf[MOORE_KEY] += 1 diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 6a6ca8d22f6..18f85fa2336 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -19,14 +19,13 @@ Takes command-line arguments: python hlt2_check_output.py """ from __future__ import print_function -import sys +import sys,os import GaudiPython as GP from GaudiConf import IOHelper -from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager) +from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, GitANNSvc) from GaudiConf.reading import do_unpacking -from PyConf.application import configured_ann_svc from GaudiConf.reading import load_manifest @@ -49,7 +48,7 @@ manifest = load_manifest(sys.argv[2]) algs = do_unpacking(manifest, process='Hlt2', output_level=4) appmgr = ApplicationMgr(TopAlg=algs) -appmgr.ExtSvc += [configured_ann_svc()] +appmgr.ExtSvc += [ GitANNSvc( 'HltANNSvc', Repository="{}/.git".format(os.environ['HLTTCKROOT'])) ] input_file = sys.argv[1] input_type = "ROOT" if input_file.find(".dst") != -1 else "RAW" diff --git a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py index c2f3dc4d1fa..c1155ac56b0 100644 --- a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py +++ b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py @@ -39,7 +39,7 @@ options.output_file = 'spruce_streaming.{stream}.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_streaming.tck.json" -# load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") def make_streams(): diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index cf61706136d..bfd1ec4a869 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -21,12 +21,12 @@ from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix -from PyConf.object_types import type_map, classid_map from PyConf.application import register_encoding_dictionary +from GaudiConf.reading import type_map from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc +from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed from .serialisation import serialise_packed_containers from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC @@ -62,10 +62,9 @@ def _referenced_inputs(lines, inputs): #fill the packer inputs dictionary based on object type for dh in line_locs: - type = get_type(dh) - - if type and type in inputs.keys(): - inputs[type] += [dh.location] + typ = get_type(dh) + if typ and typ in inputs.keys(): + inputs[typ] += [dh] return inputs @@ -79,20 +78,12 @@ def _referenced_locations(lines): for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - # Convert DataHandle to str, for configuring the ANN service - all_locs[l.decision_name] = [dh.location for dh in line_locs] - all_types[l.decision_name] = [] - for dh in line_locs: - if get_type(dh): - all_types[l.decision_name] += [get_type(dh)] - else: - all_types[l.decision_name] += [dh.type] - #zipped = zip(all_locs[l.decision_name], all_types[l.decision_name]) + all_locs[l.decision_name] = [dh for dh in line_locs] return all_locs def get_type(dh): - #For this to work, one needs to add new types to object_types.py in Pyconf + #For this to work, one needs to add new types to object_types.py in GaudiConf types = type_map() if dh.type in types.keys(): return types[dh.type] @@ -179,14 +170,15 @@ def persist_line_outputs( for key, val in prdict.items(): name = get_type(val) #find type of object for this DH if name: - inputs[name] += [get_output(val).location] + inputs[name] += [get_output(val)] # add proto particle relations if they exist for p in protoparticle_relations: - if isinstance(p, str): - inputs["PP2MCPRelations"] += [p] - else: - inputs["PP2MCPRelations"] += [p.location] + assert not isinstance(p, str) + inputs["PP2MCPRelations"] += [p] + + locify = lambda i : i.location if hasattr(i,'location') else i + inputs = { t: [ locify(i) for i in dhs] for t,dhs in inputs.items() } #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -232,20 +224,19 @@ def persist_line_outputs( ) ### TODO: reduce the set of encoding keys to the smallest possible one... + locations = set([ i for i in prpacking.packedLocations()]) | \ + set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ + set([ i for i in prpacking.unpackedLocations()]) | \ + set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) + + if clone_mc: + mc_stream = stream + if reco_stream not in stream: mc_stream = prefix(reco_stream, stream) + locations = locations.union(pack_stream_mc_locations(mc_stream)) + encoding_key = int( - register_encoding_dictionary( - "PackedObjectLocations", - sorted( - set([i for i in prpacking.packedLocations()]) - | set([ - unpacked_prefix(i, stream) - for i in prpacking.packedLocations() - ]) - | set([i for i in prpacking.unpackedLocations()]) - | set([ - i for i in itertools.chain( - *_referenced_locations(lines).values()) - ]))), 16) + register_encoding_dictionary("PackedObjectLocations", + sorted(locations)), 16) packer_cf, packer_locations = pack_stream_objects(stream, prpacking, encoding_key) @@ -254,9 +245,6 @@ def persist_line_outputs( packer_mc_locations = [] if clone_mc: - mc_stream = stream - if reco_stream not in stream: - mc_stream = prefix(reco_stream, stream) mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) @@ -274,24 +262,6 @@ def persist_line_outputs( unpacked_mc = unpacked_mc_locations() unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] - # Gather all possible locations which might be referenced... - #registered_locs = list( - # itertools.chain( - # packer_locations, - # [ unpacked_prefix(keys, stream) for keys in prpacking.packedLocations() ], - # prpacking.packedLocations(), - # prpacking.unpackedLocations(), - # unpacked_mc_locations().values(), - # [prefix(l, stream) for l in unpacked_mc_loc], - # itertools.chain(*_referenced_locations(lines).values()), - # )) - - # ...including all prefixed (post-cloning) locations - #registered_locs += [prefix(l, tes_prefix=stream) for l in registered_locs] - - #if log.isEnabledFor(logging.DEBUG): - # log.debug('registered_locs: ' + pformat(registered_locs)) - control_flow_node = CompositeNode( "hlt2_line_output_persistence", combine_logic=NodeLogic.NONLAZY_OR, diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index ffb1e662061..f8b3e080290 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -63,6 +63,12 @@ class _ConfigurableEncoder(json.JSONEncoder): return obj +def load_manifest(fname): + ### TODO: implement me!!! + with open(fname) as f: + manifest = json.load(f) + return manifest + def load_hlt2_configuration(fname): """Instantiate configurables based on an HLT2 TCK. @@ -77,17 +83,25 @@ def load_hlt2_configuration(fname): with open(fname) as f: config = json.load(f) - dicts = config["HltANNSvc/HltANNSvc"] - cfg = json.dumps({ - 'Hlt1SelectionID': dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': dicts["Hlt2SelectionID"], - 'SpruceSelectionID': dicts["SpruceSelectionID"], - 'PackedObjectLocations': dicts["PackedObjectLocations"] - }) - - from Configurables import GitANNSvc - return GitANNSvc('HltANNSvc', Overrule={0: cfg}) - + try: + # see if this is an old-style .tck.json file needed for decoding + # because the encoding key is not present in the data + # + # In that case, we just configure the GitAnnSvc with an overrule + # for a zero key + dicts = config["HltANNSvc/HltANNSvc"] + cfg = json.dumps({ + 'Hlt1SelectionID': dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': dicts["Hlt2SelectionID"], + 'SpruceSelectionID': dicts["SpruceSelectionID"], + 'PackedObjectLocations': dicts["PackedObjectLocations"] + }) + + from Configurables import GitANNSvc + return GitANNSvc('HltANNSvc', Overrule={0: cfg}) + except: + print( "load_hlt_configuration: not an old-style .tck.json file" ) + print( "if not running on an old file with zero encoding key, just remove the call" ) def load_sprucing_configuration(fname): """Instantiate configurables based on a Sprucing TCK. diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 5b2f467b53b..72d35fc2657 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -8,26 +8,28 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### + from GaudiConf import reading -from GaudiConf.PersistRecoConf import persisted_location - -_reco_loc = { - "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), - "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), - "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), - "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), - "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), - "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), - "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), - "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), - "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), - "MuonPIDTracks": ("/Event/HLT2/Rec/Muon/MuonTracks", "Tracks"), - "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs"), - "RecSummary": ("/Event/HLT2/Rec/Summary", "RecSummary") +from Configurables import ApplicationMgr +from PyConf.components import setup_component +from PyConf.location_prefix import unpacked_prefix + +packed_loc = { + "ChargedProtos": "/Event/HLT2/pRec/ProtoP/Charged", + "NeutralProtos": "/Event/HLT2/pRec/ProtoP/Neutrals", + "Tracks": "/Event/HLT2/pRec/Track/Best", + "MuonTracks": "/Event/HLT2/pRec/Track/Muon", + "PVs": "/Event/HLT2/pRec/Vertex/Primary", + "CaloElectrons": "/Event/HLT2/pRec/Calo/Electrons", + "CaloPhotons": "/Event/HLT2/pRec/Calo/Photons", + "CaloMergedPi0s": "/Event/HLT2/pRec/Calo/MergedPi0s", + "CaloSplitPhotons": "/Event/HLT2/pRec/Calo/SplitPhotons", + "MuonPIDs": "/Event/HLT2/pRec/Muon/MuonPID", + "RichPIDs": "/Event/HLT2/pRec/Rich/PIDs", } -def upfront_reconstruction(manifest): +def upfront_reconstruction( ): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -36,60 +38,44 @@ def upfront_reconstruction(manifest): """ - stream = '/Event/HLT2' + locations_to_decode = reading.make_locations( packed_loc, "/Event/HLT2") + decoder = reading.decoder( - configurables=False, output_level=4, stream=stream) + locations=locations_to_decode, + configurables=False, + output_level=4) mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) - inv_map = {v: k for k, v in reading.type_map().items()} - - # make sure that the reco locations are spliced into the provided manifest... - dl = {v[0]: v[1] for v in manifest['PackedLocations']} - dl.update((v[0], inv_map[v[1]]) for v in _reco_loc.values()) - m = {'PackedLocations': [(k, v) for k, v in dl.items()]} - - ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - reading.make_locations(m, stream), - m, - decoder.OutputBuffers, + locations=locations_to_decode, configurables=False, mc=mc_algs, output_level=4) - ### TODO:FIXME take advantage of the fact that the above have datahandles... - # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms - # i.e. `upfront_reconstruction` should be a drop-in replacement for `reconstruction()`, with the same return type return [decoder] + mc_algs + unpackers -def reconstruction(manifest): +def reconstruction( ): """Return a {name: DataHandle} dict that define the reconstruction output.""" - data = {} - unpackers = upfront_reconstruction(manifest) + map = {} + unpackers = upfront_reconstruction( ) - for key, value in _reco_loc.items(): + for key, value in packed_loc.items(): for v in unpackers: - if "OutputName" in v.outputs.keys( - ) and v.OutputName.location == value[0]: - data[key] = v.OutputName + if "OutputName" in v.outputs.keys(): + if v.OutputName.location == unpacked_prefix( + value, "/Event/HLT2"): + map[key] = v.OutputName ### Temporary: as long as we persist v1, we need to insert a converter for the new PVs from PyConf.Algorithms import RecV1ToPVConverter - data["PVs_v1"] = data["PVs"] - data["PVs"] = RecV1ToPVConverter( - InputVertices=data["PVs_v1"]).OutputVertices - ### Temporary: This to be compatible with data where the RecSummary does not exist. - if "RecSummary" not in data.keys(): - from PyConf.Algorithms import FakeRecSummaryMaker - data["RecSummary"] = FakeRecSummaryMaker( - outputs={ - "Output": persisted_location('RecSummary') - }).Output - return data + map["PVs_v1"] = map["PVs"] + map["PVs"] = RecV1ToPVConverter(InputVertices=map["PVs_v1"]).OutputVertices + + return map def make_charged_protoparticles(): -- GitLab From 39c76fe5d685884c55373216faabf148187113b8 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 9 Jun 2022 22:43:40 +0200 Subject: [PATCH 005/102] make sure the packed locations do _not_ enter in the encoding table --- .../python/Moore/persistence/__init__.py | 3 +- .../RecoConf/reco_objects_for_spruce.py | 28 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index bfd1ec4a869..8229678bf62 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -224,8 +224,7 @@ def persist_line_outputs( ) ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ i for i in prpacking.packedLocations()]) | \ - set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ + locations = set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ set([ i for i in prpacking.unpackedLocations()]) | \ set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 72d35fc2657..cc003fb4206 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -14,18 +14,18 @@ from Configurables import ApplicationMgr from PyConf.components import setup_component from PyConf.location_prefix import unpacked_prefix -packed_loc = { - "ChargedProtos": "/Event/HLT2/pRec/ProtoP/Charged", - "NeutralProtos": "/Event/HLT2/pRec/ProtoP/Neutrals", - "Tracks": "/Event/HLT2/pRec/Track/Best", - "MuonTracks": "/Event/HLT2/pRec/Track/Muon", - "PVs": "/Event/HLT2/pRec/Vertex/Primary", - "CaloElectrons": "/Event/HLT2/pRec/Calo/Electrons", - "CaloPhotons": "/Event/HLT2/pRec/Calo/Photons", - "CaloMergedPi0s": "/Event/HLT2/pRec/Calo/MergedPi0s", - "CaloSplitPhotons": "/Event/HLT2/pRec/Calo/SplitPhotons", - "MuonPIDs": "/Event/HLT2/pRec/Muon/MuonPID", - "RichPIDs": "/Event/HLT2/pRec/Rich/PIDs", +reco_loc = { + "ChargedProtos": "/Event/HLT2/Rec/ProtoP/Charged", + "NeutralProtos": "/Event/HLT2/Rec/ProtoP/Neutrals", + "Tracks": "/Event/HLT2/Rec/Track/Best", + "MuonTracks": "/Event/HLT2/Rec/Track/Muon", + "PVs": "/Event/HLT2/Rec/Vertex/Primary", + "CaloElectrons": "/Event/HLT2/Rec/Calo/Electrons", + "CaloPhotons": "/Event/HLT2/Rec/Calo/Photons", + "CaloMergedPi0s": "/Event/HLT2/Rec/Calo/MergedPi0s", + "CaloSplitPhotons": "/Event/HLT2/Rec/Calo/SplitPhotons", + "MuonPIDs": "/Event/HLT2/Rec/Muon/MuonPID", + "RichPIDs": "/Event/HLT2/Rec/Rich/PIDs", } @@ -38,7 +38,7 @@ def upfront_reconstruction( ): """ - locations_to_decode = reading.make_locations( packed_loc, "/Event/HLT2") + locations_to_decode = reading.make_locations( reco_loc, "/Event/HLT2") decoder = reading.decoder( locations=locations_to_decode, @@ -63,7 +63,7 @@ def reconstruction( ): map = {} unpackers = upfront_reconstruction( ) - for key, value in packed_loc.items(): + for key, value in reco_loc.items(): for v in unpackers: if "OutputName" in v.outputs.keys(): if v.OutputName.location == unpacked_prefix( -- GitLab From 91386a4167b8497456088ce8caa4fb545e67aeef Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Mon, 13 Jun 2022 23:47:28 +0200 Subject: [PATCH 006/102] update a few tests --- .../options/qee/spruce_qee_example.py | 2 +- .../sprucing/spruce_all_lines_realtime.py | 44 ++++++++----------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py index 4b2a4a831d9..6ee32a41aea 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py @@ -33,7 +33,7 @@ options.dddb_tag = 'dddb-20201211' options.conddb_tag = 'sim-20201218-vc-mu100' options.output_file = 'qee_zmumu_spruce.dst' options.output_type = 'ROOT' -options.ouptut_manifest_file = "qee_zmumu_spruce.tck.json" +options.output_manifest_file = "qee_zmumu_spruce.tck.json" load_hlt2_configuration('hlt2_qee_zmumu.tck.json') diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index b204ae544d6..0692a6279dd 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -23,13 +23,13 @@ from Moore import options, run_moore from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines import sprucing_lines +from Configurables import GitANNSvc import XRootD.client -from Configurables import HltANNSvc ## Return HltANNSvc when tck is on eos -def tck_from_eos(url): +def manifest_from_eos(url): with XRootD.client.File() as f: status, _ = f.open(url) if not status.ok: @@ -37,33 +37,26 @@ def tck_from_eos(url): status, data = f.read() if not status.ok: raise RuntimeError(f"could not read {url}: {status.message}") - dict = json.loads(data.decode('utf-8')) - ann_config = dict["HltANNSvc/HltANNSvc"] - packed_object_locs = { - str(k): v - for k, v in ann_config["PackedObjectLocations"].items() - } - packed_object_types = { - str(k): v - for k, v in ann_config["PackedObjectTypes"].items() - } - - hlt2_sel_ids = { - str(k): v - for k, v in ann_config["Hlt2SelectionID"].items() - } - - return HltANNSvc( - "HltANNSvcReading", - Hlt2SelectionID=hlt2_sel_ids, - PackedObjectLocations=packed_object_locs, - PackedObjectTypes=packed_object_types, - ) + dct = json.loads(data.decode('utf-8')) + ann_config = dct["HltANNSvc/HltANNSvc"] + + #packed_object_types = { + # str(k): v + # for k, v in ann_config["PackedObjectTypes"].items() + #} + + cfg = json.dumps( { 'Hlt2SelectionID' : ann_config['Hlt2SelectionID'], + 'PackedObjectLocations' : ann_config['PackedObjectLocations'] } ) + + annsvc = GitANNSvc( "HltANNSvc", KeyMapping = { 0 : cfg } ) + + return json.dumps( { 'PackedLocations' : [ (loc,typ) for loc,typ in ann_config["PackedObjectTypes"].items() ] } ) + ## Configure `HltANNSvc` url = 'root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.tck.json' -tck_from_eos(url) +manifest = manifest_from_eos(url) ##Run over HLT1 filtered Min bias sample that has been processed by TOPO{2, 3} HLT2 lines. ##To produce this see `Hlt/Hlt2Conf/options/Sprucing/hlt2_2or3bodytopo_realtime.py` @@ -72,6 +65,7 @@ input_files = [ ] options.input_raw_format = 0.3 +#FIXME: options.input_manifest_file = manifest options.input_files = input_files options.input_type = 'MDF' -- GitLab From 1bf16779b9571086a7ff1e53eb2d7f8067c48494 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 16 Jun 2022 23:39:44 +0200 Subject: [PATCH 007/102] Fix some tests + some cleanup --- Hlt/Hlt1Conf/tests/options/make_allen_tck.py | 9 +- Hlt/Hlt1Conf/tests/options/test_decreports.py | 35 +++--- Hlt/Hlt2Conf/options/hlt2_check_output.py | 10 +- .../sprucing/spruce_all_lines_realtime.py | 20 ++-- Hlt/Moore/python/Moore/config.py | 24 +++-- .../python/Moore/persistence/__init__.py | 16 ++- Hlt/Moore/python/Moore/tcks.py | 35 +++--- Hlt/RecoConf/python/RecoConf/hlt2_tracking.py | 102 +++--------------- .../RecoConf/reco_objects_for_spruce.py | 71 ++++++------ 9 files changed, 131 insertions(+), 191 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py index 808bd2d6419..86bdcf7d1c4 100644 --- a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py +++ b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py @@ -9,14 +9,19 @@ from __future__ import print_function # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### +from PyConf.application import register_encoding_dictionary from Moore.config import get_allen_hlt1_decision_ids -from AllenConf.persistency import register_decision_ids # raw_event_format must be configured to successfully configure Allen # Configure with the same input as the default for Allen tests. from hlt1_filtered_mdf_input import options from PyConf.application import configure_input config = configure_input(options) -key = register_decision_ids(get_allen_hlt1_decision_ids()) +ids = get_allen_hlt1_decision_ids() +key = int( + register_encoding_dictionary( + 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k + for k, v in ids.items()}}), + 16) # TODO unsigned? Stick to hex string? print(key) if key: print('PASSED') diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 081eb753ec0..2c7a8624ec2 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -18,13 +18,10 @@ configure the HltANNSvc for the job ran by this script. """ from __future__ import print_function import argparse +import os -from Configurables import ( - ApplicationMgr, - HistogramPersistencySvc, - IODataManager, - LHCbApp, -) +from Configurables import (ApplicationMgr, HistogramPersistencySvc, + IODataManager, LHCbApp, GitANNSvc) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython @@ -61,19 +58,21 @@ IOHelper("MDF").inputFiles([args.input_mdf]) IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) +# Configure TCKANNSvc (as that is what DecoderDB wants...) +ann = GitANNSvc( + "TCKANNSvc", Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) +print(ann) + # Decode Hlt DecReports -ApplicationMgr( +appMgr = ApplicationMgr( TopAlg=[DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()]) +appMgr.ExtSvc += [ann] -# Get expected lines and HltANNSvc configuration from the previous job +# Get expected lines from the previous job options = read_options(args.input_options) -lines = options["ExecutionReportsWriter"]["Persist"] -#Hlt1SelectionIDs = options["HltANNSvc"]["Hlt1SelectionID"] -#HltANNSvc().Hlt1SelectionID = Hlt1SelectionIDs -#print(Hlt1SelectionIDs) # Set up counters for recording decisions from MDF -counts_from_mdf = {key: 0 for key in Hlt1SelectionIDs} +counts_from_mdf = {} # key: 0 for key in Hlt1SelectionIDs} counts_from_mdf[MOORE_KEY] = 0 # Extract counters from log file of the previous job counts_from_log = get_counts_from_log(args.input_log) @@ -90,12 +89,12 @@ while TES["/Event"]: break triggered = False - for key in counts_from_mdf.keys(): - if key == MOORE_KEY: - continue - counts_from_mdf[key] += int(decs.decReport(key).decision()) - if decs.decReport(key).decision(): + for name in (str(i) for i in decs.decisionNames()): + if name not in counts_from_mdf.keys(): counts_from_mdf[name] = 0 + dr = decs.decReport(name) + if dr and dr.decision(): triggered = True + counts_from_mdf[name] += 1 if triggered: counts_from_mdf[MOORE_KEY] += 1 diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 18f85fa2336..7bb631fb59c 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -19,11 +19,12 @@ Takes command-line arguments: python hlt2_check_output.py """ from __future__ import print_function -import sys,os +import sys, os import GaudiPython as GP from GaudiConf import IOHelper -from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, GitANNSvc) +from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, + GitANNSvc) from GaudiConf.reading import do_unpacking @@ -48,7 +49,10 @@ manifest = load_manifest(sys.argv[2]) algs = do_unpacking(manifest, process='Hlt2', output_level=4) appmgr = ApplicationMgr(TopAlg=algs) -appmgr.ExtSvc += [ GitANNSvc( 'HltANNSvc', Repository="{}/.git".format(os.environ['HLTTCKROOT'])) ] +appmgr.ExtSvc += [ + GitANNSvc( + 'HltANNSvc', Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) +] input_file = sys.argv[1] input_type = "ROOT" if input_file.find(".dst") != -1 else "RAW" diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 0692a6279dd..7c0638ea870 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -45,13 +45,19 @@ def manifest_from_eos(url): # for k, v in ann_config["PackedObjectTypes"].items() #} - cfg = json.dumps( { 'Hlt2SelectionID' : ann_config['Hlt2SelectionID'], - 'PackedObjectLocations' : ann_config['PackedObjectLocations'] } ) - - annsvc = GitANNSvc( "HltANNSvc", KeyMapping = { 0 : cfg } ) - - return json.dumps( { 'PackedLocations' : [ (loc,typ) for loc,typ in ann_config["PackedObjectTypes"].items() ] } ) - + cfg = json.dumps({ + 'Hlt2SelectionID': + ann_config['Hlt2SelectionID'], + 'PackedObjectLocations': + ann_config['PackedObjectLocations'] + }) + + annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) + + return json.dumps({ + 'PackedLocations': + [(loc, typ) for loc, typ in ann_config["PackedObjectTypes"].items()] + }) ## Configure `HltANNSvc` diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index a5e68dc5d54..0f19b1a28e1 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -230,17 +230,19 @@ def report_writers_node(streams, else: ##spruce and passthrough jobs will write a Spruce report major = "SpruceSelectionID" + key = int( + register_encoding_dictionary( + major, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major, - TCK=int( - register_encoding_dictionary( - major, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? + TCK=key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( SourceID='Spruce', InputHltDecReportsLocation=erw.DecReportsLocation, + EncodingKey=key, ) algs.extend([erw, drw]) @@ -471,7 +473,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): else: offset = 1 ann_config[key] = _build_decision_ids([l.decision_name for l in lines], offset) - # register the decision_ids and get their oids back... setup_ann_service(**ann_config) + # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, @@ -682,8 +684,16 @@ def allen_control_flow(options, write_detector_raw_banks=True): non_event_data_node = setup_allen_non_event_data_service() + ids = get_allen_hlt1_decision_ids() + encoding_key = int( + register_encoding_dictionary( + 'Hlt1SelectionID', + {'Hlt1SelectionID': {v: k + for k, v in ids.items()}}), + 16) # TODO unsigned? Stick to hex string? + # TODO: remove when full configuration of Allen from TCK is implemented - if options.tck: make_dec_reporter.global_bind(TCK=options.tck) + make_dec_reporter.global_bind(TCK=encoding_key) # Write DecReports raw banks allen_cf, allen_barriers = allen_gaudi_node_barriers() @@ -695,8 +705,6 @@ def allen_control_flow(options, write_detector_raw_banks=True): algs.extend([srw]) new_hlt_banks['HltSelReports'] = srw.OutputRawReports - decision_ids = get_allen_hlt1_decision_ids() - # register the decision_ids... and get the oid of their mapping # hlt1_decision_ids=decision_ids, hlt2_decision_ids={}, spruce_decision_ids={}) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 8229678bf62..b2b1028732d 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -70,14 +70,12 @@ def _referenced_inputs(lines, inputs): def _referenced_locations(lines): all_locs = {} - all_types = {} for l in lines: # Include the locations of the line outputs themselves line_locs = set() # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - all_locs[l.decision_name] = [dh for dh in line_locs] return all_locs @@ -167,18 +165,17 @@ def persist_line_outputs( prdict = persistreco_line_outputs() prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - for key, val in prdict.items(): + for val in prdict.values(): name = get_type(val) #find type of object for this DH - if name: - inputs[name] += [get_output(val)] + if name: inputs[name] += [get_output(val)] # add proto particle relations if they exist for p in protoparticle_relations: assert not isinstance(p, str) inputs["PP2MCPRelations"] += [p] - locify = lambda i : i.location if hasattr(i,'location') else i - inputs = { t: [ locify(i) for i in dhs] for t,dhs in inputs.items() } + locify = lambda i: i.location if hasattr(i, 'location') else i + inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -258,8 +255,9 @@ def persist_line_outputs( log.debug('output_raw_data: %s', pformat(output_raw_data)) cf.append(serialisation_cf) - unpacked_mc = unpacked_mc_locations() - unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] + unpacked_mc_loc = [ + prefix(l, reco_stream) for l in unpacked_mc_locations().values() + ] control_flow_node = CompositeNode( "hlt2_line_output_persistence", diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index f8b3e080290..0244509d6c7 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -67,7 +67,8 @@ def load_manifest(fname): ### TODO: implement me!!! with open(fname) as f: manifest = json.load(f) - return manifest + return manifest + def load_hlt2_configuration(fname): """Instantiate configurables based on an HLT2 TCK. @@ -91,28 +92,20 @@ def load_hlt2_configuration(fname): # for a zero key dicts = config["HltANNSvc/HltANNSvc"] cfg = json.dumps({ - 'Hlt1SelectionID': dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': dicts["Hlt2SelectionID"], - 'SpruceSelectionID': dicts["SpruceSelectionID"], - 'PackedObjectLocations': dicts["PackedObjectLocations"] + 'Hlt1SelectionID': + dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': + dicts["Hlt2SelectionID"], + 'SpruceSelectionID': + dicts["SpruceSelectionID"], + 'PackedObjectLocations': + dicts["PackedObjectLocations"] }) from Configurables import GitANNSvc return GitANNSvc('HltANNSvc', Overrule={0: cfg}) except: - print( "load_hlt_configuration: not an old-style .tck.json file" ) - print( "if not running on an old file with zero encoding key, just remove the call" ) - -def load_sprucing_configuration(fname): - """Instantiate configurables based on a Sprucing TCK. - - Returns an HltANNSvc loaded with the HltANNSvc configuration of the - Sprucing application. - - Args: - fname -- Filename of the JSON TCK file produced by - ``dump_sprucing_configuration``. - annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. - """ - - return load_hlt2_configuration(fname) + print("load_hlt_configuration: not an old-style .tck.json file") + print( + "if not running on an old file with zero encoding key, just remove the call" + ) diff --git a/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py index c0ea2af7707..b7544b66c83 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py @@ -14,7 +14,6 @@ from PyConf import configurable from functools import partial from PyConf.application import (make_data_with_FetchDataFromFile) -from RecoConf.core_algorithms import make_unique_id_generator from RecoConf.hlt1_tracking import ( make_VPClus_hits, make_PrStoreUTHit_hits, make_PrStorePrUTHits_hits, make_PrStoreSciFiHits_hits, make_VeloClusterTrackingSIMD_hits, @@ -41,6 +40,8 @@ from PyConf.Tools import (PrAddUTHitsTool, PrIgnoreUTHitsTool, UpgradeGhostId, from RecoConf.data_from_file import boole_links_digits_mcparticles, mc_unpackers +from RecoConf.core_algorithms import make_unique_id_generator + @configurable def get_global_ut_hits_tool(ut_hits_tool=PrAddUTHitsTool, @@ -652,7 +653,6 @@ def make_light_reco_best_tracks( def make_pr_kf_light_reco_best_tracks(tracks, fast_reco, get_ghost_tool=get_UpgradeGhostId_tool, - max_chi2=2.8, fit_forward_first=True): """ Preselect forward,match, and downstream tracks @@ -693,14 +693,15 @@ def make_pr_kf_light_reco_best_tracks(tracks, first_ut_hits = ut_hits first_ft_hits = ft_hits + max_chi2 = 2.8 + kf_template = partial( PrKalmanFilter, MaxChi2=max_chi2, MaxChi2PreOutlierRemoval=20, HitsVP=vp_hits, ReferenceExtrapolator=TrackMasterExtrapolator( - MaterialLocator=get_global_materiallocator()), - InputUniqueIDGenerator=make_unique_id_generator()) + MaterialLocator=get_global_materiallocator())) tbtc_template = partial( TrackBestTrackCreator, @@ -714,7 +715,7 @@ def make_pr_kf_light_reco_best_tracks(tracks, name="PrKalmanFilter" + name_1, Input=first, HitsUT=first_ut_hits, - HitsFT=first_ft_hits).OutputTracks + HitsFT=first_ft_hits).Output best_1 = tbtc_template( name="TBTC_" + name_1, @@ -730,7 +731,7 @@ def make_pr_kf_light_reco_best_tracks(tracks, name="PrKalmanFilter" + name_2, Input=declonned_2, HitsUT=second_ut_hits, - HitsFT=second_ft_hits).OutputTracks + HitsFT=second_ft_hits).Output best_2 = tbtc_template( name="TBTC" + name_2, TracksInContainers=[fitted_2]).TracksOutContainer @@ -750,8 +751,7 @@ def make_pr_kf_light_reco_best_tracks(tracks, HitsUT=tracks['UTHitsRes'] if fast_reco else ut_hits, HitsFT=ft_hits, ReferenceExtrapolator=TrackMasterExtrapolator( - MaterialLocator=get_global_materiallocator()), - InputUniqueIDGenerator=make_unique_id_generator()).OutputTracks + MaterialLocator=get_global_materiallocator())).Output best_down = tbtc_template( name="TBTC_down", TracksInContainers=[fitted_down]).TracksOutContainer @@ -772,10 +772,9 @@ def make_pr_kf_light_reco_best_tracks_without_UT( tracks, fast_reco, get_ghost_tool=get_UpgradeGhostId_tool_no_UT, - max_chi2=2.8, fit_forward_first=True): """ - Preselect forward, match, and downstream tracks + Preselect forward,match, and downstream tracks Fit forward tracks -> TrackBestTrackCreator (TBTC) for ghost rejection Clone kill match Tracks with respect to forward -> Fit -> TBTC for ghost rejection Merge match and forward -> BestLong @@ -805,14 +804,16 @@ def make_pr_kf_light_reco_best_tracks_without_UT( second_ft_hits = tracks['FTHitsRes'] if fast_reco else ft_hits first_ft_hits = ft_hits + ## not sure we should hardcode this here... + max_chi2 = 2.8 + kf_template = partial( PrKalmanFilter, MaxChi2=max_chi2, MaxChi2PreOutlierRemoval=20, HitsVP=vp_hits, ReferenceExtrapolator=TrackMasterExtrapolator( - MaterialLocator=get_global_materiallocator()), - InputUniqueIDGenerator=make_unique_id_generator()) + MaterialLocator=get_global_materiallocator())) tbtc_template = partial( TrackBestTrackCreator, @@ -824,7 +825,7 @@ def make_pr_kf_light_reco_best_tracks_without_UT( fitted_1 = kf_template( name="PrKalmanFilter" + name_1, Input=first, - HitsFT=first_ft_hits).OutputTracks + HitsFT=first_ft_hits).Output best_1 = tbtc_template( name="TBTC_" + name_1, @@ -839,7 +840,7 @@ def make_pr_kf_light_reco_best_tracks_without_UT( fitted_2 = kf_template( name="PrKalmanFilter" + name_2, Input=declonned_2, - HitsFT=second_ft_hits).OutputTracks + HitsFT=second_ft_hits).Output best_2 = tbtc_template( name="TBTC" + name_2, TracksInContainers=[fitted_2]).TracksOutContainer @@ -961,79 +962,6 @@ def make_hlt2_tracks_without_UT(light_reco=True, return track_dict -@configurable -def make_hlt2_tracks_ion(light_reco=False, - fast_reco=False, - post_fit_selection=None, - use_pr_kf=False): - """Function to get all types of tracks reconstructed in HLT2 - Sequence optimized for PbPb data taking. The function filters Best tracks acording to the cut 'post_fit_selection' - Returns: - A dict mapping all types of velo, upstream, HLT1 forward fitted, HLT2 forward, SciFi seeding, downstream, matched long and best tracks to ``'Velo'``, ``'Upstream'``, ``'ForwardFastFitted'``, ``'Forward'``, ``'Seed'``, ``'Downstream'``, ``'Match'`` and ``'Best'`` respectively. - """ - - track_version = "v1" - - track_dict = make_hlt2_tracks( - light_reco=light_reco, fast_reco=fast_reco, use_pr_kf=use_pr_kf) - - # Apply selection to HLT2 Tracks ## ion - if post_fit_selection is not None: - # The selector - selector = LoKiTrackSelector(Code=post_fit_selection) - for trType in track_dict.keys(): - if trType in ["UTHitsRes", "FTHitsRes"]: continue - if "Best" not in trType: continue - for version in track_dict[trType].keys(): - container = track_dict[trType][track_version] - - #Apply the filter - splitter = TrackContainerSplitter( - name="TrackContainerSplitter" + trType + version, - TracksInContainer=container, - Selector=selector) - #replace it - track_dict[trType][track_version] = splitter.PassedContainer - - return track_dict - - -@configurable -def make_hlt2_tracks_ion_without_UT(light_reco=True, - fast_reco=True, - post_fit_selection=None, - use_pr_kf=True): - """Function to get all types of tracks reconstructed in HLT2 without the UT - Sequence optimized for PbPb data taking - - Returns: - A dict mapping all types of velo, HLT2 forward, SciFi seeding, matched long and best tracks to ``'Velo'``, ``'Forward'``, ``'Seed'``, ``'Match'`` and ``'Best'`` respectively. - """ - - track_version = "v1" - - track_dict = make_hlt2_tracks_without_UT( - light_reco=light_reco, fast_reco=fast_reco, use_pr_kf=use_pr_kf) - - # Apply selection to HLT2 Tracks ## ion - if post_fit_selection is not None: - # The selector - selector = LoKiTrackSelector(Code=post_fit_selection) - for trType in track_dict.keys(): - if trType in ["UTHitsRes", "FTHitsRes"]: continue - if "Best" not in trType: continue - for version in track_dict[trType].keys(): - container = track_dict[trType][track_version] - #Apply the filter - splitter = TrackContainerSplitter( - name="TrackContainerSplitter" + trType + version, - TracksInContainer=container, - Selector=selector) - #replace it - track_dict[trType][track_version] = splitter.PassedContainer - return track_dict - - def make_ReduceVeloTracks_fromLong(input_tracks, velotracks): """ Function to remove Velo tracks used by PrMatchNN or PrForwardTracking algorithm and diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index cc003fb4206..b9473597c53 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -8,28 +8,24 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### - from GaudiConf import reading -from Configurables import ApplicationMgr -from PyConf.components import setup_component -from PyConf.location_prefix import unpacked_prefix - -reco_loc = { - "ChargedProtos": "/Event/HLT2/Rec/ProtoP/Charged", - "NeutralProtos": "/Event/HLT2/Rec/ProtoP/Neutrals", - "Tracks": "/Event/HLT2/Rec/Track/Best", - "MuonTracks": "/Event/HLT2/Rec/Track/Muon", - "PVs": "/Event/HLT2/Rec/Vertex/Primary", - "CaloElectrons": "/Event/HLT2/Rec/Calo/Electrons", - "CaloPhotons": "/Event/HLT2/Rec/Calo/Photons", - "CaloMergedPi0s": "/Event/HLT2/Rec/Calo/MergedPi0s", - "CaloSplitPhotons": "/Event/HLT2/Rec/Calo/SplitPhotons", - "MuonPIDs": "/Event/HLT2/Rec/Muon/MuonPID", - "RichPIDs": "/Event/HLT2/Rec/Rich/PIDs", + +_reco_loc = { + "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), + "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), + "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), + "MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), + "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), + "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), + "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), + "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), + "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), + "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), + "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs") } -def upfront_reconstruction( ): +def upfront_reconstruction(): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -38,18 +34,23 @@ def upfront_reconstruction( ): """ - locations_to_decode = reading.make_locations( reco_loc, "/Event/HLT2") - + stream = '/Event/HLT2' decoder = reading.decoder( - locations=locations_to_decode, - configurables=False, - output_level=4) + configurables=False, output_level=4, stream=stream) mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) + inv_map = {v: k for k, v in reading.type_map().items()} + reco_manifest = { + 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] + } + + ## TODO: only pass reco_manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - locations=locations_to_decode, + reading.make_locations(reco_manifest, stream), + reco_manifest, + decoder.OutputBuffers, configurables=False, mc=mc_algs, output_level=4) @@ -57,25 +58,23 @@ def upfront_reconstruction( ): return [decoder] + mc_algs + unpackers -def reconstruction( ): +def reconstruction(): """Return a {name: DataHandle} dict that define the reconstruction output.""" - map = {} - unpackers = upfront_reconstruction( ) + m = {} + unpackers = upfront_reconstruction() - for key, value in reco_loc.items(): + for key, value in _reco_loc.items(): for v in unpackers: - if "OutputName" in v.outputs.keys(): - if v.OutputName.location == unpacked_prefix( - value, "/Event/HLT2"): - map[key] = v.OutputName + if "OutputName" in v.outputs.keys( + ) and v.OutputName.location == value[0]: + m[key] = v.OutputName ### Temporary: as long as we persist v1, we need to insert a converter for the new PVs from PyConf.Algorithms import RecV1ToPVConverter - map["PVs_v1"] = map["PVs"] - map["PVs"] = RecV1ToPVConverter(InputVertices=map["PVs_v1"]).OutputVertices - - return map + m["PVs_v1"] = m["PVs"] + m["PVs"] = RecV1ToPVConverter(InputVertices=m["PVs_v1"]).OutputVertices + return m def make_charged_protoparticles(): -- GitLab From 0bbf8e3fec50ae390126e792ce5cd884a325ed31 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Mon, 20 Jun 2022 23:27:38 +0200 Subject: [PATCH 008/102] unify git repo location determination, add version to json --- Hlt/Hlt1Conf/tests/options/make_allen_tck.py | 4 ++-- Hlt/Hlt1Conf/tests/options/test_decreports.py | 5 ++--- Hlt/Hlt2Conf/options/hlt2_check_output.py | 6 ++---- .../options/sprucing/spruce_all_lines_realtime.py | 2 +- Hlt/Moore/python/Moore/config.py | 10 +++++----- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py index 86bdcf7d1c4..d3f71d6967d 100644 --- a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py +++ b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py @@ -20,8 +20,8 @@ config = configure_input(options) ids = get_allen_hlt1_decision_ids() key = int( register_encoding_dictionary( - 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k - for k, v in ids.items()}}), + 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k for k, v in ids.items()} + 'version':'0' }), 16) # TODO unsigned? Stick to hex string? print(key) if key: print('PASSED') diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 2c7a8624ec2..624fb092ad4 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -25,7 +25,7 @@ from Configurables import (ApplicationMgr, HistogramPersistencySvc, from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython - +from PyConf.application import get_metainfo_repos from PyConf.utilities import read_options # Top-level control flow node @@ -59,8 +59,7 @@ IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) # Configure TCKANNSvc (as that is what DecoderDB wants...) -ann = GitANNSvc( - "TCKANNSvc", Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) +ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) print(ann) # Decode Hlt DecReports diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 7bb631fb59c..0794a1bac1a 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -27,6 +27,7 @@ from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, GitANNSvc) from GaudiConf.reading import do_unpacking +from PyConf.application import get_metainfo_repos from GaudiConf.reading import load_manifest @@ -49,10 +50,7 @@ manifest = load_manifest(sys.argv[2]) algs = do_unpacking(manifest, process='Hlt2', output_level=4) appmgr = ApplicationMgr(TopAlg=algs) -appmgr.ExtSvc += [ - GitANNSvc( - 'HltANNSvc', Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) -] +appmgr.ExtSvc += [GitANNSvc('HltANNSvc', Repositories=get_metainfo_repos())] input_file = sys.argv[1] input_type = "ROOT" if input_file.find(".dst") != -1 else "RAW" diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 7c0638ea870..e61263bca4e 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -52,7 +52,7 @@ def manifest_from_eos(url): ann_config['PackedObjectLocations'] }) - annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) + # annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) return json.dumps({ 'PackedLocations': diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 0f19b1a28e1..3807635feb4 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -686,11 +686,11 @@ def allen_control_flow(options, write_detector_raw_banks=True): ids = get_allen_hlt1_decision_ids() encoding_key = int( - register_encoding_dictionary( - 'Hlt1SelectionID', - {'Hlt1SelectionID': {v: k - for k, v in ids.items()}}), - 16) # TODO unsigned? Stick to hex string? + register_encoding_dictionary('Hlt1SelectionID', { + 'version': '0', + 'Hlt1SelectionID': {v: k + for k, v in ids.items()} + }), 16) # TODO unsigned? Stick to hex string? # TODO: remove when full configuration of Allen from TCK is implemented make_dec_reporter.global_bind(TCK=encoding_key) -- GitLab From 74a36112e4ec23ead5b005b2297a64749964457c Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 11:34:46 +0200 Subject: [PATCH 009/102] use AllenConf.persistency.build_decision_ids --- Hlt/Moore/python/Moore/config.py | 63 ++++++++++++-------------------- 1 file changed, 23 insertions(+), 40 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 3807635feb4..a6ef3eebf2b 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -35,7 +35,7 @@ from PyConf.application import ( ) from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError -from PyConf.application import all_nodes_and_algs +from AllenConf.persistency import build_decision_ids #: Regular expression (compiled) defining the valid selection line names # Meaning: line names should start with either of Hlt1, Hlt2, Spruce, Pass @@ -67,7 +67,6 @@ from .streams_hlt2 import (DETECTOR_RAW_BANK_TYPES, HLT1_REPORT_RAW_BANK_TYPES, HLT2_REPORT_RAW_BANK_TYPES, get_default_routing_bits) - def _unique(x): """Return a list of the unique elements in x while preserving order.""" return list(dict.fromkeys(x).keys()) @@ -115,22 +114,6 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name -def _build_decision_ids(decision_names, offset=1): - """Return a dict of decision names to integer IDs. - - Decision report IDs must not be zero. This method generates IDs starting - from offset. - - Args: - decision_names (list of str) - offset (int): needed so that there are no identical ints in the int->str relations - of HltRawBankDecoderBase - - Returns: - decision_ids (dict of str to int): Mapping from decision name to ID. - """ - return {name: idx for idx, name in enumerate(decision_names, offset)} - @configurable def report_writers_node(streams, @@ -181,19 +164,24 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - if process == "hlt1" or process == "hlt2": - major_name = "{}SelectionID".format(process.capitalize()) - key = int( - register_encoding_dictionary( + source_id = { "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce":"Spruce","passthrough":"Spruce" }[process] + major_name = { "hlt1" : "Hlt1SelectionID", + "hlt2" : "Hlt2SelectionID", + "spruce" : "SpruceSelectionID", + "passthrough" : "SpruceSelectionID"}[process] + key = int( register_encoding_dictionary( major_name, ["{}Decision".format(i.name) for i in lines]), 16) # TODO unsigned? Stick to hex string? + + + if process == "hlt1" or process == "hlt2": erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, TCK=key, ) drw = HltDecReportsWriter( - SourceID=process.capitalize(), + SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, EncodingKey=key, ) @@ -201,22 +189,18 @@ def report_writers_node(streams, new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - encoding_key = int( - register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - srm = make_selreports(physics_lines, erw, encoding_key) + srm = make_selreports(physics_lines, erw, key) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) barrier_algorithms.append(srm) srw = HltSelReportsWriter( - SourceID=process.capitalize(), + SourceID=source_id, DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=encoding_key) + EncodingKey=key) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -229,18 +213,13 @@ def report_writers_node(streams, extra_locations_to_persist.extend(line_output_locations) else: ##spruce and passthrough jobs will write a Spruce report - major = "SpruceSelectionID" - key = int( - register_encoding_dictionary( - major, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], - ANNSvcKey=major, + ANNSvcKey=major_name, TCK=key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( - SourceID='Spruce', + SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, EncodingKey=key, ) @@ -471,7 +450,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): if process == "hlt2": offset = 1000 elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 - ann_config[key] = _build_decision_ids([l.decision_name for l in lines], + ann_config[key] = build_decision_ids([l.decision_name for l in lines], offset) # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) @@ -671,8 +650,13 @@ def get_allen_hlt1_decision_ids(): """ from RecoConf.hlt1_allen import get_allen_line_names +<<<<<<< HEAD from AllenConf.persistency import build_decision_ids return build_decision_ids(get_allen_line_names()) +======= + return build_decision_ids(get_allen_line_names()) + +>>>>>>> d8806c829 (use AllenConf.persistency.build_decision_ids) def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, @@ -688,8 +672,7 @@ def allen_control_flow(options, write_detector_raw_banks=True): encoding_key = int( register_encoding_dictionary('Hlt1SelectionID', { 'version': '0', - 'Hlt1SelectionID': {v: k - for k, v in ids.items()} + 'Hlt1SelectionID': {v: k for k, v in ids.items()} }), 16) # TODO unsigned? Stick to hex string? # TODO: remove when full configuration of Allen from TCK is implemented -- GitLab From ce1651741cb3dccfb8ef5f1c5b0543b926745c40 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 15:33:42 +0200 Subject: [PATCH 010/102] enforce DecisionID vs SelectionID distinction --- Hlt/Hlt1Conf/tests/options/make_allen_tck.py | 9 +--- Hlt/Moore/python/Moore/config.py | 49 +++++++++++--------- Hlt/Moore/python/Moore/selreports.py | 13 ++++-- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py index d3f71d6967d..808bd2d6419 100644 --- a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py +++ b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py @@ -9,19 +9,14 @@ from __future__ import print_function # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -from PyConf.application import register_encoding_dictionary from Moore.config import get_allen_hlt1_decision_ids +from AllenConf.persistency import register_decision_ids # raw_event_format must be configured to successfully configure Allen # Configure with the same input as the default for Allen tests. from hlt1_filtered_mdf_input import options from PyConf.application import configure_input config = configure_input(options) -ids = get_allen_hlt1_decision_ids() -key = int( - register_encoding_dictionary( - 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k for k, v in ids.items()} - 'version':'0' }), - 16) # TODO unsigned? Stick to hex string? +key = register_decision_ids(get_allen_hlt1_decision_ids()) print(key) if key: print('PASSED') diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index a6ef3eebf2b..573ec315a34 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -67,6 +67,7 @@ from .streams_hlt2 import (DETECTOR_RAW_BANK_TYPES, HLT1_REPORT_RAW_BANK_TYPES, HLT2_REPORT_RAW_BANK_TYPES, get_default_routing_bits) + def _unique(x): """Return a list of the unique elements in x while preserving order.""" return list(dict.fromkeys(x).keys()) @@ -114,7 +115,6 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name - @configurable def report_writers_node(streams, data_type, @@ -164,32 +164,39 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - source_id = { "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce":"Spruce","passthrough":"Spruce" }[process] - major_name = { "hlt1" : "Hlt1SelectionID", - "hlt2" : "Hlt2SelectionID", - "spruce" : "SpruceSelectionID", - "passthrough" : "SpruceSelectionID"}[process] - key = int( register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - + source_id = { + "hlt1": "Hlt1", + "hlt2": "Hlt2", + "spruce": "Spruce", + "passthrough": "Spruce" + }[process] + major_name = { + "hlt1": "Hlt1DecisionID", + "hlt2": "Hlt2DecisionID", + "spruce": "SpruceDecisionID", + "passthrough": "SpruceDecisionID" + }[process] + dec_key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? if process == "hlt1" or process == "hlt2": erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=key, + TCK=dec_key, ) drw = HltDecReportsWriter( SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=key, + EncodingKey=dec_key, ) algs.extend([erw, drw]) new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - srm = make_selreports(physics_lines, erw, key) + srm = make_selreports(process, physics_lines, erw) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be @@ -200,7 +207,7 @@ def report_writers_node(streams, DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=key) + EncodingKey=srm.properties['EncodingKey']) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -216,12 +223,12 @@ def report_writers_node(streams, erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=key # TODO unsigned? Stick to hex string? + TCK=dec_key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=key, + EncodingKey=dec_key, ) algs.extend([erw, drw]) @@ -451,7 +458,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 ann_config[key] = build_decision_ids([l.decision_name for l in lines], - offset) + offset) # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( @@ -662,18 +669,14 @@ def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) from Allen.config import setup_allen_non_event_data_service - from AllenConf.persistency import make_dec_reporter + from AllenConf.persistency import make_dec_reporter, register_decision_ids options.finalize() non_event_data_node = setup_allen_non_event_data_service() ids = get_allen_hlt1_decision_ids() - encoding_key = int( - register_encoding_dictionary('Hlt1SelectionID', { - 'version': '0', - 'Hlt1SelectionID': {v: k for k, v in ids.items()} - }), 16) # TODO unsigned? Stick to hex string? + encoding_key = register_decision_ids(ids) # TODO: remove when full configuration of Allen from TCK is implemented make_dec_reporter.global_bind(TCK=encoding_key) diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 6bc65f3f7f5..642fe7b6af6 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,6 +38,7 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) +from PyConf.application import register_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -208,12 +209,11 @@ def convert_output(alg): alg.type)) -def make_selreports(lines, decreports, encoding_key, **kwargs): +def make_selreports(process, lines, decreports, **kwargs): """Return a SelReportsMaker instance configured for the given lines. Args: - lines (list of DecisionLine): The lines to create SelReport objects - for. + lines: The list of lines for which to create SelReport objects decreports: DecReports data used as input to the SelReports maker. kwargs: Passed to the SelReportsMaker. """ @@ -226,6 +226,11 @@ def make_selreports(lines, decreports, encoding_key, **kwargs): else: # No lines we can handle, so do nothing names, outputs, types = [], [], [] + + key = int( + register_encoding_dictionary( + "{}SelectionID".format(process.capitalize()), names), 16) + # Each line output should be unique; we expect no two lines to do exactly # the same work assert len(outputs) == len( @@ -236,5 +241,5 @@ def make_selreports(lines, decreports, encoding_key, **kwargs): SelectionNames=names, CandidateTypes=types, Inputs=outputs, - EncodingKey=encoding_key, + EncodingKey=key, **kwargs) -- GitLab From 77443ac32019990430c98eac5d1d8e12de3a9ef9 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 23:12:18 +0200 Subject: [PATCH 011/102] fix some tests --- .../options/test_allen_comp_dec_sel_rep.py | 9 +- .../tests/options/test_allen_decreports.py | 7 +- .../tests/options/test_allen_sel_rep_info.py | 9 +- Hlt/Hlt1Conf/tests/options/test_decreports.py | 2 - Hlt/Hlt2Conf/options/hlt2_check_output.py | 2 +- .../sprucing/spruce_all_lines_realtime.py | 21 ++- .../sprucing/spruce_example_realtime.py | 3 - Hlt/Moore/python/Moore/config.py | 4 +- Hlt/Moore/python/Moore/qmtest/exclusions.py | 65 +++---- .../python/Moore/tests/test_ft_persistency.py | 169 ++++++++++++++++++ 10 files changed, 238 insertions(+), 53 deletions(-) create mode 100644 Hlt/Moore/python/Moore/tests/test_ft_persistency.py diff --git a/Hlt/Hlt1Conf/tests/options/test_allen_comp_dec_sel_rep.py b/Hlt/Hlt1Conf/tests/options/test_allen_comp_dec_sel_rep.py index 37178a3956e..92e95e5d63f 100644 --- a/Hlt/Hlt1Conf/tests/options/test_allen_comp_dec_sel_rep.py +++ b/Hlt/Hlt1Conf/tests/options/test_allen_comp_dec_sel_rep.py @@ -23,11 +23,11 @@ from __future__ import print_function import argparse from collections import defaultdict from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp) + IODataManager, LHCbApp, GitANNSvc) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import configured_ann_svc +from PyConf.application import get_metainfo_repos parser = argparse.ArgumentParser() parser.add_argument("--input-mdf", help="Input MDF file") @@ -41,12 +41,13 @@ IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) # Decode Hlt DecReports +ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) app = ApplicationMgr(TopAlg=[ DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup(), DecoderDB["HltSelReportsDecoder/Hlt1SelReportsDecoder"].setup() ]) -# decoderDB wants TCKANNSvc as name... -app.ExtSvc += [configured_ann_svc(name='TCKANNSvc')] +app.ExtSvc += [ann] + # Set up counters for recording decisions and selreport existence from MDF counts_from_mdf = defaultdict(lambda: defaultdict(int)) diff --git a/Hlt/Hlt1Conf/tests/options/test_allen_decreports.py b/Hlt/Hlt1Conf/tests/options/test_allen_decreports.py index 2a2638b340b..2fc768b31ed 100644 --- a/Hlt/Hlt1Conf/tests/options/test_allen_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_allen_decreports.py @@ -21,11 +21,11 @@ import re import argparse from collections import defaultdict from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp) + IODataManager, LHCbApp, GitANNSvc) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import configured_ann_svc +from PyConf.application import get_metainfo_repos def get_counts_from_log(f): @@ -57,9 +57,10 @@ IODataManager(DisablePFNWarning=True) HistogramPersistencySvc(OutputLevel=5) # Decode Hlt DecReports # Configure TCKANNSvc (as that is what DecoderDB wants...) +ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) app = ApplicationMgr( TopAlg=[DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()]) -app.ExtSvc += [configured_ann_svc(name='TCKANNSvc')] +app.ExtSvc += [ann] # Set up counters for recording decisions from MDF counts_from_mdf = defaultdict(int) diff --git a/Hlt/Hlt1Conf/tests/options/test_allen_sel_rep_info.py b/Hlt/Hlt1Conf/tests/options/test_allen_sel_rep_info.py index 09b53c2952c..762d5d7643b 100644 --- a/Hlt/Hlt1Conf/tests/options/test_allen_sel_rep_info.py +++ b/Hlt/Hlt1Conf/tests/options/test_allen_sel_rep_info.py @@ -25,11 +25,11 @@ import argparse import re from collections import defaultdict from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp) + IODataManager, LHCbApp, GitANNSvc) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import configured_ann_svc +from PyConf.application import get_metainfo_repos # CLIDs of summarized objects # QUESTION: Are these available through GaudiPython? @@ -224,12 +224,13 @@ IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) # Decode Hlt DecReports +# Configure TCKANNSvc (as that is what DecoderDB wants...) +ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) app = ApplicationMgr(TopAlg=[ DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup(), DecoderDB["HltSelReportsDecoder/Hlt1SelReportsDecoder"].setup() ]) -# Configure TCKANNSvc (as that is what DecoderDB wants...) -app.ExtSvc += [configured_ann_svc(name='TCKANNSvc')] +app.ExtSvc += [ann] gaudi = GaudiPython.AppMgr() TES = gaudi.evtSvc() diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 624fb092ad4..06e916099ea 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -18,7 +18,6 @@ configure the HltANNSvc for the job ran by this script. """ from __future__ import print_function import argparse -import os from Configurables import (ApplicationMgr, HistogramPersistencySvc, IODataManager, LHCbApp, GitANNSvc) @@ -60,7 +59,6 @@ IODataManager(DisablePFNWarning=True) HistogramPersistencySvc(OutputLevel=5) # Configure TCKANNSvc (as that is what DecoderDB wants...) ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) -print(ann) # Decode Hlt DecReports appMgr = ApplicationMgr( diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 0794a1bac1a..86f40b6ec0a 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -19,7 +19,7 @@ Takes command-line arguments: python hlt2_check_output.py """ from __future__ import print_function -import sys, os +import sys import GaudiPython as GP from GaudiConf import IOHelper diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index e61263bca4e..be05e440eb7 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -46,13 +46,26 @@ def manifest_from_eos(url): #} cfg = json.dumps({ + 'Hlt2DecisionID': + {v: k + for k, v in ann_config['Hlt2SelectionID'].items()}, + 'Hlt1DecisionID': + {v: k + for k, v in ann_config['Hlt1SelectionID'].items()}, 'Hlt2SelectionID': - ann_config['Hlt2SelectionID'], - 'PackedObjectLocations': - ann_config['PackedObjectLocations'] + {v: k + for k, v in ann_config['Hlt2SelectionID'].items()}, + 'Hlt1SelectionID': { + v: k + for k, v in ann_config['Hlt1SelectionID'].items() + }, + 'PackedLocations': { + v: k + for k, v in ann_config['PackedObjectLocations'].items() + }, }) - # annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) + GitANNSvc("HltANNSvc", Overrule={0: cfg}) return json.dumps({ 'PackedLocations': diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index ae249a2b82a..d3753b362ba 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -11,7 +11,6 @@ """Test running Sprucing line on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_example_realtimereco.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -32,8 +31,6 @@ options.output_file = 'spruce_example_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): return [ diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 573ec315a34..3d1ae7e1bb2 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -168,13 +168,13 @@ def report_writers_node(streams, "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce": "Spruce", - "passthrough": "Spruce" + "pass": "Spruce" }[process] major_name = { "hlt1": "Hlt1DecisionID", "hlt2": "Hlt2DecisionID", "spruce": "SpruceDecisionID", - "passthrough": "SpruceDecisionID" + "pass": "SpruceDecisionID" }[process] dec_key = int( register_encoding_dictionary( diff --git a/Hlt/Moore/python/Moore/qmtest/exclusions.py b/Hlt/Moore/python/Moore/qmtest/exclusions.py index 0890d70e580..66f45b7a678 100644 --- a/Hlt/Moore/python/Moore/qmtest/exclusions.py +++ b/Hlt/Moore/python/Moore/qmtest/exclusions.py @@ -12,36 +12,41 @@ from GaudiTesting.BaseTest import LineSkipper from GaudiConf.QMTest.LHCbTest import GroupMessages, BlockSkipper from RecConf.QMTest.exclusions import preprocessor as RecPreprocessor -remove_known_warnings = LineSkipper( - strings=[ - # DD4hep geometry. XXX should be fixed there - r"The sub volume lvUX851InUT is NOT constructed", - ], - regexps=[ - # expected WARNINGs from the data broker - r"HiveDataBrokerSvc +WARNING non-reentrant algorithm: .*", - # expected WARNINGs from MuonIDHlt1Alg due to lhcb/Rec#79 - r"MuonID.* +WARNING CondDB {X,Y}FOIParameters member " - r"size is 20, geometry expects 16", - r"ToolSvc.CommonMuonTool.* +WARNING CondDB {X,Y}FOIParameters member " - r"size is 20, geometry expects 16", - # hard to remove WARNINGs due to TrackResChecker.FullDetail = True - # https://gitlab.cern.ch/lhcb/Moore/-/merge_requests/783#note_4406625 - (r"ToolSvc.IdealStateCreator +WARNING Extrapolation of True State from" - r" z = 9[2-4][0-9.]+ to z = 9[2-4][0-9.]+ failed!"), - # also due to TrackResChecker see - # https://gitlab.cern.ch/lhcb/Rec/-/merge_requests/2788#note_5399928 - (r"ToolSvc.TrackMasterExtrapolator +WARNING Suppressing message: " - r"'Protect against absurd tracks. See debug for details'"), - # expected WARNINGs from MuonUTTracking when extrapolation is failed - r"ToolSvc.LoKi::VertexFitter +WARNING LoKi::VertexFitter:: Error from Kalman-step, skip *", - r"MuonUTTracking +WARNING Could not propagate state to VELO!", - # backwards compatibility -- key is from manifest, not git - r"key 0x[0-9a-f]+ has an explicitly configured overrule -- using that", - # backwards compatibility -- old data - r"DstData raw bank has a zero encoding key, and it is not explicitly specified for decoding", - r"HltDecReports has a zero TCK, and it is not explicitly specified for decoding", - ]) +remove_known_warnings = LineSkipper(regexps=[ + # expected WARNINGs from the data broker + r"HiveDataBrokerSvc +WARNING non-reentrant algorithm: .*", + # expected WARNINGs from MuonIDHlt1Alg due to lhcb/Rec#79 + r"MuonID.* +WARNING CondDB {X,Y}FOIParameters member " + r"size is 20, geometry expects 16", + r"ToolSvc.CommonMuonTool.* +WARNING CondDB {X,Y}FOIParameters member " + r"size is 20, geometry expects 16", + # expected WARNING when JIT-compiling functors + (r".*WARNING Suppressing message: 'Stack:SSE|(AVX(2|256|512)), Functor:Scalar, instruction" + r" set mismatch \(Best requested\). ROOT/cling was not compiled with the same options as the" + r" stack, try the functor cache'"), + # expected WARNINGs due to SPD/PRS in the condition database + # see https://gitlab.cern.ch/lhcb/Rec/issues/107 + r"(ToolSvc)?.*(Calo|Photon|Electron).* WARNING o Type [a-z]+C? is " + r"not registered", + # hard to remove WARNINGs due to TrackResChecker.FullDetail = True + # https://gitlab.cern.ch/lhcb/Moore/-/merge_requests/783#note_4406625 + (r"ToolSvc.IdealStateCreator +WARNING Extrapolation of True State from" + r" z = 9[2-4][0-9.]+ to z = 9[2-4][0-9.]+ failed!"), + # also due to TrackResChecker see + # https://gitlab.cern.ch/lhcb/Rec/-/merge_requests/2788#note_5399928 + (r"ToolSvc.TrackMasterExtrapolator +WARNING Suppressing message: " + r"'Protect against absurd tracks. See debug for details'"), + # expected WARNINGs from MuonUTTracking when extrapolation is failed + r"ToolSvc.LoKi::VertexFitter +WARNING LoKi::VertexFitter:: Error from Kalman-step, skip *", + r"MuonUTTracking +WARNING Could not propagate state to VELO!", + # expected WARNINGs from ThorBPVLTIME -- see issue Rec#265 + r" +WARNING Lifetime fit did not converge. Aborting.", + r" +WARNING Negative variance produced in lifetime fit iteration.", + # DD4hep geometry. XXX should be fixed there + r".*The sub volume lvUX851InUT is NOT constructed.*", + # SelTools::LifetimeFitter Msg-Counter + r".*WARNING Suppressing message:\s*'Lifetime fit did not converge. Aborting.'.*", +]) preprocessor = remove_known_warnings + LineSkipper(regexps=[ # output from the scheduler that is expected to differ run-by-run diff --git a/Hlt/Moore/python/Moore/tests/test_ft_persistency.py b/Hlt/Moore/python/Moore/tests/test_ft_persistency.py new file mode 100644 index 00000000000..5f743fe3a6d --- /dev/null +++ b/Hlt/Moore/python/Moore/tests/test_ft_persistency.py @@ -0,0 +1,169 @@ +############################################################################### +# (c) Copyright 2021 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), 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. # +############################################################################### +############################################################################### +# This script aims to test the ability as adding FlavourTag object to the list of extra_outputs defined in an HLT2 line. +# Eventually the FlavourTags should be written to /Event/HLT2//FlavourTags or similar. + +# To run the script: +# /pathToStack/Moore/run gaudirun.py test_moore_options.py +# Instructions: +# 1. set up the software stack, for example like this: https://gitlab.cern.ch/rmatev/lb-stack-setup +# 2. in Phys checkout the branch ft_hack_for_moore, and in Moore check out the Master branch + +# To investigate the output dst: +# ./run python -i DSTexplore.py out.dst out.hlt2.annsvc.pol.json out.hlt2.annsvc.json +# DSTexplore script found here: https://gitlab.cern.ch/-/snippets/1607 + +from Moore import options, run_moore +from Moore.config import HltLine +from RecoConf.global_tools import stateProvider_with_simplified_geom +from RecoConf.reconstruction_objects import make_pvs, upfront_reconstruction +from RecoConf.event_filters import require_pvs +from RecoConf.decoders import default_ft_decoding_version + +from GaudiKernel.SystemOfUnits import MeV, GeV + +from PyConf.Algorithms import FunctionalSSPionTagger + +from Hlt2Conf.standard_particles import make_mass_constrained_jpsi2mumu, make_has_rich_long_pions, make_phi2kk +from Hlt2Conf.algorithms import require_all, ParticleFilterWithPVs, ParticleFilter, ParticleCombiner + +decay = "Bs2JpsiPhi" +#decay = "B2jPsiK" + +# 4. specify which data file you want to run over, and ammend options accordingly +if decay == "Bs2JpsiPhi": + input_files = [ + # Bs2JpsiPhi, 13144011 + "root://eoslhcb.cern.ch//eos/lhcb/grid/prod/lhcb/MC/Upgrade/LDST/00076706/0000/00076706_00000001_1.ldst" + ] +elif decay == "B2jPsiK": + input_files = [ + # B+ -> Jpsi K+, Jpsi->dimuon, 12143001 + "root://eoslhcb.cern.ch//eos/lhcb/grid/prod/lhcb/MC/Upgrade/LDST/00076711/0000/00076711_00000003_1.ldst", + ] + +else: + print("No matching input file for decay", decay) + +default_ft_decoding_version.global_bind(value=2) + + +def taggingPions(make_particles=make_has_rich_long_pions, + pvs=make_pvs, + p_min=2 * MeV, + p_max=200 * GeV, + pt_min=0.4 * GeV, + pt_max=10 * GeV, + eta_min=1.068, + pidp_max=5, + pidk_max=5, + ghostprob_max=0.5): + code = require_all('P > {p_min}', 'P < {p_max}', 'PT > {pt_min}', + 'PT < {pt_max}', 'PIDp < {pidp_max}', + 'PIDK < {pidk_max}', 'TRGHOSTPROB < {ghostprob_max}', + 'ETA > {eta_min}').format( + p_min=p_min, + p_max=p_max, + pt_min=pt_min, + pt_max=pt_max, + eta_min=eta_min, + pidp_max=pidp_max, + pidk_max=pidk_max, + ghostprob_max=ghostprob_max) + return ParticleFilterWithPVs(make_particles(), pvs(), Code=code) + + +# make sure we passed GEC and have PV in event +def prefilters(): + return [require_pvs(make_pvs())] + + +def make_phi(am_min=980 * MeV, + am_max=1060 * MeV, + pt=500. * MeV, + vchi2=10, + tr_chi2pdof=5, + pid_k=0): + phis = make_phi2kk() + code = require_all("in_range({am_min}, M, {am_max})", "PT > {pt}", + "VFASPF(VCHI2) < {vchi2}", + "MAXTREE('K+'==ABSID, TRCHI2DOF) < {tr_chi2pdof}", + "MINTREE('K+'==ABSID, PIDK) > {pid_k}").format( + am_min=am_min, + am_max=am_max, + pt=pt, + vchi2=vchi2, + tr_chi2pdof=tr_chi2pdof, + pid_k=pid_k) + return ParticleFilter(particles=phis, Code=code) + + +def make_bs2jpsiphi(am_min=5050 * MeV, + am_max=5650 * MeV, + am_min_vtx=5050 * MeV, + am_max_vtx=5650 * MeV, + vtx_chi2pdof=20): + phi = make_phi() + jpsi = make_mass_constrained_jpsi2mumu() + combination_code = require_all("in_range({am_min}, AM, {am_max})").format( + am_min=am_min, am_max=am_max) + vertex_code = require_all("in_range({am_min_vtx}, M, {am_max_vtx})", + "VFASPF(VCHI2PDOF) < {vtx_chi2pdof}").format( + am_min_vtx=am_min_vtx, + am_max_vtx=am_max_vtx, + vtx_chi2pdof=vtx_chi2pdof) + return ParticleCombiner( + particles=[phi, jpsi], + DecayDescriptors=['B_s0 -> J/psi(1S) phi(1020)'], + CombinationCut=combination_code, + MotherCut=vertex_code) + + +def bs2jpsiphi_line(name='Hlt2BsToJpsiPhiLine', prescale=1): + + b2jpsiphi = make_bs2jpsiphi() + pvs = make_pvs() + taggingParticles = taggingPions() + + sspionTagger = FunctionalSSPionTagger( + BCandidates=b2jpsiphi, + TaggingPions=taggingParticles, + PrimaryVertices=pvs) + + return [ + HltLine( + name=name, + algs=upfront_reconstruction() + prefilters() + [make_bs2jpsiphi()], + prescale=prescale, + extra_outputs=[("FlavourTagger", sspionTagger)]) + ] + + +public_tools = [stateProvider_with_simplified_geom()] + +options.input_files = input_files +options.input_type = 'ROOT' +options.input_raw_format = 4.3 +options.evt_max = 1000 +options.simulation = True +options.data_type = 'Upgrade' +options.dddb_tag = 'dddb-20171126' #'dddb-20201211' +options.conddb_tag = 'sim-20171127-vc-md100' #'sim-20201218-vc-md100' + +# 5. Name of the dst that is going to be written +options.output_file = 'out_{}_FT.dst'.format(decay) +options.output_type = 'ROOT' +options.output_manifest = '{}_FT_.hlt2.annsvc.pol.json'.format(decay) + +# runs the HLT2 line +if decay == "Bs2JpsiPhi": + run_moore(options, bs2jpsiphi_line, public_tools) -- GitLab From bd69a1658eab0516cfc96bb6c1803f563a00638a Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Wed, 29 Jun 2022 16:05:03 +0200 Subject: [PATCH 012/102] first version of stable, forced, persist reco locations --- .../RecoConf/calorimeter_reconstruction.py | 28 ++++++++-------- .../python/RecoConf/data_from_file.py | 17 ++++++---- Hlt/RecoConf/python/RecoConf/hlt1_tracking.py | 28 ++++++---------- .../python/RecoConf/muon_reconstruction.py | 32 ++++++------------- .../RecoConf/reco_objects_for_spruce.py | 4 ++- .../python/RecoConf/rich_reconstruction.py | 14 +++----- 6 files changed, 50 insertions(+), 73 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py index 4c06fe704bb..8247bb80bc9 100644 --- a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.components import force_location from PyConf.Algorithms import ( AcceptanceBremAlg, AcceptanceEcalAlg, AcceptanceHcalAlg, TrackToEcalEnergyAlg, TrackToHcalEnergyAlg, CaloChargedPIDsAlg, @@ -419,19 +419,14 @@ def make_merged_pi0_various(ecalClusters, pvs): def make_calo(tracks, pvs, make_raw=default_raw_event, - calo_raw_event=False, chargedpid_types={ "calo": ["Long", "Downstream"], "brem": ["Long", "Downstream", "Upstream"] }, trackrels=None): # digits - if calo_raw_event: # needed for real data - rawEventEcal = make_raw(["Calo"]) - rawEventHcal = make_raw(["Calo"]) - else: - rawEventEcal = make_raw(["EcalPacked"]) - rawEventHcal = make_raw(["HcalPacked"]) + rawEventEcal = make_raw(["EcalPacked"]) + rawEventHcal = make_raw(["HcalPacked"]) rawToDigitsOutputEcal = make_digits(rawEventEcal) rawToDigitsOutputHcal = make_digits(rawEventHcal) digitsEcal = rawToDigitsOutputEcal["digitsEcal"] @@ -488,8 +483,8 @@ def make_calo(tracks, InputHypos=photons, InputClusters=old_ecalClusters, outputs={ - 'OutputHypos': persisted_location('CaloPhotons'), - 'OutputTable': None, + 'OutputHypos': force_location('/Event/Rec/Calo/Photons'), + 'OutputTable': force_location('/Event/Rec/Calo/PhotonsToClusters') }, ).OutputHypos @@ -497,8 +492,9 @@ def make_calo(tracks, InputHypos=electrons, InputClusters=old_ecalClusters, outputs={ - 'OutputHypos': persisted_location('CaloElectrons'), - 'OutputTable': None, + 'OutputHypos': force_location('/Event/Rec/Calo/Electrons'), + 'OutputTable': + force_location('/Event/Rec/Calo/ElectronsToClusters') }, ).OutputHypos old_ecalSplitClusters = ClusterConverter( @@ -509,9 +505,11 @@ def make_calo(tracks, InputSplitClusters=old_ecalSplitClusters, InputHypos=mergedPi0s, outputs={ - 'OutputHypos': persisted_location('CaloMergedPi0s'), - 'OutputSplitPhotons': persisted_location('CaloSplitPhotons'), - 'OutputTable': None, + 'OutputHypos': force_location('/Event/Rec/Calo/MergedPi0s'), + 'OutputSplitPhotons': + force_location('/Event/Rec/Calo/SplitPhotons'), + 'OutputTable': + force_location('/Event/Rec/Calo/MergedPi0sToClusters') }, ) old_mergedPi0s = convert_mergedpi0.OutputHypos diff --git a/Hlt/RecoConf/python/RecoConf/data_from_file.py b/Hlt/RecoConf/python/RecoConf/data_from_file.py index 9fe57d18f33..b5f75f448ea 100644 --- a/Hlt/RecoConf/python/RecoConf/data_from_file.py +++ b/Hlt/RecoConf/python/RecoConf/data_from_file.py @@ -52,7 +52,7 @@ from PyConf.Tools import (ChargedProtoParticleAddRichInfo, ChargedProtoParticleAddCombineDLLs) -def _packed_reco_from_file(): +def packed_reco_from_file(): return { 'PackedPVs': '/Event/pRec/Vertex/Primary', 'PackedCaloElectrons': '/Event/pRec/Calo/Electrons', @@ -62,12 +62,13 @@ def _packed_reco_from_file(): 'PackedMuonPIDs': '/Event/pRec/Muon/MuonPID', 'PackedRichPIDs': '/Event/pRec/Rich/PIDs', 'PackedTracks': '/Event/pRec/Track/Best', + #'PackedMuonTracks': '/Event/pRec/Track/Muon', 'PackedNeutralProtos': '/Event/pRec/ProtoP/Neutrals', 'PackedChargedProtos': '/Event/pRec/ProtoP/Charged', } -def _packed_mc_from_file(): +def packed_mc_from_file(): return { 'PackedMCParticles': '/Event/pSim/MCParticles', 'PackedMCVertices': '/Event/pSim/MCVertices', @@ -101,7 +102,7 @@ def unpacked_reco_locations(): # If the structure is not like this, pointers point to to the wrong place... # The SmartRefs held by the unpacked MC objects only work if we unpack to these specific locations locations = {} - for k, v in _packed_reco_from_file().items(): + for k, v in packed_reco_from_file().items(): if 'pRec' in v: locations[k] = v.replace('pRec', 'Rec') elif 'pHLT2' in v: #sprucing picks them from HLT2 @@ -130,7 +131,7 @@ def unpacked_mc_locations(): def reco_from_file(): # TODO(AP) should only add the packed data if we're running on Upgrade MC # where Brunel has already been run - packed_data = _packed_reco_from_file() + packed_data = packed_reco_from_file() # raw_event = raw_event_from_file() # We don't want any keys accidentally overwriting each other # assert set(packed_data.keys()).intersection(set(raw_event.keys())) == set() @@ -141,7 +142,7 @@ def reco_from_file(): def mc_from_file(): # TODO(AP) should only add the packed data if we're running on Upgrade MC # where Brunel has already been run - packed_data = _packed_mc_from_file() + packed_data = packed_mc_from_file() return packed_data @@ -205,6 +206,8 @@ def reco_unpackers(): ('RichPIDs', richPIDs), ('Tracks', reco_unpacker('PackedTracks', UnpackTrack, 'UnpackBestTracks')), + #('MuonTracks', + # reco_unpacker('PackedMuonTracks', UnpackTrack, 'UnpackMuonTracks')), ('NeutralProtos', reco_unpacker('PackedNeutralProtos', UnpackProtoParticle, 'UnpackNeutralProtos')), @@ -225,7 +228,7 @@ def reco_unpackers(): # Make sure we have consistent names, and that we're unpacking everything # we load from the file assert set(['Packed' + k for k in d.keys()]) - set( - _packed_reco_from_file().keys()) == set() + packed_reco_from_file().keys()) == set() return d @@ -278,7 +281,7 @@ def mc_unpackers(): # Make sure we have consistent names, and that we're unpacking everything # we load from the file assert set(['Packed' + k for k in d.keys()]) - set( - _packed_mc_from_file().keys()) == set() + packed_mc_from_file().keys()) == set() return d diff --git a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py index 6664bac6e6f..5c925070227 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py @@ -12,7 +12,7 @@ import logging from PyConf import configurable from PyConf.application import default_raw_event, default_raw_banks from PyConf.utilities import DISABLE_TOOL -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.components import force_location from PyConf.Algorithms import ( fromPrUpstreamTracksV1Tracks, @@ -75,24 +75,19 @@ def require_gec(make_raw=default_raw_banks, cut=-1, **kwargs): @configurable def make_VeloClusterTrackingSIMD(algorithm=VeloClusterTrackingSIMD, - raw_event=default_raw_event, - masked_sensors=[]): + raw_event=default_raw_event): """Simple helper to make sure both, make_VeloClusterTrackingSIMD_tracks and make_VeloClusterTrackingSIMD_hits, access the identically configured version of VeloClusterTrackingSIMD Args: - make_raw (DataHandle): RawEventLocation for VeloClusterTrackingSIMD, defaults to `default_raw_event `; - algorithm: The Velo tracking algorithm to run; - masked_sensors: List of unique sensor IDs that will *not* be considered in the pattern reco's *tracks*, but are included in the *clusters* returned. + make_raw (DataHandle): RawEventLocation for VeloClusterTrackingSIMD, defaults to `default_raw_event `. + algorithm: The Velo tracking algorithm to run. Returns: The Velo tracking algorithm. """ - my_SensorMasks = [j in masked_sensors for j in range(208) - ] # 208 = LHCb::Pr::Velo::VPInfos::NSensors - return algorithm( - RawEventLocation=raw_event(["VP"]), SensorMasks=tuple(my_SensorMasks)) + return algorithm(RawEventLocation=raw_event(["VP"])) @configurable @@ -261,16 +256,12 @@ def make_TrackBeamLineVertexFinderSoA_pvs(velo_tracks): Returns: DataHandle: TrackBeamLineVertexFinderSoA's OutputVertices. """ - pvs = { "v3": TrackBeamLineVertexFinderSoA( TracksLocation=velo_tracks["Pr"], TracksBackwardLocation=velo_tracks["Pr::backward"], - outputs={ - 'OutputVertices': - persisted_location('PVs') if "v1" not in velo_tracks else None - }, + # outputs = {'OutputVertices':force_location('/here/I/am/v3') }, ).OutputVertices } @@ -280,14 +271,13 @@ def make_TrackBeamLineVertexFinderSoA_pvs(velo_tracks): InputVertices=pvs["v3"], InputTracks=velo_tracks["v1"], outputs={ - 'OutputVertices': persisted_location('PVs') + 'OutputVertices': force_location('/Event/Rec/Vertex/Primary') }, ).OutputVertices return pvs -@configurable -def make_PatPV3DFuture_pvs(velo_tracks, use_beam_spot_cut=True): +def make_PatPV3DFuture_pvs(velo_tracks): """Makes primary vertices from velo tracks using PatPV3DFuture. Args: @@ -304,7 +294,7 @@ def make_PatPV3DFuture_pvs(velo_tracks, use_beam_spot_cut=True): PatPV3DFuture( InputTracks=velo_tracks["v1"], BeamSpotRCut=0.6, - UseBeamSpotRCut=use_beam_spot_cut, + UseBeamSpotRCut=True, minClusterMult=4).OutputVerticesName } from PyConf.Algorithms import RecV1ToPVConverter diff --git a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py index 945b7faafda..7377ab36c5c 100644 --- a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py @@ -9,11 +9,11 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.components import force_location from PyConf.Algorithms import (LHCb__Converters__Track__SOA__fromV1Track as - TrackSOAFromV1, fromV2MuonPIDV1MuonPID, - MergeMuonPIDsV1, MuonPIDV2ToMuonTracks) + TrackSOAFromV1, MuonPIDConverter, + MergeMuonPIDsV1) from .hlt2_muonid import make_muon_ids from RecoConf.core_algorithms import make_unique_id_generator @@ -47,37 +47,25 @@ def make_all_muon_pids(tracks, track_types=['Long', 'Downstream']): def make_conv_muon_pids(muonPidsConfs, best_tracks, light_reco=False, - track_types=['Long', 'Downstream'], - output_locations=dict()): + track_types=['Long', 'Downstream']): muon_pids_v1 = dict() - muon_tracks = dict() for track_type in track_types: - # Add muon hits of MuonPID to "muontracks" - muon_tracks[track_type] = MuonPIDV2ToMuonTracks( - name="MuonPIDV2ToMuonTracks_" + track_type, - InputMuonPIDs=muonPidsConfs[track_type], - InputTracks=best_tracks[track_type]["v1"] - if light_reco else best_tracks['v1'], - RestrictToType=track_type, - outputs={ - 'OutputMuonTracks': output_locations.get(track_type, None) - }).OutputMuonTracks - # Convert to Keyed Container for ProtoParticle - muon_pids_v1[track_type] = fromV2MuonPIDV1MuonPID( - name="fromV2MuonPIDV1MuonPID" + track_type, + muon_pids_v1[track_type] = MuonPIDConverter( + name="MuonPIDConverter" + track_type, InputMuonPIDs=muonPidsConfs[track_type], - InputMuonTracks=muon_tracks[track_type], InputTracks=best_tracks[track_type]["v1"] if light_reco else best_tracks['v1'], RestrictToType=track_type).OutputMuonPIDs - return muon_pids_v1, muon_tracks + return muon_pids_v1 def make_merged_muon_pids(muon_pids_v1): # Merge them for now to be compatible with Brunel. merged_pids = MergeMuonPIDsV1( InputMuonPIDLocations=list(muon_pids_v1.values()), - outputs={'OutputMuonPIDLocation': persisted_location('MuonPIDs')}, + outputs={ + 'OutputMuonPIDLocation': force_location('/Event/Rec/Muon/MuonPID') + }, ) return merged_pids.OutputMuonPIDLocation diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index b9473597c53..aab44b3f815 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -14,7 +14,7 @@ _reco_loc = { "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), - "MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), + #"MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), @@ -55,6 +55,8 @@ def upfront_reconstruction(): mc=mc_algs, output_level=4) + ### TODO:FIXME take advantage of the fact that the above have datahandles... + # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms return [decoder] + mc_algs + unpackers diff --git a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py index fa6a40293f3..c2630983401 100644 --- a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.components import force_location from PyConf.application import default_raw_event from Configurables import Rich__Future__ParticleProperties as PartProps @@ -80,9 +80,6 @@ def default_rich_reco_options(): # Should pixel clustering be run, for either ( RICH1, RICH2 ) "ApplyPixelClustering": (False, False), - # Activate pixels in specific panels in each RICH only. - "ActivatePanel": (True, True), - #=========================================================== # Track treatment options #=========================================================== @@ -259,10 +256,7 @@ def make_rich_pixels(options, make_raw=default_raw_event): # Decode the Raw event to RichSmartIDs richDecode = RichDecoder( - name="RichRawDecoder", - RawEventLocation=rawEvent, - Detectors=det_opts, - Panels=options["ActivatePanel"]) + name="RichRawDecoder", RawEventLocation=rawEvent, Detectors=det_opts) results["RichDecodedData"] = richDecode.DecodedDataLocation # Run clustering @@ -728,6 +722,8 @@ def make_merged_rich_pids(richRecConfs): conf["RichPIDs"] for conf in richRecConfs.values() ], PIDVersion=2, - outputs={'OutputRichPIDLocation': persisted_location('RichPIDs')}, + outputs={ + 'OutputRichPIDLocation': force_location('/Event/Rec/Rich/PIDs') + }, ) return merged_pids.OutputRichPIDLocation -- GitLab From 723208442056069ba6bb23cc71eea2373ba627db Mon Sep 17 00:00:00 2001 From: sesen Date: Thu, 30 Jun 2022 18:39:56 +0200 Subject: [PATCH 013/102] make packing configuration simpler, do not use PersistRecoConf --- .../python/Moore/persistence/__init__.py | 37 ++------ Hlt/Moore/python/Moore/persistence/packing.py | 88 +++++++++++++++---- 2 files changed, 77 insertions(+), 48 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index b2b1028732d..c4c8d92b969 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -200,29 +200,8 @@ def persist_line_outputs( pformat(output_cloner_locations)) cf.append(output_cloner_cf) - #Make a dictionary for output packer locations - #For line outputs, "stream+/p" added to input locations - #For reco objects, there are pre-defined output locations - #This is to be able to find reco objects regardless of their producer - outputs = {} - for key, value in inputs.items(): - outputs[key] = [] - for v in value: - if v in prdict_packed.keys(): - outputs[key] += [prdict_packed[v]] #reco - else: - outputs[key] += [packed_prefix(v, stream)] #line - - prpacking = PersistRecoPacking( - stream=stream, - unpacked=inputs, - packed=outputs, - data_type=data_type, - ) - ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ - set([ i for i in prpacking.unpackedLocations()]) | \ + locations = set([ i for ilist in inputs.values() for i in ilist]) | \ set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) if clone_mc: @@ -234,10 +213,6 @@ def persist_line_outputs( register_encoding_dictionary("PackedObjectLocations", sorted(locations)), 16) - packer_cf, packer_locations = pack_stream_objects(stream, prpacking, - encoding_key) - cf.append(packer_cf) - packer_mc_locations = [] if clone_mc: @@ -245,15 +220,17 @@ def persist_line_outputs( cf.append(mc_packer_cf) if log.isEnabledFor(logging.DEBUG): - log.debug('packer_locations: ' + pformat(packer_locations)) + log.debug('packer_locations: ' + pformat(inputs.values())) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) - serialisation_cf, output_raw_data = serialise_packed_containers( - packer_locations, source_id) + packer_cf, serialization_cf, output_raw_data = pack_stream_objects( + stream, inputs, encoding_key, source_id) + + cf.append(packer_cf) + cf.append(serialisation_cf) if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) - cf.append(serialisation_cf) unpacked_mc_loc = [ prefix(l, reco_stream) for l in unpacked_mc_locations().values() diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 2d55d78a997..92cfbbf8537 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -12,10 +12,13 @@ import logging import os from PyConf.Algorithms import ( - PackMCParticle, - PackMCVertex, -) -from PyConf.components import force_location + PackMCParticle, PackMCVertex, RecVertexPacker, VertexPacker, RichPIDPacker, + MuonPIDPacker, ProtoParticlePacker, ParticlePacker, TrackPacker, + FlavourTagPacker, CaloHypoPacker, CaloClusterPacker, CaloDigitPacker, + CaloAdcPacker, P2VRelationPacker, P2MCPRelationPacker, P2IntRelationPacker, + P2InfoRelationPacker, PP2MCPRelationPacker, HltPackedBufferWriter) + +from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic from Gaudi.Configuration import WARNING as OUTPUTLEVEL @@ -25,33 +28,82 @@ log = logging.getLogger(__name__) from PyConf import configurable +def packers_map(): + map = {} + map.update({"PVs": RecVertexPacker}) + map.update({"Vertices": VertexPacker}) + map.update({"Tracks": TrackPacker}) + map.update({"RichPIDs": RichPIDPacker}) + map.update({"MuonPIDs": MuonPIDPacker}) + map.update({"CaloHypos": CaloHypoPacker}) + map.update({"CaloClusters": CaloClusterPacker}) + map.update({"CaloDigits": CaloDigitPacker}) + map.update({"CaloAdcs": CaloAdcPacker}) + map.update({"ProtoParticles": ProtoParticlePacker}) + map.update({"Particles": ParticlePacker}) + map.update({"FlavourTags": FlavourTagPacker}) + map.update({"P2VRelations": P2VRelationPacker}) + map.update({"P2MCPRelations": P2MCPRelationPacker}) + map.update({"P2IntRelations": P2IntRelationPacker}) + map.update({"P2InfoRelations": P2InfoRelationPacker}) + map.update({"PP2MCPRelations": PP2MCPRelationPacker}) + + return map + + @configurable -def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): - """Return a list of packers that will produce all packed output. +def pack_stream_objects(stream, + inputs, + encoding_key, + source_id, + enable_check=False): + """Return CF node that packs and serialises a set of containers to a raw bank. Args: - stream (str): TES root containing objects to be packed. - prpacking (PersistRecoPacking object): PersistRecoPacking object that describes packing configuration. + stream (str): TES root containing objects to be persisted. + inputs (map): Type: locations to be persisted Returns: - algs (list): Algorithms to run the packing. - outputs (list of handles): data handles that should be persisted, in the - specification used by ROOT output writers (e.g. OutputStream). + serialisation_node (CompositeNode). + output_raw_data (DataHandle): Raw event with serialised data, + i.e. the DstData bank. + """ - - persistreco_packers = prpacking.packers( - output_level=OUTPUTLEVEL, - enable_check=enable_check, - encoding_key=encoding_key) + p_map = packers_map() + packers = [] + + for type, packer in p_map.items(): + if type in inputs.keys(): + for loc in inputs[type]: + p = packer( + InputName=force_location(loc), + OutputLevel=OUTPUTLEVEL, + EnableCheck=enable_check, + EncodingKey=encoding_key) + packers += [p] packers_cf = CompositeNode( "packers", - children=persistreco_packers, + children=packers, combine_logic=NodeLogic.NONLAZY_OR, force_order=True, ) - return packers_cf, [p.outputs["OutputName"] for p in persistreco_packers] + packers_output_locations = [ + get_output(p.outputs["OutputName"]).location for p in packers + ] + + bank_writer = HltPackedBufferWriter( + PackedContainers=packer_output_locations, + OutputLevel=OUTPUTLEVEL, + SourceID=source_id) + + serialisation_cf = CompositeNode( + "serialisation", + children=[bank_writer], + ) + + return packer_cf, serialisation_cf, bank_writer def pack_stream_mc_locations(stream): -- GitLab From 000e62756e44dbd9dc954f9c4f343bf3f21f8cd1 Mon Sep 17 00:00:00 2001 From: sesen Date: Thu, 30 Jun 2022 18:45:33 +0200 Subject: [PATCH 014/102] fix python lintin --- Hlt/Moore/python/Moore/persistence/__init__.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index c4c8d92b969..fc57c6575c5 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -20,7 +20,7 @@ from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output -from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix +from PyConf.location_prefix import prefix from PyConf.application import register_encoding_dictionary from GaudiConf.reading import type_map from GaudiConf.PersistRecoConf import PersistRecoPacking @@ -28,7 +28,6 @@ from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed -from .serialisation import serialise_packed_containers from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC log = logging.getLogger(__name__) @@ -163,7 +162,6 @@ def persist_line_outputs( #add the locations from reco objects to the dictinary prdict = persistreco_line_outputs() - prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) for val in prdict.values(): name = get_type(val) #find type of object for this DH @@ -223,7 +221,7 @@ def persist_line_outputs( log.debug('packer_locations: ' + pformat(inputs.values())) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) - packer_cf, serialization_cf, output_raw_data = pack_stream_objects( + packer_cf, serialisation_cf, output_raw_data = pack_stream_objects( stream, inputs, encoding_key, source_id) cf.append(packer_cf) -- GitLab From 3d8305a26775d2dca1dc6055a97b6913a58cd0fa Mon Sep 17 00:00:00 2001 From: sesen Date: Thu, 30 Jun 2022 18:52:32 +0200 Subject: [PATCH 015/102] remove map and type --- Hlt/Moore/python/Moore/persistence/packing.py | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 92cfbbf8537..ccf6acb364f 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -29,26 +29,26 @@ from PyConf import configurable def packers_map(): - map = {} - map.update({"PVs": RecVertexPacker}) - map.update({"Vertices": VertexPacker}) - map.update({"Tracks": TrackPacker}) - map.update({"RichPIDs": RichPIDPacker}) - map.update({"MuonPIDs": MuonPIDPacker}) - map.update({"CaloHypos": CaloHypoPacker}) - map.update({"CaloClusters": CaloClusterPacker}) - map.update({"CaloDigits": CaloDigitPacker}) - map.update({"CaloAdcs": CaloAdcPacker}) - map.update({"ProtoParticles": ProtoParticlePacker}) - map.update({"Particles": ParticlePacker}) - map.update({"FlavourTags": FlavourTagPacker}) - map.update({"P2VRelations": P2VRelationPacker}) - map.update({"P2MCPRelations": P2MCPRelationPacker}) - map.update({"P2IntRelations": P2IntRelationPacker}) - map.update({"P2InfoRelations": P2InfoRelationPacker}) - map.update({"PP2MCPRelations": PP2MCPRelationPacker}) - - return map + + return { + "PVs": RecVertexPacker, + "Vertices": VertexPacker, + "Tracks": TrackPacker, + "RichPIDs": RichPIDPacker, + "MuonPIDs": MuonPIDPacker, + "CaloHypos": CaloHypoPacker, + "CaloClusters": CaloClusterPacker, + "CaloDigits": CaloDigitPacker, + "CaloAdcs": CaloAdcPacker, + "ProtoParticles": ProtoParticlePacker, + "Particles": ParticlePacker, + "FlavourTags": FlavourTagPacker, + "P2VRelations": P2VRelationPacker, + "P2MCPRelations": P2MCPRelationPacker, + "P2IntRelations": P2IntRelationPacker, + "P2InfoRelations": P2InfoRelationPacker, + "PP2MCPRelations": PP2MCPRelationPacker + } @configurable @@ -72,15 +72,15 @@ def pack_stream_objects(stream, p_map = packers_map() packers = [] - for type, packer in p_map.items(): - if type in inputs.keys(): - for loc in inputs[type]: - p = packer( + for t, p in p_map.items(): + if in inputs.keys(): + for loc in inputs[t]: + packer = p( InputName=force_location(loc), OutputLevel=OUTPUTLEVEL, EnableCheck=enable_check, EncodingKey=encoding_key) - packers += [p] + packers += [packer] packers_cf = CompositeNode( "packers", -- GitLab From f2fd36a42865ecfd70f9dd0eb2fe407b659bef84 Mon Sep 17 00:00:00 2001 From: sesen Date: Thu, 30 Jun 2022 18:54:19 +0200 Subject: [PATCH 016/102] remove map and type --- Hlt/Moore/python/Moore/persistence/packing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index ccf6acb364f..baac5880a0d 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -73,7 +73,7 @@ def pack_stream_objects(stream, packers = [] for t, p in p_map.items(): - if in inputs.keys(): + if t in inputs.keys(): for loc in inputs[t]: packer = p( InputName=force_location(loc), -- GitLab From a35b6995acb64a908f82cdacac288392261a10f7 Mon Sep 17 00:00:00 2001 From: sesen Date: Thu, 30 Jun 2022 19:02:22 +0200 Subject: [PATCH 017/102] remove persistrecoconf --- Hlt/Moore/python/Moore/persistence/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index fc57c6575c5..e07a7ce671a 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -23,11 +23,10 @@ from PyConf.components import get_output from PyConf.location_prefix import prefix from PyConf.application import register_encoding_dictionary from GaudiConf.reading import type_map -from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations -from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed +from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations, packers_map +from .persistreco import persistreco_line_outputs from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC log = logging.getLogger(__name__) @@ -155,7 +154,8 @@ def persist_line_outputs( log.debug('line_locations: ' + pformat(persistence_svc.Locations)) # Make a dictinary for all known object types with emty values - inputs = PersistRecoPacking().dictionary() + p_map = packers_map() + inputs = {t: [] for t in p_map.keys()} #add line outputs to fill the dictionary inputs = _referenced_inputs(lines, inputs) -- GitLab From c64f5846bc17edb4d091f8da7670f34a37dadf31 Mon Sep 17 00:00:00 2001 From: sesen Date: Thu, 30 Jun 2022 19:07:51 +0200 Subject: [PATCH 018/102] fix linting errors --- Hlt/Moore/python/Moore/persistence/__init__.py | 7 ++++--- Hlt/Moore/python/Moore/persistence/packing.py | 10 +++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index e07a7ce671a..6ff0d98bbd4 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -230,9 +230,10 @@ def persist_line_outputs( if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) - unpacked_mc_loc = [ - prefix(l, reco_stream) for l in unpacked_mc_locations().values() - ] + # is this still needed for something? + #unpacked_mc_loc = [ + # prefix(l, reco_stream) for l in unpacked_mc_locations().values() + #] control_flow_node = CompositeNode( "hlt2_line_output_persistence", diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index baac5880a0d..1406be4da6f 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -29,7 +29,7 @@ from PyConf import configurable def packers_map(): - + return { "PVs": RecVertexPacker, "Vertices": VertexPacker, @@ -48,7 +48,7 @@ def packers_map(): "P2IntRelations": P2IntRelationPacker, "P2InfoRelations": P2InfoRelationPacker, "PP2MCPRelations": PP2MCPRelationPacker - } + } @configurable @@ -73,7 +73,7 @@ def pack_stream_objects(stream, packers = [] for t, p in p_map.items(): - if t in inputs.keys(): + if t in inputs.keys(): for loc in inputs[t]: packer = p( InputName=force_location(loc), @@ -94,7 +94,7 @@ def pack_stream_objects(stream, ] bank_writer = HltPackedBufferWriter( - PackedContainers=packer_output_locations, + PackedContainers=packers_output_locations, OutputLevel=OUTPUTLEVEL, SourceID=source_id) @@ -103,7 +103,7 @@ def pack_stream_objects(stream, children=[bank_writer], ) - return packer_cf, serialisation_cf, bank_writer + return packers_cf, serialisation_cf, bank_writer def pack_stream_mc_locations(stream): -- GitLab From 117e565d0e02509e4d0692d6e0addc842a5f1b1f Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 5 Jul 2022 13:15:29 +0200 Subject: [PATCH 019/102] move manifest json file to persistency --- Hlt/Moore/python/Moore/config.py | 5 ++- .../python/Moore/persistence/__init__.py | 43 ++++++++++++++++--- Hlt/Moore/python/Moore/persistence/packing.py | 16 +++++-- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 3d1ae7e1bb2..039379c8ac2 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -119,6 +119,7 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa def report_writers_node(streams, data_type, process, + output_manifest_file, associate_mc=False, clone_mc=False): """Return the control flow node and locations to persist of the default reports writers. @@ -214,7 +215,7 @@ def report_writers_node(streams, (line_output_cf, line_output_locations, packed_data) = persist_line_outputs( physics_lines, data_type, erw.DecReportsLocation, associate_mc, - process.capitalize()) + process.capitalize(), output_manifest_file) algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent extra_locations_to_persist.extend(line_output_locations) @@ -242,6 +243,7 @@ def report_writers_node(streams, erw.DecReportsLocation, associate_mc, process.capitalize(), + manifest_file = output_manifest_file, stream="/Event/Spruce", reco_stream="/Event/HLT2", clone_mc=options.simulation and options.input_type == ROOT_KEY) @@ -465,6 +467,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): streams, options.data_type, process, + options.output_manifest_file, # Can only run association when we have access to the linker tables. Only want association for hlt step associate_mc=process == "hlt2" and options.simulation and options.input_type == ROOT_KEY and options.output_type == ROOT_KEY, diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 6ff0d98bbd4..bd3b067d6a9 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -11,7 +11,7 @@ """Configuration for persisting HLT2 objects in output ROOT/MDF files.""" from __future__ import absolute_import import itertools -import logging, os +import logging, os, json from pprint import pformat from Configurables import HltLinePersistenceSvc @@ -101,6 +101,26 @@ def get_type(dh): return None + +def get_packed_locations(inputs, stream): + packed_dhs = [] + + types = type_map() + k = list(types.keys()) + v = list(types.values()) + + for key, locs in inputs.items(): + for i in locs: + t = i.type + if i.type == "unknown_t": + t = k[v.index(key)] + + packed_dhs += [ (prefix(i.location, stream), t ) ] + + return { + 'PackedLocations': packed_dhs + } + @configurable def persist_line_outputs( @@ -109,6 +129,7 @@ def persist_line_outputs( dec_reports, associate_mc, source_id, + output_manifest_file, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from clone_mc=True): @@ -172,13 +193,25 @@ def persist_line_outputs( assert not isinstance(p, str) inputs["PP2MCPRelations"] += [p] + #for each key remove duplicates in the list + for key, value in inputs.items(): + inlist = list(dict.fromkeys(value)) + inputs[key] = inlist + + if output_manifest_file: + with open(output_manifest_file, 'w') as f: + json.dump( + get_packed_locations(inputs, stream), + f, + indent=4, + sort_keys=True) + + locify = lambda i: i.location if hasattr(i, 'location') else i inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} - #for each key remove duplicates in the list #and add stream to locations to match post cloning locations for key, value in inputs.items(): - inlist = list(dict.fromkeys(value)) inlist = [prefix(l, stream) for l in inlist] inputs[key] = inlist @@ -221,10 +254,10 @@ def persist_line_outputs( log.debug('packer_locations: ' + pformat(inputs.values())) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) - packer_cf, serialisation_cf, output_raw_data = pack_stream_objects( + packers_cf, serialisation_cf, output_raw_data = pack_stream_objects( stream, inputs, encoding_key, source_id) - cf.append(packer_cf) + cf.append(packers_cf) cf.append(serialisation_cf) if log.isEnabledFor(logging.DEBUG): diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 1406be4da6f..2a366b8f37a 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -74,13 +74,23 @@ def pack_stream_objects(stream, for t, p in p_map.items(): if t in inputs.keys(): - for loc in inputs[t]: + + if "Relation" not in t: packer = p( - InputName=force_location(loc), + InputName=[force_location(loc) for loc in inputs[t]], OutputLevel=OUTPUTLEVEL, EnableCheck=enable_check, EncodingKey=encoding_key) packers += [packer] + else: + for loc in inputs[t]: + packer = p( + InputName=force_location(loc), + OutputLevel=OUTPUTLEVEL, + EnableCheck=enable_check, + EncodingKey=encoding_key) + packers += [packer] + packers_cf = CompositeNode( "packers", @@ -103,7 +113,7 @@ def pack_stream_objects(stream, children=[bank_writer], ) - return packers_cf, serialisation_cf, bank_writer + return packers_cf, serialisation_cf, bank_writer def pack_stream_mc_locations(stream): -- GitLab From 62183a817c7a7a19729e4fabd4b81adde5895144 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Tue, 5 Jul 2022 11:16:37 +0000 Subject: [PATCH 020/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/23030733 --- Hlt/Moore/python/Moore/config.py | 2 +- .../python/Moore/persistence/__init__.py | 21 ++++++++----------- Hlt/Moore/python/Moore/persistence/packing.py | 3 +-- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 039379c8ac2..43864df2d75 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -243,7 +243,7 @@ def report_writers_node(streams, erw.DecReportsLocation, associate_mc, process.capitalize(), - manifest_file = output_manifest_file, + manifest_file=output_manifest_file, stream="/Event/Spruce", reco_stream="/Event/HLT2", clone_mc=options.simulation and options.input_type == ROOT_KEY) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index bd3b067d6a9..274c7d2b55b 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -101,25 +101,23 @@ def get_type(dh): return None - + def get_packed_locations(inputs, stream): packed_dhs = [] - + types = type_map() k = list(types.keys()) - v = list(types.values()) - + v = list(types.values()) + for key, locs in inputs.items(): - for i in locs: + for i in locs: t = i.type if i.type == "unknown_t": t = k[v.index(key)] - - packed_dhs += [ (prefix(i.location, stream), t ) ] - - return { - 'PackedLocations': packed_dhs - } + + packed_dhs += [(prefix(i.location, stream), t)] + + return {'PackedLocations': packed_dhs} @configurable @@ -205,7 +203,6 @@ def persist_line_outputs( f, indent=4, sort_keys=True) - locify = lambda i: i.location if hasattr(i, 'location') else i inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 2a366b8f37a..56c3a2835cf 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -90,7 +90,6 @@ def pack_stream_objects(stream, EnableCheck=enable_check, EncodingKey=encoding_key) packers += [packer] - packers_cf = CompositeNode( "packers", @@ -113,7 +112,7 @@ def pack_stream_objects(stream, children=[bank_writer], ) - return packers_cf, serialisation_cf, bank_writer + return packers_cf, serialisation_cf, bank_writer def pack_stream_mc_locations(stream): -- GitLab From 8497deb9c4e1ad9ed9c9e0026a4f5ef55325aed5 Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 5 Jul 2022 13:19:23 +0200 Subject: [PATCH 021/102] move manifest json file to persistency --- Hlt/Moore/python/Moore/persistence/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 274c7d2b55b..cfa3825e172 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -16,7 +16,7 @@ from pprint import pformat from Configurables import HltLinePersistenceSvc -from RecoConf.data_from_file import unpacked_mc_locations +#from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output -- GitLab From ad6b8c2973e6f71337724295515c0577d50b224c Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 5 Jul 2022 16:01:08 +0200 Subject: [PATCH 022/102] fix duplicates in packed locations --- Hlt/Moore/python/Moore/persistence/__init__.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index cfa3825e172..82eed8e3823 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -117,6 +117,7 @@ def get_packed_locations(inputs, stream): packed_dhs += [(prefix(i.location, stream), t)] + packed_dhs = list(dict.fromkeys(packed_dhs)) return {'PackedLocations': packed_dhs} @@ -191,11 +192,6 @@ def persist_line_outputs( assert not isinstance(p, str) inputs["PP2MCPRelations"] += [p] - #for each key remove duplicates in the list - for key, value in inputs.items(): - inlist = list(dict.fromkeys(value)) - inputs[key] = inlist - if output_manifest_file: with open(output_manifest_file, 'w') as f: json.dump( @@ -207,8 +203,10 @@ def persist_line_outputs( locify = lambda i: i.location if hasattr(i, 'location') else i inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} + #for each key remove duplicates in the list #and add stream to locations to match post cloning locations for key, value in inputs.items(): + inlist = list(dict.fromkeys(value)) inlist = [prefix(l, stream) for l in inlist] inputs[key] = inlist -- GitLab From 2c286f73fb884b4ff06db6cabc42dc9501fc63a3 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Tue, 31 May 2022 12:45:18 +0200 Subject: [PATCH 023/102] require (and generate) an explicit encoding key to configure encoding --- Hlt/Moore/python/Moore/config.py | 95 +++++----- .../python/Moore/persistence/__init__.py | 165 ++++++++++-------- Hlt/Moore/python/Moore/persistence/packing.py | 112 +++--------- Hlt/Moore/python/Moore/selreports.py | 13 +- Hlt/Moore/python/Moore/tcks.py | 96 ++++++---- 5 files changed, 237 insertions(+), 244 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 43864df2d75..f63a92d5c86 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -11,6 +11,7 @@ from __future__ import absolute_import import re, logging, inspect, itertools from collections import namedtuple +from Configurables import ApplicationMgr from PyConf import configurable from PyConf.Algorithms import ( ExecutionReportsWriter, HltDecReportsWriter, HltSelReportsWriter, @@ -18,7 +19,7 @@ from PyConf.Algorithms import ( CombineRawBankViewsToRawEvent, RawEventCombiner, RawEventSimpleCombiner, AddressKillerAlg, VoidFilter) import Functors as F -from PyConf.components import force_location +from PyConf.components import force_location, setup_component from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, @@ -35,7 +36,6 @@ from PyConf.application import ( ) from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError -from AllenConf.persistency import build_decision_ids #: Regular expression (compiled) defining the valid selection line names # Meaning: line names should start with either of Hlt1, Hlt2, Spruce, Pass @@ -115,11 +115,27 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name +def _build_decision_ids(decision_names, offset=1): + """Return a dict of decision names to integer IDs. + + Decision report IDs must not be zero. This method generates IDs starting + from offset. + + Args: + decision_names (list of str) + offset (int): needed so that there are no identical ints in the int->str relations + of HltRawBankDecoderBase + + Returns: + decision_ids (dict of str to int): Mapping from decision name to ID. + """ + return {name: idx for idx, name in enumerate(decision_names, offset)} + + @configurable def report_writers_node(streams, data_type, process, - output_manifest_file, associate_mc=False, clone_mc=False): """Return the control flow node and locations to persist of the default reports writers. @@ -165,71 +181,66 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - source_id = { - "hlt1": "Hlt1", - "hlt2": "Hlt2", - "spruce": "Spruce", - "pass": "Spruce" - }[process] - major_name = { - "hlt1": "Hlt1DecisionID", - "hlt2": "Hlt2DecisionID", - "spruce": "SpruceDecisionID", - "pass": "SpruceDecisionID" - }[process] - dec_key = int( - register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - if process == "hlt1" or process == "hlt2": + major_name = "{}SelectionID".format(process.capitalize()) + key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=dec_key, + TCK=key, ) drw = HltDecReportsWriter( - SourceID=source_id, + SourceID=process.capitalize(), InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=dec_key, + EncodingKey=key, ) algs.extend([erw, drw]) new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - srm = make_selreports(process, physics_lines, erw) + encoding_key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? + srm = make_selreports(physics_lines, erw, encoding_key) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) barrier_algorithms.append(srm) srw = HltSelReportsWriter( - SourceID=source_id, + SourceID=process.capitalize(), DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=srm.properties['EncodingKey']) + EncodingKey=encoding_key) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": (line_output_cf, line_output_locations, packed_data) = persist_line_outputs( physics_lines, data_type, erw.DecReportsLocation, associate_mc, - process.capitalize(), output_manifest_file) + process.capitalize()) algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent extra_locations_to_persist.extend(line_output_locations) else: ##spruce and passthrough jobs will write a Spruce report + major = "SpruceSelectionID" erw = ExecutionReportsWriter( Persist=[line.name for line in lines], - ANNSvcKey=major_name, - TCK=dec_key # TODO unsigned? Stick to hex string? + ANNSvcKey=major, + TCK=int( + register_encoding_dictionary( + major, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( - SourceID=source_id, + SourceID='Spruce', InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=dec_key, ) algs.extend([erw, drw]) @@ -243,7 +254,6 @@ def report_writers_node(streams, erw.DecReportsLocation, associate_mc, process.capitalize(), - manifest_file=output_manifest_file, stream="/Event/Spruce", reco_stream="/Event/HLT2", clone_mc=options.simulation and options.input_type == ROOT_KEY) @@ -459,15 +469,14 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): if process == "hlt2": offset = 1000 elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 - ann_config[key] = build_decision_ids([l.decision_name for l in lines], - offset) - # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) + ann_config[key] = _build_decision_ids([l.decision_name for l in lines], + offset) + # register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, options.data_type, process, - options.output_manifest_file, # Can only run association when we have access to the linker tables. Only want association for hlt step associate_mc=process == "hlt2" and options.simulation and options.input_type == ROOT_KEY and options.output_type == ROOT_KEY, @@ -660,29 +669,21 @@ def get_allen_hlt1_decision_ids(): """ from RecoConf.hlt1_allen import get_allen_line_names -<<<<<<< HEAD from AllenConf.persistency import build_decision_ids return build_decision_ids(get_allen_line_names()) -======= - return build_decision_ids(get_allen_line_names()) - ->>>>>>> d8806c829 (use AllenConf.persistency.build_decision_ids) def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) from Allen.config import setup_allen_non_event_data_service - from AllenConf.persistency import make_dec_reporter, register_decision_ids + from AllenConf.persistency import make_dec_reporter options.finalize() non_event_data_node = setup_allen_non_event_data_service() - ids = get_allen_hlt1_decision_ids() - encoding_key = register_decision_ids(ids) - # TODO: remove when full configuration of Allen from TCK is implemented - make_dec_reporter.global_bind(TCK=encoding_key) + if options.tck: make_dec_reporter.global_bind(TCK=options.tck) # Write DecReports raw banks allen_cf, allen_barriers = allen_gaudi_node_barriers() @@ -694,6 +695,8 @@ def allen_control_flow(options, write_detector_raw_banks=True): algs.extend([srw]) new_hlt_banks['HltSelReports'] = srw.OutputRawReports + decision_ids = get_allen_hlt1_decision_ids() + # register the decision_ids... and get the oid of their mapping # hlt1_decision_ids=decision_ids, hlt2_decision_ids={}, spruce_decision_ids={}) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 82eed8e3823..cf61706136d 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -11,22 +11,24 @@ """Configuration for persisting HLT2 objects in output ROOT/MDF files.""" from __future__ import absolute_import import itertools -import logging, os, json +import logging, os from pprint import pformat from Configurables import HltLinePersistenceSvc -#from RecoConf.data_from_file import unpacked_mc_locations +from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output -from PyConf.location_prefix import prefix +from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix +from PyConf.object_types import type_map, classid_map from PyConf.application import register_encoding_dictionary -from GaudiConf.reading import type_map +from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations, packers_map -from .persistreco import persistreco_line_outputs +from .packing import pack_stream_objects, pack_stream_mc +from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed +from .serialisation import serialise_packed_containers from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC log = logging.getLogger(__name__) @@ -60,26 +62,37 @@ def _referenced_inputs(lines, inputs): #fill the packer inputs dictionary based on object type for dh in line_locs: - typ = get_type(dh) - if typ and typ in inputs.keys(): - inputs[typ] += [dh] + type = get_type(dh) + + if type and type in inputs.keys(): + inputs[type] += [dh.location] return inputs def _referenced_locations(lines): all_locs = {} + all_types = {} for l in lines: # Include the locations of the line outputs themselves line_locs = set() # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - all_locs[l.decision_name] = [dh for dh in line_locs] + + # Convert DataHandle to str, for configuring the ANN service + all_locs[l.decision_name] = [dh.location for dh in line_locs] + all_types[l.decision_name] = [] + for dh in line_locs: + if get_type(dh): + all_types[l.decision_name] += [get_type(dh)] + else: + all_types[l.decision_name] += [dh.type] + #zipped = zip(all_locs[l.decision_name], all_types[l.decision_name]) return all_locs def get_type(dh): - #For this to work, one needs to add new types to object_types.py in GaudiConf + #For this to work, one needs to add new types to object_types.py in Pyconf types = type_map() if dh.type in types.keys(): return types[dh.type] @@ -102,25 +115,6 @@ def get_type(dh): return None -def get_packed_locations(inputs, stream): - packed_dhs = [] - - types = type_map() - k = list(types.keys()) - v = list(types.values()) - - for key, locs in inputs.items(): - for i in locs: - t = i.type - if i.type == "unknown_t": - t = k[v.index(key)] - - packed_dhs += [(prefix(i.location, stream), t)] - - packed_dhs = list(dict.fromkeys(packed_dhs)) - return {'PackedLocations': packed_dhs} - - @configurable def persist_line_outputs( lines, @@ -128,7 +122,6 @@ def persist_line_outputs( dec_reports, associate_mc, source_id, - output_manifest_file, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from clone_mc=True): @@ -174,34 +167,26 @@ def persist_line_outputs( log.debug('line_locations: ' + pformat(persistence_svc.Locations)) # Make a dictinary for all known object types with emty values - p_map = packers_map() - inputs = {t: [] for t in p_map.keys()} + inputs = PersistRecoPacking().dictionary() #add line outputs to fill the dictionary inputs = _referenced_inputs(lines, inputs) #add the locations from reco objects to the dictinary prdict = persistreco_line_outputs() + prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - for val in prdict.values(): + for key, val in prdict.items(): name = get_type(val) #find type of object for this DH - if name: inputs[name] += [get_output(val)] + if name: + inputs[name] += [get_output(val).location] # add proto particle relations if they exist for p in protoparticle_relations: - assert not isinstance(p, str) - inputs["PP2MCPRelations"] += [p] - - if output_manifest_file: - with open(output_manifest_file, 'w') as f: - json.dump( - get_packed_locations(inputs, stream), - f, - indent=4, - sort_keys=True) - - locify = lambda i: i.location if hasattr(i, 'location') else i - inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} + if isinstance(p, str): + inputs["PP2MCPRelations"] += [p] + else: + inputs["PP2MCPRelations"] += [p.location] #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -226,42 +211,86 @@ def persist_line_outputs( pformat(output_cloner_locations)) cf.append(output_cloner_cf) - ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ i for ilist in inputs.values() for i in ilist]) | \ - set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) - - if clone_mc: - mc_stream = stream - if reco_stream not in stream: mc_stream = prefix(reco_stream, stream) - locations = locations.union(pack_stream_mc_locations(mc_stream)) + #Make a dictionary for output packer locations + #For line outputs, "stream+/p" added to input locations + #For reco objects, there are pre-defined output locations + #This is to be able to find reco objects regardless of their producer + outputs = {} + for key, value in inputs.items(): + outputs[key] = [] + for v in value: + if v in prdict_packed.keys(): + outputs[key] += [prdict_packed[v]] #reco + else: + outputs[key] += [packed_prefix(v, stream)] #line + + prpacking = PersistRecoPacking( + stream=stream, + unpacked=inputs, + packed=outputs, + data_type=data_type, + ) + ### TODO: reduce the set of encoding keys to the smallest possible one... encoding_key = int( - register_encoding_dictionary("PackedObjectLocations", - sorted(locations)), 16) + register_encoding_dictionary( + "PackedObjectLocations", + sorted( + set([i for i in prpacking.packedLocations()]) + | set([ + unpacked_prefix(i, stream) + for i in prpacking.packedLocations() + ]) + | set([i for i in prpacking.unpackedLocations()]) + | set([ + i for i in itertools.chain( + *_referenced_locations(lines).values()) + ]))), 16) + + packer_cf, packer_locations = pack_stream_objects(stream, prpacking, + encoding_key) + cf.append(packer_cf) packer_mc_locations = [] if clone_mc: + mc_stream = stream + if reco_stream not in stream: + mc_stream = prefix(reco_stream, stream) mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) if log.isEnabledFor(logging.DEBUG): - log.debug('packer_locations: ' + pformat(inputs.values())) + log.debug('packer_locations: ' + pformat(packer_locations)) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) - packers_cf, serialisation_cf, output_raw_data = pack_stream_objects( - stream, inputs, encoding_key, source_id) - - cf.append(packers_cf) - cf.append(serialisation_cf) + serialisation_cf, output_raw_data = serialise_packed_containers( + packer_locations, source_id) if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) + cf.append(serialisation_cf) - # is this still needed for something? - #unpacked_mc_loc = [ - # prefix(l, reco_stream) for l in unpacked_mc_locations().values() - #] + unpacked_mc = unpacked_mc_locations() + unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] + + # Gather all possible locations which might be referenced... + #registered_locs = list( + # itertools.chain( + # packer_locations, + # [ unpacked_prefix(keys, stream) for keys in prpacking.packedLocations() ], + # prpacking.packedLocations(), + # prpacking.unpackedLocations(), + # unpacked_mc_locations().values(), + # [prefix(l, stream) for l in unpacked_mc_loc], + # itertools.chain(*_referenced_locations(lines).values()), + # )) + + # ...including all prefixed (post-cloning) locations + #registered_locs += [prefix(l, tes_prefix=stream) for l in registered_locs] + + #if log.isEnabledFor(logging.DEBUG): + # log.debug('registered_locs: ' + pformat(registered_locs)) control_flow_node = CompositeNode( "hlt2_line_output_persistence", diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 56c3a2835cf..a9a165b65de 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -12,12 +12,9 @@ import logging import os from PyConf.Algorithms import ( - PackMCParticle, PackMCVertex, RecVertexPacker, VertexPacker, RichPIDPacker, - MuonPIDPacker, ProtoParticlePacker, ParticlePacker, TrackPacker, - FlavourTagPacker, CaloHypoPacker, CaloClusterPacker, CaloDigitPacker, - CaloAdcPacker, P2VRelationPacker, P2MCPRelationPacker, P2IntRelationPacker, - P2InfoRelationPacker, PP2MCPRelationPacker, HltPackedBufferWriter) - + PackMCParticle, + PackMCVertex, +) from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic @@ -28,104 +25,39 @@ log = logging.getLogger(__name__) from PyConf import configurable -def packers_map(): - - return { - "PVs": RecVertexPacker, - "Vertices": VertexPacker, - "Tracks": TrackPacker, - "RichPIDs": RichPIDPacker, - "MuonPIDs": MuonPIDPacker, - "CaloHypos": CaloHypoPacker, - "CaloClusters": CaloClusterPacker, - "CaloDigits": CaloDigitPacker, - "CaloAdcs": CaloAdcPacker, - "ProtoParticles": ProtoParticlePacker, - "Particles": ParticlePacker, - "FlavourTags": FlavourTagPacker, - "P2VRelations": P2VRelationPacker, - "P2MCPRelations": P2MCPRelationPacker, - "P2IntRelations": P2IntRelationPacker, - "P2InfoRelations": P2InfoRelationPacker, - "PP2MCPRelations": PP2MCPRelationPacker - } - - @configurable -def pack_stream_objects(stream, - inputs, - encoding_key, - source_id, - enable_check=False): - """Return CF node that packs and serialises a set of containers to a raw bank. +def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): + """Return a list of packers that will produce all packed output. Args: - stream (str): TES root containing objects to be persisted. - inputs (map): Type: locations to be persisted + stream (str): TES root containing objects to be packed. + prpacking (PersistRecoPacking object): PersistRecoPacking object that describes packing configuration. Returns: - serialisation_node (CompositeNode). - output_raw_data (DataHandle): Raw event with serialised data, - i.e. the DstData bank. - + algs (list): Algorithms to run the packing. + outputs (list of str): Locations that should be persisted, in the + specification used by ROOT output writers (e.g. OutputStream). """ - p_map = packers_map() - packers = [] - - for t, p in p_map.items(): - if t in inputs.keys(): - - if "Relation" not in t: - packer = p( - InputName=[force_location(loc) for loc in inputs[t]], - OutputLevel=OUTPUTLEVEL, - EnableCheck=enable_check, - EncodingKey=encoding_key) - packers += [packer] - else: - for loc in inputs[t]: - packer = p( - InputName=force_location(loc), - OutputLevel=OUTPUTLEVEL, - EnableCheck=enable_check, - EncodingKey=encoding_key) - packers += [packer] + + persistreco_packers = prpacking.packers( + output_level=OUTPUTLEVEL, + enable_check=enable_check, + encoding_key=encoding_key) packers_cf = CompositeNode( "packers", - children=packers, + children=persistreco_packers, combine_logic=NodeLogic.NONLAZY_OR, force_order=True, ) - packers_output_locations = [ - get_output(p.outputs["OutputName"]).location for p in packers - ] - - bank_writer = HltPackedBufferWriter( - PackedContainers=packers_output_locations, - OutputLevel=OUTPUTLEVEL, - SourceID=source_id) - - serialisation_cf = CompositeNode( - "serialisation", - children=[bank_writer], - ) + packers_output_locations = [] + for p in persistreco_packers: + packers_output_locations += [ + get_output(p.outputs["OutputName"]).location + ] - return packers_cf, serialisation_cf, bank_writer - - -def pack_stream_mc_locations(stream): - return [ - os.path.join(stream, - str(PackMCParticle.getDefaultProperties()["InputName"])), - os.path.join(stream, - str(PackMCVertex.getDefaultProperties()["InputName"])), - os.path.join(stream, - str(PackMCParticle.getDefaultProperties()["OutputName"])), - os.path.join(stream, - str(PackMCVertex.getDefaultProperties()["OutputName"])) - ] + return packers_cf, packers_output_locations def pack_stream_mc(stream): diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 642fe7b6af6..6bc65f3f7f5 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,7 +38,6 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) -from PyConf.application import register_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -209,11 +208,12 @@ def convert_output(alg): alg.type)) -def make_selreports(process, lines, decreports, **kwargs): +def make_selreports(lines, decreports, encoding_key, **kwargs): """Return a SelReportsMaker instance configured for the given lines. Args: - lines: The list of lines for which to create SelReport objects + lines (list of DecisionLine): The lines to create SelReport objects + for. decreports: DecReports data used as input to the SelReports maker. kwargs: Passed to the SelReportsMaker. """ @@ -226,11 +226,6 @@ def make_selreports(process, lines, decreports, **kwargs): else: # No lines we can handle, so do nothing names, outputs, types = [], [], [] - - key = int( - register_encoding_dictionary( - "{}SelectionID".format(process.capitalize()), names), 16) - # Each line output should be unique; we expect no two lines to do exactly # the same work assert len(outputs) == len( @@ -241,5 +236,5 @@ def make_selreports(process, lines, decreports, **kwargs): SelectionNames=names, CandidateTypes=types, Inputs=outputs, - EncodingKey=key, + EncodingKey=encoding_key, **kwargs) diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index 0244509d6c7..f402d56755d 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -63,14 +63,23 @@ class _ConfigurableEncoder(json.JSONEncoder): return obj -def load_manifest(fname): - ### TODO: implement me!!! - with open(fname) as f: - manifest = json.load(f) - return manifest +def dump_hlt2_configuration(config, fname): + """Dump the HLT2 configuration in to a JSON TCK file. + + Note: + The `config` argument is currently unused as the configuration + dictionary returned by `Moore.run_moore` does not contain all + configurables. This will change once LHCb#141 has been addressed. + + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") -def load_hlt2_configuration(fname): +def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): """Instantiate configurables based on an HLT2 TCK. Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 @@ -84,28 +93,53 @@ def load_hlt2_configuration(fname): with open(fname) as f: config = json.load(f) - try: - # see if this is an old-style .tck.json file needed for decoding - # because the encoding key is not present in the data - # - # In that case, we just configure the GitAnnSvc with an overrule - # for a zero key - dicts = config["HltANNSvc/HltANNSvc"] - cfg = json.dumps({ - 'Hlt1SelectionID': - dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': - dicts["Hlt2SelectionID"], - 'SpruceSelectionID': - dicts["SpruceSelectionID"], - 'PackedObjectLocations': - dicts["PackedObjectLocations"] - }) - - from Configurables import GitANNSvc - return GitANNSvc('HltANNSvc', Overrule={0: cfg}) - except: - print("load_hlt_configuration: not an old-style .tck.json file") - print( - "if not running on an old file with zero encoding key, just remove the call" - ) + dicts = config["HltANNSvc/HltANNSvc"] + cfg = json.dumps({ + 'Hlt1SelectionID': dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': dicts["Hlt2SelectionID"], + 'SpruceSelectionID': dicts["SpruceSelectionID"], + 'PackedObjectLocations': dicts["PackedObjectLocations"] + }) + + from Configurables import GitANNSvc + return GitANNSvc(annsvc_name, Overrule={0: cfg}) + + +def dump_sprucing_configuration(config, fname): + """Dump the Sprucing configuration in to a JSON TCK file. + Note we need the `Hlt{1,2}SelectionID`s from the Hlt2 ANNSvc + that we read into "HltANNSvcReading" + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def dump_passthrough_configuration(config, fname): + """Dump the pass-through Sprucing configuration in to a JSON TCK file. + Here we need the `Hlt{1,2}SelectionID`s and `PackedObjectLocations` from the + Hlt2 job ANNSvc that we read into "HltANNSvcReading" + + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def load_sprucing_configuration(fname, annsvc_name): + """Instantiate configurables based on a Sprucing TCK. + + Returns an HltANNSvc loaded with the HltANNSvc configuration of the + Sprucing application. + + Args: + fname -- Filename of the JSON TCK file produced by + ``dump_sprucing_configuration``. + annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. + """ + + return load_hlt2_configuration(fname, annsvc_name) -- GitLab From e4ddbac2638294c48a229a9667a56061b9d899c4 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Wed, 1 Jun 2022 12:31:29 +0200 Subject: [PATCH 024/102] remove no longer required configuration of ANNSvc for readback --- Hlt/Moore/python/Moore/config.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index f63a92d5c86..0e760f7bf5f 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -11,7 +11,6 @@ from __future__ import absolute_import import re, logging, inspect, itertools from collections import namedtuple -from Configurables import ApplicationMgr from PyConf import configurable from PyConf.Algorithms import ( ExecutionReportsWriter, HltDecReportsWriter, HltSelReportsWriter, @@ -19,7 +18,7 @@ from PyConf.Algorithms import ( CombineRawBankViewsToRawEvent, RawEventCombiner, RawEventSimpleCombiner, AddressKillerAlg, VoidFilter) import Functors as F -from PyConf.components import force_location, setup_component +from PyConf.components import force_location from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, -- GitLab From e7332b5ae2f5bce24b89b10e4023530cc990bd31 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Fri, 3 Jun 2022 14:12:51 +0200 Subject: [PATCH 025/102] replace dump_xyz_config with options.output_manifest_file --- .../options/qee/spruce_qee_example.py | 2 +- .../sprucing/spruce_example_realtime.py | 3 ++ Hlt/Moore/python/Moore/tcks.py | 49 ++----------------- 3 files changed, 8 insertions(+), 46 deletions(-) diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py index 6ee32a41aea..4b2a4a831d9 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py @@ -33,7 +33,7 @@ options.dddb_tag = 'dddb-20201211' options.conddb_tag = 'sim-20201218-vc-mu100' options.output_file = 'qee_zmumu_spruce.dst' options.output_type = 'ROOT' -options.output_manifest_file = "qee_zmumu_spruce.tck.json" +options.ouptut_manifest_file = "qee_zmumu_spruce.tck.json" load_hlt2_configuration('hlt2_qee_zmumu.tck.json') diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index d3753b362ba..ae249a2b82a 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -11,6 +11,7 @@ """Test running Sprucing line on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_example_realtimereco.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -31,6 +32,8 @@ options.output_file = 'spruce_example_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): return [ diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index f402d56755d..ffb1e662061 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -63,23 +63,7 @@ class _ConfigurableEncoder(json.JSONEncoder): return obj -def dump_hlt2_configuration(config, fname): - """Dump the HLT2 configuration in to a JSON TCK file. - - Note: - The `config` argument is currently unused as the configuration - dictionary returned by `Moore.run_moore` does not contain all - configurables. This will change once LHCb#141 has been addressed. - - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): +def load_hlt2_configuration(fname): """Instantiate configurables based on an HLT2 TCK. Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 @@ -102,35 +86,10 @@ def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): }) from Configurables import GitANNSvc - return GitANNSvc(annsvc_name, Overrule={0: cfg}) - - -def dump_sprucing_configuration(config, fname): - """Dump the Sprucing configuration in to a JSON TCK file. - Note we need the `Hlt{1,2}SelectionID`s from the Hlt2 ANNSvc - that we read into "HltANNSvcReading" - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def dump_passthrough_configuration(config, fname): - """Dump the pass-through Sprucing configuration in to a JSON TCK file. - Here we need the `Hlt{1,2}SelectionID`s and `PackedObjectLocations` from the - Hlt2 job ANNSvc that we read into "HltANNSvcReading" - - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") + return GitANNSvc('HltANNSvc', Overrule={0: cfg}) -def load_sprucing_configuration(fname, annsvc_name): +def load_sprucing_configuration(fname): """Instantiate configurables based on a Sprucing TCK. Returns an HltANNSvc loaded with the HltANNSvc configuration of the @@ -142,4 +101,4 @@ def load_sprucing_configuration(fname, annsvc_name): annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. """ - return load_hlt2_configuration(fname, annsvc_name) + return load_hlt2_configuration(fname) -- GitLab From 4dfced32fb97f74fc738b074d64b37004c83af31 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Mon, 6 Jun 2022 12:27:26 +0200 Subject: [PATCH 026/102] propagate file manifest instead of hijacking the ANNSvc configurable --- Hlt/Hlt1Conf/tests/options/test_decreports.py | 34 ++++---- Hlt/Hlt2Conf/options/hlt2_check_output.py | 8 +- .../python/Moore/persistence/__init__.py | 80 ++++++------------- Hlt/Moore/python/Moore/tcks.py | 36 ++++++--- .../RecoConf/reco_objects_for_spruce.py | 73 +++++++++-------- 5 files changed, 108 insertions(+), 123 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 06e916099ea..081eb753ec0 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -19,12 +19,16 @@ configure the HltANNSvc for the job ran by this script. from __future__ import print_function import argparse -from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp, GitANNSvc) +from Configurables import ( + ApplicationMgr, + HistogramPersistencySvc, + IODataManager, + LHCbApp, +) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import get_metainfo_repos + from PyConf.utilities import read_options # Top-level control flow node @@ -57,19 +61,19 @@ IOHelper("MDF").inputFiles([args.input_mdf]) IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) -# Configure TCKANNSvc (as that is what DecoderDB wants...) -ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) - # Decode Hlt DecReports -appMgr = ApplicationMgr( +ApplicationMgr( TopAlg=[DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()]) -appMgr.ExtSvc += [ann] -# Get expected lines from the previous job +# Get expected lines and HltANNSvc configuration from the previous job options = read_options(args.input_options) +lines = options["ExecutionReportsWriter"]["Persist"] +#Hlt1SelectionIDs = options["HltANNSvc"]["Hlt1SelectionID"] +#HltANNSvc().Hlt1SelectionID = Hlt1SelectionIDs +#print(Hlt1SelectionIDs) # Set up counters for recording decisions from MDF -counts_from_mdf = {} # key: 0 for key in Hlt1SelectionIDs} +counts_from_mdf = {key: 0 for key in Hlt1SelectionIDs} counts_from_mdf[MOORE_KEY] = 0 # Extract counters from log file of the previous job counts_from_log = get_counts_from_log(args.input_log) @@ -86,12 +90,12 @@ while TES["/Event"]: break triggered = False - for name in (str(i) for i in decs.decisionNames()): - if name not in counts_from_mdf.keys(): counts_from_mdf[name] = 0 - dr = decs.decReport(name) - if dr and dr.decision(): + for key in counts_from_mdf.keys(): + if key == MOORE_KEY: + continue + counts_from_mdf[key] += int(decs.decReport(key).decision()) + if decs.decReport(key).decision(): triggered = True - counts_from_mdf[name] += 1 if triggered: counts_from_mdf[MOORE_KEY] += 1 diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 86f40b6ec0a..18f85fa2336 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -19,15 +19,13 @@ Takes command-line arguments: python hlt2_check_output.py """ from __future__ import print_function -import sys +import sys,os import GaudiPython as GP from GaudiConf import IOHelper -from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, - GitANNSvc) +from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, GitANNSvc) from GaudiConf.reading import do_unpacking -from PyConf.application import get_metainfo_repos from GaudiConf.reading import load_manifest @@ -50,7 +48,7 @@ manifest = load_manifest(sys.argv[2]) algs = do_unpacking(manifest, process='Hlt2', output_level=4) appmgr = ApplicationMgr(TopAlg=algs) -appmgr.ExtSvc += [GitANNSvc('HltANNSvc', Repositories=get_metainfo_repos())] +appmgr.ExtSvc += [ GitANNSvc( 'HltANNSvc', Repository="{}/.git".format(os.environ['HLTTCKROOT'])) ] input_file = sys.argv[1] input_type = "ROOT" if input_file.find(".dst") != -1 else "RAW" diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index cf61706136d..bfd1ec4a869 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -21,12 +21,12 @@ from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix -from PyConf.object_types import type_map, classid_map from PyConf.application import register_encoding_dictionary +from GaudiConf.reading import type_map from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc +from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed from .serialisation import serialise_packed_containers from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC @@ -62,10 +62,9 @@ def _referenced_inputs(lines, inputs): #fill the packer inputs dictionary based on object type for dh in line_locs: - type = get_type(dh) - - if type and type in inputs.keys(): - inputs[type] += [dh.location] + typ = get_type(dh) + if typ and typ in inputs.keys(): + inputs[typ] += [dh] return inputs @@ -79,20 +78,12 @@ def _referenced_locations(lines): for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - # Convert DataHandle to str, for configuring the ANN service - all_locs[l.decision_name] = [dh.location for dh in line_locs] - all_types[l.decision_name] = [] - for dh in line_locs: - if get_type(dh): - all_types[l.decision_name] += [get_type(dh)] - else: - all_types[l.decision_name] += [dh.type] - #zipped = zip(all_locs[l.decision_name], all_types[l.decision_name]) + all_locs[l.decision_name] = [dh for dh in line_locs] return all_locs def get_type(dh): - #For this to work, one needs to add new types to object_types.py in Pyconf + #For this to work, one needs to add new types to object_types.py in GaudiConf types = type_map() if dh.type in types.keys(): return types[dh.type] @@ -179,14 +170,15 @@ def persist_line_outputs( for key, val in prdict.items(): name = get_type(val) #find type of object for this DH if name: - inputs[name] += [get_output(val).location] + inputs[name] += [get_output(val)] # add proto particle relations if they exist for p in protoparticle_relations: - if isinstance(p, str): - inputs["PP2MCPRelations"] += [p] - else: - inputs["PP2MCPRelations"] += [p.location] + assert not isinstance(p, str) + inputs["PP2MCPRelations"] += [p] + + locify = lambda i : i.location if hasattr(i,'location') else i + inputs = { t: [ locify(i) for i in dhs] for t,dhs in inputs.items() } #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -232,20 +224,19 @@ def persist_line_outputs( ) ### TODO: reduce the set of encoding keys to the smallest possible one... + locations = set([ i for i in prpacking.packedLocations()]) | \ + set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ + set([ i for i in prpacking.unpackedLocations()]) | \ + set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) + + if clone_mc: + mc_stream = stream + if reco_stream not in stream: mc_stream = prefix(reco_stream, stream) + locations = locations.union(pack_stream_mc_locations(mc_stream)) + encoding_key = int( - register_encoding_dictionary( - "PackedObjectLocations", - sorted( - set([i for i in prpacking.packedLocations()]) - | set([ - unpacked_prefix(i, stream) - for i in prpacking.packedLocations() - ]) - | set([i for i in prpacking.unpackedLocations()]) - | set([ - i for i in itertools.chain( - *_referenced_locations(lines).values()) - ]))), 16) + register_encoding_dictionary("PackedObjectLocations", + sorted(locations)), 16) packer_cf, packer_locations = pack_stream_objects(stream, prpacking, encoding_key) @@ -254,9 +245,6 @@ def persist_line_outputs( packer_mc_locations = [] if clone_mc: - mc_stream = stream - if reco_stream not in stream: - mc_stream = prefix(reco_stream, stream) mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) @@ -274,24 +262,6 @@ def persist_line_outputs( unpacked_mc = unpacked_mc_locations() unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] - # Gather all possible locations which might be referenced... - #registered_locs = list( - # itertools.chain( - # packer_locations, - # [ unpacked_prefix(keys, stream) for keys in prpacking.packedLocations() ], - # prpacking.packedLocations(), - # prpacking.unpackedLocations(), - # unpacked_mc_locations().values(), - # [prefix(l, stream) for l in unpacked_mc_loc], - # itertools.chain(*_referenced_locations(lines).values()), - # )) - - # ...including all prefixed (post-cloning) locations - #registered_locs += [prefix(l, tes_prefix=stream) for l in registered_locs] - - #if log.isEnabledFor(logging.DEBUG): - # log.debug('registered_locs: ' + pformat(registered_locs)) - control_flow_node = CompositeNode( "hlt2_line_output_persistence", combine_logic=NodeLogic.NONLAZY_OR, diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index ffb1e662061..f8b3e080290 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -63,6 +63,12 @@ class _ConfigurableEncoder(json.JSONEncoder): return obj +def load_manifest(fname): + ### TODO: implement me!!! + with open(fname) as f: + manifest = json.load(f) + return manifest + def load_hlt2_configuration(fname): """Instantiate configurables based on an HLT2 TCK. @@ -77,17 +83,25 @@ def load_hlt2_configuration(fname): with open(fname) as f: config = json.load(f) - dicts = config["HltANNSvc/HltANNSvc"] - cfg = json.dumps({ - 'Hlt1SelectionID': dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': dicts["Hlt2SelectionID"], - 'SpruceSelectionID': dicts["SpruceSelectionID"], - 'PackedObjectLocations': dicts["PackedObjectLocations"] - }) - - from Configurables import GitANNSvc - return GitANNSvc('HltANNSvc', Overrule={0: cfg}) - + try: + # see if this is an old-style .tck.json file needed for decoding + # because the encoding key is not present in the data + # + # In that case, we just configure the GitAnnSvc with an overrule + # for a zero key + dicts = config["HltANNSvc/HltANNSvc"] + cfg = json.dumps({ + 'Hlt1SelectionID': dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': dicts["Hlt2SelectionID"], + 'SpruceSelectionID': dicts["SpruceSelectionID"], + 'PackedObjectLocations': dicts["PackedObjectLocations"] + }) + + from Configurables import GitANNSvc + return GitANNSvc('HltANNSvc', Overrule={0: cfg}) + except: + print( "load_hlt_configuration: not an old-style .tck.json file" ) + print( "if not running on an old file with zero encoding key, just remove the call" ) def load_sprucing_configuration(fname): """Instantiate configurables based on a Sprucing TCK. diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index aab44b3f815..72d35fc2657 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -8,24 +8,28 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -from GaudiConf import reading -_reco_loc = { - "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), - "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), - "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), - #"MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), - "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), - "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), - "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), - "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), - "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), - "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), - "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs") +from GaudiConf import reading +from Configurables import ApplicationMgr +from PyConf.components import setup_component +from PyConf.location_prefix import unpacked_prefix + +packed_loc = { + "ChargedProtos": "/Event/HLT2/pRec/ProtoP/Charged", + "NeutralProtos": "/Event/HLT2/pRec/ProtoP/Neutrals", + "Tracks": "/Event/HLT2/pRec/Track/Best", + "MuonTracks": "/Event/HLT2/pRec/Track/Muon", + "PVs": "/Event/HLT2/pRec/Vertex/Primary", + "CaloElectrons": "/Event/HLT2/pRec/Calo/Electrons", + "CaloPhotons": "/Event/HLT2/pRec/Calo/Photons", + "CaloMergedPi0s": "/Event/HLT2/pRec/Calo/MergedPi0s", + "CaloSplitPhotons": "/Event/HLT2/pRec/Calo/SplitPhotons", + "MuonPIDs": "/Event/HLT2/pRec/Muon/MuonPID", + "RichPIDs": "/Event/HLT2/pRec/Rich/PIDs", } -def upfront_reconstruction(): +def upfront_reconstruction( ): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -34,49 +38,44 @@ def upfront_reconstruction(): """ - stream = '/Event/HLT2' + locations_to_decode = reading.make_locations( packed_loc, "/Event/HLT2") + decoder = reading.decoder( - configurables=False, output_level=4, stream=stream) + locations=locations_to_decode, + configurables=False, + output_level=4) mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) - inv_map = {v: k for k, v in reading.type_map().items()} - reco_manifest = { - 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] - } - - ## TODO: only pass reco_manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - reading.make_locations(reco_manifest, stream), - reco_manifest, - decoder.OutputBuffers, + locations=locations_to_decode, configurables=False, mc=mc_algs, output_level=4) - ### TODO:FIXME take advantage of the fact that the above have datahandles... - # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms return [decoder] + mc_algs + unpackers -def reconstruction(): +def reconstruction( ): """Return a {name: DataHandle} dict that define the reconstruction output.""" - m = {} - unpackers = upfront_reconstruction() + map = {} + unpackers = upfront_reconstruction( ) - for key, value in _reco_loc.items(): + for key, value in packed_loc.items(): for v in unpackers: - if "OutputName" in v.outputs.keys( - ) and v.OutputName.location == value[0]: - m[key] = v.OutputName + if "OutputName" in v.outputs.keys(): + if v.OutputName.location == unpacked_prefix( + value, "/Event/HLT2"): + map[key] = v.OutputName ### Temporary: as long as we persist v1, we need to insert a converter for the new PVs from PyConf.Algorithms import RecV1ToPVConverter - m["PVs_v1"] = m["PVs"] - m["PVs"] = RecV1ToPVConverter(InputVertices=m["PVs_v1"]).OutputVertices - return m + map["PVs_v1"] = map["PVs"] + map["PVs"] = RecV1ToPVConverter(InputVertices=map["PVs_v1"]).OutputVertices + + return map def make_charged_protoparticles(): -- GitLab From 5fe5e361990fed8b752fb1e81faabc5acdb8e713 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 9 Jun 2022 22:43:40 +0200 Subject: [PATCH 027/102] make sure the packed locations do _not_ enter in the encoding table --- .../python/Moore/persistence/__init__.py | 3 +- .../RecoConf/reco_objects_for_spruce.py | 28 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index bfd1ec4a869..8229678bf62 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -224,8 +224,7 @@ def persist_line_outputs( ) ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ i for i in prpacking.packedLocations()]) | \ - set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ + locations = set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ set([ i for i in prpacking.unpackedLocations()]) | \ set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 72d35fc2657..cc003fb4206 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -14,18 +14,18 @@ from Configurables import ApplicationMgr from PyConf.components import setup_component from PyConf.location_prefix import unpacked_prefix -packed_loc = { - "ChargedProtos": "/Event/HLT2/pRec/ProtoP/Charged", - "NeutralProtos": "/Event/HLT2/pRec/ProtoP/Neutrals", - "Tracks": "/Event/HLT2/pRec/Track/Best", - "MuonTracks": "/Event/HLT2/pRec/Track/Muon", - "PVs": "/Event/HLT2/pRec/Vertex/Primary", - "CaloElectrons": "/Event/HLT2/pRec/Calo/Electrons", - "CaloPhotons": "/Event/HLT2/pRec/Calo/Photons", - "CaloMergedPi0s": "/Event/HLT2/pRec/Calo/MergedPi0s", - "CaloSplitPhotons": "/Event/HLT2/pRec/Calo/SplitPhotons", - "MuonPIDs": "/Event/HLT2/pRec/Muon/MuonPID", - "RichPIDs": "/Event/HLT2/pRec/Rich/PIDs", +reco_loc = { + "ChargedProtos": "/Event/HLT2/Rec/ProtoP/Charged", + "NeutralProtos": "/Event/HLT2/Rec/ProtoP/Neutrals", + "Tracks": "/Event/HLT2/Rec/Track/Best", + "MuonTracks": "/Event/HLT2/Rec/Track/Muon", + "PVs": "/Event/HLT2/Rec/Vertex/Primary", + "CaloElectrons": "/Event/HLT2/Rec/Calo/Electrons", + "CaloPhotons": "/Event/HLT2/Rec/Calo/Photons", + "CaloMergedPi0s": "/Event/HLT2/Rec/Calo/MergedPi0s", + "CaloSplitPhotons": "/Event/HLT2/Rec/Calo/SplitPhotons", + "MuonPIDs": "/Event/HLT2/Rec/Muon/MuonPID", + "RichPIDs": "/Event/HLT2/Rec/Rich/PIDs", } @@ -38,7 +38,7 @@ def upfront_reconstruction( ): """ - locations_to_decode = reading.make_locations( packed_loc, "/Event/HLT2") + locations_to_decode = reading.make_locations( reco_loc, "/Event/HLT2") decoder = reading.decoder( locations=locations_to_decode, @@ -63,7 +63,7 @@ def reconstruction( ): map = {} unpackers = upfront_reconstruction( ) - for key, value in packed_loc.items(): + for key, value in reco_loc.items(): for v in unpackers: if "OutputName" in v.outputs.keys(): if v.OutputName.location == unpacked_prefix( -- GitLab From 4d1a15e7559ef9a8c50e66c3a8c5907416a36388 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Mon, 13 Jun 2022 23:47:28 +0200 Subject: [PATCH 028/102] update a few tests --- .../options/qee/spruce_qee_example.py | 2 +- .../sprucing/spruce_all_lines_realtime.py | 33 ++++--------------- 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py index 4b2a4a831d9..6ee32a41aea 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py @@ -33,7 +33,7 @@ options.dddb_tag = 'dddb-20201211' options.conddb_tag = 'sim-20201218-vc-mu100' options.output_file = 'qee_zmumu_spruce.dst' options.output_type = 'ROOT' -options.ouptut_manifest_file = "qee_zmumu_spruce.tck.json" +options.output_manifest_file = "qee_zmumu_spruce.tck.json" load_hlt2_configuration('hlt2_qee_zmumu.tck.json') diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index be05e440eb7..0692a6279dd 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -45,32 +45,13 @@ def manifest_from_eos(url): # for k, v in ann_config["PackedObjectTypes"].items() #} - cfg = json.dumps({ - 'Hlt2DecisionID': - {v: k - for k, v in ann_config['Hlt2SelectionID'].items()}, - 'Hlt1DecisionID': - {v: k - for k, v in ann_config['Hlt1SelectionID'].items()}, - 'Hlt2SelectionID': - {v: k - for k, v in ann_config['Hlt2SelectionID'].items()}, - 'Hlt1SelectionID': { - v: k - for k, v in ann_config['Hlt1SelectionID'].items() - }, - 'PackedLocations': { - v: k - for k, v in ann_config['PackedObjectLocations'].items() - }, - }) - - GitANNSvc("HltANNSvc", Overrule={0: cfg}) - - return json.dumps({ - 'PackedLocations': - [(loc, typ) for loc, typ in ann_config["PackedObjectTypes"].items()] - }) + cfg = json.dumps( { 'Hlt2SelectionID' : ann_config['Hlt2SelectionID'], + 'PackedObjectLocations' : ann_config['PackedObjectLocations'] } ) + + annsvc = GitANNSvc( "HltANNSvc", KeyMapping = { 0 : cfg } ) + + return json.dumps( { 'PackedLocations' : [ (loc,typ) for loc,typ in ann_config["PackedObjectTypes"].items() ] } ) + ## Configure `HltANNSvc` -- GitLab From 9a7bb8dea5b23450df987be032c199415fe0bc58 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 16 Jun 2022 23:39:44 +0200 Subject: [PATCH 029/102] Fix some tests + some cleanup --- Hlt/Hlt1Conf/tests/options/make_allen_tck.py | 9 ++- Hlt/Hlt1Conf/tests/options/test_decreports.py | 35 +++++---- Hlt/Hlt2Conf/options/hlt2_check_output.py | 10 ++- .../sprucing/spruce_all_lines_realtime.py | 20 ++++-- Hlt/Moore/python/Moore/config.py | 24 ++++--- .../python/Moore/persistence/__init__.py | 15 ++-- Hlt/Moore/python/Moore/tcks.py | 35 ++++----- .../RecoConf/reco_objects_for_spruce.py | 71 +++++++++---------- 8 files changed, 113 insertions(+), 106 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py index 808bd2d6419..86bdcf7d1c4 100644 --- a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py +++ b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py @@ -9,14 +9,19 @@ from __future__ import print_function # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### +from PyConf.application import register_encoding_dictionary from Moore.config import get_allen_hlt1_decision_ids -from AllenConf.persistency import register_decision_ids # raw_event_format must be configured to successfully configure Allen # Configure with the same input as the default for Allen tests. from hlt1_filtered_mdf_input import options from PyConf.application import configure_input config = configure_input(options) -key = register_decision_ids(get_allen_hlt1_decision_ids()) +ids = get_allen_hlt1_decision_ids() +key = int( + register_encoding_dictionary( + 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k + for k, v in ids.items()}}), + 16) # TODO unsigned? Stick to hex string? print(key) if key: print('PASSED') diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 081eb753ec0..2c7a8624ec2 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -18,13 +18,10 @@ configure the HltANNSvc for the job ran by this script. """ from __future__ import print_function import argparse +import os -from Configurables import ( - ApplicationMgr, - HistogramPersistencySvc, - IODataManager, - LHCbApp, -) +from Configurables import (ApplicationMgr, HistogramPersistencySvc, + IODataManager, LHCbApp, GitANNSvc) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython @@ -61,19 +58,21 @@ IOHelper("MDF").inputFiles([args.input_mdf]) IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) +# Configure TCKANNSvc (as that is what DecoderDB wants...) +ann = GitANNSvc( + "TCKANNSvc", Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) +print(ann) + # Decode Hlt DecReports -ApplicationMgr( +appMgr = ApplicationMgr( TopAlg=[DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()]) +appMgr.ExtSvc += [ann] -# Get expected lines and HltANNSvc configuration from the previous job +# Get expected lines from the previous job options = read_options(args.input_options) -lines = options["ExecutionReportsWriter"]["Persist"] -#Hlt1SelectionIDs = options["HltANNSvc"]["Hlt1SelectionID"] -#HltANNSvc().Hlt1SelectionID = Hlt1SelectionIDs -#print(Hlt1SelectionIDs) # Set up counters for recording decisions from MDF -counts_from_mdf = {key: 0 for key in Hlt1SelectionIDs} +counts_from_mdf = {} # key: 0 for key in Hlt1SelectionIDs} counts_from_mdf[MOORE_KEY] = 0 # Extract counters from log file of the previous job counts_from_log = get_counts_from_log(args.input_log) @@ -90,12 +89,12 @@ while TES["/Event"]: break triggered = False - for key in counts_from_mdf.keys(): - if key == MOORE_KEY: - continue - counts_from_mdf[key] += int(decs.decReport(key).decision()) - if decs.decReport(key).decision(): + for name in (str(i) for i in decs.decisionNames()): + if name not in counts_from_mdf.keys(): counts_from_mdf[name] = 0 + dr = decs.decReport(name) + if dr and dr.decision(): triggered = True + counts_from_mdf[name] += 1 if triggered: counts_from_mdf[MOORE_KEY] += 1 diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 18f85fa2336..7bb631fb59c 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -19,11 +19,12 @@ Takes command-line arguments: python hlt2_check_output.py """ from __future__ import print_function -import sys,os +import sys, os import GaudiPython as GP from GaudiConf import IOHelper -from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, GitANNSvc) +from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, + GitANNSvc) from GaudiConf.reading import do_unpacking @@ -48,7 +49,10 @@ manifest = load_manifest(sys.argv[2]) algs = do_unpacking(manifest, process='Hlt2', output_level=4) appmgr = ApplicationMgr(TopAlg=algs) -appmgr.ExtSvc += [ GitANNSvc( 'HltANNSvc', Repository="{}/.git".format(os.environ['HLTTCKROOT'])) ] +appmgr.ExtSvc += [ + GitANNSvc( + 'HltANNSvc', Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) +] input_file = sys.argv[1] input_type = "ROOT" if input_file.find(".dst") != -1 else "RAW" diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 0692a6279dd..7c0638ea870 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -45,13 +45,19 @@ def manifest_from_eos(url): # for k, v in ann_config["PackedObjectTypes"].items() #} - cfg = json.dumps( { 'Hlt2SelectionID' : ann_config['Hlt2SelectionID'], - 'PackedObjectLocations' : ann_config['PackedObjectLocations'] } ) - - annsvc = GitANNSvc( "HltANNSvc", KeyMapping = { 0 : cfg } ) - - return json.dumps( { 'PackedLocations' : [ (loc,typ) for loc,typ in ann_config["PackedObjectTypes"].items() ] } ) - + cfg = json.dumps({ + 'Hlt2SelectionID': + ann_config['Hlt2SelectionID'], + 'PackedObjectLocations': + ann_config['PackedObjectLocations'] + }) + + annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) + + return json.dumps({ + 'PackedLocations': + [(loc, typ) for loc, typ in ann_config["PackedObjectTypes"].items()] + }) ## Configure `HltANNSvc` diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 0e760f7bf5f..6327e95c6ce 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -229,17 +229,19 @@ def report_writers_node(streams, else: ##spruce and passthrough jobs will write a Spruce report major = "SpruceSelectionID" + key = int( + register_encoding_dictionary( + major, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major, - TCK=int( - register_encoding_dictionary( - major, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? + TCK=key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( SourceID='Spruce', InputHltDecReportsLocation=erw.DecReportsLocation, + EncodingKey=key, ) algs.extend([erw, drw]) @@ -470,7 +472,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): else: offset = 1 ann_config[key] = _build_decision_ids([l.decision_name for l in lines], offset) - # register the decision_ids and get their oids back... setup_ann_service(**ann_config) + # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, @@ -681,8 +683,16 @@ def allen_control_flow(options, write_detector_raw_banks=True): non_event_data_node = setup_allen_non_event_data_service() + ids = get_allen_hlt1_decision_ids() + encoding_key = int( + register_encoding_dictionary( + 'Hlt1SelectionID', + {'Hlt1SelectionID': {v: k + for k, v in ids.items()}}), + 16) # TODO unsigned? Stick to hex string? + # TODO: remove when full configuration of Allen from TCK is implemented - if options.tck: make_dec_reporter.global_bind(TCK=options.tck) + make_dec_reporter.global_bind(TCK=encoding_key) # Write DecReports raw banks allen_cf, allen_barriers = allen_gaudi_node_barriers() @@ -694,8 +704,6 @@ def allen_control_flow(options, write_detector_raw_banks=True): algs.extend([srw]) new_hlt_banks['HltSelReports'] = srw.OutputRawReports - decision_ids = get_allen_hlt1_decision_ids() - # register the decision_ids... and get the oid of their mapping # hlt1_decision_ids=decision_ids, hlt2_decision_ids={}, spruce_decision_ids={}) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 8229678bf62..0d2197bcffb 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -16,7 +16,6 @@ from pprint import pformat from Configurables import HltLinePersistenceSvc -from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output @@ -70,14 +69,12 @@ def _referenced_inputs(lines, inputs): def _referenced_locations(lines): all_locs = {} - all_types = {} for l in lines: # Include the locations of the line outputs themselves line_locs = set() # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - all_locs[l.decision_name] = [dh for dh in line_locs] return all_locs @@ -167,18 +164,17 @@ def persist_line_outputs( prdict = persistreco_line_outputs() prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - for key, val in prdict.items(): + for val in prdict.values(): name = get_type(val) #find type of object for this DH - if name: - inputs[name] += [get_output(val)] + if name: inputs[name] += [get_output(val)] # add proto particle relations if they exist for p in protoparticle_relations: assert not isinstance(p, str) inputs["PP2MCPRelations"] += [p] - locify = lambda i : i.location if hasattr(i,'location') else i - inputs = { t: [ locify(i) for i in dhs] for t,dhs in inputs.items() } + locify = lambda i: i.location if hasattr(i, 'location') else i + inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -258,9 +254,6 @@ def persist_line_outputs( log.debug('output_raw_data: %s', pformat(output_raw_data)) cf.append(serialisation_cf) - unpacked_mc = unpacked_mc_locations() - unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] - control_flow_node = CompositeNode( "hlt2_line_output_persistence", combine_logic=NodeLogic.NONLAZY_OR, diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index f8b3e080290..0244509d6c7 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -67,7 +67,8 @@ def load_manifest(fname): ### TODO: implement me!!! with open(fname) as f: manifest = json.load(f) - return manifest + return manifest + def load_hlt2_configuration(fname): """Instantiate configurables based on an HLT2 TCK. @@ -91,28 +92,20 @@ def load_hlt2_configuration(fname): # for a zero key dicts = config["HltANNSvc/HltANNSvc"] cfg = json.dumps({ - 'Hlt1SelectionID': dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': dicts["Hlt2SelectionID"], - 'SpruceSelectionID': dicts["SpruceSelectionID"], - 'PackedObjectLocations': dicts["PackedObjectLocations"] + 'Hlt1SelectionID': + dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': + dicts["Hlt2SelectionID"], + 'SpruceSelectionID': + dicts["SpruceSelectionID"], + 'PackedObjectLocations': + dicts["PackedObjectLocations"] }) from Configurables import GitANNSvc return GitANNSvc('HltANNSvc', Overrule={0: cfg}) except: - print( "load_hlt_configuration: not an old-style .tck.json file" ) - print( "if not running on an old file with zero encoding key, just remove the call" ) - -def load_sprucing_configuration(fname): - """Instantiate configurables based on a Sprucing TCK. - - Returns an HltANNSvc loaded with the HltANNSvc configuration of the - Sprucing application. - - Args: - fname -- Filename of the JSON TCK file produced by - ``dump_sprucing_configuration``. - annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. - """ - - return load_hlt2_configuration(fname) + print("load_hlt_configuration: not an old-style .tck.json file") + print( + "if not running on an old file with zero encoding key, just remove the call" + ) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index cc003fb4206..b9473597c53 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -8,28 +8,24 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### - from GaudiConf import reading -from Configurables import ApplicationMgr -from PyConf.components import setup_component -from PyConf.location_prefix import unpacked_prefix - -reco_loc = { - "ChargedProtos": "/Event/HLT2/Rec/ProtoP/Charged", - "NeutralProtos": "/Event/HLT2/Rec/ProtoP/Neutrals", - "Tracks": "/Event/HLT2/Rec/Track/Best", - "MuonTracks": "/Event/HLT2/Rec/Track/Muon", - "PVs": "/Event/HLT2/Rec/Vertex/Primary", - "CaloElectrons": "/Event/HLT2/Rec/Calo/Electrons", - "CaloPhotons": "/Event/HLT2/Rec/Calo/Photons", - "CaloMergedPi0s": "/Event/HLT2/Rec/Calo/MergedPi0s", - "CaloSplitPhotons": "/Event/HLT2/Rec/Calo/SplitPhotons", - "MuonPIDs": "/Event/HLT2/Rec/Muon/MuonPID", - "RichPIDs": "/Event/HLT2/Rec/Rich/PIDs", + +_reco_loc = { + "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), + "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), + "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), + "MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), + "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), + "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), + "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), + "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), + "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), + "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), + "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs") } -def upfront_reconstruction( ): +def upfront_reconstruction(): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -38,18 +34,23 @@ def upfront_reconstruction( ): """ - locations_to_decode = reading.make_locations( reco_loc, "/Event/HLT2") - + stream = '/Event/HLT2' decoder = reading.decoder( - locations=locations_to_decode, - configurables=False, - output_level=4) + configurables=False, output_level=4, stream=stream) mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) + inv_map = {v: k for k, v in reading.type_map().items()} + reco_manifest = { + 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] + } + + ## TODO: only pass reco_manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - locations=locations_to_decode, + reading.make_locations(reco_manifest, stream), + reco_manifest, + decoder.OutputBuffers, configurables=False, mc=mc_algs, output_level=4) @@ -57,25 +58,23 @@ def upfront_reconstruction( ): return [decoder] + mc_algs + unpackers -def reconstruction( ): +def reconstruction(): """Return a {name: DataHandle} dict that define the reconstruction output.""" - map = {} - unpackers = upfront_reconstruction( ) + m = {} + unpackers = upfront_reconstruction() - for key, value in reco_loc.items(): + for key, value in _reco_loc.items(): for v in unpackers: - if "OutputName" in v.outputs.keys(): - if v.OutputName.location == unpacked_prefix( - value, "/Event/HLT2"): - map[key] = v.OutputName + if "OutputName" in v.outputs.keys( + ) and v.OutputName.location == value[0]: + m[key] = v.OutputName ### Temporary: as long as we persist v1, we need to insert a converter for the new PVs from PyConf.Algorithms import RecV1ToPVConverter - map["PVs_v1"] = map["PVs"] - map["PVs"] = RecV1ToPVConverter(InputVertices=map["PVs_v1"]).OutputVertices - - return map + m["PVs_v1"] = m["PVs"] + m["PVs"] = RecV1ToPVConverter(InputVertices=m["PVs_v1"]).OutputVertices + return m def make_charged_protoparticles(): -- GitLab From 8ef49488f8fc84f9467de761b9035c5fa281e09b Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Mon, 20 Jun 2022 23:27:38 +0200 Subject: [PATCH 030/102] unify git repo location determination, add version to json --- Hlt/Hlt1Conf/tests/options/make_allen_tck.py | 4 ++-- Hlt/Hlt1Conf/tests/options/test_decreports.py | 5 ++--- Hlt/Hlt2Conf/options/hlt2_check_output.py | 6 ++---- .../options/sprucing/spruce_all_lines_realtime.py | 2 +- Hlt/Moore/python/Moore/config.py | 10 +++++----- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py index 86bdcf7d1c4..d3f71d6967d 100644 --- a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py +++ b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py @@ -20,8 +20,8 @@ config = configure_input(options) ids = get_allen_hlt1_decision_ids() key = int( register_encoding_dictionary( - 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k - for k, v in ids.items()}}), + 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k for k, v in ids.items()} + 'version':'0' }), 16) # TODO unsigned? Stick to hex string? print(key) if key: print('PASSED') diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 2c7a8624ec2..624fb092ad4 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -25,7 +25,7 @@ from Configurables import (ApplicationMgr, HistogramPersistencySvc, from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython - +from PyConf.application import get_metainfo_repos from PyConf.utilities import read_options # Top-level control flow node @@ -59,8 +59,7 @@ IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) # Configure TCKANNSvc (as that is what DecoderDB wants...) -ann = GitANNSvc( - "TCKANNSvc", Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) +ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) print(ann) # Decode Hlt DecReports diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 7bb631fb59c..0794a1bac1a 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -27,6 +27,7 @@ from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, GitANNSvc) from GaudiConf.reading import do_unpacking +from PyConf.application import get_metainfo_repos from GaudiConf.reading import load_manifest @@ -49,10 +50,7 @@ manifest = load_manifest(sys.argv[2]) algs = do_unpacking(manifest, process='Hlt2', output_level=4) appmgr = ApplicationMgr(TopAlg=algs) -appmgr.ExtSvc += [ - GitANNSvc( - 'HltANNSvc', Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) -] +appmgr.ExtSvc += [GitANNSvc('HltANNSvc', Repositories=get_metainfo_repos())] input_file = sys.argv[1] input_type = "ROOT" if input_file.find(".dst") != -1 else "RAW" diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 7c0638ea870..e61263bca4e 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -52,7 +52,7 @@ def manifest_from_eos(url): ann_config['PackedObjectLocations'] }) - annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) + # annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) return json.dumps({ 'PackedLocations': diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 6327e95c6ce..91da9a6982a 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -685,11 +685,11 @@ def allen_control_flow(options, write_detector_raw_banks=True): ids = get_allen_hlt1_decision_ids() encoding_key = int( - register_encoding_dictionary( - 'Hlt1SelectionID', - {'Hlt1SelectionID': {v: k - for k, v in ids.items()}}), - 16) # TODO unsigned? Stick to hex string? + register_encoding_dictionary('Hlt1SelectionID', { + 'version': '0', + 'Hlt1SelectionID': {v: k + for k, v in ids.items()} + }), 16) # TODO unsigned? Stick to hex string? # TODO: remove when full configuration of Allen from TCK is implemented make_dec_reporter.global_bind(TCK=encoding_key) -- GitLab From 6b1c4f3209899d492385ecbdca369d34bc129f88 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 11:34:46 +0200 Subject: [PATCH 031/102] use AllenConf.persistency.build_decision_ids --- Hlt/Moore/python/Moore/config.py | 57 ++++++++++---------------------- 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 91da9a6982a..8ae57e3498a 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -35,6 +35,7 @@ from PyConf.application import ( ) from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError +from AllenConf.persistency import build_decision_ids #: Regular expression (compiled) defining the valid selection line names # Meaning: line names should start with either of Hlt1, Hlt2, Spruce, Pass @@ -66,7 +67,6 @@ from .streams_hlt2 import (DETECTOR_RAW_BANK_TYPES, HLT1_REPORT_RAW_BANK_TYPES, HLT2_REPORT_RAW_BANK_TYPES, get_default_routing_bits) - def _unique(x): """Return a list of the unique elements in x while preserving order.""" return list(dict.fromkeys(x).keys()) @@ -114,22 +114,6 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name -def _build_decision_ids(decision_names, offset=1): - """Return a dict of decision names to integer IDs. - - Decision report IDs must not be zero. This method generates IDs starting - from offset. - - Args: - decision_names (list of str) - offset (int): needed so that there are no identical ints in the int->str relations - of HltRawBankDecoderBase - - Returns: - decision_ids (dict of str to int): Mapping from decision name to ID. - """ - return {name: idx for idx, name in enumerate(decision_names, offset)} - @configurable def report_writers_node(streams, @@ -180,19 +164,24 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - if process == "hlt1" or process == "hlt2": - major_name = "{}SelectionID".format(process.capitalize()) - key = int( - register_encoding_dictionary( + source_id = { "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce":"Spruce","passthrough":"Spruce" }[process] + major_name = { "hlt1" : "Hlt1SelectionID", + "hlt2" : "Hlt2SelectionID", + "spruce" : "SpruceSelectionID", + "passthrough" : "SpruceSelectionID"}[process] + key = int( register_encoding_dictionary( major_name, ["{}Decision".format(i.name) for i in lines]), 16) # TODO unsigned? Stick to hex string? + + + if process == "hlt1" or process == "hlt2": erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, TCK=key, ) drw = HltDecReportsWriter( - SourceID=process.capitalize(), + SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, EncodingKey=key, ) @@ -200,22 +189,18 @@ def report_writers_node(streams, new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - encoding_key = int( - register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - srm = make_selreports(physics_lines, erw, encoding_key) + srm = make_selreports(physics_lines, erw, key) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) barrier_algorithms.append(srm) srw = HltSelReportsWriter( - SourceID=process.capitalize(), + SourceID=source_id, DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=encoding_key) + EncodingKey=key) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -228,18 +213,13 @@ def report_writers_node(streams, extra_locations_to_persist.extend(line_output_locations) else: ##spruce and passthrough jobs will write a Spruce report - major = "SpruceSelectionID" - key = int( - register_encoding_dictionary( - major, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], - ANNSvcKey=major, + ANNSvcKey=major_name, TCK=key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( - SourceID='Spruce', + SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, EncodingKey=key, ) @@ -470,7 +450,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): if process == "hlt2": offset = 1000 elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 - ann_config[key] = _build_decision_ids([l.decision_name for l in lines], + ann_config[key] = build_decision_ids([l.decision_name for l in lines], offset) # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) @@ -687,8 +667,7 @@ def allen_control_flow(options, write_detector_raw_banks=True): encoding_key = int( register_encoding_dictionary('Hlt1SelectionID', { 'version': '0', - 'Hlt1SelectionID': {v: k - for k, v in ids.items()} + 'Hlt1SelectionID': {v: k for k, v in ids.items()} }), 16) # TODO unsigned? Stick to hex string? # TODO: remove when full configuration of Allen from TCK is implemented -- GitLab From 193806a171728dfc7b7107feab085373a2fa9a8e Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 15:33:42 +0200 Subject: [PATCH 032/102] enforce DecisionID vs SelectionID distinction --- Hlt/Hlt1Conf/tests/options/make_allen_tck.py | 9 +--- Hlt/Moore/python/Moore/config.py | 49 +++++++++++--------- Hlt/Moore/python/Moore/selreports.py | 13 ++++-- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py index d3f71d6967d..808bd2d6419 100644 --- a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py +++ b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py @@ -9,19 +9,14 @@ from __future__ import print_function # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -from PyConf.application import register_encoding_dictionary from Moore.config import get_allen_hlt1_decision_ids +from AllenConf.persistency import register_decision_ids # raw_event_format must be configured to successfully configure Allen # Configure with the same input as the default for Allen tests. from hlt1_filtered_mdf_input import options from PyConf.application import configure_input config = configure_input(options) -ids = get_allen_hlt1_decision_ids() -key = int( - register_encoding_dictionary( - 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k for k, v in ids.items()} - 'version':'0' }), - 16) # TODO unsigned? Stick to hex string? +key = register_decision_ids(get_allen_hlt1_decision_ids()) print(key) if key: print('PASSED') diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 8ae57e3498a..9d2d18201d7 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -67,6 +67,7 @@ from .streams_hlt2 import (DETECTOR_RAW_BANK_TYPES, HLT1_REPORT_RAW_BANK_TYPES, HLT2_REPORT_RAW_BANK_TYPES, get_default_routing_bits) + def _unique(x): """Return a list of the unique elements in x while preserving order.""" return list(dict.fromkeys(x).keys()) @@ -114,7 +115,6 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name - @configurable def report_writers_node(streams, data_type, @@ -164,32 +164,39 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - source_id = { "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce":"Spruce","passthrough":"Spruce" }[process] - major_name = { "hlt1" : "Hlt1SelectionID", - "hlt2" : "Hlt2SelectionID", - "spruce" : "SpruceSelectionID", - "passthrough" : "SpruceSelectionID"}[process] - key = int( register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - + source_id = { + "hlt1": "Hlt1", + "hlt2": "Hlt2", + "spruce": "Spruce", + "passthrough": "Spruce" + }[process] + major_name = { + "hlt1": "Hlt1DecisionID", + "hlt2": "Hlt2DecisionID", + "spruce": "SpruceDecisionID", + "passthrough": "SpruceDecisionID" + }[process] + dec_key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? if process == "hlt1" or process == "hlt2": erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=key, + TCK=dec_key, ) drw = HltDecReportsWriter( SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=key, + EncodingKey=dec_key, ) algs.extend([erw, drw]) new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - srm = make_selreports(physics_lines, erw, key) + srm = make_selreports(process, physics_lines, erw) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be @@ -200,7 +207,7 @@ def report_writers_node(streams, DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=key) + EncodingKey=srm.properties['EncodingKey']) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -216,12 +223,12 @@ def report_writers_node(streams, erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=key # TODO unsigned? Stick to hex string? + TCK=dec_key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=key, + EncodingKey=dec_key, ) algs.extend([erw, drw]) @@ -451,7 +458,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 ann_config[key] = build_decision_ids([l.decision_name for l in lines], - offset) + offset) # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( @@ -657,18 +664,14 @@ def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) from Allen.config import setup_allen_non_event_data_service - from AllenConf.persistency import make_dec_reporter + from AllenConf.persistency import make_dec_reporter, register_decision_ids options.finalize() non_event_data_node = setup_allen_non_event_data_service() ids = get_allen_hlt1_decision_ids() - encoding_key = int( - register_encoding_dictionary('Hlt1SelectionID', { - 'version': '0', - 'Hlt1SelectionID': {v: k for k, v in ids.items()} - }), 16) # TODO unsigned? Stick to hex string? + encoding_key = register_decision_ids(ids) # TODO: remove when full configuration of Allen from TCK is implemented make_dec_reporter.global_bind(TCK=encoding_key) diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 6bc65f3f7f5..642fe7b6af6 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,6 +38,7 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) +from PyConf.application import register_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -208,12 +209,11 @@ def convert_output(alg): alg.type)) -def make_selreports(lines, decreports, encoding_key, **kwargs): +def make_selreports(process, lines, decreports, **kwargs): """Return a SelReportsMaker instance configured for the given lines. Args: - lines (list of DecisionLine): The lines to create SelReport objects - for. + lines: The list of lines for which to create SelReport objects decreports: DecReports data used as input to the SelReports maker. kwargs: Passed to the SelReportsMaker. """ @@ -226,6 +226,11 @@ def make_selreports(lines, decreports, encoding_key, **kwargs): else: # No lines we can handle, so do nothing names, outputs, types = [], [], [] + + key = int( + register_encoding_dictionary( + "{}SelectionID".format(process.capitalize()), names), 16) + # Each line output should be unique; we expect no two lines to do exactly # the same work assert len(outputs) == len( @@ -236,5 +241,5 @@ def make_selreports(lines, decreports, encoding_key, **kwargs): SelectionNames=names, CandidateTypes=types, Inputs=outputs, - EncodingKey=encoding_key, + EncodingKey=key, **kwargs) -- GitLab From 5d5b7071aca2d742df15e48c70ce3c987d1baa2b Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 23:12:18 +0200 Subject: [PATCH 033/102] fix some tests --- Hlt/Hlt1Conf/tests/options/test_decreports.py | 2 -- Hlt/Hlt2Conf/options/hlt2_check_output.py | 2 +- .../options/hlt2_persistreco_fromfile.py | 14 ++++----- .../sprucing/spruce_all_lines_realtime.py | 29 ++++++++++++++----- .../sprucing/spruce_example_realtime.py | 3 -- Hlt/Moore/python/Moore/config.py | 4 +-- 6 files changed, 30 insertions(+), 24 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 624fb092ad4..06e916099ea 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -18,7 +18,6 @@ configure the HltANNSvc for the job ran by this script. """ from __future__ import print_function import argparse -import os from Configurables import (ApplicationMgr, HistogramPersistencySvc, IODataManager, LHCbApp, GitANNSvc) @@ -60,7 +59,6 @@ IODataManager(DisablePFNWarning=True) HistogramPersistencySvc(OutputLevel=5) # Configure TCKANNSvc (as that is what DecoderDB wants...) ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) -print(ann) # Decode Hlt DecReports appMgr = ApplicationMgr( diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 0794a1bac1a..86f40b6ec0a 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -19,7 +19,7 @@ Takes command-line arguments: python hlt2_check_output.py """ from __future__ import print_function -import sys, os +import sys import GaudiPython as GP from GaudiConf import IOHelper diff --git a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py index 052741e159d..39258563de8 100644 --- a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py +++ b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py @@ -123,18 +123,16 @@ options.conddb_tag = 'sim-20171127-vc-md100' # options.output_file = 'hlt2_test_persistreco_fromfile.mdf' # options.output_type = 'ROOT' +# This options file is used with different output types; subsequent tests +# require TCKs for each case +if options.output_type == "ROOT": + options.output_manifest_file = "hlt2_persistreco_fromfile_root_output.tck.json" +elif options.output_type == "MDF": + options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" def make_lines(): return [test_persistreco_line(), test_nopersistreco_line()] - public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=True): config = run_moore(options, make_lines, public_tools) - -# This options file is used with different output types; subsequent tests -# require TCKs for each case -if options.output_type == "ROOT": - options.output_manifest_file = "hlt2_persistreco_fromfile_root_output.tck.json" -elif options.output_type == "MDF": - options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index e61263bca4e..5aa5089a910 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -45,14 +45,28 @@ def manifest_from_eos(url): # for k, v in ann_config["PackedObjectTypes"].items() #} + cfg = json.dumps({ + 'Hlt2DecisionID': + {v: k + for k, v in ann_config['Hlt2SelectionID'].items()}, + 'Hlt1DecisionID': + {v: k + for k, v in ann_config['Hlt1SelectionID'].items()}, 'Hlt2SelectionID': - ann_config['Hlt2SelectionID'], - 'PackedObjectLocations': - ann_config['PackedObjectLocations'] + {v: k + for k, v in ann_config['Hlt2SelectionID'].items()}, + 'Hlt1SelectionID': { + v: k + for k, v in ann_config['Hlt1SelectionID'].items() + }, + 'PackedObjectLocations': { + v: k + for k, v in ann_config['PackedObjectLocations'].items() + }, }) - # annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) + GitANNSvc("HltANNSvc", Overrule={0: cfg}) return json.dumps({ 'PackedLocations': @@ -66,13 +80,12 @@ manifest = manifest_from_eos(url) ##Run over HLT1 filtered Min bias sample that has been processed by TOPO{2, 3} HLT2 lines. ##To produce this see `Hlt/Hlt2Conf/options/Sprucing/hlt2_2or3bodytopo_realtime.py` -input_files = [ - 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' -] options.input_raw_format = 0.3 #FIXME: options.input_manifest_file = manifest -options.input_files = input_files +options.input_files = [ + 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' +] options.input_type = 'MDF' options.evt_max = -1 diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index ae249a2b82a..d3753b362ba 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -11,7 +11,6 @@ """Test running Sprucing line on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_example_realtimereco.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -32,8 +31,6 @@ options.output_file = 'spruce_example_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): return [ diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 9d2d18201d7..3cf698c1400 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -168,13 +168,13 @@ def report_writers_node(streams, "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce": "Spruce", - "passthrough": "Spruce" + "pass": "Spruce" }[process] major_name = { "hlt1": "Hlt1DecisionID", "hlt2": "Hlt2DecisionID", "spruce": "SpruceDecisionID", - "passthrough": "SpruceDecisionID" + "pass": "SpruceDecisionID" }[process] dec_key = int( register_encoding_dictionary( -- GitLab From 25749ebc8133c5b667c6396e5bb6a57b883c99ec Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Wed, 29 Jun 2022 16:05:03 +0200 Subject: [PATCH 034/102] first version of stable, forced, persist reco locations --- .../RecoConf/calorimeter_reconstruction.py | 19 ++++++++----------- Hlt/RecoConf/python/RecoConf/hlt1_tracking.py | 10 +++++++--- .../python/RecoConf/muon_reconstruction.py | 6 ++---- .../RecoConf/reco_objects_for_spruce.py | 4 +++- .../python/RecoConf/rich_reconstruction.py | 6 ++---- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py index 8247bb80bc9..1d4ab39b34c 100644 --- a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from PyConf.components import force_location +from GaudiConf.PersistRecoConf import persisted_location from PyConf.Algorithms import ( AcceptanceBremAlg, AcceptanceEcalAlg, AcceptanceHcalAlg, TrackToEcalEnergyAlg, TrackToHcalEnergyAlg, CaloChargedPIDsAlg, @@ -483,8 +483,8 @@ def make_calo(tracks, InputHypos=photons, InputClusters=old_ecalClusters, outputs={ - 'OutputHypos': force_location('/Event/Rec/Calo/Photons'), - 'OutputTable': force_location('/Event/Rec/Calo/PhotonsToClusters') + 'OutputHypos': persisted_location('CaloPhotons'), + 'OutputTable': None, }, ).OutputHypos @@ -492,9 +492,8 @@ def make_calo(tracks, InputHypos=electrons, InputClusters=old_ecalClusters, outputs={ - 'OutputHypos': force_location('/Event/Rec/Calo/Electrons'), - 'OutputTable': - force_location('/Event/Rec/Calo/ElectronsToClusters') + 'OutputHypos': persisted_location('CaloElectrons'), + 'OutputTable': None, }, ).OutputHypos old_ecalSplitClusters = ClusterConverter( @@ -505,11 +504,9 @@ def make_calo(tracks, InputSplitClusters=old_ecalSplitClusters, InputHypos=mergedPi0s, outputs={ - 'OutputHypos': force_location('/Event/Rec/Calo/MergedPi0s'), - 'OutputSplitPhotons': - force_location('/Event/Rec/Calo/SplitPhotons'), - 'OutputTable': - force_location('/Event/Rec/Calo/MergedPi0sToClusters') + 'OutputHypos': persisted_location('CaloMergedPi0s'), + 'OutputSplitPhotons': persisted_location('CaloSplitPhotons'), + 'OutputTable': None, }, ) old_mergedPi0s = convert_mergedpi0.OutputHypos diff --git a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py index 5c925070227..ecfc674de31 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py @@ -12,7 +12,7 @@ import logging from PyConf import configurable from PyConf.application import default_raw_event, default_raw_banks from PyConf.utilities import DISABLE_TOOL -from PyConf.components import force_location +from GaudiConf.PersistRecoConf import persisted_location from PyConf.Algorithms import ( fromPrUpstreamTracksV1Tracks, @@ -256,12 +256,16 @@ def make_TrackBeamLineVertexFinderSoA_pvs(velo_tracks): Returns: DataHandle: TrackBeamLineVertexFinderSoA's OutputVertices. """ + pvs = { "v3": TrackBeamLineVertexFinderSoA( TracksLocation=velo_tracks["Pr"], TracksBackwardLocation=velo_tracks["Pr::backward"], - # outputs = {'OutputVertices':force_location('/here/I/am/v3') }, + outputs={ + 'OutputVertices': + persisted_location('PVs') if "v1" not in velo_tracks else None + }, ).OutputVertices } @@ -271,7 +275,7 @@ def make_TrackBeamLineVertexFinderSoA_pvs(velo_tracks): InputVertices=pvs["v3"], InputTracks=velo_tracks["v1"], outputs={ - 'OutputVertices': force_location('/Event/Rec/Vertex/Primary') + 'OutputVertices': persisted_location('PVs') }, ).OutputVertices return pvs diff --git a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py index 7377ab36c5c..cc278f70865 100644 --- a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from PyConf.components import force_location +from GaudiConf.PersistRecoConf import persisted_location from PyConf.Algorithms import (LHCb__Converters__Track__SOA__fromV1Track as TrackSOAFromV1, MuonPIDConverter, @@ -64,8 +64,6 @@ def make_merged_muon_pids(muon_pids_v1): # Merge them for now to be compatible with Brunel. merged_pids = MergeMuonPIDsV1( InputMuonPIDLocations=list(muon_pids_v1.values()), - outputs={ - 'OutputMuonPIDLocation': force_location('/Event/Rec/Muon/MuonPID') - }, + outputs={'OutputMuonPIDLocation': persisted_location('MuonPIDs')}, ) return merged_pids.OutputMuonPIDLocation diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index b9473597c53..aab44b3f815 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -14,7 +14,7 @@ _reco_loc = { "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), - "MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), + #"MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), @@ -55,6 +55,8 @@ def upfront_reconstruction(): mc=mc_algs, output_level=4) + ### TODO:FIXME take advantage of the fact that the above have datahandles... + # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms return [decoder] + mc_algs + unpackers diff --git a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py index c2630983401..4e9533ecbbe 100644 --- a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from PyConf.components import force_location +from GaudiConf.PersistRecoConf import persisted_location from PyConf.application import default_raw_event from Configurables import Rich__Future__ParticleProperties as PartProps @@ -722,8 +722,6 @@ def make_merged_rich_pids(richRecConfs): conf["RichPIDs"] for conf in richRecConfs.values() ], PIDVersion=2, - outputs={ - 'OutputRichPIDLocation': force_location('/Event/Rec/Rich/PIDs') - }, + outputs={'OutputRichPIDLocation': persisted_location('RichPIDs')}, ) return merged_pids.OutputRichPIDLocation -- GitLab From 742b6fe306731d9098db526b197063a7df43208f Mon Sep 17 00:00:00 2001 From: sstahl Date: Fri, 1 Jul 2022 14:13:59 +0200 Subject: [PATCH 035/102] add test for running two recos --- Hlt/RecoConf/options/run_two_hlt2_recos.py | 9 ++------- Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt | 1 + 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index f568a2b9ec5..292aac6ca95 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -12,19 +12,14 @@ from Moore import options, run_reconstruction from Moore.config import Reconstruction from RecoConf.hlt2_global_reco import reconstruction from PyConf.Algorithms import PrForwardTrackingVelo -from GaudiConf.PersistRecoConf import persisted_location - def make_two_reconstructions(): charged_protos_1 = reconstruction()["ChargedProtos"] neutral_protos_1 = reconstruction()["NeutralProtos"] - with PrForwardTrackingVelo.bind(MinPT=1000.), persisted_location.bind( - force=False): + with PrForwardTrackingVelo.bind(MinPT = 1000.): charged_protos_2 = reconstruction()["ChargedProtos"] neutral_protos_2 = reconstruction()["NeutralProtos"] - data = [ - charged_protos_1, neutral_protos_1, charged_protos_2, neutral_protos_2 - ] + data = [charged_protos_1, neutral_protos_1, charged_protos_2, neutral_protos_2] return Reconstruction('run_similar_recos_twice', data) diff --git a/Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt b/Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt index fe58e0935c9..0170364544e 100644 --- a/Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt +++ b/Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt @@ -14,6 +14,7 @@ Simple test to demonstrate and test how to run two different but similar reconst --> gaudirun.py +1800 $MOOREROOT/tests/options/default_input_and_conds_hlt2.py $MOOREROOT/tests/options/set_evt_max_to_5.py -- GitLab From 9f798f3eb6234a0b9ac4bdc79a6683bdaf446e19 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Fri, 1 Jul 2022 21:28:06 +0200 Subject: [PATCH 036/102] fix two-reco test --- Hlt/RecoConf/options/run_two_hlt2_recos.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index 292aac6ca95..0c9d70d46ff 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -12,6 +12,7 @@ from Moore import options, run_reconstruction from Moore.config import Reconstruction from RecoConf.hlt2_global_reco import reconstruction from PyConf.Algorithms import PrForwardTrackingVelo +from GaudiConf.PersistRecoConf import persisted_location def make_two_reconstructions(): charged_protos_1 = reconstruction()["ChargedProtos"] @@ -23,7 +24,8 @@ def make_two_reconstructions(): return Reconstruction('run_similar_recos_twice', data) -run_reconstruction(options, make_two_reconstructions) +with persisted_location.bind(force=False) : + run_reconstruction(options, make_two_reconstructions) from Configurables import HiveDataBrokerSvc HiveDataBrokerSvc().OutputLevel = 2 -- GitLab From 574c13c60b828b96613709e401e1742be65065e7 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Mon, 4 Jul 2022 14:34:05 +0200 Subject: [PATCH 037/102] stop using load_hlt2_configuration --- .../bandq/spruce_bandq_example_fromfile.py | 3 -- .../examples/b_to_charmonia/spruce_b2cc.py | 3 -- .../b_to_open_charm/spruce_b2oc_fromfile.py | 3 -- .../b_to_open_charm/spruce_b2oc_realtime.py | 3 -- .../options/hlt2_persistreco_fromfile.py | 2 + .../options/qee/spruce_qee_example.py | 3 -- .../sprucing/spruce_example_fromfile.py | 3 -- .../spruce_example_realtime_dstinput.py | 3 -- .../spruce_example_realtime_extraoutputs.py | 3 -- .../spruce_example_realtime_persistreco.py | 3 -- .../options/sprucing/spruce_hlt2filter.py | 3 -- .../options/sprucing/spruce_passthrough.py | 3 -- .../sprucing/spruce_passthrough_dstinput.py | 3 -- .../streaming/spruce_test_streaming.py | 3 -- .../options/hlt_filters_test_sprucepass.py | 3 -- Hlt/Moore/python/Moore/tcks.py | 54 ------------------- 16 files changed, 2 insertions(+), 96 deletions(-) diff --git a/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py b/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py index 96c6777f6c1..ecc1b83bc6c 100644 --- a/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_bandq_example_fromfile.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -40,8 +39,6 @@ options.output_file = 'spruce_B2JpsiK.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_onia_example_fromfile.tck.json" -load_hlt2_configuration("Hlt2DiMuonLines_test.tck.json") - def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py b/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py index 2f1463cb8eb..bcf1021e0c7 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py @@ -18,7 +18,6 @@ ./Moore/run gaudirun.py spruce_b2cc_example.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -41,8 +40,6 @@ options.output_file = 'spruce_Bs2JpsiPhi.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2cc_example.tck.json" -load_hlt2_configuration("Hlt2DiMuonLines_Bs2JpsiPhi.tck.json") - def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py index 7af6e3077e9..a5474c107f8 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_fromfile.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -36,8 +35,6 @@ options.output_file = 'spruce_fromfilereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2oc_example_fromfile.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_fromfile.tck.json") - def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py index b15aa67fc58..ce59bc7c0b0 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_realtime.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -36,8 +35,6 @@ options.output_file = 'spruce_b2oc_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2oc_example_realtime.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py index 39258563de8..2b443848468 100644 --- a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py +++ b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py @@ -130,9 +130,11 @@ if options.output_type == "ROOT": elif options.output_type == "MDF": options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" + def make_lines(): return [test_persistreco_line(), test_nopersistreco_line()] + public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py index 6ee32a41aea..ca3ece81244 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py @@ -17,7 +17,6 @@ Run like any other options file: ./Moore/run gaudirun.py hlt2_qee_spruce_example.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.qee import sprucing_lines @@ -35,8 +34,6 @@ options.output_file = 'qee_zmumu_spruce.dst' options.output_type = 'ROOT' options.output_manifest_file = "qee_zmumu_spruce.tck.json" -load_hlt2_configuration('hlt2_qee_zmumu.tck.json') - def make_lines(): return [line() for line in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py index bfe33817c1b..1108a7b0fd3 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_fromfile.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -40,8 +39,6 @@ options.output_file = 'spruce_fromfilereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_fromfile.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_fromfile.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py index 889033bb622..c9e745f68a7 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py @@ -15,7 +15,6 @@ Input from HLT2 is DST as will be the case for simulation. Produces spruce_realtimereco_dstinput.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -36,8 +35,6 @@ options.output_file = 'spruce_realtimereco_dstinput.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_dstinput.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime_dst.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py index c6372bb2010..7d74f5d6370 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py @@ -11,7 +11,6 @@ """Test Sprucing line with `extra_outputs` on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_realtimereco_extraoutputs.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_extraoutputs_sprucing_line @@ -32,8 +31,6 @@ options.output_file = 'spruce_realtimereco_extraoutputs.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_extraoutputs.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py index 19c0480b332..9eeb9b2dd36 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py @@ -11,7 +11,6 @@ """Test Sprucing line with `persistreco` on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_realtimereco_persistreco.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_persistreco_sprucing_line @@ -32,8 +31,6 @@ options.output_file = 'spruce_realtimereco_persistreco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_persistreco.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py index 64e5e6f491a..1c64fb040e8 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py @@ -16,7 +16,6 @@ Run like any other options file: """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import SpruceLine @@ -39,8 +38,6 @@ options.output_file = 'spruce_HLT2filter.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_HLT2filter.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def Sprucing_line_1(name='Spruce_filteronTopo2'): line_alg = b_to_dh.make_BdToDsmK_DsmToKpKmPim(process='spruce') diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py index 60d766800a6..8aff38bf6d3 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py @@ -17,7 +17,6 @@ Run like any other options file: from __future__ import absolute_import, division, print_function from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import PassLine @@ -38,8 +37,6 @@ options.output_file = 'spruce_passthrough.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_passthrough.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def pass_through_line(name="PassThrough"): """Return a Sprucing line that performs no selection diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py index c99532700f2..e64b44894a6 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py @@ -19,7 +19,6 @@ Run like any other options file: from __future__ import absolute_import, division, print_function from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import PassLine @@ -40,8 +39,6 @@ options.output_file = 'spruce_passthrough_dstinput.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_passthrough_dstinput.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime_dst.tck.json") - def pass_through_line(name="PassThrough"): """Return a Sprucing line that performs no selection diff --git a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py index c1155ac56b0..6900f038306 100644 --- a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py +++ b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_test_streaming.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line, Test_extraoutputs_sprucing_line @@ -39,8 +38,6 @@ options.output_file = 'spruce_streaming.{stream}.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_streaming.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_streams(): linedict = dict( diff --git a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py index ea18977b7cc..0774c74d663 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py +++ b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py @@ -18,7 +18,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_filters_test.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction, upfront_reconstruction ##Make dummy SpruceLine @@ -45,8 +44,6 @@ options.output_file = 'spruce_filterstest.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_filterstest.tck.json" -load_hlt2_configuration("hlt_filterstest_realtime.tck.json") - ## Make 2 identical lines except for filters def make_line1(name='SpruceTest1'): diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index 0244509d6c7..2215f19d3c9 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -50,62 +50,8 @@ The functions in this module currently support persisting the configuration of import json -class _ConfigurableEncoder(json.JSONEncoder): - def default(self, obj): - try: - # Try to serialise assuming Configurable - name = obj.getFullName() - props = obj.getDefaultProperties() - props.update(obj.getValuedProperties()) - obj = {name: props} - except AttributeError: - pass - return obj - - def load_manifest(fname): ### TODO: implement me!!! with open(fname) as f: manifest = json.load(f) return manifest - - -def load_hlt2_configuration(fname): - """Instantiate configurables based on an HLT2 TCK. - - Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 - application. - - Args: - fname -- Filename of the JSON TCK file produced by - ``dump_hlt2_configuration``. - annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. - """ - with open(fname) as f: - config = json.load(f) - - try: - # see if this is an old-style .tck.json file needed for decoding - # because the encoding key is not present in the data - # - # In that case, we just configure the GitAnnSvc with an overrule - # for a zero key - dicts = config["HltANNSvc/HltANNSvc"] - cfg = json.dumps({ - 'Hlt1SelectionID': - dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': - dicts["Hlt2SelectionID"], - 'SpruceSelectionID': - dicts["SpruceSelectionID"], - 'PackedObjectLocations': - dicts["PackedObjectLocations"] - }) - - from Configurables import GitANNSvc - return GitANNSvc('HltANNSvc', Overrule={0: cfg}) - except: - print("load_hlt_configuration: not an old-style .tck.json file") - print( - "if not running on an old file with zero encoding key, just remove the call" - ) -- GitLab From 0cfe16f31c94f549d47f6b659143bce598a37efa Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 6 Jul 2022 09:08:20 +0200 Subject: [PATCH 038/102] make relation packer to take multiple locations --- Hlt/Moore/python/Moore/config.py | 25 ++-- .../python/Moore/persistence/__init__.py | 81 ++++++------ Hlt/Moore/python/Moore/persistence/packing.py | 115 ++++++++++++++---- .../python/Moore/persistence/persistreco.py | 45 +++---- 4 files changed, 170 insertions(+), 96 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 3cf698c1400..6b6081fe20e 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -31,6 +31,7 @@ from PyConf.application import ( default_raw_event, root_writer, make_data_with_FetchDataFromFile, + generate_encoding_dictionary, register_encoding_dictionary, ) from GaudiConf.reading import unpack_rawevent, mc_unpackers @@ -119,6 +120,7 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa def report_writers_node(streams, data_type, process, + output_manifest_file, associate_mc=False, clone_mc=False): """Return the control flow node and locations to persist of the default reports writers. @@ -178,7 +180,9 @@ def report_writers_node(streams, }[process] dec_key = int( register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), + major_name, + generate_encoding_dictionary(major_name, + [l.decision_name for l in lines])), 16) # TODO unsigned? Stick to hex string? if process == "hlt1" or process == "hlt2": @@ -214,7 +218,8 @@ def report_writers_node(streams, (line_output_cf, line_output_locations, packed_data) = persist_line_outputs( physics_lines, data_type, erw.DecReportsLocation, associate_mc, - process.capitalize()) + process.capitalize(), output_manifest_file) + algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent extra_locations_to_persist.extend(line_output_locations) @@ -242,6 +247,7 @@ def report_writers_node(streams, erw.DecReportsLocation, associate_mc, process.capitalize(), + output_manifest_file, stream="/Event/Spruce", reco_stream="/Event/HLT2", clone_mc=options.simulation and options.input_type == ROOT_KEY) @@ -446,25 +452,12 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): streams[stream] = sorted(stream_lines, key=lambda line: line.name) lines = streams_dict_to_lines_list(streams) - ann_config = dict( - hlt1_decision_ids={}, hlt2_decision_ids={}, spruce_decision_ids={}) - if allen_hlt1: - ann_config["hlt1_decision_ids"] = get_allen_hlt1_decision_ids() - key = process + "_decision_ids" - #For passthrough lines want decisions a la Sprucing - if process == "pass": - key = "spruce_decision_ids" - if process == "hlt2": offset = 1000 - elif process == "spruce" or process == "pass": offset = 5000 - else: offset = 1 - ann_config[key] = build_decision_ids([l.decision_name for l in lines], - offset) - # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, options.data_type, process, + options.output_manifest_file, # Can only run association when we have access to the linker tables. Only want association for hlt step associate_mc=process == "hlt2" and options.simulation and options.input_type == ROOT_KEY and options.output_type == ROOT_KEY, diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 0d2197bcffb..063130aef4d 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -11,23 +11,22 @@ """Configuration for persisting HLT2 objects in output ROOT/MDF files.""" from __future__ import absolute_import import itertools -import logging, os +import logging, os, json from pprint import pformat from Configurables import HltLinePersistenceSvc +#from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output -from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix +from PyConf.location_prefix import prefix from PyConf.application import register_encoding_dictionary from GaudiConf.reading import type_map -from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations -from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed -from .serialisation import serialise_packed_containers +from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations, packers_map +from .persistreco import persistreco_line_outputs from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC log = logging.getLogger(__name__) @@ -103,6 +102,25 @@ def get_type(dh): return None +def get_packed_locations(inputs, stream): + packed_dhs = [] + + types = type_map() + k = list(types.keys()) + v = list(types.values()) + + for key, locs in inputs.items(): + for i in locs: + t = i.type + if i.type == "unknown_t": + t = k[v.index(key)] + + packed_dhs += [(prefix(i.location, stream), t)] + + packed_dhs = list(dict.fromkeys(packed_dhs)) + return {'PackedLocations': packed_dhs} + + @configurable def persist_line_outputs( lines, @@ -110,6 +128,7 @@ def persist_line_outputs( dec_reports, associate_mc, source_id, + output_manifest_file, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from clone_mc=True): @@ -155,14 +174,14 @@ def persist_line_outputs( log.debug('line_locations: ' + pformat(persistence_svc.Locations)) # Make a dictinary for all known object types with emty values - inputs = PersistRecoPacking().dictionary() + p_map = packers_map() + inputs = {t: [] for t in p_map.keys()} #add line outputs to fill the dictionary inputs = _referenced_inputs(lines, inputs) #add the locations from reco objects to the dictinary prdict = persistreco_line_outputs() - prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) for val in prdict.values(): name = get_type(val) #find type of object for this DH @@ -173,6 +192,14 @@ def persist_line_outputs( assert not isinstance(p, str) inputs["PP2MCPRelations"] += [p] + if output_manifest_file: + with open(output_manifest_file, 'w') as f: + json.dump( + get_packed_locations(inputs, stream), + f, + indent=4, + sort_keys=True) + locify = lambda i: i.location if hasattr(i, 'location') else i inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} @@ -199,29 +226,8 @@ def persist_line_outputs( pformat(output_cloner_locations)) cf.append(output_cloner_cf) - #Make a dictionary for output packer locations - #For line outputs, "stream+/p" added to input locations - #For reco objects, there are pre-defined output locations - #This is to be able to find reco objects regardless of their producer - outputs = {} - for key, value in inputs.items(): - outputs[key] = [] - for v in value: - if v in prdict_packed.keys(): - outputs[key] += [prdict_packed[v]] #reco - else: - outputs[key] += [packed_prefix(v, stream)] #line - - prpacking = PersistRecoPacking( - stream=stream, - unpacked=inputs, - packed=outputs, - data_type=data_type, - ) - ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ - set([ i for i in prpacking.unpackedLocations()]) | \ + locations = set([ i for ilist in inputs.values() for i in ilist]) | \ set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) if clone_mc: @@ -233,10 +239,6 @@ def persist_line_outputs( register_encoding_dictionary("PackedObjectLocations", sorted(locations)), 16) - packer_cf, packer_locations = pack_stream_objects(stream, prpacking, - encoding_key) - cf.append(packer_cf) - packer_mc_locations = [] if clone_mc: @@ -244,15 +246,18 @@ def persist_line_outputs( cf.append(mc_packer_cf) if log.isEnabledFor(logging.DEBUG): - log.debug('packer_locations: ' + pformat(packer_locations)) + log.debug('packer_locations: ' + pformat(inputs.values())) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) - serialisation_cf, output_raw_data = serialise_packed_containers( - packer_locations, source_id) + packers_cf, serialisation_cf, output_raw_data = pack_stream_objects( + stream, inputs, encoding_key, source_id) + + cf.append(packers_cf) + cf.append(serialisation_cf) if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) - cf.append(serialisation_cf) + control_flow_node = CompositeNode( "hlt2_line_output_persistence", diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index a9a165b65de..1ba79982ff8 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -12,9 +12,12 @@ import logging import os from PyConf.Algorithms import ( - PackMCParticle, - PackMCVertex, -) + PackMCParticle, PackMCVertex, RecVertexPacker, VertexPacker, RichPIDPacker, + MuonPIDPacker, ProtoParticlePacker, ParticlePacker, TrackPacker, + FlavourTagPacker, CaloHypoPacker, CaloClusterPacker, CaloDigitPacker, + CaloAdcPacker, P2VRelationPacker, P2MCPRelationPacker, P2IntRelationPacker, + P2InfoRelationPacker, PP2MCPRelationPacker, HltPackedBufferWriter) + from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic @@ -25,39 +28,109 @@ log = logging.getLogger(__name__) from PyConf import configurable +def packers_map(): + + return { + "PVs": RecVertexPacker, + "Vertices": VertexPacker, + "Tracks": TrackPacker, + "RichPIDs": RichPIDPacker, + "MuonPIDs": MuonPIDPacker, + "CaloHypos": CaloHypoPacker, + "CaloClusters": CaloClusterPacker, + "CaloDigits": CaloDigitPacker, + "CaloAdcs": CaloAdcPacker, + "ProtoParticles": ProtoParticlePacker, + "Particles": ParticlePacker, + "FlavourTags": FlavourTagPacker, + "P2VRelations": P2VRelationPacker, + "P2MCPRelations": P2MCPRelationPacker, + "P2IntRelations": P2IntRelationPacker, + "P2InfoRelations": P2InfoRelationPacker, + "PP2MCPRelations": PP2MCPRelationPacker + } + + @configurable -def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): - """Return a list of packers that will produce all packed output. +def pack_stream_objects(stream, + inputs, + encoding_key, + source_id, + enable_check=False): + """Return CF node that packs and serialises a set of containers to a raw bank. Args: - stream (str): TES root containing objects to be packed. - prpacking (PersistRecoPacking object): PersistRecoPacking object that describes packing configuration. + stream (str): TES root containing objects to be persisted. + inputs (map): Type: locations to be persisted Returns: - algs (list): Algorithms to run the packing. - outputs (list of str): Locations that should be persisted, in the - specification used by ROOT output writers (e.g. OutputStream). + serialisation_node (CompositeNode). + output_raw_data (DataHandle): Raw event with serialised data, + i.e. the DstData bank. + """ + p_map = packers_map() + packers = [] + + for t, p in p_map.items(): + if t in inputs.keys(): + + packer = p( + InputName=[force_location(loc) for loc in inputs[t]], + OutputLevel=OUTPUTLEVEL, + EnableCheck=enable_check, + EncodingKey=encoding_key) - persistreco_packers = prpacking.packers( - output_level=OUTPUTLEVEL, - enable_check=enable_check, - encoding_key=encoding_key) + packers += [packer] packers_cf = CompositeNode( "packers", - children=persistreco_packers, + children=packers, combine_logic=NodeLogic.NONLAZY_OR, force_order=True, + ) + + packers_output_locations = [ + get_output(p.outputs["OutputName"]).location for p in packers + ] + + bank_writer = HltPackedBufferWriter( + PackedContainers=packers_output_locations, + OutputLevel=OUTPUTLEVEL, + SourceID=source_id) + + serialisation_cf = CompositeNode( + "serialisation", + children=[bank_writer], ) - packers_output_locations = [] - for p in persistreco_packers: - packers_output_locations += [ - get_output(p.outputs["OutputName"]).location - ] + return packers_cf, serialisation_cf, bank_writer + - return packers_cf, packers_output_locations +def pack_stream_mc_locations(stream): + return [ + os.path.join(stream, + str(PackMCParticle.getDefaultProperties()["InputName"])), + os.path.join(stream, + str(PackMCVertex.getDefaultProperties()["InputName"])), + os.path.join(stream, + str(PackMCParticle.getDefaultProperties()["OutputName"])), + os.path.join(stream, + str(PackMCVertex.getDefaultProperties()["OutputName"])) + ] + + +def pack_stream_mc_locations(stream): + return [ + os.path.join(stream, + str(PackMCParticle.getDefaultProperties()["InputName"])), + os.path.join(stream, + str(PackMCVertex.getDefaultProperties()["InputName"])), + os.path.join(stream, + str(PackMCParticle.getDefaultProperties()["OutputName"])), + os.path.join(stream, + str(PackMCVertex.getDefaultProperties()["OutputName"])) + ] def pack_stream_mc(stream): diff --git a/Hlt/Moore/python/Moore/persistence/persistreco.py b/Hlt/Moore/python/Moore/persistence/persistreco.py index 0a0a2e9edfa..6b578490e1b 100644 --- a/Hlt/Moore/python/Moore/persistence/persistreco.py +++ b/Hlt/Moore/python/Moore/persistence/persistreco.py @@ -20,37 +20,40 @@ See the cloning configuration for those differences. """ from PyConf.components import get_output from PyConf.location_prefix import prefix, packed_prefix -from GaudiConf.PersistRecoConf import default_persisted_locations -from RecoConf.reconstruction_objects import reconstruction + + +def persistreco_to_be_persisted(): + + return [ + "ChargedProtos", + "NeutralProtos", + "Tracks", + "PVs", + "CaloElectrons", + "CaloPhotons", + "CaloMergedPi0s", + "CaloSplitPhotons", + "MuonPIDs", + "RichPIDs", + ] def persistreco_line_outputs(): """Return a dict of data handles that define reconstruction to be persisted.""" + from RecoConf.reconstruction_objects import reconstruction objs = reconstruction() prdict = {} - to_be_persisted = [k for k in default_persisted_locations().keys()] + to_be_persisted = persistreco_to_be_persisted() for key, val in objs.items(): if val: - if key == "PVs_v1": key = "PVs" - if key in to_be_persisted: prdict[key] = val - + if key == "PVs_v1": + if "PVs" in to_be_persisted: + prdict["PVs"] = val + else: + if key in to_be_persisted: + prdict[key] = val return prdict -def persistreco_line_outputs_packed(stream, reco_stream): - """Return a dict of data handles that define reconstruction to be persisted.""" - - stream_loc = { - key: prefix(value, reco_stream) - for key, value in default_persisted_locations().items() - } - - prdict = persistreco_line_outputs() - packed = { - prefix(get_output(val).location, stream): packed_prefix( - stream_loc[key], stream) - for key, val in prdict.items() - } - return packed -- GitLab From f8d40253cdec7afc31a3a7b7f81e5b6712e04d17 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 6 Jul 2022 07:09:47 +0000 Subject: [PATCH 039/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/23051760 --- .../options/sprucing/spruce_all_lines_realtime.py | 1 - Hlt/Moore/python/Moore/persistence/__init__.py | 1 - Hlt/Moore/python/Moore/persistence/packing.py | 2 +- Hlt/Moore/python/Moore/persistence/persistreco.py | 2 -- Hlt/RecoConf/options/run_two_hlt2_recos.py | 9 ++++++--- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 5aa5089a910..855366d79a9 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -45,7 +45,6 @@ def manifest_from_eos(url): # for k, v in ann_config["PackedObjectTypes"].items() #} - cfg = json.dumps({ 'Hlt2DecisionID': {v: k diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 063130aef4d..66f6866f75f 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -258,7 +258,6 @@ def persist_line_outputs( if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) - control_flow_node = CompositeNode( "hlt2_line_output_persistence", combine_logic=NodeLogic.NONLAZY_OR, diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 1ba79982ff8..b541695f3d8 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -88,7 +88,7 @@ def pack_stream_objects(stream, children=packers, combine_logic=NodeLogic.NONLAZY_OR, force_order=True, - ) + ) packers_output_locations = [ get_output(p.outputs["OutputName"]).location for p in packers diff --git a/Hlt/Moore/python/Moore/persistence/persistreco.py b/Hlt/Moore/python/Moore/persistence/persistreco.py index 6b578490e1b..2281114dc9a 100644 --- a/Hlt/Moore/python/Moore/persistence/persistreco.py +++ b/Hlt/Moore/python/Moore/persistence/persistreco.py @@ -55,5 +55,3 @@ def persistreco_line_outputs(): if key in to_be_persisted: prdict[key] = val return prdict - - diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index 0c9d70d46ff..fef99c85f22 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -14,17 +14,20 @@ from RecoConf.hlt2_global_reco import reconstruction from PyConf.Algorithms import PrForwardTrackingVelo from GaudiConf.PersistRecoConf import persisted_location + def make_two_reconstructions(): charged_protos_1 = reconstruction()["ChargedProtos"] neutral_protos_1 = reconstruction()["NeutralProtos"] - with PrForwardTrackingVelo.bind(MinPT = 1000.): + with PrForwardTrackingVelo.bind(MinPT=1000.): charged_protos_2 = reconstruction()["ChargedProtos"] neutral_protos_2 = reconstruction()["NeutralProtos"] - data = [charged_protos_1, neutral_protos_1, charged_protos_2, neutral_protos_2] + data = [ + charged_protos_1, neutral_protos_1, charged_protos_2, neutral_protos_2 + ] return Reconstruction('run_similar_recos_twice', data) -with persisted_location.bind(force=False) : +with persisted_location.bind(force=False): run_reconstruction(options, make_two_reconstructions) from Configurables import HiveDataBrokerSvc -- GitLab From b771f63fafae8b20001e0a7f577e901d122c72b4 Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 6 Jul 2022 09:14:02 +0200 Subject: [PATCH 040/102] make relation packer to take multiple locations --- Hlt/Moore/python/Moore/persistence/packing.py | 14 -------------- Hlt/Moore/python/Moore/persistence/persistreco.py | 5 +---- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index b541695f3d8..74636d3a8d3 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -119,20 +119,6 @@ def pack_stream_mc_locations(stream): str(PackMCVertex.getDefaultProperties()["OutputName"])) ] - -def pack_stream_mc_locations(stream): - return [ - os.path.join(stream, - str(PackMCParticle.getDefaultProperties()["InputName"])), - os.path.join(stream, - str(PackMCVertex.getDefaultProperties()["InputName"])), - os.path.join(stream, - str(PackMCParticle.getDefaultProperties()["OutputName"])), - os.path.join(stream, - str(PackMCVertex.getDefaultProperties()["OutputName"])) - ] - - def pack_stream_mc(stream): """Return a list of packers that will produce mc packed output. diff --git a/Hlt/Moore/python/Moore/persistence/persistreco.py b/Hlt/Moore/python/Moore/persistence/persistreco.py index 2281114dc9a..d7a56a1ac56 100644 --- a/Hlt/Moore/python/Moore/persistence/persistreco.py +++ b/Hlt/Moore/python/Moore/persistence/persistreco.py @@ -1,5 +1,5 @@ ############################################################################### -# (c) Copyright 2020 CERN for the benefit of the LHCb Collaboration # +# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration # # # # This software is distributed under the terms of the GNU General Public # # Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # @@ -18,9 +18,6 @@ Some objects which are anyhow persisted as part of the usual line output, such as primary vertices, are treated different if the line has PersistReco enabled. See the cloning configuration for those differences. """ -from PyConf.components import get_output -from PyConf.location_prefix import prefix, packed_prefix - def persistreco_to_be_persisted(): -- GitLab From ab1e704f0b7b74da03c0cbbf0136a85c56443db6 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 6 Jul 2022 07:15:06 +0000 Subject: [PATCH 041/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/23051837 --- Hlt/Moore/python/Moore/persistence/packing.py | 1 + Hlt/Moore/python/Moore/persistence/persistreco.py | 1 + 2 files changed, 2 insertions(+) diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 74636d3a8d3..cda25a60d6e 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -119,6 +119,7 @@ def pack_stream_mc_locations(stream): str(PackMCVertex.getDefaultProperties()["OutputName"])) ] + def pack_stream_mc(stream): """Return a list of packers that will produce mc packed output. diff --git a/Hlt/Moore/python/Moore/persistence/persistreco.py b/Hlt/Moore/python/Moore/persistence/persistreco.py index d7a56a1ac56..2e692fe15a3 100644 --- a/Hlt/Moore/python/Moore/persistence/persistreco.py +++ b/Hlt/Moore/python/Moore/persistence/persistreco.py @@ -19,6 +19,7 @@ as primary vertices, are treated different if the line has PersistReco enabled. See the cloning configuration for those differences. """ + def persistreco_to_be_persisted(): return [ -- GitLab From f39897b8ed8ed19643aa1f581b543d537b178212 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Tue, 31 May 2022 12:45:18 +0200 Subject: [PATCH 042/102] require (and generate) an explicit encoding key to configure encoding --- Hlt/Moore/python/Moore/config.py | 102 ++++++----- .../python/Moore/persistence/__init__.py | 171 +++++++++++------- Hlt/Moore/python/Moore/persistence/packing.py | 102 +++-------- Hlt/Moore/python/Moore/selreports.py | 13 +- Hlt/Moore/python/Moore/tcks.py | 96 +++++++++- 5 files changed, 279 insertions(+), 205 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 6b6081fe20e..f63a92d5c86 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -11,6 +11,7 @@ from __future__ import absolute_import import re, logging, inspect, itertools from collections import namedtuple +from Configurables import ApplicationMgr from PyConf import configurable from PyConf.Algorithms import ( ExecutionReportsWriter, HltDecReportsWriter, HltSelReportsWriter, @@ -18,7 +19,7 @@ from PyConf.Algorithms import ( CombineRawBankViewsToRawEvent, RawEventCombiner, RawEventSimpleCombiner, AddressKillerAlg, VoidFilter) import Functors as F -from PyConf.components import force_location +from PyConf.components import force_location, setup_component from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, @@ -31,12 +32,10 @@ from PyConf.application import ( default_raw_event, root_writer, make_data_with_FetchDataFromFile, - generate_encoding_dictionary, register_encoding_dictionary, ) from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError -from AllenConf.persistency import build_decision_ids #: Regular expression (compiled) defining the valid selection line names # Meaning: line names should start with either of Hlt1, Hlt2, Spruce, Pass @@ -116,11 +115,27 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name +def _build_decision_ids(decision_names, offset=1): + """Return a dict of decision names to integer IDs. + + Decision report IDs must not be zero. This method generates IDs starting + from offset. + + Args: + decision_names (list of str) + offset (int): needed so that there are no identical ints in the int->str relations + of HltRawBankDecoderBase + + Returns: + decision_ids (dict of str to int): Mapping from decision name to ID. + """ + return {name: idx for idx, name in enumerate(decision_names, offset)} + + @configurable def report_writers_node(streams, data_type, process, - output_manifest_file, associate_mc=False, clone_mc=False): """Return the control flow node and locations to persist of the default reports writers. @@ -166,74 +181,66 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - source_id = { - "hlt1": "Hlt1", - "hlt2": "Hlt2", - "spruce": "Spruce", - "pass": "Spruce" - }[process] - major_name = { - "hlt1": "Hlt1DecisionID", - "hlt2": "Hlt2DecisionID", - "spruce": "SpruceDecisionID", - "pass": "SpruceDecisionID" - }[process] - dec_key = int( - register_encoding_dictionary( - major_name, - generate_encoding_dictionary(major_name, - [l.decision_name for l in lines])), - 16) # TODO unsigned? Stick to hex string? - if process == "hlt1" or process == "hlt2": + major_name = "{}SelectionID".format(process.capitalize()) + key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=dec_key, + TCK=key, ) drw = HltDecReportsWriter( - SourceID=source_id, + SourceID=process.capitalize(), InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=dec_key, + EncodingKey=key, ) algs.extend([erw, drw]) new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - srm = make_selreports(process, physics_lines, erw) + encoding_key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? + srm = make_selreports(physics_lines, erw, encoding_key) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) barrier_algorithms.append(srm) srw = HltSelReportsWriter( - SourceID=source_id, + SourceID=process.capitalize(), DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=srm.properties['EncodingKey']) + EncodingKey=encoding_key) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": (line_output_cf, line_output_locations, packed_data) = persist_line_outputs( physics_lines, data_type, erw.DecReportsLocation, associate_mc, - process.capitalize(), output_manifest_file) - + process.capitalize()) algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent extra_locations_to_persist.extend(line_output_locations) else: ##spruce and passthrough jobs will write a Spruce report + major = "SpruceSelectionID" erw = ExecutionReportsWriter( Persist=[line.name for line in lines], - ANNSvcKey=major_name, - TCK=dec_key # TODO unsigned? Stick to hex string? + ANNSvcKey=major, + TCK=int( + register_encoding_dictionary( + major, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( - SourceID=source_id, + SourceID='Spruce', InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=dec_key, ) algs.extend([erw, drw]) @@ -247,7 +254,6 @@ def report_writers_node(streams, erw.DecReportsLocation, associate_mc, process.capitalize(), - output_manifest_file, stream="/Event/Spruce", reco_stream="/Event/HLT2", clone_mc=options.simulation and options.input_type == ROOT_KEY) @@ -452,12 +458,25 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): streams[stream] = sorted(stream_lines, key=lambda line: line.name) lines = streams_dict_to_lines_list(streams) + ann_config = dict( + hlt1_decision_ids={}, hlt2_decision_ids={}, spruce_decision_ids={}) + if allen_hlt1: + ann_config["hlt1_decision_ids"] = get_allen_hlt1_decision_ids() + key = process + "_decision_ids" + #For passthrough lines want decisions a la Sprucing + if process == "pass": + key = "spruce_decision_ids" + if process == "hlt2": offset = 1000 + elif process == "spruce" or process == "pass": offset = 5000 + else: offset = 1 + ann_config[key] = _build_decision_ids([l.decision_name for l in lines], + offset) + # register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, options.data_type, process, - options.output_manifest_file, # Can only run association when we have access to the linker tables. Only want association for hlt step associate_mc=process == "hlt2" and options.simulation and options.input_type == ROOT_KEY and options.output_type == ROOT_KEY, @@ -657,17 +676,14 @@ def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) from Allen.config import setup_allen_non_event_data_service - from AllenConf.persistency import make_dec_reporter, register_decision_ids + from AllenConf.persistency import make_dec_reporter options.finalize() non_event_data_node = setup_allen_non_event_data_service() - ids = get_allen_hlt1_decision_ids() - encoding_key = register_decision_ids(ids) - # TODO: remove when full configuration of Allen from TCK is implemented - make_dec_reporter.global_bind(TCK=encoding_key) + if options.tck: make_dec_reporter.global_bind(TCK=options.tck) # Write DecReports raw banks allen_cf, allen_barriers = allen_gaudi_node_barriers() @@ -679,6 +695,8 @@ def allen_control_flow(options, write_detector_raw_banks=True): algs.extend([srw]) new_hlt_banks['HltSelReports'] = srw.OutputRawReports + decision_ids = get_allen_hlt1_decision_ids() + # register the decision_ids... and get the oid of their mapping # hlt1_decision_ids=decision_ids, hlt2_decision_ids={}, spruce_decision_ids={}) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 66f6866f75f..8c1839fe73c 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -11,22 +11,24 @@ """Configuration for persisting HLT2 objects in output ROOT/MDF files.""" from __future__ import absolute_import import itertools -import logging, os, json +import logging, os from pprint import pformat from Configurables import HltLinePersistenceSvc -#from RecoConf.data_from_file import unpacked_mc_locations +from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output -from PyConf.location_prefix import prefix +from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix +from PyConf.object_types import type_map, classid_map from PyConf.application import register_encoding_dictionary -from GaudiConf.reading import type_map +from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations, packers_map -from .persistreco import persistreco_line_outputs +from .packing import pack_stream_objects, pack_stream_mc +from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed +from .serialisation import serialise_packed_containers from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC log = logging.getLogger(__name__) @@ -60,26 +62,37 @@ def _referenced_inputs(lines, inputs): #fill the packer inputs dictionary based on object type for dh in line_locs: - typ = get_type(dh) - if typ and typ in inputs.keys(): - inputs[typ] += [dh] + type = get_type(dh) + + if type and type in inputs.keys(): + inputs[type] += [dh.location] return inputs def _referenced_locations(lines): all_locs = {} + all_types = {} for l in lines: # Include the locations of the line outputs themselves line_locs = set() # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - all_locs[l.decision_name] = [dh for dh in line_locs] + + # Convert DataHandle to str, for configuring the ANN service + all_locs[l.decision_name] = [dh.location for dh in line_locs] + all_types[l.decision_name] = [] + for dh in line_locs: + if get_type(dh): + all_types[l.decision_name] += [get_type(dh)] + else: + all_types[l.decision_name] += [dh.type] + #zipped = zip(all_locs[l.decision_name], all_types[l.decision_name]) return all_locs def get_type(dh): - #For this to work, one needs to add new types to object_types.py in GaudiConf + #For this to work, one needs to add new types to object_types.py in Pyconf types = type_map() if dh.type in types.keys(): return types[dh.type] @@ -102,25 +115,6 @@ def get_type(dh): return None -def get_packed_locations(inputs, stream): - packed_dhs = [] - - types = type_map() - k = list(types.keys()) - v = list(types.values()) - - for key, locs in inputs.items(): - for i in locs: - t = i.type - if i.type == "unknown_t": - t = k[v.index(key)] - - packed_dhs += [(prefix(i.location, stream), t)] - - packed_dhs = list(dict.fromkeys(packed_dhs)) - return {'PackedLocations': packed_dhs} - - @configurable def persist_line_outputs( lines, @@ -128,9 +122,8 @@ def persist_line_outputs( dec_reports, associate_mc, source_id, - output_manifest_file, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes - reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from + reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from clone_mc=True): """Return CF node and output locations of the HLT2 line persistence. @@ -143,7 +136,6 @@ def persist_line_outputs( i.e. the DstData bank. """ - cf = [] protoparticle_relations = [] if associate_mc: @@ -173,35 +165,27 @@ def persist_line_outputs( if log.isEnabledFor(logging.DEBUG): log.debug('line_locations: ' + pformat(persistence_svc.Locations)) - # Make a dictinary for all known object types with emty values - p_map = packers_map() - inputs = {t: [] for t in p_map.keys()} + # Make a dictionary for all known object types with empty values + inputs = PersistRecoPacking().dictionary() #add line outputs to fill the dictionary inputs = _referenced_inputs(lines, inputs) - #add the locations from reco objects to the dictinary + #add the locations from reco objects to the dictionary prdict = persistreco_line_outputs() + prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - for val in prdict.values(): + for key, val in prdict.items(): name = get_type(val) #find type of object for this DH - if name: inputs[name] += [get_output(val)] + if name: + inputs[name] += [get_output(val).location] # add proto particle relations if they exist for p in protoparticle_relations: - assert not isinstance(p, str) - inputs["PP2MCPRelations"] += [p] - - if output_manifest_file: - with open(output_manifest_file, 'w') as f: - json.dump( - get_packed_locations(inputs, stream), - f, - indent=4, - sort_keys=True) - - locify = lambda i: i.location if hasattr(i, 'location') else i - inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} + if isinstance(p, str): + inputs["PP2MCPRelations"] += [p] + else: + inputs["PP2MCPRelations"] += [p.location] #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -217,7 +201,7 @@ def persist_line_outputs( dec_reports, protoparticle_relations, stream, - # need to delcare outputs, see usage inside clone_line_outputs + # need to declare outputs, see usage inside clone_line_outputs outputs=list(itertools.chain.from_iterable(inputs.values())), clone_mc=clone_mc, ) @@ -226,37 +210,86 @@ def persist_line_outputs( pformat(output_cloner_locations)) cf.append(output_cloner_cf) - ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ i for ilist in inputs.values() for i in ilist]) | \ - set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) - - if clone_mc: - mc_stream = stream - if reco_stream not in stream: mc_stream = prefix(reco_stream, stream) - locations = locations.union(pack_stream_mc_locations(mc_stream)) + #Make a dictionary for output packer locations + #For line outputs, "stream+/p" added to input locations + #For reco objects, there are pre-defined output locations + #This is to be able to find reco objects regardless of their producer + outputs = {} + for key, value in inputs.items(): + outputs[key] = [] + for v in value: + if v in prdict_packed.keys(): + outputs[key] += [prdict_packed[v]] #reco + else: + outputs[key] += [packed_prefix(v, stream)] #line + + prpacking = PersistRecoPacking( + stream=stream, + unpacked=inputs, + packed=outputs, + data_type=data_type, + ) + ### TODO: reduce the set of encoding keys to the smallest possible one... encoding_key = int( - register_encoding_dictionary("PackedObjectLocations", - sorted(locations)), 16) + register_encoding_dictionary( + "PackedObjectLocations", + sorted( + set([i for i in prpacking.packedLocations()]) + | set([ + unpacked_prefix(i, stream) + for i in prpacking.packedLocations() + ]) + | set([i for i in prpacking.unpackedLocations()]) + | set([ + i for i in itertools.chain( + *_referenced_locations(lines).values()) + ]))), 16) + + packer_cf, packer_locations = pack_stream_objects(stream, prpacking, + encoding_key) + cf.append(packer_cf) packer_mc_locations = [] if clone_mc: + mc_stream = stream + if reco_stream not in stream: + mc_stream = prefix(reco_stream, stream) mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) if log.isEnabledFor(logging.DEBUG): - log.debug('packer_locations: ' + pformat(inputs.values())) + log.debug('packer_locations: ' + pformat(packer_locations)) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) - packers_cf, serialisation_cf, output_raw_data = pack_stream_objects( - stream, inputs, encoding_key, source_id) - - cf.append(packers_cf) - cf.append(serialisation_cf) + serialisation_cf, output_raw_data = serialise_packed_containers( + packer_locations, source_id) if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) + cf.append(serialisation_cf) + + unpacked_mc = unpacked_mc_locations() + unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] + + # Gather all possible locations which might be referenced... + #registered_locs = list( + # itertools.chain( + # packer_locations, + # [ unpacked_prefix(keys, stream) for keys in prpacking.packedLocations() ], + # prpacking.packedLocations(), + # prpacking.unpackedLocations(), + # unpacked_mc_locations().values(), + # [prefix(l, stream) for l in unpacked_mc_loc], + # itertools.chain(*_referenced_locations(lines).values()), + # )) + + # ...including all prefixed (post-cloning) locations + #registered_locs += [prefix(l, tes_prefix=stream) for l in registered_locs] + + #if log.isEnabledFor(logging.DEBUG): + # log.debug('registered_locs: ' + pformat(registered_locs)) control_flow_node = CompositeNode( "hlt2_line_output_persistence", diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index cda25a60d6e..a9a165b65de 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -12,12 +12,9 @@ import logging import os from PyConf.Algorithms import ( - PackMCParticle, PackMCVertex, RecVertexPacker, VertexPacker, RichPIDPacker, - MuonPIDPacker, ProtoParticlePacker, ParticlePacker, TrackPacker, - FlavourTagPacker, CaloHypoPacker, CaloClusterPacker, CaloDigitPacker, - CaloAdcPacker, P2VRelationPacker, P2MCPRelationPacker, P2IntRelationPacker, - P2InfoRelationPacker, PP2MCPRelationPacker, HltPackedBufferWriter) - + PackMCParticle, + PackMCVertex, +) from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic @@ -28,96 +25,39 @@ log = logging.getLogger(__name__) from PyConf import configurable -def packers_map(): - - return { - "PVs": RecVertexPacker, - "Vertices": VertexPacker, - "Tracks": TrackPacker, - "RichPIDs": RichPIDPacker, - "MuonPIDs": MuonPIDPacker, - "CaloHypos": CaloHypoPacker, - "CaloClusters": CaloClusterPacker, - "CaloDigits": CaloDigitPacker, - "CaloAdcs": CaloAdcPacker, - "ProtoParticles": ProtoParticlePacker, - "Particles": ParticlePacker, - "FlavourTags": FlavourTagPacker, - "P2VRelations": P2VRelationPacker, - "P2MCPRelations": P2MCPRelationPacker, - "P2IntRelations": P2IntRelationPacker, - "P2InfoRelations": P2InfoRelationPacker, - "PP2MCPRelations": PP2MCPRelationPacker - } - - @configurable -def pack_stream_objects(stream, - inputs, - encoding_key, - source_id, - enable_check=False): - """Return CF node that packs and serialises a set of containers to a raw bank. +def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): + """Return a list of packers that will produce all packed output. Args: - stream (str): TES root containing objects to be persisted. - inputs (map): Type: locations to be persisted + stream (str): TES root containing objects to be packed. + prpacking (PersistRecoPacking object): PersistRecoPacking object that describes packing configuration. Returns: - serialisation_node (CompositeNode). - output_raw_data (DataHandle): Raw event with serialised data, - i.e. the DstData bank. - + algs (list): Algorithms to run the packing. + outputs (list of str): Locations that should be persisted, in the + specification used by ROOT output writers (e.g. OutputStream). """ - p_map = packers_map() - packers = [] - - for t, p in p_map.items(): - if t in inputs.keys(): - packer = p( - InputName=[force_location(loc) for loc in inputs[t]], - OutputLevel=OUTPUTLEVEL, - EnableCheck=enable_check, - EncodingKey=encoding_key) - - packers += [packer] + persistreco_packers = prpacking.packers( + output_level=OUTPUTLEVEL, + enable_check=enable_check, + encoding_key=encoding_key) packers_cf = CompositeNode( "packers", - children=packers, + children=persistreco_packers, combine_logic=NodeLogic.NONLAZY_OR, force_order=True, ) - packers_output_locations = [ - get_output(p.outputs["OutputName"]).location for p in packers - ] - - bank_writer = HltPackedBufferWriter( - PackedContainers=packers_output_locations, - OutputLevel=OUTPUTLEVEL, - SourceID=source_id) - - serialisation_cf = CompositeNode( - "serialisation", - children=[bank_writer], - ) - - return packers_cf, serialisation_cf, bank_writer + packers_output_locations = [] + for p in persistreco_packers: + packers_output_locations += [ + get_output(p.outputs["OutputName"]).location + ] - -def pack_stream_mc_locations(stream): - return [ - os.path.join(stream, - str(PackMCParticle.getDefaultProperties()["InputName"])), - os.path.join(stream, - str(PackMCVertex.getDefaultProperties()["InputName"])), - os.path.join(stream, - str(PackMCParticle.getDefaultProperties()["OutputName"])), - os.path.join(stream, - str(PackMCVertex.getDefaultProperties()["OutputName"])) - ] + return packers_cf, packers_output_locations def pack_stream_mc(stream): diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 642fe7b6af6..6bc65f3f7f5 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,7 +38,6 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) -from PyConf.application import register_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -209,11 +208,12 @@ def convert_output(alg): alg.type)) -def make_selreports(process, lines, decreports, **kwargs): +def make_selreports(lines, decreports, encoding_key, **kwargs): """Return a SelReportsMaker instance configured for the given lines. Args: - lines: The list of lines for which to create SelReport objects + lines (list of DecisionLine): The lines to create SelReport objects + for. decreports: DecReports data used as input to the SelReports maker. kwargs: Passed to the SelReportsMaker. """ @@ -226,11 +226,6 @@ def make_selreports(process, lines, decreports, **kwargs): else: # No lines we can handle, so do nothing names, outputs, types = [], [], [] - - key = int( - register_encoding_dictionary( - "{}SelectionID".format(process.capitalize()), names), 16) - # Each line output should be unique; we expect no two lines to do exactly # the same work assert len(outputs) == len( @@ -241,5 +236,5 @@ def make_selreports(process, lines, decreports, **kwargs): SelectionNames=names, CandidateTypes=types, Inputs=outputs, - EncodingKey=key, + EncodingKey=encoding_key, **kwargs) diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index 2215f19d3c9..f402d56755d 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -50,8 +50,96 @@ The functions in this module currently support persisting the configuration of import json -def load_manifest(fname): - ### TODO: implement me!!! +class _ConfigurableEncoder(json.JSONEncoder): + def default(self, obj): + try: + # Try to serialise assuming Configurable + name = obj.getFullName() + props = obj.getDefaultProperties() + props.update(obj.getValuedProperties()) + obj = {name: props} + except AttributeError: + pass + return obj + + +def dump_hlt2_configuration(config, fname): + """Dump the HLT2 configuration in to a JSON TCK file. + + Note: + The `config` argument is currently unused as the configuration + dictionary returned by `Moore.run_moore` does not contain all + configurables. This will change once LHCb#141 has been addressed. + + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): + """Instantiate configurables based on an HLT2 TCK. + + Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 + application. + + Args: + fname -- Filename of the JSON TCK file produced by + ``dump_hlt2_configuration``. + annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. + """ with open(fname) as f: - manifest = json.load(f) - return manifest + config = json.load(f) + + dicts = config["HltANNSvc/HltANNSvc"] + cfg = json.dumps({ + 'Hlt1SelectionID': dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': dicts["Hlt2SelectionID"], + 'SpruceSelectionID': dicts["SpruceSelectionID"], + 'PackedObjectLocations': dicts["PackedObjectLocations"] + }) + + from Configurables import GitANNSvc + return GitANNSvc(annsvc_name, Overrule={0: cfg}) + + +def dump_sprucing_configuration(config, fname): + """Dump the Sprucing configuration in to a JSON TCK file. + Note we need the `Hlt{1,2}SelectionID`s from the Hlt2 ANNSvc + that we read into "HltANNSvcReading" + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def dump_passthrough_configuration(config, fname): + """Dump the pass-through Sprucing configuration in to a JSON TCK file. + Here we need the `Hlt{1,2}SelectionID`s and `PackedObjectLocations` from the + Hlt2 job ANNSvc that we read into "HltANNSvcReading" + + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def load_sprucing_configuration(fname, annsvc_name): + """Instantiate configurables based on a Sprucing TCK. + + Returns an HltANNSvc loaded with the HltANNSvc configuration of the + Sprucing application. + + Args: + fname -- Filename of the JSON TCK file produced by + ``dump_sprucing_configuration``. + annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. + """ + + return load_hlt2_configuration(fname, annsvc_name) -- GitLab From b770f418717a7dfefbef36d352cb001106821125 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Fri, 3 Jun 2022 14:12:51 +0200 Subject: [PATCH 043/102] replace dump_xyz_config with options.output_manifest_file --- .../bandq/spruce_bandq_example_fromfile.py | 3 ++ .../examples/b_to_charmonia/spruce_b2cc.py | 3 ++ .../b_to_open_charm/spruce_b2oc_fromfile.py | 3 ++ .../b_to_open_charm/spruce_b2oc_realtime.py | 3 ++ .../options/hlt2_persistreco_fromfile.py | 14 +++--- Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py | 3 ++ .../options/qee/spruce_qee_example.py | 5 +- .../sprucing/spruce_example_fromfile.py | 3 ++ .../sprucing/spruce_example_realtime.py | 3 ++ .../spruce_example_realtime_dstinput.py | 3 ++ .../spruce_example_realtime_extraoutputs.py | 3 ++ .../spruce_example_realtime_persistreco.py | 3 ++ .../options/sprucing/spruce_hlt2filter.py | 3 ++ .../options/sprucing/spruce_passthrough.py | 3 ++ .../sprucing/spruce_passthrough_dstinput.py | 3 ++ .../streaming/spruce_test_streaming.py | 3 ++ .../options/hlt_filters_test_sprucepass.py | 3 ++ Hlt/Moore/python/Moore/tcks.py | 49 ++----------------- 18 files changed, 60 insertions(+), 53 deletions(-) diff --git a/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py b/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py index ecc1b83bc6c..96c6777f6c1 100644 --- a/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_bandq_example_fromfile.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -39,6 +40,8 @@ options.output_file = 'spruce_B2JpsiK.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_onia_example_fromfile.tck.json" +load_hlt2_configuration("Hlt2DiMuonLines_test.tck.json") + def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py b/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py index bcf1021e0c7..2f1463cb8eb 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py @@ -18,6 +18,7 @@ ./Moore/run gaudirun.py spruce_b2cc_example.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -40,6 +41,8 @@ options.output_file = 'spruce_Bs2JpsiPhi.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2cc_example.tck.json" +load_hlt2_configuration("Hlt2DiMuonLines_Bs2JpsiPhi.tck.json") + def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py index a5474c107f8..7af6e3077e9 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_fromfile.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -35,6 +36,8 @@ options.output_file = 'spruce_fromfilereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2oc_example_fromfile.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_fromfile.tck.json") + def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py index ce59bc7c0b0..b15aa67fc58 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_realtime.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -35,6 +36,8 @@ options.output_file = 'spruce_b2oc_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2oc_example_realtime.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py index 2b443848468..052741e159d 100644 --- a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py +++ b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py @@ -123,13 +123,6 @@ options.conddb_tag = 'sim-20171127-vc-md100' # options.output_file = 'hlt2_test_persistreco_fromfile.mdf' # options.output_type = 'ROOT' -# This options file is used with different output types; subsequent tests -# require TCKs for each case -if options.output_type == "ROOT": - options.output_manifest_file = "hlt2_persistreco_fromfile_root_output.tck.json" -elif options.output_type == "MDF": - options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" - def make_lines(): return [test_persistreco_line(), test_nopersistreco_line()] @@ -138,3 +131,10 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=True): config = run_moore(options, make_lines, public_tools) + +# This options file is used with different output types; subsequent tests +# require TCKs for each case +if options.output_type == "ROOT": + options.output_manifest_file = "hlt2_persistreco_fromfile_root_output.tck.json" +elif options.output_type == "MDF": + options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py index e69bb13a98c..4d6b4811c1e 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py @@ -17,6 +17,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_qee_bbbar.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -37,6 +38,8 @@ options.output_file = 'qee_bjet_spruce.dst' options.output_type = 'ROOT' options.output_manifest_file = "qee_bjet_spruce.tck.json" +load_hlt2_configuration('hlt2_qee_bjet.tck.json') + def make_lines(): return [line() for line in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py index ca3ece81244..4b2a4a831d9 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py @@ -17,6 +17,7 @@ Run like any other options file: ./Moore/run gaudirun.py hlt2_qee_spruce_example.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.qee import sprucing_lines @@ -32,7 +33,9 @@ options.dddb_tag = 'dddb-20201211' options.conddb_tag = 'sim-20201218-vc-mu100' options.output_file = 'qee_zmumu_spruce.dst' options.output_type = 'ROOT' -options.output_manifest_file = "qee_zmumu_spruce.tck.json" +options.ouptut_manifest_file = "qee_zmumu_spruce.tck.json" + +load_hlt2_configuration('hlt2_qee_zmumu.tck.json') def make_lines(): diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py index 1108a7b0fd3..bfe33817c1b 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_fromfile.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -39,6 +40,8 @@ options.output_file = 'spruce_fromfilereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_fromfile.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_fromfile.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index d3753b362ba..ae249a2b82a 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -11,6 +11,7 @@ """Test running Sprucing line on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_example_realtimereco.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -31,6 +32,8 @@ options.output_file = 'spruce_example_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py index c9e745f68a7..889033bb622 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py @@ -15,6 +15,7 @@ Input from HLT2 is DST as will be the case for simulation. Produces spruce_realtimereco_dstinput.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -35,6 +36,8 @@ options.output_file = 'spruce_realtimereco_dstinput.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_dstinput.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime_dst.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py index 7d74f5d6370..c6372bb2010 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py @@ -11,6 +11,7 @@ """Test Sprucing line with `extra_outputs` on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_realtimereco_extraoutputs.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_extraoutputs_sprucing_line @@ -31,6 +32,8 @@ options.output_file = 'spruce_realtimereco_extraoutputs.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_extraoutputs.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py index 9eeb9b2dd36..19c0480b332 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py @@ -11,6 +11,7 @@ """Test Sprucing line with `persistreco` on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_realtimereco_persistreco.dst """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_persistreco_sprucing_line @@ -31,6 +32,8 @@ options.output_file = 'spruce_realtimereco_persistreco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_persistreco.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py index 1c64fb040e8..64e5e6f491a 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py @@ -16,6 +16,7 @@ Run like any other options file: """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import SpruceLine @@ -38,6 +39,8 @@ options.output_file = 'spruce_HLT2filter.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_HLT2filter.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def Sprucing_line_1(name='Spruce_filteronTopo2'): line_alg = b_to_dh.make_BdToDsmK_DsmToKpKmPim(process='spruce') diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py index 8aff38bf6d3..60d766800a6 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py @@ -17,6 +17,7 @@ Run like any other options file: from __future__ import absolute_import, division, print_function from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import PassLine @@ -37,6 +38,8 @@ options.output_file = 'spruce_passthrough.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_passthrough.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def pass_through_line(name="PassThrough"): """Return a Sprucing line that performs no selection diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py index e64b44894a6..c99532700f2 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py @@ -19,6 +19,7 @@ Run like any other options file: from __future__ import absolute_import, division, print_function from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import PassLine @@ -39,6 +40,8 @@ options.output_file = 'spruce_passthrough_dstinput.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_passthrough_dstinput.tck.json" +load_hlt2_configuration("hlt2_2or3bodytopo_realtime_dst.tck.json") + def pass_through_line(name="PassThrough"): """Return a Sprucing line that performs no selection diff --git a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py index 6900f038306..c2f3dc4d1fa 100644 --- a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py +++ b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py @@ -15,6 +15,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_test_streaming.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line, Test_extraoutputs_sprucing_line @@ -38,6 +39,8 @@ options.output_file = 'spruce_streaming.{stream}.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_streaming.tck.json" +# load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") + def make_streams(): linedict = dict( diff --git a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py index 0774c74d663..ea18977b7cc 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py +++ b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py @@ -18,6 +18,7 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_filters_test.py """ from Moore import options, run_moore +from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction, upfront_reconstruction ##Make dummy SpruceLine @@ -44,6 +45,8 @@ options.output_file = 'spruce_filterstest.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_filterstest.tck.json" +load_hlt2_configuration("hlt_filterstest_realtime.tck.json") + ## Make 2 identical lines except for filters def make_line1(name='SpruceTest1'): diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index f402d56755d..ffb1e662061 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -63,23 +63,7 @@ class _ConfigurableEncoder(json.JSONEncoder): return obj -def dump_hlt2_configuration(config, fname): - """Dump the HLT2 configuration in to a JSON TCK file. - - Note: - The `config` argument is currently unused as the configuration - dictionary returned by `Moore.run_moore` does not contain all - configurables. This will change once LHCb#141 has been addressed. - - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): +def load_hlt2_configuration(fname): """Instantiate configurables based on an HLT2 TCK. Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 @@ -102,35 +86,10 @@ def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): }) from Configurables import GitANNSvc - return GitANNSvc(annsvc_name, Overrule={0: cfg}) - - -def dump_sprucing_configuration(config, fname): - """Dump the Sprucing configuration in to a JSON TCK file. - Note we need the `Hlt{1,2}SelectionID`s from the Hlt2 ANNSvc - that we read into "HltANNSvcReading" - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def dump_passthrough_configuration(config, fname): - """Dump the pass-through Sprucing configuration in to a JSON TCK file. - Here we need the `Hlt{1,2}SelectionID`s and `PackedObjectLocations` from the - Hlt2 job ANNSvc that we read into "HltANNSvcReading" - - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") + return GitANNSvc('HltANNSvc', Overrule={0: cfg}) -def load_sprucing_configuration(fname, annsvc_name): +def load_sprucing_configuration(fname): """Instantiate configurables based on a Sprucing TCK. Returns an HltANNSvc loaded with the HltANNSvc configuration of the @@ -142,4 +101,4 @@ def load_sprucing_configuration(fname, annsvc_name): annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. """ - return load_hlt2_configuration(fname, annsvc_name) + return load_hlt2_configuration(fname) -- GitLab From c6cd956d062e2982005b48f74691c89398201b13 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 9 Jun 2022 22:43:40 +0200 Subject: [PATCH 044/102] make sure the packed locations do _not_ enter in the encoding table --- .../python/Moore/persistence/__init__.py | 79 ++++++------------- .../RecoConf/reco_objects_for_spruce.py | 77 +++++++++--------- 2 files changed, 64 insertions(+), 92 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 8c1839fe73c..f2c2566dba1 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -21,12 +21,12 @@ from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix -from PyConf.object_types import type_map, classid_map from PyConf.application import register_encoding_dictionary +from GaudiConf.reading import type_map from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc +from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed from .serialisation import serialise_packed_containers from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC @@ -62,10 +62,9 @@ def _referenced_inputs(lines, inputs): #fill the packer inputs dictionary based on object type for dh in line_locs: - type = get_type(dh) - - if type and type in inputs.keys(): - inputs[type] += [dh.location] + typ = get_type(dh) + if typ and typ in inputs.keys(): + inputs[typ] += [dh] return inputs @@ -79,20 +78,12 @@ def _referenced_locations(lines): for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - # Convert DataHandle to str, for configuring the ANN service - all_locs[l.decision_name] = [dh.location for dh in line_locs] - all_types[l.decision_name] = [] - for dh in line_locs: - if get_type(dh): - all_types[l.decision_name] += [get_type(dh)] - else: - all_types[l.decision_name] += [dh.type] - #zipped = zip(all_locs[l.decision_name], all_types[l.decision_name]) + all_locs[l.decision_name] = [dh for dh in line_locs] return all_locs def get_type(dh): - #For this to work, one needs to add new types to object_types.py in Pyconf + #For this to work, one needs to add new types to object_types.py in GaudiConf types = type_map() if dh.type in types.keys(): return types[dh.type] @@ -178,14 +169,15 @@ def persist_line_outputs( for key, val in prdict.items(): name = get_type(val) #find type of object for this DH if name: - inputs[name] += [get_output(val).location] + inputs[name] += [get_output(val)] # add proto particle relations if they exist for p in protoparticle_relations: - if isinstance(p, str): - inputs["PP2MCPRelations"] += [p] - else: - inputs["PP2MCPRelations"] += [p.location] + assert not isinstance(p, str) + inputs["PP2MCPRelations"] += [p] + + locify = lambda i : i.location if hasattr(i,'location') else i + inputs = { t: [ locify(i) for i in dhs] for t,dhs in inputs.items() } #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -231,20 +223,18 @@ def persist_line_outputs( ) ### TODO: reduce the set of encoding keys to the smallest possible one... + locations = set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ + set([ i for i in prpacking.unpackedLocations()]) | \ + set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) + + if clone_mc: + mc_stream = stream + if reco_stream not in stream: mc_stream = prefix(reco_stream, stream) + locations = locations.union(pack_stream_mc_locations(mc_stream)) + encoding_key = int( - register_encoding_dictionary( - "PackedObjectLocations", - sorted( - set([i for i in prpacking.packedLocations()]) - | set([ - unpacked_prefix(i, stream) - for i in prpacking.packedLocations() - ]) - | set([i for i in prpacking.unpackedLocations()]) - | set([ - i for i in itertools.chain( - *_referenced_locations(lines).values()) - ]))), 16) + register_encoding_dictionary("PackedObjectLocations", + sorted(locations)), 16) packer_cf, packer_locations = pack_stream_objects(stream, prpacking, encoding_key) @@ -253,9 +243,6 @@ def persist_line_outputs( packer_mc_locations = [] if clone_mc: - mc_stream = stream - if reco_stream not in stream: - mc_stream = prefix(reco_stream, stream) mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) @@ -273,24 +260,6 @@ def persist_line_outputs( unpacked_mc = unpacked_mc_locations() unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] - # Gather all possible locations which might be referenced... - #registered_locs = list( - # itertools.chain( - # packer_locations, - # [ unpacked_prefix(keys, stream) for keys in prpacking.packedLocations() ], - # prpacking.packedLocations(), - # prpacking.unpackedLocations(), - # unpacked_mc_locations().values(), - # [prefix(l, stream) for l in unpacked_mc_loc], - # itertools.chain(*_referenced_locations(lines).values()), - # )) - - # ...including all prefixed (post-cloning) locations - #registered_locs += [prefix(l, tes_prefix=stream) for l in registered_locs] - - #if log.isEnabledFor(logging.DEBUG): - # log.debug('registered_locs: ' + pformat(registered_locs)) - control_flow_node = CompositeNode( "hlt2_line_output_persistence", combine_logic=NodeLogic.NONLAZY_OR, diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index aab44b3f815..0b6b5d7baf1 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -8,24 +8,29 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -from GaudiConf import reading -_reco_loc = { - "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), - "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), - "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), - #"MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), - "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), - "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), - "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), - "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), - "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), - "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), - "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs") +from GaudiConf import reading +from Configurables import ApplicationMgr +from PyConf.components import setup_component +from PyConf.location_prefix import unpacked_prefix + +reco_loc = { + "ChargedProtos": "/Event/HLT2/Rec/ProtoP/Charged", + "NeutralProtos": "/Event/HLT2/Rec/ProtoP/Neutrals", + "Tracks": "/Event/HLT2/Rec/Track/Best", + "MuonTracks": "/Event/HLT2/Rec/Track/Muon", + "PVs": "/Event/HLT2/Rec/Vertex/Primary", + "CaloElectrons": "/Event/HLT2/Rec/Calo/Electrons", + "CaloPhotons": "/Event/HLT2/Rec/Calo/Photons", + "CaloMergedPi0s": "/Event/HLT2/Rec/Calo/MergedPi0s", + "CaloSplitPhotons": "/Event/HLT2/Rec/Calo/SplitPhotons", + "MuonPIDs": "/Event/HLT2/Rec/Muon/MuonPID", + "RichPIDs": "/Event/HLT2/Rec/Rich/PIDs", + "RecSummary": "/Event/HLT2/Rec/Summary", } -def upfront_reconstruction(): +def upfront_reconstruction( ): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -34,49 +39,47 @@ def upfront_reconstruction(): """ - stream = '/Event/HLT2' + locations_to_decode = reading.make_locations( reco_loc, "/Event/HLT2") + decoder = reading.decoder( - configurables=False, output_level=4, stream=stream) + locations=locations_to_decode, + configurables=False, + output_level=4) mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) - inv_map = {v: k for k, v in reading.type_map().items()} - reco_manifest = { - 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] - } - - ## TODO: only pass reco_manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - reading.make_locations(reco_manifest, stream), - reco_manifest, - decoder.OutputBuffers, + locations=locations_to_decode, configurables=False, mc=mc_algs, output_level=4) - ### TODO:FIXME take advantage of the fact that the above have datahandles... - # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms return [decoder] + mc_algs + unpackers -def reconstruction(): +def reconstruction( ): """Return a {name: DataHandle} dict that define the reconstruction output.""" - m = {} + data = {} unpackers = upfront_reconstruction() - for key, value in _reco_loc.items(): + for key, value in reco_loc.items(): for v in unpackers: - if "OutputName" in v.outputs.keys( - ) and v.OutputName.location == value[0]: - m[key] = v.OutputName - + if "OutputName" in v.outputs.keys(): + if v.OutputName.location == unpacked_prefix( + value, "/Event/HLT2"): + data[key] = v.OutputName ### Temporary: as long as we persist v1, we need to insert a converter for the new PVs from PyConf.Algorithms import RecV1ToPVConverter - m["PVs_v1"] = m["PVs"] - m["PVs"] = RecV1ToPVConverter(InputVertices=m["PVs_v1"]).OutputVertices - return m + data["PVs_v1"] = data["PVs"] + data["PVs"] = RecV1ToPVConverter( + InputVertices=data["PVs_v1"]).OutputVertices + ### Temporary: This to be compatible with data where the RecSummary does not exist. + if "RecSummary" not in data.keys(): + from PyConf.Algorithms import FakeRecSummaryMaker + data["RecSummary"] = FakeRecSummaryMaker().Output + return data def make_charged_protoparticles(): -- GitLab From 8ec41bfdd6bfe5cd7c4a66ede3d3832ddabd7db2 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 16 Jun 2022 23:39:44 +0200 Subject: [PATCH 045/102] Fix some tests + some cleanup --- Hlt/Hlt1Conf/tests/options/make_allen_tck.py | 9 +- Hlt/Hlt1Conf/tests/options/test_decreports.py | 7 +- Hlt/Hlt2Conf/options/hlt2_check_output.py | 8 +- .../sprucing/spruce_all_lines_realtime.py | 28 ++---- Hlt/Moore/python/Moore/config.py | 24 +++-- .../python/Moore/persistence/__init__.py | 15 +--- Hlt/Moore/python/Moore/tcks.py | 57 ++++++------ Hlt/RecoConf/python/RecoConf/hlt2_tracking.py | 87 +++++++++++++++++-- .../RecoConf/reco_objects_for_spruce.py | 63 +++++++------- 9 files changed, 190 insertions(+), 108 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py index 808bd2d6419..86bdcf7d1c4 100644 --- a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py +++ b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py @@ -9,14 +9,19 @@ from __future__ import print_function # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### +from PyConf.application import register_encoding_dictionary from Moore.config import get_allen_hlt1_decision_ids -from AllenConf.persistency import register_decision_ids # raw_event_format must be configured to successfully configure Allen # Configure with the same input as the default for Allen tests. from hlt1_filtered_mdf_input import options from PyConf.application import configure_input config = configure_input(options) -key = register_decision_ids(get_allen_hlt1_decision_ids()) +ids = get_allen_hlt1_decision_ids() +key = int( + register_encoding_dictionary( + 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k + for k, v in ids.items()}}), + 16) # TODO unsigned? Stick to hex string? print(key) if key: print('PASSED') diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 06e916099ea..2c7a8624ec2 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -18,13 +18,14 @@ configure the HltANNSvc for the job ran by this script. """ from __future__ import print_function import argparse +import os from Configurables import (ApplicationMgr, HistogramPersistencySvc, IODataManager, LHCbApp, GitANNSvc) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import get_metainfo_repos + from PyConf.utilities import read_options # Top-level control flow node @@ -58,7 +59,9 @@ IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) # Configure TCKANNSvc (as that is what DecoderDB wants...) -ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) +ann = GitANNSvc( + "TCKANNSvc", Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) +print(ann) # Decode Hlt DecReports appMgr = ApplicationMgr( diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 86f40b6ec0a..7bb631fb59c 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -19,7 +19,7 @@ Takes command-line arguments: python hlt2_check_output.py """ from __future__ import print_function -import sys +import sys, os import GaudiPython as GP from GaudiConf import IOHelper @@ -27,7 +27,6 @@ from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, GitANNSvc) from GaudiConf.reading import do_unpacking -from PyConf.application import get_metainfo_repos from GaudiConf.reading import load_manifest @@ -50,7 +49,10 @@ manifest = load_manifest(sys.argv[2]) algs = do_unpacking(manifest, process='Hlt2', output_level=4) appmgr = ApplicationMgr(TopAlg=algs) -appmgr.ExtSvc += [GitANNSvc('HltANNSvc', Repositories=get_metainfo_repos())] +appmgr.ExtSvc += [ + GitANNSvc( + 'HltANNSvc', Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) +] input_file = sys.argv[1] input_type = "ROOT" if input_file.find(".dst") != -1 else "RAW" diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 855366d79a9..7c0638ea870 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -46,26 +46,13 @@ def manifest_from_eos(url): #} cfg = json.dumps({ - 'Hlt2DecisionID': - {v: k - for k, v in ann_config['Hlt2SelectionID'].items()}, - 'Hlt1DecisionID': - {v: k - for k, v in ann_config['Hlt1SelectionID'].items()}, 'Hlt2SelectionID': - {v: k - for k, v in ann_config['Hlt2SelectionID'].items()}, - 'Hlt1SelectionID': { - v: k - for k, v in ann_config['Hlt1SelectionID'].items() - }, - 'PackedObjectLocations': { - v: k - for k, v in ann_config['PackedObjectLocations'].items() - }, + ann_config['Hlt2SelectionID'], + 'PackedObjectLocations': + ann_config['PackedObjectLocations'] }) - GitANNSvc("HltANNSvc", Overrule={0: cfg}) + annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) return json.dumps({ 'PackedLocations': @@ -79,12 +66,13 @@ manifest = manifest_from_eos(url) ##Run over HLT1 filtered Min bias sample that has been processed by TOPO{2, 3} HLT2 lines. ##To produce this see `Hlt/Hlt2Conf/options/Sprucing/hlt2_2or3bodytopo_realtime.py` +input_files = [ + 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' +] options.input_raw_format = 0.3 #FIXME: options.input_manifest_file = manifest -options.input_files = [ - 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' -] +options.input_files = input_files options.input_type = 'MDF' options.evt_max = -1 diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index f63a92d5c86..ab2959abcb2 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -230,17 +230,19 @@ def report_writers_node(streams, else: ##spruce and passthrough jobs will write a Spruce report major = "SpruceSelectionID" + key = int( + register_encoding_dictionary( + major, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major, - TCK=int( - register_encoding_dictionary( - major, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? + TCK=key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( SourceID='Spruce', InputHltDecReportsLocation=erw.DecReportsLocation, + EncodingKey=key, ) algs.extend([erw, drw]) @@ -471,7 +473,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): else: offset = 1 ann_config[key] = _build_decision_ids([l.decision_name for l in lines], offset) - # register the decision_ids and get their oids back... setup_ann_service(**ann_config) + # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, @@ -682,8 +684,16 @@ def allen_control_flow(options, write_detector_raw_banks=True): non_event_data_node = setup_allen_non_event_data_service() + ids = get_allen_hlt1_decision_ids() + encoding_key = int( + register_encoding_dictionary( + 'Hlt1SelectionID', + {'Hlt1SelectionID': {v: k + for k, v in ids.items()}}), + 16) # TODO unsigned? Stick to hex string? + # TODO: remove when full configuration of Allen from TCK is implemented - if options.tck: make_dec_reporter.global_bind(TCK=options.tck) + make_dec_reporter.global_bind(TCK=encoding_key) # Write DecReports raw banks allen_cf, allen_barriers = allen_gaudi_node_barriers() @@ -695,8 +705,6 @@ def allen_control_flow(options, write_detector_raw_banks=True): algs.extend([srw]) new_hlt_banks['HltSelReports'] = srw.OutputRawReports - decision_ids = get_allen_hlt1_decision_ids() - # register the decision_ids... and get the oid of their mapping # hlt1_decision_ids=decision_ids, hlt2_decision_ids={}, spruce_decision_ids={}) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index f2c2566dba1..0ba340aed65 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -16,7 +16,6 @@ from pprint import pformat from Configurables import HltLinePersistenceSvc -from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output @@ -70,14 +69,12 @@ def _referenced_inputs(lines, inputs): def _referenced_locations(lines): all_locs = {} - all_types = {} for l in lines: # Include the locations of the line outputs themselves line_locs = set() # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - all_locs[l.decision_name] = [dh for dh in line_locs] return all_locs @@ -166,18 +163,17 @@ def persist_line_outputs( prdict = persistreco_line_outputs() prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - for key, val in prdict.items(): + for val in prdict.values(): name = get_type(val) #find type of object for this DH - if name: - inputs[name] += [get_output(val)] + if name: inputs[name] += [get_output(val)] # add proto particle relations if they exist for p in protoparticle_relations: assert not isinstance(p, str) inputs["PP2MCPRelations"] += [p] - locify = lambda i : i.location if hasattr(i,'location') else i - inputs = { t: [ locify(i) for i in dhs] for t,dhs in inputs.items() } + locify = lambda i: i.location if hasattr(i, 'location') else i + inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -257,9 +253,6 @@ def persist_line_outputs( log.debug('output_raw_data: %s', pformat(output_raw_data)) cf.append(serialisation_cf) - unpacked_mc = unpacked_mc_locations() - unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] - control_flow_node = CompositeNode( "hlt2_line_output_persistence", combine_logic=NodeLogic.NONLAZY_OR, diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index ffb1e662061..0244509d6c7 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -63,6 +63,13 @@ class _ConfigurableEncoder(json.JSONEncoder): return obj +def load_manifest(fname): + ### TODO: implement me!!! + with open(fname) as f: + manifest = json.load(f) + return manifest + + def load_hlt2_configuration(fname): """Instantiate configurables based on an HLT2 TCK. @@ -77,28 +84,28 @@ def load_hlt2_configuration(fname): with open(fname) as f: config = json.load(f) - dicts = config["HltANNSvc/HltANNSvc"] - cfg = json.dumps({ - 'Hlt1SelectionID': dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': dicts["Hlt2SelectionID"], - 'SpruceSelectionID': dicts["SpruceSelectionID"], - 'PackedObjectLocations': dicts["PackedObjectLocations"] - }) - - from Configurables import GitANNSvc - return GitANNSvc('HltANNSvc', Overrule={0: cfg}) - - -def load_sprucing_configuration(fname): - """Instantiate configurables based on a Sprucing TCK. - - Returns an HltANNSvc loaded with the HltANNSvc configuration of the - Sprucing application. - - Args: - fname -- Filename of the JSON TCK file produced by - ``dump_sprucing_configuration``. - annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. - """ - - return load_hlt2_configuration(fname) + try: + # see if this is an old-style .tck.json file needed for decoding + # because the encoding key is not present in the data + # + # In that case, we just configure the GitAnnSvc with an overrule + # for a zero key + dicts = config["HltANNSvc/HltANNSvc"] + cfg = json.dumps({ + 'Hlt1SelectionID': + dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': + dicts["Hlt2SelectionID"], + 'SpruceSelectionID': + dicts["SpruceSelectionID"], + 'PackedObjectLocations': + dicts["PackedObjectLocations"] + }) + + from Configurables import GitANNSvc + return GitANNSvc('HltANNSvc', Overrule={0: cfg}) + except: + print("load_hlt_configuration: not an old-style .tck.json file") + print( + "if not running on an old file with zero encoding key, just remove the call" + ) diff --git a/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py index b7544b66c83..4d197813756 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py @@ -14,6 +14,7 @@ from PyConf import configurable from functools import partial from PyConf.application import (make_data_with_FetchDataFromFile) +from RecoConf.core_algorithms import make_unique_id_generator from RecoConf.hlt1_tracking import ( make_VPClus_hits, make_PrStoreUTHit_hits, make_PrStorePrUTHits_hits, make_PrStoreSciFiHits_hits, make_VeloClusterTrackingSIMD_hits, @@ -40,8 +41,6 @@ from PyConf.Tools import (PrAddUTHitsTool, PrIgnoreUTHitsTool, UpgradeGhostId, from RecoConf.data_from_file import boole_links_digits_mcparticles, mc_unpackers -from RecoConf.core_algorithms import make_unique_id_generator - @configurable def get_global_ut_hits_tool(ut_hits_tool=PrAddUTHitsTool, @@ -701,7 +700,8 @@ def make_pr_kf_light_reco_best_tracks(tracks, MaxChi2PreOutlierRemoval=20, HitsVP=vp_hits, ReferenceExtrapolator=TrackMasterExtrapolator( - MaterialLocator=get_global_materiallocator())) + MaterialLocator=get_global_materiallocator()), + InputUniqueIDGenerator=make_unique_id_generator()) tbtc_template = partial( TrackBestTrackCreator, @@ -751,7 +751,8 @@ def make_pr_kf_light_reco_best_tracks(tracks, HitsUT=tracks['UTHitsRes'] if fast_reco else ut_hits, HitsFT=ft_hits, ReferenceExtrapolator=TrackMasterExtrapolator( - MaterialLocator=get_global_materiallocator())).Output + MaterialLocator=get_global_materiallocator()), + InputUniqueIDGenerator=make_unique_id_generator()).Output best_down = tbtc_template( name="TBTC_down", TracksInContainers=[fitted_down]).TracksOutContainer @@ -774,7 +775,7 @@ def make_pr_kf_light_reco_best_tracks_without_UT( get_ghost_tool=get_UpgradeGhostId_tool_no_UT, fit_forward_first=True): """ - Preselect forward,match, and downstream tracks + Preselect forward, match, and downstream tracks Fit forward tracks -> TrackBestTrackCreator (TBTC) for ghost rejection Clone kill match Tracks with respect to forward -> Fit -> TBTC for ghost rejection Merge match and forward -> BestLong @@ -813,7 +814,8 @@ def make_pr_kf_light_reco_best_tracks_without_UT( MaxChi2PreOutlierRemoval=20, HitsVP=vp_hits, ReferenceExtrapolator=TrackMasterExtrapolator( - MaterialLocator=get_global_materiallocator())) + MaterialLocator=get_global_materiallocator()), + InputUniqueIDGenerator=make_unique_id_generator()) tbtc_template = partial( TrackBestTrackCreator, @@ -962,6 +964,79 @@ def make_hlt2_tracks_without_UT(light_reco=True, return track_dict +@configurable +def make_hlt2_tracks_ion(light_reco=False, + fast_reco=False, + post_fit_selection=None, + use_pr_kf=False): + """Function to get all types of tracks reconstructed in HLT2 + Sequence optimized for PbPb data taking. The function filters Best tracks acording to the cut 'post_fit_selection' + Returns: + A dict mapping all types of velo, upstream, HLT1 forward fitted, HLT2 forward, SciFi seeding, downstream, matched long and best tracks to ``'Velo'``, ``'Upstream'``, ``'ForwardFastFitted'``, ``'Forward'``, ``'Seed'``, ``'Downstream'``, ``'Match'`` and ``'Best'`` respectively. + """ + + track_version = "v1" + + track_dict = make_hlt2_tracks( + light_reco=light_reco, fast_reco=fast_reco, use_pr_kf=use_pr_kf) + + # Apply selection to HLT2 Tracks ## ion + if post_fit_selection is not None: + # The selector + selector = LoKiTrackSelector(Code=post_fit_selection) + for trType in track_dict.keys(): + if trType in ["UTHitsRes", "FTHitsRes"]: continue + if "Best" not in trType: continue + for version in track_dict[trType].keys(): + container = track_dict[trType][track_version] + + #Apply the filter + splitter = TrackContainerSplitter( + name="TrackContainerSplitter" + trType + version, + TracksInContainer=container, + Selector=selector) + #replace it + track_dict[trType][track_version] = splitter.PassedContainer + + return track_dict + + +@configurable +def make_hlt2_tracks_ion_without_UT(light_reco=True, + fast_reco=True, + post_fit_selection=None, + use_pr_kf=True): + """Function to get all types of tracks reconstructed in HLT2 without the UT + Sequence optimized for PbPb data taking + + Returns: + A dict mapping all types of velo, HLT2 forward, SciFi seeding, matched long and best tracks to ``'Velo'``, ``'Forward'``, ``'Seed'``, ``'Match'`` and ``'Best'`` respectively. + """ + + track_version = "v1" + + track_dict = make_hlt2_tracks_without_UT( + light_reco=light_reco, fast_reco=fast_reco, use_pr_kf=use_pr_kf) + + # Apply selection to HLT2 Tracks ## ion + if post_fit_selection is not None: + # The selector + selector = LoKiTrackSelector(Code=post_fit_selection) + for trType in track_dict.keys(): + if trType in ["UTHitsRes", "FTHitsRes"]: continue + if "Best" not in trType: continue + for version in track_dict[trType].keys(): + container = track_dict[trType][track_version] + #Apply the filter + splitter = TrackContainerSplitter( + name="TrackContainerSplitter" + trType + version, + TracksInContainer=container, + Selector=selector) + #replace it + track_dict[trType][track_version] = splitter.PassedContainer + return track_dict + + def make_ReduceVeloTracks_fromLong(input_tracks, velotracks): """ Function to remove Velo tracks used by PrMatchNN or PrForwardTracking algorithm and diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 0b6b5d7baf1..63c9c81b359 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -8,29 +8,25 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### - from GaudiConf import reading -from Configurables import ApplicationMgr -from PyConf.components import setup_component -from PyConf.location_prefix import unpacked_prefix - -reco_loc = { - "ChargedProtos": "/Event/HLT2/Rec/ProtoP/Charged", - "NeutralProtos": "/Event/HLT2/Rec/ProtoP/Neutrals", - "Tracks": "/Event/HLT2/Rec/Track/Best", - "MuonTracks": "/Event/HLT2/Rec/Track/Muon", - "PVs": "/Event/HLT2/Rec/Vertex/Primary", - "CaloElectrons": "/Event/HLT2/Rec/Calo/Electrons", - "CaloPhotons": "/Event/HLT2/Rec/Calo/Photons", - "CaloMergedPi0s": "/Event/HLT2/Rec/Calo/MergedPi0s", - "CaloSplitPhotons": "/Event/HLT2/Rec/Calo/SplitPhotons", - "MuonPIDs": "/Event/HLT2/Rec/Muon/MuonPID", - "RichPIDs": "/Event/HLT2/Rec/Rich/PIDs", - "RecSummary": "/Event/HLT2/Rec/Summary", + +_reco_loc = { + "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), + "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), + "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), + "MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), + "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), + "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), + "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), + "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), + "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), + "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), + "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs"), + "RecSummary": ("/Event/HLT2/Rec/Summary", "RecSummary") } -def upfront_reconstruction( ): +def upfront_reconstruction(): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -39,18 +35,23 @@ def upfront_reconstruction( ): """ - locations_to_decode = reading.make_locations( reco_loc, "/Event/HLT2") - + stream = '/Event/HLT2' decoder = reading.decoder( - locations=locations_to_decode, - configurables=False, - output_level=4) + configurables=False, output_level=4, stream=stream) mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) + inv_map = {v: k for k, v in reading.type_map().items()} + reco_manifest = { + 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] + } + + ## TODO: only pass reco_manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - locations=locations_to_decode, + reading.make_locations(reco_manifest, stream), + reco_manifest, + decoder.OutputBuffers, configurables=False, mc=mc_algs, output_level=4) @@ -58,18 +59,18 @@ def upfront_reconstruction( ): return [decoder] + mc_algs + unpackers -def reconstruction( ): +def reconstruction(): """Return a {name: DataHandle} dict that define the reconstruction output.""" data = {} unpackers = upfront_reconstruction() - for key, value in reco_loc.items(): + for key, value in _reco_loc.items(): for v in unpackers: - if "OutputName" in v.outputs.keys(): - if v.OutputName.location == unpacked_prefix( - value, "/Event/HLT2"): - data[key] = v.OutputName + if "OutputName" in v.outputs.keys( + ) and v.OutputName.location == value[0]: + data[key] = v.OutputName + ### Temporary: as long as we persist v1, we need to insert a converter for the new PVs from PyConf.Algorithms import RecV1ToPVConverter data["PVs_v1"] = data["PVs"] -- GitLab From 52feb8b9e9239e418a9a67eda5de9afb247ad099 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 11:34:46 +0200 Subject: [PATCH 046/102] use AllenConf.persistency.build_decision_ids --- Hlt/Moore/python/Moore/config.py | 66 +++++++++++--------------------- 1 file changed, 22 insertions(+), 44 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index ab2959abcb2..8ae57e3498a 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -11,7 +11,6 @@ from __future__ import absolute_import import re, logging, inspect, itertools from collections import namedtuple -from Configurables import ApplicationMgr from PyConf import configurable from PyConf.Algorithms import ( ExecutionReportsWriter, HltDecReportsWriter, HltSelReportsWriter, @@ -19,7 +18,7 @@ from PyConf.Algorithms import ( CombineRawBankViewsToRawEvent, RawEventCombiner, RawEventSimpleCombiner, AddressKillerAlg, VoidFilter) import Functors as F -from PyConf.components import force_location, setup_component +from PyConf.components import force_location from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, @@ -36,6 +35,7 @@ from PyConf.application import ( ) from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError +from AllenConf.persistency import build_decision_ids #: Regular expression (compiled) defining the valid selection line names # Meaning: line names should start with either of Hlt1, Hlt2, Spruce, Pass @@ -67,7 +67,6 @@ from .streams_hlt2 import (DETECTOR_RAW_BANK_TYPES, HLT1_REPORT_RAW_BANK_TYPES, HLT2_REPORT_RAW_BANK_TYPES, get_default_routing_bits) - def _unique(x): """Return a list of the unique elements in x while preserving order.""" return list(dict.fromkeys(x).keys()) @@ -115,22 +114,6 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name -def _build_decision_ids(decision_names, offset=1): - """Return a dict of decision names to integer IDs. - - Decision report IDs must not be zero. This method generates IDs starting - from offset. - - Args: - decision_names (list of str) - offset (int): needed so that there are no identical ints in the int->str relations - of HltRawBankDecoderBase - - Returns: - decision_ids (dict of str to int): Mapping from decision name to ID. - """ - return {name: idx for idx, name in enumerate(decision_names, offset)} - @configurable def report_writers_node(streams, @@ -181,19 +164,24 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - if process == "hlt1" or process == "hlt2": - major_name = "{}SelectionID".format(process.capitalize()) - key = int( - register_encoding_dictionary( + source_id = { "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce":"Spruce","passthrough":"Spruce" }[process] + major_name = { "hlt1" : "Hlt1SelectionID", + "hlt2" : "Hlt2SelectionID", + "spruce" : "SpruceSelectionID", + "passthrough" : "SpruceSelectionID"}[process] + key = int( register_encoding_dictionary( major_name, ["{}Decision".format(i.name) for i in lines]), 16) # TODO unsigned? Stick to hex string? + + + if process == "hlt1" or process == "hlt2": erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, TCK=key, ) drw = HltDecReportsWriter( - SourceID=process.capitalize(), + SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, EncodingKey=key, ) @@ -201,22 +189,18 @@ def report_writers_node(streams, new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - encoding_key = int( - register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - srm = make_selreports(physics_lines, erw, encoding_key) + srm = make_selreports(physics_lines, erw, key) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) barrier_algorithms.append(srm) srw = HltSelReportsWriter( - SourceID=process.capitalize(), + SourceID=source_id, DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=encoding_key) + EncodingKey=key) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -229,18 +213,13 @@ def report_writers_node(streams, extra_locations_to_persist.extend(line_output_locations) else: ##spruce and passthrough jobs will write a Spruce report - major = "SpruceSelectionID" - key = int( - register_encoding_dictionary( - major, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], - ANNSvcKey=major, + ANNSvcKey=major_name, TCK=key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( - SourceID='Spruce', + SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, EncodingKey=key, ) @@ -471,7 +450,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): if process == "hlt2": offset = 1000 elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 - ann_config[key] = _build_decision_ids([l.decision_name for l in lines], + ann_config[key] = build_decision_ids([l.decision_name for l in lines], offset) # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) @@ -686,11 +665,10 @@ def allen_control_flow(options, write_detector_raw_banks=True): ids = get_allen_hlt1_decision_ids() encoding_key = int( - register_encoding_dictionary( - 'Hlt1SelectionID', - {'Hlt1SelectionID': {v: k - for k, v in ids.items()}}), - 16) # TODO unsigned? Stick to hex string? + register_encoding_dictionary('Hlt1SelectionID', { + 'version': '0', + 'Hlt1SelectionID': {v: k for k, v in ids.items()} + }), 16) # TODO unsigned? Stick to hex string? # TODO: remove when full configuration of Allen from TCK is implemented make_dec_reporter.global_bind(TCK=encoding_key) -- GitLab From b075ad3983b5b5a1e178c22c5b259032778fa905 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 15:33:42 +0200 Subject: [PATCH 047/102] enforce DecisionID vs SelectionID distinction --- Hlt/Hlt1Conf/tests/options/make_allen_tck.py | 9 +--- Hlt/Moore/python/Moore/config.py | 49 +++++++++++--------- Hlt/Moore/python/Moore/selreports.py | 13 ++++-- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py index 86bdcf7d1c4..808bd2d6419 100644 --- a/Hlt/Hlt1Conf/tests/options/make_allen_tck.py +++ b/Hlt/Hlt1Conf/tests/options/make_allen_tck.py @@ -9,19 +9,14 @@ from __future__ import print_function # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -from PyConf.application import register_encoding_dictionary from Moore.config import get_allen_hlt1_decision_ids +from AllenConf.persistency import register_decision_ids # raw_event_format must be configured to successfully configure Allen # Configure with the same input as the default for Allen tests. from hlt1_filtered_mdf_input import options from PyConf.application import configure_input config = configure_input(options) -ids = get_allen_hlt1_decision_ids() -key = int( - register_encoding_dictionary( - 'Hlt1DecisionID', {'Hlt1DecisionID': {v: k - for k, v in ids.items()}}), - 16) # TODO unsigned? Stick to hex string? +key = register_decision_ids(get_allen_hlt1_decision_ids()) print(key) if key: print('PASSED') diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 8ae57e3498a..9d2d18201d7 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -67,6 +67,7 @@ from .streams_hlt2 import (DETECTOR_RAW_BANK_TYPES, HLT1_REPORT_RAW_BANK_TYPES, HLT2_REPORT_RAW_BANK_TYPES, get_default_routing_bits) + def _unique(x): """Return a list of the unique elements in x while preserving order.""" return list(dict.fromkeys(x).keys()) @@ -114,7 +115,6 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name - @configurable def report_writers_node(streams, data_type, @@ -164,32 +164,39 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - source_id = { "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce":"Spruce","passthrough":"Spruce" }[process] - major_name = { "hlt1" : "Hlt1SelectionID", - "hlt2" : "Hlt2SelectionID", - "spruce" : "SpruceSelectionID", - "passthrough" : "SpruceSelectionID"}[process] - key = int( register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - + source_id = { + "hlt1": "Hlt1", + "hlt2": "Hlt2", + "spruce": "Spruce", + "passthrough": "Spruce" + }[process] + major_name = { + "hlt1": "Hlt1DecisionID", + "hlt2": "Hlt2DecisionID", + "spruce": "SpruceDecisionID", + "passthrough": "SpruceDecisionID" + }[process] + dec_key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? if process == "hlt1" or process == "hlt2": erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=key, + TCK=dec_key, ) drw = HltDecReportsWriter( SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=key, + EncodingKey=dec_key, ) algs.extend([erw, drw]) new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - srm = make_selreports(physics_lines, erw, key) + srm = make_selreports(process, physics_lines, erw) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be @@ -200,7 +207,7 @@ def report_writers_node(streams, DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=key) + EncodingKey=srm.properties['EncodingKey']) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -216,12 +223,12 @@ def report_writers_node(streams, erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=key # TODO unsigned? Stick to hex string? + TCK=dec_key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=key, + EncodingKey=dec_key, ) algs.extend([erw, drw]) @@ -451,7 +458,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 ann_config[key] = build_decision_ids([l.decision_name for l in lines], - offset) + offset) # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( @@ -657,18 +664,14 @@ def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) from Allen.config import setup_allen_non_event_data_service - from AllenConf.persistency import make_dec_reporter + from AllenConf.persistency import make_dec_reporter, register_decision_ids options.finalize() non_event_data_node = setup_allen_non_event_data_service() ids = get_allen_hlt1_decision_ids() - encoding_key = int( - register_encoding_dictionary('Hlt1SelectionID', { - 'version': '0', - 'Hlt1SelectionID': {v: k for k, v in ids.items()} - }), 16) # TODO unsigned? Stick to hex string? + encoding_key = register_decision_ids(ids) # TODO: remove when full configuration of Allen from TCK is implemented make_dec_reporter.global_bind(TCK=encoding_key) diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 6bc65f3f7f5..642fe7b6af6 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,6 +38,7 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) +from PyConf.application import register_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -208,12 +209,11 @@ def convert_output(alg): alg.type)) -def make_selreports(lines, decreports, encoding_key, **kwargs): +def make_selreports(process, lines, decreports, **kwargs): """Return a SelReportsMaker instance configured for the given lines. Args: - lines (list of DecisionLine): The lines to create SelReport objects - for. + lines: The list of lines for which to create SelReport objects decreports: DecReports data used as input to the SelReports maker. kwargs: Passed to the SelReportsMaker. """ @@ -226,6 +226,11 @@ def make_selreports(lines, decreports, encoding_key, **kwargs): else: # No lines we can handle, so do nothing names, outputs, types = [], [], [] + + key = int( + register_encoding_dictionary( + "{}SelectionID".format(process.capitalize()), names), 16) + # Each line output should be unique; we expect no two lines to do exactly # the same work assert len(outputs) == len( @@ -236,5 +241,5 @@ def make_selreports(lines, decreports, encoding_key, **kwargs): SelectionNames=names, CandidateTypes=types, Inputs=outputs, - EncodingKey=encoding_key, + EncodingKey=key, **kwargs) -- GitLab From 5b79418d95ba7ef71148ce76a65851ef95afa0ca Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 23:12:18 +0200 Subject: [PATCH 048/102] fix some tests --- Hlt/Hlt1Conf/tests/options/test_decreports.py | 7 +-- Hlt/Hlt2Conf/options/hlt2_check_output.py | 2 +- .../options/hlt2_persistreco_fromfile.py | 14 ++--- .../sprucing/spruce_all_lines_realtime.py | 28 ++++++--- .../sprucing/spruce_example_realtime.py | 3 - .../test_spruce_all_lines_realtime.qmt | 17 +----- Hlt/Moore/python/Moore/config.py | 4 +- Hlt/Moore/python/Moore/qmtest/exclusions.py | 60 ++++++++----------- 8 files changed, 58 insertions(+), 77 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 2c7a8624ec2..06e916099ea 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -18,14 +18,13 @@ configure the HltANNSvc for the job ran by this script. """ from __future__ import print_function import argparse -import os from Configurables import (ApplicationMgr, HistogramPersistencySvc, IODataManager, LHCbApp, GitANNSvc) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython - +from PyConf.application import get_metainfo_repos from PyConf.utilities import read_options # Top-level control flow node @@ -59,9 +58,7 @@ IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) # Configure TCKANNSvc (as that is what DecoderDB wants...) -ann = GitANNSvc( - "TCKANNSvc", Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) -print(ann) +ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) # Decode Hlt DecReports appMgr = ApplicationMgr( diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 7bb631fb59c..8dfc359d97e 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -19,7 +19,7 @@ Takes command-line arguments: python hlt2_check_output.py """ from __future__ import print_function -import sys, os +import sys import GaudiPython as GP from GaudiConf import IOHelper diff --git a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py index 052741e159d..39258563de8 100644 --- a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py +++ b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py @@ -123,18 +123,16 @@ options.conddb_tag = 'sim-20171127-vc-md100' # options.output_file = 'hlt2_test_persistreco_fromfile.mdf' # options.output_type = 'ROOT' +# This options file is used with different output types; subsequent tests +# require TCKs for each case +if options.output_type == "ROOT": + options.output_manifest_file = "hlt2_persistreco_fromfile_root_output.tck.json" +elif options.output_type == "MDF": + options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" def make_lines(): return [test_persistreco_line(), test_nopersistreco_line()] - public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=True): config = run_moore(options, make_lines, public_tools) - -# This options file is used with different output types; subsequent tests -# require TCKs for each case -if options.output_type == "ROOT": - options.output_manifest_file = "hlt2_persistreco_fromfile_root_output.tck.json" -elif options.output_type == "MDF": - options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 7c0638ea870..855366d79a9 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -46,13 +46,26 @@ def manifest_from_eos(url): #} cfg = json.dumps({ + 'Hlt2DecisionID': + {v: k + for k, v in ann_config['Hlt2SelectionID'].items()}, + 'Hlt1DecisionID': + {v: k + for k, v in ann_config['Hlt1SelectionID'].items()}, 'Hlt2SelectionID': - ann_config['Hlt2SelectionID'], - 'PackedObjectLocations': - ann_config['PackedObjectLocations'] + {v: k + for k, v in ann_config['Hlt2SelectionID'].items()}, + 'Hlt1SelectionID': { + v: k + for k, v in ann_config['Hlt1SelectionID'].items() + }, + 'PackedObjectLocations': { + v: k + for k, v in ann_config['PackedObjectLocations'].items() + }, }) - annsvc = GitANNSvc("HltANNSvc", KeyMapping={0: cfg}) + GitANNSvc("HltANNSvc", Overrule={0: cfg}) return json.dumps({ 'PackedLocations': @@ -66,13 +79,12 @@ manifest = manifest_from_eos(url) ##Run over HLT1 filtered Min bias sample that has been processed by TOPO{2, 3} HLT2 lines. ##To produce this see `Hlt/Hlt2Conf/options/Sprucing/hlt2_2or3bodytopo_realtime.py` -input_files = [ - 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' -] options.input_raw_format = 0.3 #FIXME: options.input_manifest_file = manifest -options.input_files = input_files +options.input_files = [ + 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' +] options.input_type = 'MDF' options.evt_max = -1 diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index ae249a2b82a..d3753b362ba 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -11,7 +11,6 @@ """Test running Sprucing line on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_example_realtimereco.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -32,8 +31,6 @@ options.output_file = 'spruce_example_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_spruce_all_lines_realtime.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_spruce_all_lines_realtime.qmt index e79c65559e1..7c8d5254fa3 100644 --- a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_spruce_all_lines_realtime.qmt +++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_spruce_all_lines_realtime.qmt @@ -23,22 +23,9 @@ Runs over hlt2_2or3bodytopo_realtime.mdf with the tck stored in eos/ created wit true -from GaudiTesting.BaseTest import LineSkipper from Moore.qmtest.exclusions import remove_known_warnings - -# Brunel does not persist VELO tracks and so the PVs we unpack in HLT2 have -# null SmartRef pointers to their VELO tracks; this causes the PVs-with-tracks -# cloner to complain because it can't clone the VELO tracks associated to PVs. -# We can't do anything about this so ignore the warning from the cloner. -remove_known_warnings = remove_known_warnings + LineSkipper([ -"CopyLinePersistenceLocations.Tur... WARNING VertexBaseFromRecVertexClonerWithTracks:: Null Track SmartRef found in PV in '/Event/HLT2/Rec/Vertex/Primary'", -"CopyLinePersistenceLocations.Tur... WARNING VertexBaseFromRecVertexClonerWithTracks:: The WARNING message is suppressed : 'Null Track SmartRef found in PV in '/Event/HLT2/Rec/Vertex/Primary''", -"WARNING Lifetime fit did not converge. Aborting.", -"WARNING Negative variance produced in lifetime fit iteration.", -]) - -countErrorLines({"FATAL": 0, "WARNING":0, "ERROR": 0}, -stdout=remove_known_warnings(stdout)) +countErrorLines({"FATAL": 0, "WARNING":22, "ERROR": 0}, + stdout=remove_known_warnings(stdout)) import re matches = re.findall('LAZY_AND: (Spruce.*) .*Sum=(\d+)', stdout) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 9d2d18201d7..3cf698c1400 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -168,13 +168,13 @@ def report_writers_node(streams, "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce": "Spruce", - "passthrough": "Spruce" + "pass": "Spruce" }[process] major_name = { "hlt1": "Hlt1DecisionID", "hlt2": "Hlt2DecisionID", "spruce": "SpruceDecisionID", - "passthrough": "SpruceDecisionID" + "pass": "SpruceDecisionID" }[process] dec_key = int( register_encoding_dictionary( diff --git a/Hlt/Moore/python/Moore/qmtest/exclusions.py b/Hlt/Moore/python/Moore/qmtest/exclusions.py index 66f45b7a678..a4bf7407d53 100644 --- a/Hlt/Moore/python/Moore/qmtest/exclusions.py +++ b/Hlt/Moore/python/Moore/qmtest/exclusions.py @@ -12,41 +12,31 @@ from GaudiTesting.BaseTest import LineSkipper from GaudiConf.QMTest.LHCbTest import GroupMessages, BlockSkipper from RecConf.QMTest.exclusions import preprocessor as RecPreprocessor -remove_known_warnings = LineSkipper(regexps=[ - # expected WARNINGs from the data broker - r"HiveDataBrokerSvc +WARNING non-reentrant algorithm: .*", - # expected WARNINGs from MuonIDHlt1Alg due to lhcb/Rec#79 - r"MuonID.* +WARNING CondDB {X,Y}FOIParameters member " - r"size is 20, geometry expects 16", - r"ToolSvc.CommonMuonTool.* +WARNING CondDB {X,Y}FOIParameters member " - r"size is 20, geometry expects 16", - # expected WARNING when JIT-compiling functors - (r".*WARNING Suppressing message: 'Stack:SSE|(AVX(2|256|512)), Functor:Scalar, instruction" - r" set mismatch \(Best requested\). ROOT/cling was not compiled with the same options as the" - r" stack, try the functor cache'"), - # expected WARNINGs due to SPD/PRS in the condition database - # see https://gitlab.cern.ch/lhcb/Rec/issues/107 - r"(ToolSvc)?.*(Calo|Photon|Electron).* WARNING o Type [a-z]+C? is " - r"not registered", - # hard to remove WARNINGs due to TrackResChecker.FullDetail = True - # https://gitlab.cern.ch/lhcb/Moore/-/merge_requests/783#note_4406625 - (r"ToolSvc.IdealStateCreator +WARNING Extrapolation of True State from" - r" z = 9[2-4][0-9.]+ to z = 9[2-4][0-9.]+ failed!"), - # also due to TrackResChecker see - # https://gitlab.cern.ch/lhcb/Rec/-/merge_requests/2788#note_5399928 - (r"ToolSvc.TrackMasterExtrapolator +WARNING Suppressing message: " - r"'Protect against absurd tracks. See debug for details'"), - # expected WARNINGs from MuonUTTracking when extrapolation is failed - r"ToolSvc.LoKi::VertexFitter +WARNING LoKi::VertexFitter:: Error from Kalman-step, skip *", - r"MuonUTTracking +WARNING Could not propagate state to VELO!", - # expected WARNINGs from ThorBPVLTIME -- see issue Rec#265 - r" +WARNING Lifetime fit did not converge. Aborting.", - r" +WARNING Negative variance produced in lifetime fit iteration.", - # DD4hep geometry. XXX should be fixed there - r".*The sub volume lvUX851InUT is NOT constructed.*", - # SelTools::LifetimeFitter Msg-Counter - r".*WARNING Suppressing message:\s*'Lifetime fit did not converge. Aborting.'.*", -]) +remove_known_warnings = LineSkipper( + strings=[ + # DD4hep geometry. XXX should be fixed there + r"The sub volume lvUX851InUT is NOT constructed", + ], + regexps=[ + # expected WARNINGs from the data broker + r"HiveDataBrokerSvc +WARNING non-reentrant algorithm: .*", + # expected WARNINGs from MuonIDHlt1Alg due to lhcb/Rec#79 + r"MuonID.* +WARNING CondDB {X,Y}FOIParameters member " + r"size is 20, geometry expects 16", + r"ToolSvc.CommonMuonTool.* +WARNING CondDB {X,Y}FOIParameters member " + r"size is 20, geometry expects 16", + # hard to remove WARNINGs due to TrackResChecker.FullDetail = True + # https://gitlab.cern.ch/lhcb/Moore/-/merge_requests/783#note_4406625 + (r"ToolSvc.IdealStateCreator +WARNING Extrapolation of True State from" + r" z = 9[2-4][0-9.]+ to z = 9[2-4][0-9.]+ failed!"), + # also due to TrackResChecker see + # https://gitlab.cern.ch/lhcb/Rec/-/merge_requests/2788#note_5399928 + (r"ToolSvc.TrackMasterExtrapolator +WARNING Suppressing message: " + r"'Protect against absurd tracks. See debug for details'"), + # expected WARNINGs from MuonUTTracking when extrapolation is failed + r"ToolSvc.LoKi::VertexFitter +WARNING LoKi::VertexFitter:: Error from Kalman-step, skip *", + r"MuonUTTracking +WARNING Could not propagate state to VELO!", + ]) preprocessor = remove_known_warnings + LineSkipper(regexps=[ # output from the scheduler that is expected to differ run-by-run -- GitLab From fbacde52dbb419c1b99bdf36332b25b1b71c47b7 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Wed, 29 Jun 2022 16:05:03 +0200 Subject: [PATCH 049/102] first version of stable, forced, persist reco locations --- Hlt/RecoConf/options/run_two_hlt2_recos.py | 3 ++- Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index fef99c85f22..2cd172db07c 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -18,7 +18,8 @@ from GaudiConf.PersistRecoConf import persisted_location def make_two_reconstructions(): charged_protos_1 = reconstruction()["ChargedProtos"] neutral_protos_1 = reconstruction()["NeutralProtos"] - with PrForwardTrackingVelo.bind(MinPT=1000.): + with PrForwardTrackingVelo.bind(MinPT=1000.), persisted_location.bind( + force=False): charged_protos_2 = reconstruction()["ChargedProtos"] neutral_protos_2 = reconstruction()["NeutralProtos"] data = [ diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 63c9c81b359..03787f89c9c 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -14,7 +14,7 @@ _reco_loc = { "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), - "MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), + #"MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), @@ -56,6 +56,8 @@ def upfront_reconstruction(): mc=mc_algs, output_level=4) + ### TODO:FIXME take advantage of the fact that the above have datahandles... + # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms return [decoder] + mc_algs + unpackers -- GitLab From 1336dd456ecfcda0088a627eabb40f09a7cb5361 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Wed, 6 Jul 2022 16:26:41 +0200 Subject: [PATCH 050/102] clone file-content-metadata repo during configure --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed10298b773..55faf27f802 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,11 @@ include(MooreDependencies) include(FileContentMetadataRepository) lhcb_create_local_filecontent_metadata_repo( "${CMAKE_CURRENT_BINARY_DIR}/file-content-metadata/" ) +find_package(Git REQUIRED) +execute_process( COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_BINARY_DIR} clone -q https://gitlab.cern.ch/lhcb-conddb/file-content-metadata ) +lhcb_env(PRIVATE SET LHCbFileContentMetaDataRepo "${CMAKE_CURRENT_BINARY_DIR}/file-content-metadata") + + # -- Subdirectories lhcb_add_subdirectories( Hlt/Hlt1Conf -- GitLab From 081c9dc583022befe5d07fd1667a193ee61bd381 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Tue, 12 Jul 2022 10:57:39 +0200 Subject: [PATCH 051/102] Streamline test and other code --- .../options/test_allen_comp_dec_sel_rep.py | 9 ++-- .../tests/options/test_allen_decreports.py | 7 ++- .../tests/options/test_allen_sel_rep_info.py | 9 ++-- Hlt/Hlt1Conf/tests/options/test_decreports.py | 9 ++-- Hlt/Hlt2Conf/options/hlt2_check_output.py | 9 ++-- .../sprucing/spruce_all_lines_realtime.py | 39 ++------------ .../python/Moore/persistence/__init__.py | 6 +-- Hlt/Moore/python/Moore/persistence/packing.py | 9 +--- .../python/Moore/persistence/persistreco.py | 51 ++++++++++--------- .../python/Moore/persistence/serialisation.py | 4 +- .../python/RecoConf/data_from_file.py | 14 ++--- 11 files changed, 62 insertions(+), 104 deletions(-) diff --git a/Hlt/Hlt1Conf/tests/options/test_allen_comp_dec_sel_rep.py b/Hlt/Hlt1Conf/tests/options/test_allen_comp_dec_sel_rep.py index 92e95e5d63f..37178a3956e 100644 --- a/Hlt/Hlt1Conf/tests/options/test_allen_comp_dec_sel_rep.py +++ b/Hlt/Hlt1Conf/tests/options/test_allen_comp_dec_sel_rep.py @@ -23,11 +23,11 @@ from __future__ import print_function import argparse from collections import defaultdict from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp, GitANNSvc) + IODataManager, LHCbApp) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import get_metainfo_repos +from PyConf.application import configured_ann_svc parser = argparse.ArgumentParser() parser.add_argument("--input-mdf", help="Input MDF file") @@ -41,13 +41,12 @@ IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) # Decode Hlt DecReports -ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) app = ApplicationMgr(TopAlg=[ DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup(), DecoderDB["HltSelReportsDecoder/Hlt1SelReportsDecoder"].setup() ]) -app.ExtSvc += [ann] - +# decoderDB wants TCKANNSvc as name... +app.ExtSvc += [configured_ann_svc(name='TCKANNSvc')] # Set up counters for recording decisions and selreport existence from MDF counts_from_mdf = defaultdict(lambda: defaultdict(int)) diff --git a/Hlt/Hlt1Conf/tests/options/test_allen_decreports.py b/Hlt/Hlt1Conf/tests/options/test_allen_decreports.py index 2fc768b31ed..2a2638b340b 100644 --- a/Hlt/Hlt1Conf/tests/options/test_allen_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_allen_decreports.py @@ -21,11 +21,11 @@ import re import argparse from collections import defaultdict from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp, GitANNSvc) + IODataManager, LHCbApp) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import get_metainfo_repos +from PyConf.application import configured_ann_svc def get_counts_from_log(f): @@ -57,10 +57,9 @@ IODataManager(DisablePFNWarning=True) HistogramPersistencySvc(OutputLevel=5) # Decode Hlt DecReports # Configure TCKANNSvc (as that is what DecoderDB wants...) -ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) app = ApplicationMgr( TopAlg=[DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()]) -app.ExtSvc += [ann] +app.ExtSvc += [configured_ann_svc(name='TCKANNSvc')] # Set up counters for recording decisions from MDF counts_from_mdf = defaultdict(int) diff --git a/Hlt/Hlt1Conf/tests/options/test_allen_sel_rep_info.py b/Hlt/Hlt1Conf/tests/options/test_allen_sel_rep_info.py index 762d5d7643b..09b53c2952c 100644 --- a/Hlt/Hlt1Conf/tests/options/test_allen_sel_rep_info.py +++ b/Hlt/Hlt1Conf/tests/options/test_allen_sel_rep_info.py @@ -25,11 +25,11 @@ import argparse import re from collections import defaultdict from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp, GitANNSvc) + IODataManager, LHCbApp) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import get_metainfo_repos +from PyConf.application import configured_ann_svc # CLIDs of summarized objects # QUESTION: Are these available through GaudiPython? @@ -224,13 +224,12 @@ IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) # Decode Hlt DecReports -# Configure TCKANNSvc (as that is what DecoderDB wants...) -ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) app = ApplicationMgr(TopAlg=[ DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup(), DecoderDB["HltSelReportsDecoder/Hlt1SelReportsDecoder"].setup() ]) -app.ExtSvc += [ann] +# Configure TCKANNSvc (as that is what DecoderDB wants...) +app.ExtSvc += [configured_ann_svc(name='TCKANNSvc')] gaudi = GaudiPython.AppMgr() TES = gaudi.evtSvc() diff --git a/Hlt/Hlt1Conf/tests/options/test_decreports.py b/Hlt/Hlt1Conf/tests/options/test_decreports.py index 06e916099ea..3a7238c9be6 100644 --- a/Hlt/Hlt1Conf/tests/options/test_decreports.py +++ b/Hlt/Hlt1Conf/tests/options/test_decreports.py @@ -20,11 +20,11 @@ from __future__ import print_function import argparse from Configurables import (ApplicationMgr, HistogramPersistencySvc, - IODataManager, LHCbApp, GitANNSvc) + IODataManager, LHCbApp) from DAQSys.Decoders import DecoderDB from GaudiConf import IOHelper import GaudiPython -from PyConf.application import get_metainfo_repos +from PyConf.application import configured_ann_svc from PyConf.utilities import read_options # Top-level control flow node @@ -57,13 +57,12 @@ IOHelper("MDF").inputFiles([args.input_mdf]) IODataManager(DisablePFNWarning=True) # Disable warning about histogram saving not being required HistogramPersistencySvc(OutputLevel=5) -# Configure TCKANNSvc (as that is what DecoderDB wants...) -ann = GitANNSvc("TCKANNSvc", Repositories=get_metainfo_repos()) # Decode Hlt DecReports appMgr = ApplicationMgr( TopAlg=[DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()]) -appMgr.ExtSvc += [ann] +# Configure TCKANNSvc (as that is what DecoderDB wants...) +appMgr.ExtSvc += [configured_ann_svc(name='TCKANNSvc')] # Get expected lines from the previous job options = read_options(args.input_options) diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 8dfc359d97e..6a6ca8d22f6 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -23,10 +23,10 @@ import sys import GaudiPython as GP from GaudiConf import IOHelper -from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, - GitANNSvc) +from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager) from GaudiConf.reading import do_unpacking +from PyConf.application import configured_ann_svc from GaudiConf.reading import load_manifest @@ -49,10 +49,7 @@ manifest = load_manifest(sys.argv[2]) algs = do_unpacking(manifest, process='Hlt2', output_level=4) appmgr = ApplicationMgr(TopAlg=algs) -appmgr.ExtSvc += [ - GitANNSvc( - 'HltANNSvc', Repositories=["{}/.git".format(os.environ['HLTTCKROOT'])]) -] +appmgr.ExtSvc += [configured_ann_svc()] input_file = sys.argv[1] input_type = "ROOT" if input_file.find(".dst") != -1 else "RAW" diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 855366d79a9..d6fb64b8b63 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -23,7 +23,7 @@ from Moore import options, run_moore from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines import sprucing_lines -from Configurables import GitANNSvc +from PyConf.application import configured_ann_svc import XRootD.client @@ -37,40 +37,9 @@ def manifest_from_eos(url): status, data = f.read() if not status.ok: raise RuntimeError(f"could not read {url}: {status.message}") - dct = json.loads(data.decode('utf-8')) - ann_config = dct["HltANNSvc/HltANNSvc"] - - #packed_object_types = { - # str(k): v - # for k, v in ann_config["PackedObjectTypes"].items() - #} - - cfg = json.dumps({ - 'Hlt2DecisionID': - {v: k - for k, v in ann_config['Hlt2SelectionID'].items()}, - 'Hlt1DecisionID': - {v: k - for k, v in ann_config['Hlt1SelectionID'].items()}, - 'Hlt2SelectionID': - {v: k - for k, v in ann_config['Hlt2SelectionID'].items()}, - 'Hlt1SelectionID': { - v: k - for k, v in ann_config['Hlt1SelectionID'].items() - }, - 'PackedObjectLocations': { - v: k - for k, v in ann_config['PackedObjectLocations'].items() - }, - }) - - GitANNSvc("HltANNSvc", Overrule={0: cfg}) - - return json.dumps({ - 'PackedLocations': - [(loc, typ) for loc, typ in ann_config["PackedObjectTypes"].items()] - }) + old_json = data.decode('utf-8')) + configured_ann_svc( old_json ) + return manifest_from_old_json( old_json ) ## Configure `HltANNSvc` diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 0ba340aed65..7cd37df71f3 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -232,7 +232,7 @@ def persist_line_outputs( register_encoding_dictionary("PackedObjectLocations", sorted(locations)), 16) - packer_cf, packer_locations = pack_stream_objects(stream, prpacking, + packer_cf, packer_handles = pack_stream_objects(stream, prpacking, encoding_key) cf.append(packer_cf) @@ -243,11 +243,11 @@ def persist_line_outputs( cf.append(mc_packer_cf) if log.isEnabledFor(logging.DEBUG): - log.debug('packer_locations: ' + pformat(packer_locations)) + log.debug('packer_handles: ' + pformat(packer_handles)) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) serialisation_cf, output_raw_data = serialise_packed_containers( - packer_locations, source_id) + packer_handles, source_id) if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index a9a165b65de..a278050aa82 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -35,7 +35,7 @@ def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): Returns: algs (list): Algorithms to run the packing. - outputs (list of str): Locations that should be persisted, in the + outputs (list of handles): data handles that should be persisted, in the specification used by ROOT output writers (e.g. OutputStream). """ @@ -51,13 +51,8 @@ def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): force_order=True, ) - packers_output_locations = [] - for p in persistreco_packers: - packers_output_locations += [ - get_output(p.outputs["OutputName"]).location - ] + return packers_cf, [ p.outputs["OutputName"] for p in persistreco_packers ] - return packers_cf, packers_output_locations def pack_stream_mc(stream): diff --git a/Hlt/Moore/python/Moore/persistence/persistreco.py b/Hlt/Moore/python/Moore/persistence/persistreco.py index 2e692fe15a3..0a0a2e9edfa 100644 --- a/Hlt/Moore/python/Moore/persistence/persistreco.py +++ b/Hlt/Moore/python/Moore/persistence/persistreco.py @@ -1,5 +1,5 @@ ############################################################################### -# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration # +# (c) Copyright 2020 CERN for the benefit of the LHCb Collaboration # # # # This software is distributed under the terms of the GNU General Public # # Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # @@ -18,38 +18,39 @@ Some objects which are anyhow persisted as part of the usual line output, such as primary vertices, are treated different if the line has PersistReco enabled. See the cloning configuration for those differences. """ - - -def persistreco_to_be_persisted(): - - return [ - "ChargedProtos", - "NeutralProtos", - "Tracks", - "PVs", - "CaloElectrons", - "CaloPhotons", - "CaloMergedPi0s", - "CaloSplitPhotons", - "MuonPIDs", - "RichPIDs", - ] +from PyConf.components import get_output +from PyConf.location_prefix import prefix, packed_prefix +from GaudiConf.PersistRecoConf import default_persisted_locations +from RecoConf.reconstruction_objects import reconstruction def persistreco_line_outputs(): """Return a dict of data handles that define reconstruction to be persisted.""" - from RecoConf.reconstruction_objects import reconstruction objs = reconstruction() prdict = {} - to_be_persisted = persistreco_to_be_persisted() + to_be_persisted = [k for k in default_persisted_locations().keys()] for key, val in objs.items(): if val: - if key == "PVs_v1": - if "PVs" in to_be_persisted: - prdict["PVs"] = val - else: - if key in to_be_persisted: - prdict[key] = val + if key == "PVs_v1": key = "PVs" + if key in to_be_persisted: prdict[key] = val + return prdict + + +def persistreco_line_outputs_packed(stream, reco_stream): + """Return a dict of data handles that define reconstruction to be persisted.""" + + stream_loc = { + key: prefix(value, reco_stream) + for key, value in default_persisted_locations().items() + } + + prdict = persistreco_line_outputs() + packed = { + prefix(get_output(val).location, stream): packed_prefix( + stream_loc[key], stream) + for key, val in prdict.items() + } + return packed diff --git a/Hlt/Moore/python/Moore/persistence/serialisation.py b/Hlt/Moore/python/Moore/persistence/serialisation.py index a66b767eee5..658a8210a88 100644 --- a/Hlt/Moore/python/Moore/persistence/serialisation.py +++ b/Hlt/Moore/python/Moore/persistence/serialisation.py @@ -20,7 +20,7 @@ from PyConf.control_flow import CompositeNode from Gaudi.Configuration import WARNING as OUTPUTLEVEL -def serialise_packed_containers(packed_locations, source_id): +def serialise_packed_containers(packed_handles, source_id): """Return CF node that serialises a set of packed containers to a raw bank. Args: @@ -33,7 +33,7 @@ def serialise_packed_containers(packed_locations, source_id): """ bank_writer = HltPackedBufferWriter( - PackedContainers=packed_locations, + PackedContainers=packed_handles, OutputLevel=OUTPUTLEVEL, SourceID=source_id) diff --git a/Hlt/RecoConf/python/RecoConf/data_from_file.py b/Hlt/RecoConf/python/RecoConf/data_from_file.py index b5f75f448ea..04f093c533e 100644 --- a/Hlt/RecoConf/python/RecoConf/data_from_file.py +++ b/Hlt/RecoConf/python/RecoConf/data_from_file.py @@ -52,7 +52,7 @@ from PyConf.Tools import (ChargedProtoParticleAddRichInfo, ChargedProtoParticleAddCombineDLLs) -def packed_reco_from_file(): +def _packed_reco_from_file(): return { 'PackedPVs': '/Event/pRec/Vertex/Primary', 'PackedCaloElectrons': '/Event/pRec/Calo/Electrons', @@ -68,7 +68,7 @@ def packed_reco_from_file(): } -def packed_mc_from_file(): +def _packed_mc_from_file(): return { 'PackedMCParticles': '/Event/pSim/MCParticles', 'PackedMCVertices': '/Event/pSim/MCVertices', @@ -102,7 +102,7 @@ def unpacked_reco_locations(): # If the structure is not like this, pointers point to to the wrong place... # The SmartRefs held by the unpacked MC objects only work if we unpack to these specific locations locations = {} - for k, v in packed_reco_from_file().items(): + for k, v in _packed_reco_from_file().items(): if 'pRec' in v: locations[k] = v.replace('pRec', 'Rec') elif 'pHLT2' in v: #sprucing picks them from HLT2 @@ -131,7 +131,7 @@ def unpacked_mc_locations(): def reco_from_file(): # TODO(AP) should only add the packed data if we're running on Upgrade MC # where Brunel has already been run - packed_data = packed_reco_from_file() + packed_data = _packed_reco_from_file() # raw_event = raw_event_from_file() # We don't want any keys accidentally overwriting each other # assert set(packed_data.keys()).intersection(set(raw_event.keys())) == set() @@ -142,7 +142,7 @@ def reco_from_file(): def mc_from_file(): # TODO(AP) should only add the packed data if we're running on Upgrade MC # where Brunel has already been run - packed_data = packed_mc_from_file() + packed_data = _packed_mc_from_file() return packed_data @@ -228,7 +228,7 @@ def reco_unpackers(): # Make sure we have consistent names, and that we're unpacking everything # we load from the file assert set(['Packed' + k for k in d.keys()]) - set( - packed_reco_from_file().keys()) == set() + _packed_reco_from_file().keys()) == set() return d @@ -281,7 +281,7 @@ def mc_unpackers(): # Make sure we have consistent names, and that we're unpacking everything # we load from the file assert set(['Packed' + k for k in d.keys()]) - set( - packed_mc_from_file().keys()) == set() + _packed_mc_from_file().keys()) == set() return d -- GitLab From 31b9a11823414e030640dcc8d5fcbc8094439461 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Tue, 12 Jul 2022 15:20:51 +0200 Subject: [PATCH 052/102] fix another test --- .../options/sprucing/spruce_all_lines_realtime.py | 10 +++------- Hlt/Moore/python/Moore/persistence/__init__.py | 5 ++--- Hlt/Moore/python/Moore/persistence/packing.py | 5 ++--- Hlt/Moore/python/Moore/tests/test_ft_persistency.py | 2 +- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index d6fb64b8b63..b485a4fdbfc 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -18,7 +18,6 @@ Run like any other options file: """ from __future__ import absolute_import, division, print_function -import json from Moore import options, run_moore from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -29,7 +28,7 @@ import XRootD.client ## Return HltANNSvc when tck is on eos -def manifest_from_eos(url): +def configure_annsvc_from_eos(url): with XRootD.client.File() as f: status, _ = f.open(url) if not status.ok: @@ -37,20 +36,17 @@ def manifest_from_eos(url): status, data = f.read() if not status.ok: raise RuntimeError(f"could not read {url}: {status.message}") - old_json = data.decode('utf-8')) - configured_ann_svc( old_json ) - return manifest_from_old_json( old_json ) + configured_ann_svc(old_json=data.decode('utf-8')) ## Configure `HltANNSvc` url = 'root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.tck.json' -manifest = manifest_from_eos(url) +configure_annsvc_from_eos(url) ##Run over HLT1 filtered Min bias sample that has been processed by TOPO{2, 3} HLT2 lines. ##To produce this see `Hlt/Hlt2Conf/options/Sprucing/hlt2_2or3bodytopo_realtime.py` options.input_raw_format = 0.3 -#FIXME: options.input_manifest_file = manifest options.input_files = [ 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' ] diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 7cd37df71f3..54d4ff6d7b6 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -161,7 +161,6 @@ def persist_line_outputs( #add the locations from reco objects to the dictionary prdict = persistreco_line_outputs() - prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) for val in prdict.values(): name = get_type(val) #find type of object for this DH @@ -169,7 +168,6 @@ def persist_line_outputs( # add proto particle relations if they exist for p in protoparticle_relations: - assert not isinstance(p, str) inputs["PP2MCPRelations"] += [p] locify = lambda i: i.location if hasattr(i, 'location') else i @@ -202,6 +200,7 @@ def persist_line_outputs( #For line outputs, "stream+/p" added to input locations #For reco objects, there are pre-defined output locations #This is to be able to find reco objects regardless of their producer + prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) outputs = {} for key, value in inputs.items(): outputs[key] = [] @@ -233,7 +232,7 @@ def persist_line_outputs( sorted(locations)), 16) packer_cf, packer_handles = pack_stream_objects(stream, prpacking, - encoding_key) + encoding_key) cf.append(packer_cf) packer_mc_locations = [] diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index a278050aa82..8c3b37c1572 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -15,7 +15,7 @@ from PyConf.Algorithms import ( PackMCParticle, PackMCVertex, ) -from PyConf.components import get_output, force_location +from PyConf.components import force_location from PyConf.control_flow import CompositeNode, NodeLogic from Gaudi.Configuration import WARNING as OUTPUTLEVEL @@ -51,8 +51,7 @@ def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): force_order=True, ) - return packers_cf, [ p.outputs["OutputName"] for p in persistreco_packers ] - + return packers_cf, [p.outputs["OutputName"] for p in persistreco_packers] def pack_stream_mc(stream): diff --git a/Hlt/Moore/python/Moore/tests/test_ft_persistency.py b/Hlt/Moore/python/Moore/tests/test_ft_persistency.py index 5f743fe3a6d..ef62e23fa1c 100644 --- a/Hlt/Moore/python/Moore/tests/test_ft_persistency.py +++ b/Hlt/Moore/python/Moore/tests/test_ft_persistency.py @@ -162,7 +162,7 @@ options.conddb_tag = 'sim-20171127-vc-md100' #'sim-20201218-vc-md100' # 5. Name of the dst that is going to be written options.output_file = 'out_{}_FT.dst'.format(decay) options.output_type = 'ROOT' -options.output_manifest = '{}_FT_.hlt2.annsvc.pol.json'.format(decay) +options.output_manifest_file = '{}_FT_.hlt2.annsvc.pol.json'.format(decay) # runs the HLT2 line if decay == "Bs2JpsiPhi": -- GitLab From 2fd521dcbf4777c26d12f8bced7e29fc9611bc45 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Fri, 15 Jul 2022 09:13:11 +0200 Subject: [PATCH 053/102] When sprucing, 'running' reconstruction from file, require a manifest to determine what to decode from input --- Hlt/Moore/python/Moore/tcks.py | 60 +------------------ .../RecoConf/reco_objects_for_spruce.py | 18 ++++-- 2 files changed, 14 insertions(+), 64 deletions(-) diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index 0244509d6c7..bb5a367da9c 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -50,62 +50,6 @@ The functions in this module currently support persisting the configuration of import json -class _ConfigurableEncoder(json.JSONEncoder): - def default(self, obj): - try: - # Try to serialise assuming Configurable - name = obj.getFullName() - props = obj.getDefaultProperties() - props.update(obj.getValuedProperties()) - obj = {name: props} - except AttributeError: - pass - return obj - - def load_manifest(fname): - ### TODO: implement me!!! - with open(fname) as f: - manifest = json.load(f) - return manifest - - -def load_hlt2_configuration(fname): - """Instantiate configurables based on an HLT2 TCK. - - Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 - application. - - Args: - fname -- Filename of the JSON TCK file produced by - ``dump_hlt2_configuration``. - annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. - """ - with open(fname) as f: - config = json.load(f) - - try: - # see if this is an old-style .tck.json file needed for decoding - # because the encoding key is not present in the data - # - # In that case, we just configure the GitAnnSvc with an overrule - # for a zero key - dicts = config["HltANNSvc/HltANNSvc"] - cfg = json.dumps({ - 'Hlt1SelectionID': - dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': - dicts["Hlt2SelectionID"], - 'SpruceSelectionID': - dicts["SpruceSelectionID"], - 'PackedObjectLocations': - dicts["PackedObjectLocations"] - }) - - from Configurables import GitANNSvc - return GitANNSvc('HltANNSvc', Overrule={0: cfg}) - except: - print("load_hlt_configuration: not an old-style .tck.json file") - print( - "if not running on an old file with zero encoding key, just remove the call" - ) + with open(fname, 'r', encoding='utf-8') as f: + return json.load(f) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 03787f89c9c..1310a663c40 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -26,7 +26,7 @@ _reco_loc = { } -def upfront_reconstruction(): +def upfront_reconstruction(manifest): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -43,14 +43,19 @@ def upfront_reconstruction(): process='Hlt2', configurables=False, output_level=4) inv_map = {v: k for k, v in reading.type_map().items()} + + #TODO/FIXME make sure that reco_manifest is a pure subset of manifest... reco_manifest = { 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] } - ## TODO: only pass reco_manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... + #d = manifest['PackedLocations'] + #print('*** got manifest:',d) + + ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - reading.make_locations(reco_manifest, stream), - reco_manifest, + reading.make_locations(manifest, stream), + manifest, decoder.OutputBuffers, configurables=False, mc=mc_algs, @@ -58,14 +63,15 @@ def upfront_reconstruction(): ### TODO:FIXME take advantage of the fact that the above have datahandles... # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms + # i.e. `upfront_reconstruction` should be a drop-in replacement for `reconstruction()`, with the same return type return [decoder] + mc_algs + unpackers -def reconstruction(): +def reconstruction(manifest): """Return a {name: DataHandle} dict that define the reconstruction output.""" data = {} - unpackers = upfront_reconstruction() + unpackers = upfront_reconstruction(manifest) for key, value in _reco_loc.items(): for v in unpackers: -- GitLab From 214d1600cd966e5d09cd16d96c2573059f6283b9 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Tue, 19 Jul 2022 11:41:36 +0200 Subject: [PATCH 054/102] adapt RecSummary (not) loading --- Hlt/Moore/python/Moore/persistence/__init__.py | 2 ++ .../python/RecoConf/reco_objects_for_spruce.py | 18 ++++++++---------- .../python/RecoConf/reco_objects_from_file.py | 7 ++----- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 54d4ff6d7b6..fcca74bc2a5 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -165,6 +165,8 @@ def persist_line_outputs( for val in prdict.values(): name = get_type(val) #find type of object for this DH if name: inputs[name] += [get_output(val)] + else: + log.warning('*** WARNING: get_type failed for {} -- {} not supported for persistence, skipping!'.format(val,val.type)) # add proto particle relations if they exist for p in protoparticle_relations: diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 1310a663c40..5b9311be16b 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -9,6 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from GaudiConf import reading +from GaudiConf.PersistRecoConf import persisted_location _reco_loc = { "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), @@ -44,18 +45,15 @@ def upfront_reconstruction(manifest): inv_map = {v: k for k, v in reading.type_map().items()} - #TODO/FIXME make sure that reco_manifest is a pure subset of manifest... - reco_manifest = { - 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] - } - - #d = manifest['PackedLocations'] - #print('*** got manifest:',d) + # make sure that the reco locations are spliced into the provided manifest... + dl = { v[0]: v[1] for v in manifest['PackedLocations'] } + dl.update( (v[0], inv_map[v[1]]) for v in _reco_loc.values() ) + m = { 'PackedLocations' : [ (k,v) for k,v in dl.items() ] } ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - reading.make_locations(manifest, stream), - manifest, + reading.make_locations(m, stream), + m, decoder.OutputBuffers, configurables=False, mc=mc_algs, @@ -87,7 +85,7 @@ def reconstruction(manifest): ### Temporary: This to be compatible with data where the RecSummary does not exist. if "RecSummary" not in data.keys(): from PyConf.Algorithms import FakeRecSummaryMaker - data["RecSummary"] = FakeRecSummaryMaker().Output + data["RecSummary"] = FakeRecSummaryMaker(outputs={"Output": persisted_location('RecSummary')}).Output return data diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py b/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py index 254797dc836..9362ff813f2 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py @@ -33,11 +33,8 @@ def reconstruction(): m["PVs_v1"] = m["PVs"] m["PVs"] = RecV1ToPVConverter(InputVertices=m["PVs_v1"]).OutputVertices ### Temporary: this is to be able to read and process data with an unpacked RecSummary - if "RecSummary" not in m.keys(): - m["RecSummary"] = FakeRecSummaryMaker( - outputs={ - "Output": persisted_location('RecSummary') - }).Output + if "RecSummary" not in m.keys() : + m["RecSummary"] = FakeRecSummaryMaker(outputs={"Output": persisted_location('RecSummary') }).Output return m -- GitLab From b0932ccce13c2cbd5a06dc04b3682d508d78a7e7 Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 20 Jul 2022 19:30:47 +0200 Subject: [PATCH 055/102] add rec summary --- Hlt/Moore/python/Moore/persistence/packing.py | 106 +++++++++++++++--- 1 file changed, 89 insertions(+), 17 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 8c3b37c1572..db527d2f8b8 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -12,10 +12,20 @@ import logging import os from PyConf.Algorithms import ( - PackMCParticle, - PackMCVertex, -) -from PyConf.components import force_location + PackMCParticle, PackMCVertex, + RecVertexPacker, VertexPacker, + RichPIDPacker, MuonPIDPacker, + ProtoParticlePacker, ParticlePacker, + TrackPacker, + FlavourTagPacker, + RecSummaryPacker, + CaloHypoPacker, CaloClusterPacker, CaloDigitPacker, CaloAdcPacker, + P2VRelationPacker, + P2MCPRelationPacker, PP2MCPRelationPacker, + P2IntRelationPacker, P2InfoRelationPacker, + HltPackedBufferWriter) + +from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic from Gaudi.Configuration import WARNING as OUTPUTLEVEL @@ -25,33 +35,95 @@ log = logging.getLogger(__name__) from PyConf import configurable +def packers_map(): + + return { + "PVs": RecVertexPacker, + "Vertices": VertexPacker, + "Tracks": TrackPacker, + "RichPIDs": RichPIDPacker, + "MuonPIDs": MuonPIDPacker, + "CaloHypos": CaloHypoPacker, + "CaloClusters": CaloClusterPacker, + "CaloDigits": CaloDigitPacker, + "CaloAdcs": CaloAdcPacker, + "ProtoParticles": ProtoParticlePacker, + "Particles": ParticlePacker, + "FlavourTags": FlavourTagPacker, + "P2VRelations": P2VRelationPacker, + "P2MCPRelations": P2MCPRelationPacker, + "P2IntRelations": P2IntRelationPacker, + "P2InfoRelations": P2InfoRelationPacker, + "PP2MCPRelations": PP2MCPRelationPacker, + "RecSummary": RecSummaryPacker + } + + @configurable -def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): - """Return a list of packers that will produce all packed output. +def pack_stream_objects(stream, + inputs, + encoding_key, + source_id, + enable_check=False): + """Return CF node that packs and serialises a set of containers to a raw bank. Args: - stream (str): TES root containing objects to be packed. - prpacking (PersistRecoPacking object): PersistRecoPacking object that describes packing configuration. + stream (str): TES root containing objects to be persisted. + inputs (map): Type: locations to be persisted Returns: - algs (list): Algorithms to run the packing. - outputs (list of handles): data handles that should be persisted, in the - specification used by ROOT output writers (e.g. OutputStream). + serialisation_node (CompositeNode). + output_raw_data (DataHandle): Raw event with serialised data, + i.e. the DstData bank. """ + p_map = packers_map() + packers = [] + + for t, p in p_map.items(): + if t in inputs.keys(): + + packer = p( + InputName=[force_location(loc) for loc in inputs[t]], + OutputLevel=OUTPUTLEVEL, + EnableCheck=enable_check, + EncodingKey=encoding_key) - persistreco_packers = prpacking.packers( - output_level=OUTPUTLEVEL, - enable_check=enable_check, - encoding_key=encoding_key) + packers += [packer] packers_cf = CompositeNode( "packers", - children=persistreco_packers, + children=packers, combine_logic=NodeLogic.NONLAZY_OR, force_order=True, ) - return packers_cf, [p.outputs["OutputName"] for p in persistreco_packers] + packers_output_locations = [ + get_output(p.outputs["OutputName"]).location for p in packers + ] + + bank_writer = HltPackedBufferWriter( + PackedContainers=packers_output_locations, + OutputLevel=OUTPUTLEVEL, + SourceID=source_id) + + serialisation_cf = CompositeNode( + "serialisation", + children=[bank_writer], + ) + + return packers_cf, serialisation_cf, bank_writer + +def pack_stream_mc_locations(stream): + return [ + os.path.join(stream, + str(PackMCParticle.getDefaultProperties()["InputName"])), + os.path.join(stream, + str(PackMCVertex.getDefaultProperties()["InputName"])), + os.path.join(stream, + str(PackMCParticle.getDefaultProperties()["OutputName"])), + os.path.join(stream, + str(PackMCVertex.getDefaultProperties()["OutputName"])) + ] def pack_stream_mc(stream): -- GitLab From f28a44f6802234960ec94033089a4ea93019dd2e Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 22 Jul 2022 14:58:49 +0200 Subject: [PATCH 056/102] simplify unpacking, remove PersistRecoConf from configuration --- Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py | 8 +- .../tests/options/hlt2_persistreco_check.py | 12 +-- .../tests/options/sprucing/spruce_check.py | 9 +- .../sprucing/spruce_check_extraoutputs.py | 8 +- .../sprucing/spruce_check_persistreco.py | 8 +- .../tests/options/streaming/stream_check.py | 5 +- .../python/Moore/persistence/__init__.py | 87 ++++++++++--------- Hlt/Moore/python/Moore/persistence/packing.py | 48 ++-------- .../python/Moore/persistence/persistreco.py | 24 +---- Hlt/RecoConf/options/run_two_hlt2_recos.py | 2 +- .../RecoConf/calorimeter_reconstruction.py | 2 +- Hlt/RecoConf/python/RecoConf/hlt1_tracking.py | 2 +- .../python/RecoConf/muon_reconstruction.py | 2 +- .../RecoConf/reco_objects_for_spruce.py | 38 ++++---- .../python/RecoConf/reco_objects_from_file.py | 2 +- .../python/RecoConf/rich_reconstruction.py | 2 +- Hlt/RecoConf/python/RecoConf/standalone.py | 2 +- 17 files changed, 97 insertions(+), 164 deletions(-) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py b/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py index 4e732047a61..33e330809fe 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py @@ -15,9 +15,9 @@ import cppyy not_found = cppyy.bind_object(0, cppyy.gbl.DataObject) # These locations do not exist in old brunel outputs or any file produced -# before LHCb!3622, for the moment ignore the errors in unpacking checks. +# before 07.2022 for the moment ignore the errors in unpacking checks. # until we have some versioning of the reco locations -UnexpectedReco = ["MuonTracks"] +UnexpectedReco = ["MuonTracks","Rec/Summary"] def check_persistreco(TES, locations, process="Hlt2", N=0): @@ -42,7 +42,7 @@ def check_persistreco(TES, locations, process="Hlt2", N=0): print( "Persistreco ERROR for pass through line. RecSummary not persisted." ) - elif len(unpacked) < N and not any(x in loc for x in Unexpected): + elif unpacked.size() < N and not any(x in loc for x in Unexpected): if "Vertex" not in loc: ## Do not expect N_TURBO+ vertices print("Persistreco ERROR for pass through line. ", loc, - " has only ", len(unpacked), " entries.") + " has only ", unpacked.size(), " entries.") diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py index a8692ff7b51..851cdd7b1a6 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py @@ -34,7 +34,7 @@ from Configurables import ( HistogramPersistencySvc, ) -from GaudiConf.PersistRecoConf import PersistRecoPacking +from PyConf.packing import default_persisted_locations from GaudiConf.reading import do_unpacking from Hlt2Conf.check_output import check_persistreco from GaudiConf.reading import load_manifest @@ -62,8 +62,6 @@ def advance_HLT(decision): from Moore.persistence import DEFAULT_OUTPUT_PREFIX -prp = PersistRecoPacking( - stream=DEFAULT_OUTPUT_PREFIX, reco_stream="HLT2", data_type='Upgrade') cfg = load_manifest(args.hlt2_manifest) @@ -102,8 +100,9 @@ for ii in range(nevents): if ii == 0: TES.dump() - check_persistreco(TES, prp.unpackedLocations(), "Hlt2") - + locations = default_persisted_locations(stream="/Event/HLT2") + check_persistreco(TES, locations.values(), "Hlt2") + # We should still be persisting the HLT2 line candidates if len(TES["/Event/HLT2/" + line + "/Particles"]) < 1: print( @@ -122,7 +121,8 @@ for ii in range(nevents): if ii == 0: TES.dump() - check_persistreco(TES, prp.unpackedLocations(), "Hlt2") + locations = default_persisted_locations(stream="/Event/HLT2") + check_persistreco(TES, locations.values(), "Hlt2") # We should still be persisting the HLT2 line candidates if len(TES["/Event/HLT2/" + line + "/Particles"]) < 1: diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py index bee5e52d621..4345f989fcf 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py @@ -23,7 +23,7 @@ from Configurables import ( HistogramPersistencySvc, ) -from GaudiConf.PersistRecoConf import PersistRecoPacking +from PyConf.packing import default_persisted_locations from GaudiConf.reading import do_unpacking @@ -72,8 +72,6 @@ elif process == "Turbo": loc = "HLT2" dec_to_check = "PassThrough" -prp = PersistRecoPacking( - stream=FULL_ROOT, reco_stream='HLT2', data_type='Upgrade') algs = do_unpacking( load_manifest(args.t), @@ -202,8 +200,9 @@ for ii in range(nevents): print("MC ERROR MC vertices not correctly propagated") # Forth step: check persistency of packed containers - check_persistreco(TES, prp.unpackedLocations(), "Spruce") - + locations = default_persisted_locations(stream="/Event/Spruce/HLT2") + check_persistreco(TES, locations.values(), "Spruce") + # Check a random RawBank is populated bank_loc = '/Event/' + stream RawBank = TES[bank_loc].banks(GP.gbl.LHCb.RawBank.Rich).size() diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py index 12eb2ad0eb4..603f37ada59 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py @@ -32,7 +32,7 @@ from Configurables import ( ) from PyConf.application import configured_ann_svc -from GaudiConf.PersistRecoConf import PersistRecoPacking +from PyConf.packing import default_persisted_locations from GaudiConf.reading import do_unpacking from GaudiConf.reading import load_manifest @@ -66,9 +66,6 @@ FULL_ROOT = "/Event/Spruce" loc = "Spruce" dec_to_check = "Spruce_Test_line_extraoutputs" -prp = PersistRecoPacking( - stream=FULL_ROOT, reco_stream='HLT2', data_type='Upgrade') - algs = do_unpacking( load_manifest(args.t), process=process, @@ -166,7 +163,8 @@ for ii in range(nevents): print("Persistency ERROR extra_outputs not being saved correctly.") # Forth step: check persistency of packed containers - check_persistreco(TES, prp.unpackedLocations(), "Spruce") + locations = default_persisted_locations(stream="/Event/Spruce/HLT2") + check_persistreco(TES, locations.values(), "Spruce") # Check a random RawBank is populated bank_loc = '/Event/default' diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py index 4dc94cca892..42fc166ce0d 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py @@ -31,7 +31,7 @@ from Configurables import ( HistogramPersistencySvc, ) -from GaudiConf.PersistRecoConf import PersistRecoPacking +from PyConf.packing import default_persisted_locations from GaudiConf.reading import do_unpacking from PyConf.application import configured_ann_svc from GaudiConf.reading import load_manifest @@ -63,9 +63,6 @@ FULL_ROOT = "/Event/Spruce" loc = "Spruce" dec_to_check = "Spruce_Test_line_persistreco" -prp = PersistRecoPacking( - stream="/Event/Spruce", reco_stream="HLT2", data_type='Upgrade') - algs = do_unpacking( load_manifest(args.t), process=process, @@ -167,7 +164,8 @@ for ii in range(nevents): "persistency ERROR persistreco objects not being saved correctly.") # Forth step: check persistency of packed containers - check_persistreco(TES, prp.unpackedLocations(), "Spruce") + locations = default_persisted_locations(stream="/Event/Spruce/HLT2") + check_persistreco(TES, locations.values(), "Spruce") # Check a random RawBank is populated bank_loc = '/Event/default' diff --git a/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py b/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py index 62080ac3e83..c5a404e2684 100644 --- a/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py +++ b/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py @@ -33,12 +33,10 @@ from Configurables import ( HistogramPersistencySvc, ) from Moore.persistence import DEFAULT_OUTPUT_PREFIX -from GaudiConf.PersistRecoConf import PersistRecoPacking from GaudiConf.reading import do_unpacking from PyConf.application import configured_ann_svc from GaudiConf.reading import load_manifest - ##Helper functions for returning routing bits def routing_bits(): """Return a list with the 96 routing bit values.""" @@ -90,8 +88,6 @@ else: algs = do_unpacking( cfg, process=args.process, stream=args.stream, output_level=4) -prpacking = PersistRecoPacking( - stream=TES_ROOT, reco_stream='HLT2', data_type='Upgrade') mgr = ApplicationMgr(TopAlg=algs) mgr.ExtSvc += [configured_ann_svc()] @@ -193,3 +189,4 @@ while True: print(rec_summary) appMgr.run(1) + diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index fcca74bc2a5..649275d5800 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -11,23 +11,22 @@ """Configuration for persisting HLT2 objects in output ROOT/MDF files.""" from __future__ import absolute_import import itertools -import logging, os +import logging, os, json from pprint import pformat from Configurables import HltLinePersistenceSvc +#from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output -from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix +from PyConf.location_prefix import prefix from PyConf.application import register_encoding_dictionary from GaudiConf.reading import type_map -from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations -from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed -from .serialisation import serialise_packed_containers +from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations, packers_map +from .persistreco import persistreco_line_outputs from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC log = logging.getLogger(__name__) @@ -103,6 +102,25 @@ def get_type(dh): return None +def get_packed_locations(inputs, stream): + packed_dhs = [] + + types = type_map() + k = list(types.keys()) + v = list(types.values()) + + for key, locs in inputs.items(): + for i in locs: + t = i.type + if i.type == "unknown_t": + t = k[v.index(key)] + + packed_dhs += [(prefix(i.location, stream), t)] + + packed_dhs = list(dict.fromkeys(packed_dhs)) + return {'PackedLocations': packed_dhs} + + @configurable def persist_line_outputs( lines, @@ -110,6 +128,7 @@ def persist_line_outputs( dec_reports, associate_mc, source_id, + output_manifest_file, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from clone_mc=True): @@ -153,8 +172,9 @@ def persist_line_outputs( if log.isEnabledFor(logging.DEBUG): log.debug('line_locations: ' + pformat(persistence_svc.Locations)) - # Make a dictionary for all known object types with empty values - inputs = PersistRecoPacking().dictionary() + # Make a dictinary for all known object types with emty values + p_map = packers_map() + inputs = {t: [] for t in p_map.keys()} #add line outputs to fill the dictionary inputs = _referenced_inputs(lines, inputs) @@ -172,6 +192,14 @@ def persist_line_outputs( for p in protoparticle_relations: inputs["PP2MCPRelations"] += [p] + if output_manifest_file: + with open(output_manifest_file, 'w') as f: + json.dump( + get_packed_locations(inputs, stream), + f, + indent=4, + sort_keys=True) + locify = lambda i: i.location if hasattr(i, 'location') else i inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} @@ -198,30 +226,8 @@ def persist_line_outputs( pformat(output_cloner_locations)) cf.append(output_cloner_cf) - #Make a dictionary for output packer locations - #For line outputs, "stream+/p" added to input locations - #For reco objects, there are pre-defined output locations - #This is to be able to find reco objects regardless of their producer - prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - outputs = {} - for key, value in inputs.items(): - outputs[key] = [] - for v in value: - if v in prdict_packed.keys(): - outputs[key] += [prdict_packed[v]] #reco - else: - outputs[key] += [packed_prefix(v, stream)] #line - - prpacking = PersistRecoPacking( - stream=stream, - unpacked=inputs, - packed=outputs, - data_type=data_type, - ) - ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ unpacked_prefix(i, stream) for i in prpacking.packedLocations() ]) | \ - set([ i for i in prpacking.unpackedLocations()]) | \ + locations = set([ i for ilist in inputs.values() for i in ilist]) | \ set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) if clone_mc: @@ -233,26 +239,23 @@ def persist_line_outputs( register_encoding_dictionary("PackedObjectLocations", sorted(locations)), 16) - packer_cf, packer_handles = pack_stream_objects(stream, prpacking, - encoding_key) - cf.append(packer_cf) + packers_cf, serialisation_cf, output_raw_data = pack_stream_objects( + stream, inputs, encoding_key, source_id) - packer_mc_locations = [] + cf.append(packers_cf) + + packer_mc_locations = [] if clone_mc: mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) - if log.isEnabledFor(logging.DEBUG): - log.debug('packer_handles: ' + pformat(packer_handles)) - log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) - - serialisation_cf, output_raw_data = serialise_packed_containers( - packer_handles, source_id) + cf.append(serialisation_cf) if log.isEnabledFor(logging.DEBUG): + log.debug('packer_locations: ' + pformat(inputs.values())) + log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) log.debug('output_raw_data: %s', pformat(output_raw_data)) - cf.append(serialisation_cf) control_flow_node = CompositeNode( "hlt2_line_output_persistence", diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index db527d2f8b8..15a4ae23604 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -11,56 +11,21 @@ import logging import os -from PyConf.Algorithms import ( - PackMCParticle, PackMCVertex, - RecVertexPacker, VertexPacker, - RichPIDPacker, MuonPIDPacker, - ProtoParticlePacker, ParticlePacker, - TrackPacker, - FlavourTagPacker, - RecSummaryPacker, - CaloHypoPacker, CaloClusterPacker, CaloDigitPacker, CaloAdcPacker, - P2VRelationPacker, - P2MCPRelationPacker, PP2MCPRelationPacker, - P2IntRelationPacker, P2InfoRelationPacker, - HltPackedBufferWriter) - +from PyConf.packing import packers_map from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic from Gaudi.Configuration import WARNING as OUTPUTLEVEL -log = logging.getLogger(__name__) +from PyConf.Algorithms import PackMCParticle, PackMCVertex, HltPackedBufferWriter -from PyConf import configurable + +log = logging.getLogger(__name__) -def packers_map(): - - return { - "PVs": RecVertexPacker, - "Vertices": VertexPacker, - "Tracks": TrackPacker, - "RichPIDs": RichPIDPacker, - "MuonPIDs": MuonPIDPacker, - "CaloHypos": CaloHypoPacker, - "CaloClusters": CaloClusterPacker, - "CaloDigits": CaloDigitPacker, - "CaloAdcs": CaloAdcPacker, - "ProtoParticles": ProtoParticlePacker, - "Particles": ParticlePacker, - "FlavourTags": FlavourTagPacker, - "P2VRelations": P2VRelationPacker, - "P2MCPRelations": P2MCPRelationPacker, - "P2IntRelations": P2IntRelationPacker, - "P2InfoRelations": P2InfoRelationPacker, - "PP2MCPRelations": PP2MCPRelationPacker, - "RecSummary": RecSummaryPacker - } - +from PyConf import configurable @configurable - def pack_stream_objects(stream, inputs, encoding_key, @@ -81,13 +46,12 @@ def pack_stream_objects(stream, for t, p in p_map.items(): if t in inputs.keys(): - packer = p( InputName=[force_location(loc) for loc in inputs[t]], OutputLevel=OUTPUTLEVEL, EnableCheck=enable_check, EncodingKey=encoding_key) - + packers += [packer] packers_cf = CompositeNode( diff --git a/Hlt/Moore/python/Moore/persistence/persistreco.py b/Hlt/Moore/python/Moore/persistence/persistreco.py index 0a0a2e9edfa..f77b95ba060 100644 --- a/Hlt/Moore/python/Moore/persistence/persistreco.py +++ b/Hlt/Moore/python/Moore/persistence/persistreco.py @@ -1,5 +1,5 @@ ############################################################################### -# (c) Copyright 2020 CERN for the benefit of the LHCb Collaboration # +# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration # # # # This software is distributed under the terms of the GNU General Public # # Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # @@ -18,11 +18,9 @@ Some objects which are anyhow persisted as part of the usual line output, such as primary vertices, are treated different if the line has PersistReco enabled. See the cloning configuration for those differences. """ -from PyConf.components import get_output -from PyConf.location_prefix import prefix, packed_prefix -from GaudiConf.PersistRecoConf import default_persisted_locations -from RecoConf.reconstruction_objects import reconstruction +from PyConf.packing import default_persisted_locations +from RecoConf.reconstruction_objects import reconstruction def persistreco_line_outputs(): """Return a dict of data handles that define reconstruction to be persisted.""" @@ -38,19 +36,3 @@ def persistreco_line_outputs(): return prdict - -def persistreco_line_outputs_packed(stream, reco_stream): - """Return a dict of data handles that define reconstruction to be persisted.""" - - stream_loc = { - key: prefix(value, reco_stream) - for key, value in default_persisted_locations().items() - } - - prdict = persistreco_line_outputs() - packed = { - prefix(get_output(val).location, stream): packed_prefix( - stream_loc[key], stream) - for key, val in prdict.items() - } - return packed diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index 2cd172db07c..6d8ee9b4ffe 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -12,7 +12,7 @@ from Moore import options, run_reconstruction from Moore.config import Reconstruction from RecoConf.hlt2_global_reco import reconstruction from PyConf.Algorithms import PrForwardTrackingVelo -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location def make_two_reconstructions(): diff --git a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py index 1d4ab39b34c..e7843ff8467 100644 --- a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import ( AcceptanceBremAlg, AcceptanceEcalAlg, AcceptanceHcalAlg, TrackToEcalEnergyAlg, TrackToHcalEnergyAlg, CaloChargedPIDsAlg, diff --git a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py index ecfc674de31..b3e0ebcee80 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py @@ -12,7 +12,7 @@ import logging from PyConf import configurable from PyConf.application import default_raw_event, default_raw_banks from PyConf.utilities import DISABLE_TOOL -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import ( fromPrUpstreamTracksV1Tracks, diff --git a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py index cc278f70865..9d29c1b8422 100644 --- a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import (LHCb__Converters__Track__SOA__fromV1Track as TrackSOAFromV1, MuonPIDConverter, diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 5b9311be16b..d4be53389f1 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -9,23 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from GaudiConf import reading -from GaudiConf.PersistRecoConf import persisted_location - -_reco_loc = { - "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), - "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), - "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), - #"MuonTracks": ("/Event/HLT2/Rec/Track/Muon", "Tracks"), - "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), - "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), - "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), - "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), - "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), - "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), - "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs"), - "RecSummary": ("/Event/HLT2/Rec/Summary", "RecSummary") -} - +from PyConf.packing import persisted_location, reco_locations, pp2mcp_locations def upfront_reconstruction(manifest): """Return a list DataHandles that define the upfront reconstruction output. @@ -40,6 +24,9 @@ def upfront_reconstruction(manifest): decoder = reading.decoder( configurables=False, output_level=4, stream=stream) + reco = reco_locations(stream) + pp2mcp = pp2mcp_locations(stream) + mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) @@ -47,7 +34,8 @@ def upfront_reconstruction(manifest): # make sure that the reco locations are spliced into the provided manifest... dl = { v[0]: v[1] for v in manifest['PackedLocations'] } - dl.update( (v[0], inv_map[v[1]]) for v in _reco_loc.values() ) + dl.update( (v[0], inv_map[v[1]]) for v in reco.values() ) + dl.update( (v[0], inv_map[v[1]]) for v in pp2mcp.values() ) m = { 'PackedLocations' : [ (k,v) for k,v in dl.items() ] } ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... @@ -56,7 +44,6 @@ def upfront_reconstruction(manifest): m, decoder.OutputBuffers, configurables=False, - mc=mc_algs, output_level=4) ### TODO:FIXME take advantage of the fact that the above have datahandles... @@ -71,11 +58,16 @@ def reconstruction(manifest): data = {} unpackers = upfront_reconstruction(manifest) - for key, value in _reco_loc.items(): - for v in unpackers: - if "OutputName" in v.outputs.keys( - ) and v.OutputName.location == value[0]: + reco = reco_locations("/Event/HLT2") + pp2mcp = pp2mcp_locations("/Event/HLT2") + + reco.update(pp2mcp) + + for v in unpackers: + for key, value in reco.items(): + if "OutputName" in v.outputs.keys() and v.OutputName.location == value[0]: data[key] = v.OutputName + ### Temporary: as long as we persist v1, we need to insert a converter for the new PVs from PyConf.Algorithms import RecV1ToPVConverter diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py b/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py index 9362ff813f2..4a5647e3608 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py @@ -10,7 +10,7 @@ ############################################################################### from .data_from_file import reco_unpackers from PyConf.Algorithms import FakeRecSummaryMaker -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location def upfront_reconstruction(): diff --git a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py index 4e9533ecbbe..c140e2e2342 100644 --- a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.application import default_raw_event from Configurables import Rich__Future__ParticleProperties as PartProps diff --git a/Hlt/RecoConf/python/RecoConf/standalone.py b/Hlt/RecoConf/python/RecoConf/standalone.py index efc299062f5..1173054a1b0 100644 --- a/Hlt/RecoConf/python/RecoConf/standalone.py +++ b/Hlt/RecoConf/python/RecoConf/standalone.py @@ -41,7 +41,7 @@ from .calorimeter_mc_checking import ( from .rich_reconstruction import make_rich_pixels, default_rich_reco_options from PyConf.application import default_raw_event, make_odin, make_data_with_FetchDataFromFile -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import ( VeloRetinaClusterTrackingSIMD, CaloFutureDigit2MCLinks2Table, -- GitLab From 03430d1f79c5944ecdbd4ad4bec5242d9ee37b87 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Fri, 22 Jul 2022 12:59:53 +0000 Subject: [PATCH 057/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/23464887 --- Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py | 2 +- .../tests/options/hlt2_persistreco_check.py | 2 +- .../tests/options/sprucing/spruce_check.py | 3 +- .../tests/options/streaming/stream_check.py | 2 +- Hlt/Moore/python/Moore/config.py | 32 +++++++------------ .../python/Moore/persistence/__init__.py | 5 +-- Hlt/Moore/python/Moore/persistence/packing.py | 6 ++-- .../python/Moore/persistence/persistreco.py | 2 +- .../RecoConf/reco_objects_for_spruce.py | 20 +++++++----- .../python/RecoConf/reco_objects_from_file.py | 7 ++-- 10 files changed, 40 insertions(+), 41 deletions(-) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py b/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py index 33e330809fe..b073070ebf4 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py @@ -17,7 +17,7 @@ not_found = cppyy.bind_object(0, cppyy.gbl.DataObject) # These locations do not exist in old brunel outputs or any file produced # before 07.2022 for the moment ignore the errors in unpacking checks. # until we have some versioning of the reco locations -UnexpectedReco = ["MuonTracks","Rec/Summary"] +UnexpectedReco = ["MuonTracks", "Rec/Summary"] def check_persistreco(TES, locations, process="Hlt2", N=0): diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py index 851cdd7b1a6..479f1902a54 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py @@ -102,7 +102,7 @@ for ii in range(nevents): locations = default_persisted_locations(stream="/Event/HLT2") check_persistreco(TES, locations.values(), "Hlt2") - + # We should still be persisting the HLT2 line candidates if len(TES["/Event/HLT2/" + line + "/Particles"]) < 1: print( diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py index 4345f989fcf..ae59e1ad999 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py @@ -72,7 +72,6 @@ elif process == "Turbo": loc = "HLT2" dec_to_check = "PassThrough" - algs = do_unpacking( load_manifest(args.t), process=process, @@ -202,7 +201,7 @@ for ii in range(nevents): # Forth step: check persistency of packed containers locations = default_persisted_locations(stream="/Event/Spruce/HLT2") check_persistreco(TES, locations.values(), "Spruce") - + # Check a random RawBank is populated bank_loc = '/Event/' + stream RawBank = TES[bank_loc].banks(GP.gbl.LHCb.RawBank.Rich).size() diff --git a/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py b/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py index c5a404e2684..7cb7c424005 100644 --- a/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py +++ b/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py @@ -37,6 +37,7 @@ from GaudiConf.reading import do_unpacking from PyConf.application import configured_ann_svc from GaudiConf.reading import load_manifest + ##Helper functions for returning routing bits def routing_bits(): """Return a list with the 96 routing bit values.""" @@ -189,4 +190,3 @@ while True: print(rec_summary) appMgr.run(1) - diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 3cf698c1400..71b367ce90d 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -31,6 +31,7 @@ from PyConf.application import ( default_raw_event, root_writer, make_data_with_FetchDataFromFile, + generate_encoding_dictionary, register_encoding_dictionary, ) from GaudiConf.reading import unpack_rawevent, mc_unpackers @@ -119,6 +120,7 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa def report_writers_node(streams, data_type, process, + output_manifest_file, associate_mc=False, clone_mc=False): """Return the control flow node and locations to persist of the default reports writers. @@ -171,14 +173,16 @@ def report_writers_node(streams, "pass": "Spruce" }[process] major_name = { - "hlt1": "Hlt1DecisionID", - "hlt2": "Hlt2DecisionID", - "spruce": "SpruceDecisionID", - "pass": "SpruceDecisionID" + "hlt1": "Hlt1SelectionID", + "hlt2": "Hlt2SelectionID", + "spruce": "SpruceSelectionID", + "pass": "SpruceSelectionID" }[process] dec_key = int( register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), + major_name, + generate_encoding_dictionary(major_name, + [l.decision_name for l in lines])), 16) # TODO unsigned? Stick to hex string? if process == "hlt1" or process == "hlt2": @@ -214,7 +218,7 @@ def report_writers_node(streams, (line_output_cf, line_output_locations, packed_data) = persist_line_outputs( physics_lines, data_type, erw.DecReportsLocation, associate_mc, - process.capitalize()) + process.capitalize(), output_manifest_file) algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent extra_locations_to_persist.extend(line_output_locations) @@ -242,6 +246,7 @@ def report_writers_node(streams, erw.DecReportsLocation, associate_mc, process.capitalize(), + output_manifest_file, stream="/Event/Spruce", reco_stream="/Event/HLT2", clone_mc=options.simulation and options.input_type == ROOT_KEY) @@ -446,25 +451,12 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): streams[stream] = sorted(stream_lines, key=lambda line: line.name) lines = streams_dict_to_lines_list(streams) - ann_config = dict( - hlt1_decision_ids={}, hlt2_decision_ids={}, spruce_decision_ids={}) - if allen_hlt1: - ann_config["hlt1_decision_ids"] = get_allen_hlt1_decision_ids() - key = process + "_decision_ids" - #For passthrough lines want decisions a la Sprucing - if process == "pass": - key = "spruce_decision_ids" - if process == "hlt2": offset = 1000 - elif process == "spruce" or process == "pass": offset = 5000 - else: offset = 1 - ann_config[key] = build_decision_ids([l.decision_name for l in lines], - offset) - # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, options.data_type, process, + options.output_manifest_file, # Can only run association when we have access to the linker tables. Only want association for hlt step associate_mc=process == "hlt2" and options.simulation and options.input_type == ROOT_KEY and options.output_type == ROOT_KEY, diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 649275d5800..343dea0d5ac 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -186,7 +186,9 @@ def persist_line_outputs( name = get_type(val) #find type of object for this DH if name: inputs[name] += [get_output(val)] else: - log.warning('*** WARNING: get_type failed for {} -- {} not supported for persistence, skipping!'.format(val,val.type)) + log.warning( + '*** WARNING: get_type failed for {} -- {} not supported for persistence, skipping!' + .format(val, val.type)) # add proto particle relations if they exist for p in protoparticle_relations: @@ -242,7 +244,6 @@ def persist_line_outputs( packers_cf, serialisation_cf, output_raw_data = pack_stream_objects( stream, inputs, encoding_key, source_id) - cf.append(packers_cf) packer_mc_locations = [] diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 15a4ae23604..44f06a41c88 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -19,12 +19,11 @@ from Gaudi.Configuration import WARNING as OUTPUTLEVEL from PyConf.Algorithms import PackMCParticle, PackMCVertex, HltPackedBufferWriter - - log = logging.getLogger(__name__) from PyConf import configurable + @configurable def pack_stream_objects(stream, inputs, @@ -51,7 +50,7 @@ def pack_stream_objects(stream, OutputLevel=OUTPUTLEVEL, EnableCheck=enable_check, EncodingKey=encoding_key) - + packers += [packer] packers_cf = CompositeNode( @@ -77,6 +76,7 @@ def pack_stream_objects(stream, return packers_cf, serialisation_cf, bank_writer + def pack_stream_mc_locations(stream): return [ os.path.join(stream, diff --git a/Hlt/Moore/python/Moore/persistence/persistreco.py b/Hlt/Moore/python/Moore/persistence/persistreco.py index f77b95ba060..27acf78f6ef 100644 --- a/Hlt/Moore/python/Moore/persistence/persistreco.py +++ b/Hlt/Moore/python/Moore/persistence/persistreco.py @@ -22,6 +22,7 @@ See the cloning configuration for those differences. from PyConf.packing import default_persisted_locations from RecoConf.reconstruction_objects import reconstruction + def persistreco_line_outputs(): """Return a dict of data handles that define reconstruction to be persisted.""" objs = reconstruction() @@ -35,4 +36,3 @@ def persistreco_line_outputs(): if key in to_be_persisted: prdict[key] = val return prdict - diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index d4be53389f1..3c41837db3e 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -9,7 +9,8 @@ # or submit itself to any jurisdiction. # ############################################################################### from GaudiConf import reading -from PyConf.packing import persisted_location, reco_locations, pp2mcp_locations +from PyConf.packing import persisted_location, reco_locations, pp2mcp_locations + def upfront_reconstruction(manifest): """Return a list DataHandles that define the upfront reconstruction output. @@ -33,10 +34,10 @@ def upfront_reconstruction(manifest): inv_map = {v: k for k, v in reading.type_map().items()} # make sure that the reco locations are spliced into the provided manifest... - dl = { v[0]: v[1] for v in manifest['PackedLocations'] } - dl.update( (v[0], inv_map[v[1]]) for v in reco.values() ) - dl.update( (v[0], inv_map[v[1]]) for v in pp2mcp.values() ) - m = { 'PackedLocations' : [ (k,v) for k,v in dl.items() ] } + dl = {v[0]: v[1] for v in manifest['PackedLocations']} + dl.update((v[0], inv_map[v[1]]) for v in reco.values()) + dl.update((v[0], inv_map[v[1]]) for v in pp2mcp.values()) + m = {'PackedLocations': [(k, v) for k, v in dl.items()]} ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( @@ -65,9 +66,9 @@ def reconstruction(manifest): for v in unpackers: for key, value in reco.items(): - if "OutputName" in v.outputs.keys() and v.OutputName.location == value[0]: + if "OutputName" in v.outputs.keys( + ) and v.OutputName.location == value[0]: data[key] = v.OutputName - ### Temporary: as long as we persist v1, we need to insert a converter for the new PVs from PyConf.Algorithms import RecV1ToPVConverter @@ -77,7 +78,10 @@ def reconstruction(manifest): ### Temporary: This to be compatible with data where the RecSummary does not exist. if "RecSummary" not in data.keys(): from PyConf.Algorithms import FakeRecSummaryMaker - data["RecSummary"] = FakeRecSummaryMaker(outputs={"Output": persisted_location('RecSummary')}).Output + data["RecSummary"] = FakeRecSummaryMaker( + outputs={ + "Output": persisted_location('RecSummary') + }).Output return data diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py b/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py index 4a5647e3608..252a4f8675d 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_from_file.py @@ -33,8 +33,11 @@ def reconstruction(): m["PVs_v1"] = m["PVs"] m["PVs"] = RecV1ToPVConverter(InputVertices=m["PVs_v1"]).OutputVertices ### Temporary: this is to be able to read and process data with an unpacked RecSummary - if "RecSummary" not in m.keys() : - m["RecSummary"] = FakeRecSummaryMaker(outputs={"Output": persisted_location('RecSummary') }).Output + if "RecSummary" not in m.keys(): + m["RecSummary"] = FakeRecSummaryMaker( + outputs={ + "Output": persisted_location('RecSummary') + }).Output return m -- GitLab From 4b1204377015c7dffbee0a4c5998f58d501c10a3 Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 22 Jul 2022 15:02:08 +0200 Subject: [PATCH 058/102] simplify unpacking, remove PersistRecoConf from configuration --- Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py index 479f1902a54..1644ab011b8 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py @@ -61,8 +61,6 @@ def advance_HLT(decision): return -from Moore.persistence import DEFAULT_OUTPUT_PREFIX - cfg = load_manifest(args.hlt2_manifest) ##Prepare application -- GitLab From 5ce6eaf5a2134558cadb804acb9207c76f914ce7 Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 22 Jul 2022 16:53:23 +0200 Subject: [PATCH 059/102] fix sprucing test --- Hlt/Moore/python/Moore/persistence/__init__.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 343dea0d5ac..a4fe047ace5 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -111,11 +111,16 @@ def get_packed_locations(inputs, stream): for key, locs in inputs.items(): for i in locs: - t = i.type - if i.type == "unknown_t": + if isinstance(i, str): t = k[v.index(key)] - packed_dhs += [(prefix(i.location, stream), t)] + packed_dhs += [(prefix(i, stream), t)] + else: + t = i.type + if i.type == "unknown_t": + t = k[v.index(key)] + + packed_dhs += [(prefix(i.location, stream), t)] packed_dhs = list(dict.fromkeys(packed_dhs)) return {'PackedLocations': packed_dhs} -- GitLab From 05aded5fdf6d31ef82015474ab93a3971ac15b54 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Tue, 31 May 2022 12:45:18 +0200 Subject: [PATCH 060/102] require (and generate) an explicit encoding key to configure encoding --- Hlt/Moore/python/Moore/config.py | 166 ++++++++++++----- .../python/Moore/persistence/__init__.py | 176 ++++++++++-------- Hlt/Moore/python/Moore/persistence/packing.py | 76 +++----- .../python/Moore/persistence/serialisation.py | 4 +- Hlt/Moore/python/Moore/selreports.py | 13 +- Hlt/Moore/python/Moore/tcks.py | 96 +++++++++- 6 files changed, 342 insertions(+), 189 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 71b367ce90d..7f28d6efeac 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -11,6 +11,7 @@ from __future__ import absolute_import import re, logging, inspect, itertools from collections import namedtuple +from Configurables import ApplicationMgr from PyConf import configurable from PyConf.Algorithms import ( ExecutionReportsWriter, HltDecReportsWriter, HltSelReportsWriter, @@ -18,7 +19,7 @@ from PyConf.Algorithms import ( CombineRawBankViewsToRawEvent, RawEventCombiner, RawEventSimpleCombiner, AddressKillerAlg, VoidFilter) import Functors as F -from PyConf.components import force_location +from PyConf.components import force_location, setup_component from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, @@ -31,12 +32,11 @@ from PyConf.application import ( default_raw_event, root_writer, make_data_with_FetchDataFromFile, - generate_encoding_dictionary, register_encoding_dictionary, ) from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError -from AllenConf.persistency import build_decision_ids +from PyConf.application import all_nodes_and_algs #: Regular expression (compiled) defining the valid selection line names # Meaning: line names should start with either of Hlt1, Hlt2, Spruce, Pass @@ -116,11 +116,27 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name +def _build_decision_ids(decision_names, offset=1): + """Return a dict of decision names to integer IDs. + + Decision report IDs must not be zero. This method generates IDs starting + from offset. + + Args: + decision_names (list of str) + offset (int): needed so that there are no identical ints in the int->str relations + of HltRawBankDecoderBase + + Returns: + decision_ids (dict of str to int): Mapping from decision name to ID. + """ + return {name: idx for idx, name in enumerate(decision_names, offset)} + + @configurable def report_writers_node(streams, data_type, process, - output_manifest_file, associate_mc=False, clone_mc=False): """Return the control flow node and locations to persist of the default reports writers. @@ -166,73 +182,66 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - source_id = { - "hlt1": "Hlt1", - "hlt2": "Hlt2", - "spruce": "Spruce", - "pass": "Spruce" - }[process] - major_name = { - "hlt1": "Hlt1SelectionID", - "hlt2": "Hlt2SelectionID", - "spruce": "SpruceSelectionID", - "pass": "SpruceSelectionID" - }[process] - dec_key = int( - register_encoding_dictionary( - major_name, - generate_encoding_dictionary(major_name, - [l.decision_name for l in lines])), - 16) # TODO unsigned? Stick to hex string? - if process == "hlt1" or process == "hlt2": + major_name = "{}SelectionID".format(process.capitalize()) + key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=dec_key, + TCK=key, ) drw = HltDecReportsWriter( - SourceID=source_id, + SourceID=process.capitalize(), InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=dec_key, + EncodingKey=key, ) algs.extend([erw, drw]) new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - srm = make_selreports(process, physics_lines, erw) + encoding_key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? + srm = make_selreports(physics_lines, erw, encoding_key) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) barrier_algorithms.append(srm) srw = HltSelReportsWriter( - SourceID=source_id, + SourceID=process.capitalize(), DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=srm.properties['EncodingKey']) + EncodingKey=encoding_key) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": (line_output_cf, line_output_locations, packed_data) = persist_line_outputs( physics_lines, data_type, erw.DecReportsLocation, associate_mc, - process.capitalize(), output_manifest_file) + process.capitalize()) algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent extra_locations_to_persist.extend(line_output_locations) else: ##spruce and passthrough jobs will write a Spruce report + major = "SpruceSelectionID" erw = ExecutionReportsWriter( Persist=[line.name for line in lines], - ANNSvcKey=major_name, - TCK=dec_key # TODO unsigned? Stick to hex string? + ANNSvcKey=major, + TCK=int( + register_encoding_dictionary( + major, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( - SourceID=source_id, + SourceID='Spruce', InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=dec_key, ) algs.extend([erw, drw]) @@ -246,7 +255,6 @@ def report_writers_node(streams, erw.DecReportsLocation, associate_mc, process.capitalize(), - output_manifest_file, stream="/Event/Spruce", reco_stream="/Event/HLT2", clone_mc=options.simulation and options.input_type == ROOT_KEY) @@ -451,12 +459,25 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): streams[stream] = sorted(stream_lines, key=lambda line: line.name) lines = streams_dict_to_lines_list(streams) + ann_config = dict( + hlt1_decision_ids={}, hlt2_decision_ids={}, spruce_decision_ids={}) + if allen_hlt1: + ann_config["hlt1_decision_ids"] = get_allen_hlt1_decision_ids() + key = process + "_decision_ids" + #For passthrough lines want decisions a la Sprucing + if process == "pass": + key = "spruce_decision_ids" + if process == "hlt2": offset = 1000 + elif process == "spruce" or process == "pass": offset = 5000 + else: offset = 1 + ann_config[key] = _build_decision_ids([l.decision_name for l in lines], + offset) + # register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, options.data_type, process, - options.output_manifest_file, # Can only run association when we have access to the linker tables. Only want association for hlt step associate_mc=process == "hlt2" and options.simulation and options.input_type == ROOT_KEY and options.output_type == ROOT_KEY, @@ -541,14 +562,10 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): extra_locations=extra_outputs) stream_writers_setup += pre_algs - # Use a regex instead of individual OR functors to avoid - # super deep function stack in generated C++ - stream_filter_code = "|".join( - line.decision_name for line in stream_lines) streamFilter = VoidFilter( name='Streaming_filter', - Cut=F.DECREPORTS_RE_FILTER( - Regex=stream_filter_code, + Cut=F.DECREPORTS_FILTER( + Lines=list(line.decision_name for line in stream_lines), DecReports=dec_reports.DecReportsLocation)) stream_node_children = [streamFilter] + post_algs stream_node = CompositeNode( @@ -580,11 +597,40 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): return moore, barriers +def get_all_algs_cpp_types(top_node): + return [alg.type() for alg in all_nodes_and_algs(top_node, True)[1]] + + +def is_DVCommonBase_alg(alg): + # a Gaudi::Property registers it's owner and appends it to the doc string + # e.g. the doc of ModifyLocations in DVCommonBase is: + # ' if set to false, does not append /Particles to outputParticles location [DVCommonBase] ' + # so as a proxy if something inherits from DVCommonBase we check if we can find this property + return '[DVCommonBase<' in alg._propertyDocDct.get("ModifyLocations", "") + + +def is_GaudiHistoAlg(alg): + return '[GaudiHistos<' in alg._propertyDocDct.get( + "UseSequencialNumericAutoIDs", "") + + +def check_for_known_issues(line): + all_algs = get_all_algs_cpp_types(line.node) + # filter out lines which will crash in multi threaded mode + # this check is likely incomplete.... + # what else is not thread safe? + # For now we just look for anything that inherits from DVCommonBase or GaudiHistos + return [ + a for a in all_algs if is_DVCommonBase_alg(a) or is_GaudiHistoAlg(a) + ] + + def run_moore(options, make_streams=None, public_tools=[], allen_hlt1=False, - analytics=False): + analytics=False, + exclude_incompatible=True): """Configure Moore's entire control and data flow. Convenience function that configures all services, creates the @@ -600,6 +646,7 @@ def run_moore(options, public_tools (list): list of public `Tool` instances to configure allen_hlt1: Configure Allen Hlt1 lines when processing Hlt2 on Allen filtered Hlt1 sample, Moore Hlt1 lines are confiugred when allen_hlt1=False analytics (bool, optional): For use only in rate/event size analysis. Defaults to False. + exclude_incompatible (bool, optional): Exclude the lines that are incompatible with multithreaded mode. Defaults to True. """ # First call configure_input for its important side effect of # changing the default values of default_raw_event's arguments. @@ -610,6 +657,30 @@ def run_moore(options, # Create default streams definition if make_streams returned a list if not isinstance(streams, dict): streams = dict(default=streams) + + # Exclude the lines with known issues (with non-thread safe algos etc.) + if exclude_incompatible: + filtered_streams = {} + excluded_lines = [] + for stream, lines in streams.items(): + filtered_lines = [] + for l in lines: + reason = check_for_known_issues(l) + if not reason: filtered_lines += [l] + else: excluded_lines += [(l.name, reason)] + if len(filtered_lines) > 0: + filtered_streams[stream] = filtered_lines + streams = filtered_streams + if len(excluded_lines) > 0: + log.warning( + f"Following {len(excluded_lines)} lines were automatically excluded:" + ) + log.warning( + "Name of Line ---- list of found algos that are known to be not thread safe" + ) + for line_name, reason in excluded_lines: + log.warning(f"{line_name} ---- {reason}") + lines = streams_dict_to_lines_list(streams) # Determine whether Hlt1, Hlt2 or Spruce is being processed hlt1 = all(l.name.startswith('Hlt1') for l in lines) @@ -656,17 +727,14 @@ def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) from Allen.config import setup_allen_non_event_data_service - from AllenConf.persistency import make_dec_reporter, register_decision_ids + from AllenConf.persistency import make_dec_reporter options.finalize() non_event_data_node = setup_allen_non_event_data_service() - ids = get_allen_hlt1_decision_ids() - encoding_key = register_decision_ids(ids) - # TODO: remove when full configuration of Allen from TCK is implemented - make_dec_reporter.global_bind(TCK=encoding_key) + if options.tck: make_dec_reporter.global_bind(TCK=options.tck) # Write DecReports raw banks allen_cf, allen_barriers = allen_gaudi_node_barriers() @@ -678,6 +746,8 @@ def allen_control_flow(options, write_detector_raw_banks=True): algs.extend([srw]) new_hlt_banks['HltSelReports'] = srw.OutputRawReports + decision_ids = get_allen_hlt1_decision_ids() + # register the decision_ids... and get the oid of their mapping # hlt1_decision_ids=decision_ids, hlt2_decision_ids={}, spruce_decision_ids={}) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index a4fe047ace5..8c1839fe73c 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -11,22 +11,24 @@ """Configuration for persisting HLT2 objects in output ROOT/MDF files.""" from __future__ import absolute_import import itertools -import logging, os, json +import logging, os from pprint import pformat from Configurables import HltLinePersistenceSvc -#from RecoConf.data_from_file import unpacked_mc_locations +from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output -from PyConf.location_prefix import prefix +from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix +from PyConf.object_types import type_map, classid_map from PyConf.application import register_encoding_dictionary -from GaudiConf.reading import type_map +from GaudiConf.PersistRecoConf import PersistRecoPacking from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations, packers_map -from .persistreco import persistreco_line_outputs +from .packing import pack_stream_objects, pack_stream_mc +from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed +from .serialisation import serialise_packed_containers from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC log = logging.getLogger(__name__) @@ -60,26 +62,37 @@ def _referenced_inputs(lines, inputs): #fill the packer inputs dictionary based on object type for dh in line_locs: - typ = get_type(dh) - if typ and typ in inputs.keys(): - inputs[typ] += [dh] + type = get_type(dh) + + if type and type in inputs.keys(): + inputs[type] += [dh.location] return inputs def _referenced_locations(lines): all_locs = {} + all_types = {} for l in lines: # Include the locations of the line outputs themselves line_locs = set() # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - all_locs[l.decision_name] = [dh for dh in line_locs] + + # Convert DataHandle to str, for configuring the ANN service + all_locs[l.decision_name] = [dh.location for dh in line_locs] + all_types[l.decision_name] = [] + for dh in line_locs: + if get_type(dh): + all_types[l.decision_name] += [get_type(dh)] + else: + all_types[l.decision_name] += [dh.type] + #zipped = zip(all_locs[l.decision_name], all_types[l.decision_name]) return all_locs def get_type(dh): - #For this to work, one needs to add new types to object_types.py in GaudiConf + #For this to work, one needs to add new types to object_types.py in Pyconf types = type_map() if dh.type in types.keys(): return types[dh.type] @@ -102,30 +115,6 @@ def get_type(dh): return None -def get_packed_locations(inputs, stream): - packed_dhs = [] - - types = type_map() - k = list(types.keys()) - v = list(types.values()) - - for key, locs in inputs.items(): - for i in locs: - if isinstance(i, str): - t = k[v.index(key)] - - packed_dhs += [(prefix(i, stream), t)] - else: - t = i.type - if i.type == "unknown_t": - t = k[v.index(key)] - - packed_dhs += [(prefix(i.location, stream), t)] - - packed_dhs = list(dict.fromkeys(packed_dhs)) - return {'PackedLocations': packed_dhs} - - @configurable def persist_line_outputs( lines, @@ -133,7 +122,6 @@ def persist_line_outputs( dec_reports, associate_mc, source_id, - output_manifest_file, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from clone_mc=True): @@ -177,38 +165,27 @@ def persist_line_outputs( if log.isEnabledFor(logging.DEBUG): log.debug('line_locations: ' + pformat(persistence_svc.Locations)) - # Make a dictinary for all known object types with emty values - p_map = packers_map() - inputs = {t: [] for t in p_map.keys()} + # Make a dictionary for all known object types with empty values + inputs = PersistRecoPacking().dictionary() #add line outputs to fill the dictionary inputs = _referenced_inputs(lines, inputs) #add the locations from reco objects to the dictionary prdict = persistreco_line_outputs() + prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - for val in prdict.values(): + for key, val in prdict.items(): name = get_type(val) #find type of object for this DH - if name: inputs[name] += [get_output(val)] - else: - log.warning( - '*** WARNING: get_type failed for {} -- {} not supported for persistence, skipping!' - .format(val, val.type)) + if name: + inputs[name] += [get_output(val).location] # add proto particle relations if they exist for p in protoparticle_relations: - inputs["PP2MCPRelations"] += [p] - - if output_manifest_file: - with open(output_manifest_file, 'w') as f: - json.dump( - get_packed_locations(inputs, stream), - f, - indent=4, - sort_keys=True) - - locify = lambda i: i.location if hasattr(i, 'location') else i - inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} + if isinstance(p, str): + inputs["PP2MCPRelations"] += [p] + else: + inputs["PP2MCPRelations"] += [p.location] #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -233,35 +210,86 @@ def persist_line_outputs( pformat(output_cloner_locations)) cf.append(output_cloner_cf) - ### TODO: reduce the set of encoding keys to the smallest possible one... - locations = set([ i for ilist in inputs.values() for i in ilist]) | \ - set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) + #Make a dictionary for output packer locations + #For line outputs, "stream+/p" added to input locations + #For reco objects, there are pre-defined output locations + #This is to be able to find reco objects regardless of their producer + outputs = {} + for key, value in inputs.items(): + outputs[key] = [] + for v in value: + if v in prdict_packed.keys(): + outputs[key] += [prdict_packed[v]] #reco + else: + outputs[key] += [packed_prefix(v, stream)] #line - if clone_mc: - mc_stream = stream - if reco_stream not in stream: mc_stream = prefix(reco_stream, stream) - locations = locations.union(pack_stream_mc_locations(mc_stream)) + prpacking = PersistRecoPacking( + stream=stream, + unpacked=inputs, + packed=outputs, + data_type=data_type, + ) + ### TODO: reduce the set of encoding keys to the smallest possible one... encoding_key = int( - register_encoding_dictionary("PackedObjectLocations", - sorted(locations)), 16) - - packers_cf, serialisation_cf, output_raw_data = pack_stream_objects( - stream, inputs, encoding_key, source_id) - - cf.append(packers_cf) + register_encoding_dictionary( + "PackedObjectLocations", + sorted( + set([i for i in prpacking.packedLocations()]) + | set([ + unpacked_prefix(i, stream) + for i in prpacking.packedLocations() + ]) + | set([i for i in prpacking.unpackedLocations()]) + | set([ + i for i in itertools.chain( + *_referenced_locations(lines).values()) + ]))), 16) + + packer_cf, packer_locations = pack_stream_objects(stream, prpacking, + encoding_key) + cf.append(packer_cf) packer_mc_locations = [] + if clone_mc: + mc_stream = stream + if reco_stream not in stream: + mc_stream = prefix(reco_stream, stream) mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) - cf.append(serialisation_cf) - if log.isEnabledFor(logging.DEBUG): - log.debug('packer_locations: ' + pformat(inputs.values())) + log.debug('packer_locations: ' + pformat(packer_locations)) log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) + + serialisation_cf, output_raw_data = serialise_packed_containers( + packer_locations, source_id) + + if log.isEnabledFor(logging.DEBUG): log.debug('output_raw_data: %s', pformat(output_raw_data)) + cf.append(serialisation_cf) + + unpacked_mc = unpacked_mc_locations() + unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] + + # Gather all possible locations which might be referenced... + #registered_locs = list( + # itertools.chain( + # packer_locations, + # [ unpacked_prefix(keys, stream) for keys in prpacking.packedLocations() ], + # prpacking.packedLocations(), + # prpacking.unpackedLocations(), + # unpacked_mc_locations().values(), + # [prefix(l, stream) for l in unpacked_mc_loc], + # itertools.chain(*_referenced_locations(lines).values()), + # )) + + # ...including all prefixed (post-cloning) locations + #registered_locs += [prefix(l, tes_prefix=stream) for l in registered_locs] + + #if log.isEnabledFor(logging.DEBUG): + # log.debug('registered_locs: ' + pformat(registered_locs)) control_flow_node = CompositeNode( "hlt2_line_output_persistence", diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 44f06a41c88..a9a165b65de 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -11,83 +11,53 @@ import logging import os -from PyConf.packing import packers_map +from PyConf.Algorithms import ( + PackMCParticle, + PackMCVertex, +) from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic from Gaudi.Configuration import WARNING as OUTPUTLEVEL -from PyConf.Algorithms import PackMCParticle, PackMCVertex, HltPackedBufferWriter - log = logging.getLogger(__name__) from PyConf import configurable @configurable -def pack_stream_objects(stream, - inputs, - encoding_key, - source_id, - enable_check=False): - """Return CF node that packs and serialises a set of containers to a raw bank. +def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): + """Return a list of packers that will produce all packed output. + Args: - stream (str): TES root containing objects to be persisted. - inputs (map): Type: locations to be persisted + stream (str): TES root containing objects to be packed. + prpacking (PersistRecoPacking object): PersistRecoPacking object that describes packing configuration. Returns: - serialisation_node (CompositeNode). - output_raw_data (DataHandle): Raw event with serialised data, - i.e. the DstData bank. + algs (list): Algorithms to run the packing. + outputs (list of str): Locations that should be persisted, in the + specification used by ROOT output writers (e.g. OutputStream). """ - p_map = packers_map() - packers = [] - - for t, p in p_map.items(): - if t in inputs.keys(): - packer = p( - InputName=[force_location(loc) for loc in inputs[t]], - OutputLevel=OUTPUTLEVEL, - EnableCheck=enable_check, - EncodingKey=encoding_key) - packers += [packer] + persistreco_packers = prpacking.packers( + output_level=OUTPUTLEVEL, + enable_check=enable_check, + encoding_key=encoding_key) packers_cf = CompositeNode( "packers", - children=packers, + children=persistreco_packers, combine_logic=NodeLogic.NONLAZY_OR, force_order=True, ) - packers_output_locations = [ - get_output(p.outputs["OutputName"]).location for p in packers - ] - - bank_writer = HltPackedBufferWriter( - PackedContainers=packers_output_locations, - OutputLevel=OUTPUTLEVEL, - SourceID=source_id) - - serialisation_cf = CompositeNode( - "serialisation", - children=[bank_writer], - ) + packers_output_locations = [] + for p in persistreco_packers: + packers_output_locations += [ + get_output(p.outputs["OutputName"]).location + ] - return packers_cf, serialisation_cf, bank_writer - - -def pack_stream_mc_locations(stream): - return [ - os.path.join(stream, - str(PackMCParticle.getDefaultProperties()["InputName"])), - os.path.join(stream, - str(PackMCVertex.getDefaultProperties()["InputName"])), - os.path.join(stream, - str(PackMCParticle.getDefaultProperties()["OutputName"])), - os.path.join(stream, - str(PackMCVertex.getDefaultProperties()["OutputName"])) - ] + return packers_cf, packers_output_locations def pack_stream_mc(stream): diff --git a/Hlt/Moore/python/Moore/persistence/serialisation.py b/Hlt/Moore/python/Moore/persistence/serialisation.py index 658a8210a88..a66b767eee5 100644 --- a/Hlt/Moore/python/Moore/persistence/serialisation.py +++ b/Hlt/Moore/python/Moore/persistence/serialisation.py @@ -20,7 +20,7 @@ from PyConf.control_flow import CompositeNode from Gaudi.Configuration import WARNING as OUTPUTLEVEL -def serialise_packed_containers(packed_handles, source_id): +def serialise_packed_containers(packed_locations, source_id): """Return CF node that serialises a set of packed containers to a raw bank. Args: @@ -33,7 +33,7 @@ def serialise_packed_containers(packed_handles, source_id): """ bank_writer = HltPackedBufferWriter( - PackedContainers=packed_handles, + PackedContainers=packed_locations, OutputLevel=OUTPUTLEVEL, SourceID=source_id) diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 642fe7b6af6..6bc65f3f7f5 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,7 +38,6 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) -from PyConf.application import register_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -209,11 +208,12 @@ def convert_output(alg): alg.type)) -def make_selreports(process, lines, decreports, **kwargs): +def make_selreports(lines, decreports, encoding_key, **kwargs): """Return a SelReportsMaker instance configured for the given lines. Args: - lines: The list of lines for which to create SelReport objects + lines (list of DecisionLine): The lines to create SelReport objects + for. decreports: DecReports data used as input to the SelReports maker. kwargs: Passed to the SelReportsMaker. """ @@ -226,11 +226,6 @@ def make_selreports(process, lines, decreports, **kwargs): else: # No lines we can handle, so do nothing names, outputs, types = [], [], [] - - key = int( - register_encoding_dictionary( - "{}SelectionID".format(process.capitalize()), names), 16) - # Each line output should be unique; we expect no two lines to do exactly # the same work assert len(outputs) == len( @@ -241,5 +236,5 @@ def make_selreports(process, lines, decreports, **kwargs): SelectionNames=names, CandidateTypes=types, Inputs=outputs, - EncodingKey=key, + EncodingKey=encoding_key, **kwargs) diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index bb5a367da9c..f402d56755d 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -50,6 +50,96 @@ The functions in this module currently support persisting the configuration of import json -def load_manifest(fname): - with open(fname, 'r', encoding='utf-8') as f: - return json.load(f) +class _ConfigurableEncoder(json.JSONEncoder): + def default(self, obj): + try: + # Try to serialise assuming Configurable + name = obj.getFullName() + props = obj.getDefaultProperties() + props.update(obj.getValuedProperties()) + obj = {name: props} + except AttributeError: + pass + return obj + + +def dump_hlt2_configuration(config, fname): + """Dump the HLT2 configuration in to a JSON TCK file. + + Note: + The `config` argument is currently unused as the configuration + dictionary returned by `Moore.run_moore` does not contain all + configurables. This will change once LHCb#141 has been addressed. + + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): + """Instantiate configurables based on an HLT2 TCK. + + Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 + application. + + Args: + fname -- Filename of the JSON TCK file produced by + ``dump_hlt2_configuration``. + annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. + """ + with open(fname) as f: + config = json.load(f) + + dicts = config["HltANNSvc/HltANNSvc"] + cfg = json.dumps({ + 'Hlt1SelectionID': dicts["Hlt1SelectionID"], + 'Hlt2SelectionID': dicts["Hlt2SelectionID"], + 'SpruceSelectionID': dicts["SpruceSelectionID"], + 'PackedObjectLocations': dicts["PackedObjectLocations"] + }) + + from Configurables import GitANNSvc + return GitANNSvc(annsvc_name, Overrule={0: cfg}) + + +def dump_sprucing_configuration(config, fname): + """Dump the Sprucing configuration in to a JSON TCK file. + Note we need the `Hlt{1,2}SelectionID`s from the Hlt2 ANNSvc + that we read into "HltANNSvcReading" + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def dump_passthrough_configuration(config, fname): + """Dump the pass-through Sprucing configuration in to a JSON TCK file. + Here we need the `Hlt{1,2}SelectionID`s and `PackedObjectLocations` from the + Hlt2 job ANNSvc that we read into "HltANNSvcReading" + + Args: + config -- Configuration dictionary returned by `Moore.run_moore`. + fname -- Filename to dump the TCK to. Conventionally ends with + ``.tck.json``. + """ + # raise RuntimeError("function should not longer be called") + + +def load_sprucing_configuration(fname, annsvc_name): + """Instantiate configurables based on a Sprucing TCK. + + Returns an HltANNSvc loaded with the HltANNSvc configuration of the + Sprucing application. + + Args: + fname -- Filename of the JSON TCK file produced by + ``dump_sprucing_configuration``. + annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. + """ + + return load_hlt2_configuration(fname, annsvc_name) -- GitLab From 227a97e658c3b75699998ea7b3fbfbb54f8addd7 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 11:34:46 +0200 Subject: [PATCH 061/102] use AllenConf.persistency.build_decision_ids --- Hlt/Moore/python/Moore/config.py | 72 +++++++++++++------------------- 1 file changed, 29 insertions(+), 43 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 7f28d6efeac..5cdd1f9bacb 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -11,7 +11,6 @@ from __future__ import absolute_import import re, logging, inspect, itertools from collections import namedtuple -from Configurables import ApplicationMgr from PyConf import configurable from PyConf.Algorithms import ( ExecutionReportsWriter, HltDecReportsWriter, HltSelReportsWriter, @@ -19,7 +18,7 @@ from PyConf.Algorithms import ( CombineRawBankViewsToRawEvent, RawEventCombiner, RawEventSimpleCombiner, AddressKillerAlg, VoidFilter) import Functors as F -from PyConf.components import force_location, setup_component +from PyConf.components import force_location from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, @@ -37,6 +36,7 @@ from PyConf.application import ( from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError from PyConf.application import all_nodes_and_algs +from AllenConf.persistency import build_decision_ids #: Regular expression (compiled) defining the valid selection line names # Meaning: line names should start with either of Hlt1, Hlt2, Spruce, Pass @@ -68,7 +68,6 @@ from .streams_hlt2 import (DETECTOR_RAW_BANK_TYPES, HLT1_REPORT_RAW_BANK_TYPES, HLT2_REPORT_RAW_BANK_TYPES, get_default_routing_bits) - def _unique(x): """Return a list of the unique elements in x while preserving order.""" return list(dict.fromkeys(x).keys()) @@ -116,22 +115,6 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name -def _build_decision_ids(decision_names, offset=1): - """Return a dict of decision names to integer IDs. - - Decision report IDs must not be zero. This method generates IDs starting - from offset. - - Args: - decision_names (list of str) - offset (int): needed so that there are no identical ints in the int->str relations - of HltRawBankDecoderBase - - Returns: - decision_ids (dict of str to int): Mapping from decision name to ID. - """ - return {name: idx for idx, name in enumerate(decision_names, offset)} - @configurable def report_writers_node(streams, @@ -182,19 +165,24 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - if process == "hlt1" or process == "hlt2": - major_name = "{}SelectionID".format(process.capitalize()) - key = int( - register_encoding_dictionary( + source_id = { "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce":"Spruce","passthrough":"Spruce" }[process] + major_name = { "hlt1" : "Hlt1SelectionID", + "hlt2" : "Hlt2SelectionID", + "spruce" : "SpruceSelectionID", + "passthrough" : "SpruceSelectionID"}[process] + key = int( register_encoding_dictionary( major_name, ["{}Decision".format(i.name) for i in lines]), 16) # TODO unsigned? Stick to hex string? + + + if process == "hlt1" or process == "hlt2": erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, TCK=key, ) drw = HltDecReportsWriter( - SourceID=process.capitalize(), + SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, EncodingKey=key, ) @@ -202,22 +190,18 @@ def report_writers_node(streams, new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - encoding_key = int( - register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - srm = make_selreports(physics_lines, erw, encoding_key) + srm = make_selreports(physics_lines, erw, key) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) barrier_algorithms.append(srm) srw = HltSelReportsWriter( - SourceID=process.capitalize(), + SourceID=source_id, DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=encoding_key) + EncodingKey=key) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -230,18 +214,15 @@ def report_writers_node(streams, extra_locations_to_persist.extend(line_output_locations) else: ##spruce and passthrough jobs will write a Spruce report - major = "SpruceSelectionID" erw = ExecutionReportsWriter( Persist=[line.name for line in lines], - ANNSvcKey=major, - TCK=int( - register_encoding_dictionary( - major, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? + ANNSvcKey=major_name, + TCK=key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( - SourceID='Spruce', + SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, + EncodingKey=key, ) algs.extend([erw, drw]) @@ -470,9 +451,9 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): if process == "hlt2": offset = 1000 elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 - ann_config[key] = _build_decision_ids([l.decision_name for l in lines], + ann_config[key] = build_decision_ids([l.decision_name for l in lines], offset) - # register the decision_ids and get their oids back... setup_ann_service(**ann_config) + # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, @@ -733,8 +714,15 @@ def allen_control_flow(options, write_detector_raw_banks=True): non_event_data_node = setup_allen_non_event_data_service() + ids = get_allen_hlt1_decision_ids() + encoding_key = int( + register_encoding_dictionary('Hlt1SelectionID', { + 'version': '0', + 'Hlt1SelectionID': {v: k for k, v in ids.items()} + }), 16) # TODO unsigned? Stick to hex string? + # TODO: remove when full configuration of Allen from TCK is implemented - if options.tck: make_dec_reporter.global_bind(TCK=options.tck) + make_dec_reporter.global_bind(TCK=encoding_key) # Write DecReports raw banks allen_cf, allen_barriers = allen_gaudi_node_barriers() @@ -746,8 +734,6 @@ def allen_control_flow(options, write_detector_raw_banks=True): algs.extend([srw]) new_hlt_banks['HltSelReports'] = srw.OutputRawReports - decision_ids = get_allen_hlt1_decision_ids() - # register the decision_ids... and get the oid of their mapping # hlt1_decision_ids=decision_ids, hlt2_decision_ids={}, spruce_decision_ids={}) -- GitLab From e15e4b30908901bb0dd57343f3ce8cc3f188b979 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Thu, 23 Jun 2022 15:33:42 +0200 Subject: [PATCH 062/102] enforce DecisionID vs SelectionID distinction --- Hlt/Moore/python/Moore/config.py | 49 +++++++++++++++------------- Hlt/Moore/python/Moore/selreports.py | 13 +++++--- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 5cdd1f9bacb..9d537d9e788 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -68,6 +68,7 @@ from .streams_hlt2 import (DETECTOR_RAW_BANK_TYPES, HLT1_REPORT_RAW_BANK_TYPES, HLT2_REPORT_RAW_BANK_TYPES, get_default_routing_bits) + def _unique(x): """Return a list of the unique elements in x while preserving order.""" return list(dict.fromkeys(x).keys()) @@ -115,7 +116,6 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa return self.node.name - @configurable def report_writers_node(streams, data_type, @@ -165,32 +165,39 @@ def report_writers_node(streams, new_hlt_banks['HltLumiSummary'] = lumi_encoder.RawEventLocation # We will write the reports to raw banks at these locations - source_id = { "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce":"Spruce","passthrough":"Spruce" }[process] - major_name = { "hlt1" : "Hlt1SelectionID", - "hlt2" : "Hlt2SelectionID", - "spruce" : "SpruceSelectionID", - "passthrough" : "SpruceSelectionID"}[process] - key = int( register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), - 16) # TODO unsigned? Stick to hex string? - + source_id = { + "hlt1": "Hlt1", + "hlt2": "Hlt2", + "spruce": "Spruce", + "passthrough": "Spruce" + }[process] + major_name = { + "hlt1": "Hlt1DecisionID", + "hlt2": "Hlt2DecisionID", + "spruce": "SpruceDecisionID", + "passthrough": "SpruceDecisionID" + }[process] + dec_key = int( + register_encoding_dictionary( + major_name, ["{}Decision".format(i.name) for i in lines]), + 16) # TODO unsigned? Stick to hex string? if process == "hlt1" or process == "hlt2": erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=key, + TCK=dec_key, ) drw = HltDecReportsWriter( SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=key, + EncodingKey=dec_key, ) algs.extend([erw, drw]) new_hlt_banks['HltDecReports'] = drw.OutputRawEvent if process == "hlt1": - srm = make_selreports(physics_lines, erw, key) + srm = make_selreports(process, physics_lines, erw) algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be @@ -201,7 +208,7 @@ def report_writers_node(streams, DecReports=erw.DecReportsLocation, SelReports=srm.SelReports, ObjectSummaries=srm.ObjectSummaries, - EncodingKey=key) + EncodingKey=srm.properties['EncodingKey']) algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": @@ -217,12 +224,12 @@ def report_writers_node(streams, erw = ExecutionReportsWriter( Persist=[line.name for line in lines], ANNSvcKey=major_name, - TCK=key # TODO unsigned? Stick to hex string? + TCK=dec_key # TODO unsigned? Stick to hex string? ) drw = HltDecReportsWriter( SourceID=source_id, InputHltDecReportsLocation=erw.DecReportsLocation, - EncodingKey=key, + EncodingKey=dec_key, ) algs.extend([erw, drw]) @@ -452,7 +459,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): elif process == "spruce" or process == "pass": offset = 5000 else: offset = 1 ann_config[key] = build_decision_ids([l.decision_name for l in lines], - offset) + offset) # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( @@ -708,18 +715,14 @@ def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) from Allen.config import setup_allen_non_event_data_service - from AllenConf.persistency import make_dec_reporter + from AllenConf.persistency import make_dec_reporter, register_decision_ids options.finalize() non_event_data_node = setup_allen_non_event_data_service() ids = get_allen_hlt1_decision_ids() - encoding_key = int( - register_encoding_dictionary('Hlt1SelectionID', { - 'version': '0', - 'Hlt1SelectionID': {v: k for k, v in ids.items()} - }), 16) # TODO unsigned? Stick to hex string? + encoding_key = register_decision_ids(ids) # TODO: remove when full configuration of Allen from TCK is implemented make_dec_reporter.global_bind(TCK=encoding_key) diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 6bc65f3f7f5..642fe7b6af6 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,6 +38,7 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) +from PyConf.application import register_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -208,12 +209,11 @@ def convert_output(alg): alg.type)) -def make_selreports(lines, decreports, encoding_key, **kwargs): +def make_selreports(process, lines, decreports, **kwargs): """Return a SelReportsMaker instance configured for the given lines. Args: - lines (list of DecisionLine): The lines to create SelReport objects - for. + lines: The list of lines for which to create SelReport objects decreports: DecReports data used as input to the SelReports maker. kwargs: Passed to the SelReportsMaker. """ @@ -226,6 +226,11 @@ def make_selreports(lines, decreports, encoding_key, **kwargs): else: # No lines we can handle, so do nothing names, outputs, types = [], [], [] + + key = int( + register_encoding_dictionary( + "{}SelectionID".format(process.capitalize()), names), 16) + # Each line output should be unique; we expect no two lines to do exactly # the same work assert len(outputs) == len( @@ -236,5 +241,5 @@ def make_selreports(lines, decreports, encoding_key, **kwargs): SelectionNames=names, CandidateTypes=types, Inputs=outputs, - EncodingKey=encoding_key, + EncodingKey=key, **kwargs) -- GitLab From 710efb021a1294d7baba5f4041a700656a438752 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Wed, 29 Jun 2022 16:05:03 +0200 Subject: [PATCH 063/102] first version of stable, forced, persist reco locations --- Hlt/RecoConf/options/run_two_hlt2_recos.py | 5 +- .../RecoConf/calorimeter_reconstruction.py | 2 +- Hlt/RecoConf/python/RecoConf/hlt1_tracking.py | 2 +- .../python/RecoConf/muon_reconstruction.py | 22 +++++-- .../RecoConf/reco_objects_for_spruce.py | 58 +++++++++---------- .../python/RecoConf/rich_reconstruction.py | 2 +- 6 files changed, 52 insertions(+), 39 deletions(-) diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index 6d8ee9b4ffe..f568a2b9ec5 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -12,7 +12,7 @@ from Moore import options, run_reconstruction from Moore.config import Reconstruction from RecoConf.hlt2_global_reco import reconstruction from PyConf.Algorithms import PrForwardTrackingVelo -from PyConf.packing import persisted_location +from GaudiConf.PersistRecoConf import persisted_location def make_two_reconstructions(): @@ -28,8 +28,7 @@ def make_two_reconstructions(): return Reconstruction('run_similar_recos_twice', data) -with persisted_location.bind(force=False): - run_reconstruction(options, make_two_reconstructions) +run_reconstruction(options, make_two_reconstructions) from Configurables import HiveDataBrokerSvc HiveDataBrokerSvc().OutputLevel = 2 diff --git a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py index e7843ff8467..1d4ab39b34c 100644 --- a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from PyConf.packing import persisted_location +from GaudiConf.PersistRecoConf import persisted_location from PyConf.Algorithms import ( AcceptanceBremAlg, AcceptanceEcalAlg, AcceptanceHcalAlg, TrackToEcalEnergyAlg, TrackToHcalEnergyAlg, CaloChargedPIDsAlg, diff --git a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py index b3e0ebcee80..ecfc674de31 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py @@ -12,7 +12,7 @@ import logging from PyConf import configurable from PyConf.application import default_raw_event, default_raw_banks from PyConf.utilities import DISABLE_TOOL -from PyConf.packing import persisted_location +from GaudiConf.PersistRecoConf import persisted_location from PyConf.Algorithms import ( fromPrUpstreamTracksV1Tracks, diff --git a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py index 9d29c1b8422..1c296cf6634 100644 --- a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py @@ -9,11 +9,11 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from PyConf.packing import persisted_location +from GaudiConf.PersistRecoConf import persisted_location from PyConf.Algorithms import (LHCb__Converters__Track__SOA__fromV1Track as TrackSOAFromV1, MuonPIDConverter, - MergeMuonPIDsV1) + MergeMuonPIDsV1, MuonPIDV2ToMuonTracks) from .hlt2_muonid import make_muon_ids from RecoConf.core_algorithms import make_unique_id_generator @@ -47,17 +47,31 @@ def make_all_muon_pids(tracks, track_types=['Long', 'Downstream']): def make_conv_muon_pids(muonPidsConfs, best_tracks, light_reco=False, - track_types=['Long', 'Downstream']): + track_types=['Long', 'Downstream'], + output_locations=dict()): muon_pids_v1 = dict() + muon_tracks = dict() for track_type in track_types: + # Add muon hits of MuonPID to "muontracks" + muon_tracks[track_type] = MuonPIDV2ToMuonTracks( + name="MuonPIDV2ToMuonTracks_" + track_type, + InputMuonPIDs=muonPidsConfs[track_type], + InputTracks=best_tracks[track_type]["v1"] + if light_reco else best_tracks['v1'], + RestrictToType=track_type, + outputs={ + 'OutputMuonTracks': output_locations.get(track_type, None) + }).OutputMuonTracks + # Convert to Keyed Container for ProtoParticle muon_pids_v1[track_type] = MuonPIDConverter( name="MuonPIDConverter" + track_type, InputMuonPIDs=muonPidsConfs[track_type], + InputMuonTracks=muon_tracks[track_type], InputTracks=best_tracks[track_type]["v1"] if light_reco else best_tracks['v1'], RestrictToType=track_type).OutputMuonPIDs - return muon_pids_v1 + return muon_pids_v1, muon_tracks def make_merged_muon_pids(muon_pids_v1): diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 3c41837db3e..b473b459b76 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -9,10 +9,24 @@ # or submit itself to any jurisdiction. # ############################################################################### from GaudiConf import reading -from PyConf.packing import persisted_location, reco_locations, pp2mcp_locations - -def upfront_reconstruction(manifest): +_reco_loc = { + "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), + "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), + "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), + "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), + "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), + "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), + "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), + "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), + "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), + "MuonPIDTracks": ("/Event/HLT2/Rec/Muon/MuonTracks","Tracks"), + "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs"), + "RecSummary": ("/Event/HLT2/Rec/Summary", "RecSummary") +} + + +def upfront_reconstruction(): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -25,47 +39,36 @@ def upfront_reconstruction(manifest): decoder = reading.decoder( configurables=False, output_level=4, stream=stream) - reco = reco_locations(stream) - pp2mcp = pp2mcp_locations(stream) - mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) inv_map = {v: k for k, v in reading.type_map().items()} + reco_manifest = { + 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] + } - # make sure that the reco locations are spliced into the provided manifest... - dl = {v[0]: v[1] for v in manifest['PackedLocations']} - dl.update((v[0], inv_map[v[1]]) for v in reco.values()) - dl.update((v[0], inv_map[v[1]]) for v in pp2mcp.values()) - m = {'PackedLocations': [(k, v) for k, v in dl.items()]} - - ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... + ## TODO: only pass reco_manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - reading.make_locations(m, stream), - m, + reading.make_locations(reco_manifest, stream), + reco_manifest, decoder.OutputBuffers, configurables=False, + mc=mc_algs, output_level=4) ### TODO:FIXME take advantage of the fact that the above have datahandles... # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms - # i.e. `upfront_reconstruction` should be a drop-in replacement for `reconstruction()`, with the same return type return [decoder] + mc_algs + unpackers -def reconstruction(manifest): +def reconstruction(): """Return a {name: DataHandle} dict that define the reconstruction output.""" data = {} - unpackers = upfront_reconstruction(manifest) - - reco = reco_locations("/Event/HLT2") - pp2mcp = pp2mcp_locations("/Event/HLT2") - - reco.update(pp2mcp) + unpackers = upfront_reconstruction() - for v in unpackers: - for key, value in reco.items(): + for key, value in _reco_loc.items(): + for v in unpackers: if "OutputName" in v.outputs.keys( ) and v.OutputName.location == value[0]: data[key] = v.OutputName @@ -78,10 +81,7 @@ def reconstruction(manifest): ### Temporary: This to be compatible with data where the RecSummary does not exist. if "RecSummary" not in data.keys(): from PyConf.Algorithms import FakeRecSummaryMaker - data["RecSummary"] = FakeRecSummaryMaker( - outputs={ - "Output": persisted_location('RecSummary') - }).Output + data["RecSummary"] = FakeRecSummaryMaker().Output return data diff --git a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py index c140e2e2342..4e9533ecbbe 100644 --- a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from PyConf.packing import persisted_location +from GaudiConf.PersistRecoConf import persisted_location from PyConf.application import default_raw_event from Configurables import Rich__Future__ParticleProperties as PartProps -- GitLab From 015dd79d61da6ba2b7af77485b8aeacee6e4ef2a Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Wed, 6 Jul 2022 16:26:41 +0200 Subject: [PATCH 064/102] clone file-content-metadata repo during configure --- CMakeLists.txt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55faf27f802..f6ce6eb1120 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.15) -project(Moore VERSION 53.7 +project(Moore VERSION 53.6 LANGUAGES CXX) # Enable testing with CTest/CDash @@ -28,10 +28,14 @@ include(MooreDependencies) include(FileContentMetadataRepository) lhcb_create_local_filecontent_metadata_repo( "${CMAKE_CURRENT_BINARY_DIR}/file-content-metadata/" ) -find_package(Git REQUIRED) -execute_process( COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_BINARY_DIR} clone -q https://gitlab.cern.ch/lhcb-conddb/file-content-metadata ) -lhcb_env(PRIVATE SET LHCbFileContentMetaDataRepo "${CMAKE_CURRENT_BINARY_DIR}/file-content-metadata") +if(USE_DD4HEP) + option(LOKI_BUILD_FUNCTOR_CACHE "Enable building of LoKi Functors Caches." FALSE) +endif() +find_package(Git REQUIRED) +set( LHCBFILECONTENTMETADATAREPO "${CMAKE_CURRENT_BINARY_DIR}/file-content-metadata/" ) +execute_process( COMMAND ${GIT_EXECUTABLE} clone ssh://git@gitlab.cern.ch:7999/lhcb-conddb/file-content-metadata ${LHCBFILECONTENTMETADATAREPO}) +lhcb_env(PRIVATE SET LHCbFileContentMetaDataRepo "${LHCBFILECONTENTMETADATAREPO}/.git") # -- Subdirectories lhcb_add_subdirectories( -- GitLab From 362c4692418d8bd09f601911b18708a8e2505791 Mon Sep 17 00:00:00 2001 From: Gerhard Raven Date: Fri, 15 Jul 2022 09:13:11 +0200 Subject: [PATCH 065/102] When sprucing, 'running' reconstruction from file, require a manifest to determine what to decode from input --- Hlt/Moore/python/Moore/tcks.py | 96 +------------------ .../RecoConf/reco_objects_for_spruce.py | 18 ++-- 2 files changed, 15 insertions(+), 99 deletions(-) diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index f402d56755d..bb5a367da9c 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -50,96 +50,6 @@ The functions in this module currently support persisting the configuration of import json -class _ConfigurableEncoder(json.JSONEncoder): - def default(self, obj): - try: - # Try to serialise assuming Configurable - name = obj.getFullName() - props = obj.getDefaultProperties() - props.update(obj.getValuedProperties()) - obj = {name: props} - except AttributeError: - pass - return obj - - -def dump_hlt2_configuration(config, fname): - """Dump the HLT2 configuration in to a JSON TCK file. - - Note: - The `config` argument is currently unused as the configuration - dictionary returned by `Moore.run_moore` does not contain all - configurables. This will change once LHCb#141 has been addressed. - - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def load_hlt2_configuration(fname, annsvc_name="HltANNSvcReading"): - """Instantiate configurables based on an HLT2 TCK. - - Returns an HltANNSvc loaded with the HltANNSvc configuration of the HLT2 - application. - - Args: - fname -- Filename of the JSON TCK file produced by - ``dump_hlt2_configuration``. - annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. - """ - with open(fname) as f: - config = json.load(f) - - dicts = config["HltANNSvc/HltANNSvc"] - cfg = json.dumps({ - 'Hlt1SelectionID': dicts["Hlt1SelectionID"], - 'Hlt2SelectionID': dicts["Hlt2SelectionID"], - 'SpruceSelectionID': dicts["SpruceSelectionID"], - 'PackedObjectLocations': dicts["PackedObjectLocations"] - }) - - from Configurables import GitANNSvc - return GitANNSvc(annsvc_name, Overrule={0: cfg}) - - -def dump_sprucing_configuration(config, fname): - """Dump the Sprucing configuration in to a JSON TCK file. - Note we need the `Hlt{1,2}SelectionID`s from the Hlt2 ANNSvc - that we read into "HltANNSvcReading" - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def dump_passthrough_configuration(config, fname): - """Dump the pass-through Sprucing configuration in to a JSON TCK file. - Here we need the `Hlt{1,2}SelectionID`s and `PackedObjectLocations` from the - Hlt2 job ANNSvc that we read into "HltANNSvcReading" - - Args: - config -- Configuration dictionary returned by `Moore.run_moore`. - fname -- Filename to dump the TCK to. Conventionally ends with - ``.tck.json``. - """ - # raise RuntimeError("function should not longer be called") - - -def load_sprucing_configuration(fname, annsvc_name): - """Instantiate configurables based on a Sprucing TCK. - - Returns an HltANNSvc loaded with the HltANNSvc configuration of the - Sprucing application. - - Args: - fname -- Filename of the JSON TCK file produced by - ``dump_sprucing_configuration``. - annsvc_name -- Name of ``HltANNSvc`` instance to create based on the TCK. - """ - - return load_hlt2_configuration(fname, annsvc_name) +def load_manifest(fname): + with open(fname, 'r', encoding='utf-8') as f: + return json.load(f) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index b473b459b76..397a04ea168 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -26,7 +26,7 @@ _reco_loc = { } -def upfront_reconstruction(): +def upfront_reconstruction(manifest): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -43,14 +43,19 @@ def upfront_reconstruction(): process='Hlt2', configurables=False, output_level=4) inv_map = {v: k for k, v in reading.type_map().items()} + + #TODO/FIXME make sure that reco_manifest is a pure subset of manifest... reco_manifest = { 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] } - ## TODO: only pass reco_manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... + #d = manifest['PackedLocations'] + #print('*** got manifest:',d) + + ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - reading.make_locations(reco_manifest, stream), - reco_manifest, + reading.make_locations(manifest, stream), + manifest, decoder.OutputBuffers, configurables=False, mc=mc_algs, @@ -58,14 +63,15 @@ def upfront_reconstruction(): ### TODO:FIXME take advantage of the fact that the above have datahandles... # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms + # i.e. `upfront_reconstruction` should be a drop-in replacement for `reconstruction()`, with the same return type return [decoder] + mc_algs + unpackers -def reconstruction(): +def reconstruction(manifest): """Return a {name: DataHandle} dict that define the reconstruction output.""" data = {} - unpackers = upfront_reconstruction() + unpackers = upfront_reconstruction(manifest) for key, value in _reco_loc.items(): for v in unpackers: -- GitLab From bf07f5ae957a82f61ed12ba6f61bf8f23db4be9f Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Fri, 22 Jul 2022 15:59:55 +0000 Subject: [PATCH 066/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/23471084 --- .../python/Moore/persistence/__init__.py | 176 ++++++++---------- Hlt/RecoConf/options/run_two_hlt2_recos.py | 1 + .../python/RecoConf/hlt2_global_reco.py | 1 + .../RecoConf/reco_objects_for_spruce.py | 1 + 4 files changed, 77 insertions(+), 102 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 8c1839fe73c..8aaea1cd3fc 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -11,24 +11,22 @@ """Configuration for persisting HLT2 objects in output ROOT/MDF files.""" from __future__ import absolute_import import itertools -import logging, os +import logging, os, json from pprint import pformat from Configurables import HltLinePersistenceSvc -from RecoConf.data_from_file import unpacked_mc_locations +#from RecoConf.data_from_file import unpacked_mc_locations from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output -from PyConf.location_prefix import prefix, unpacked_prefix, packed_prefix -from PyConf.object_types import type_map, classid_map +from PyConf.location_prefix import prefix from PyConf.application import register_encoding_dictionary -from GaudiConf.PersistRecoConf import PersistRecoPacking +from GaudiConf.reading import type_map from .cloning import clone_line_outputs -from .packing import pack_stream_objects, pack_stream_mc -from .persistreco import persistreco_line_outputs, persistreco_line_outputs_packed -from .serialisation import serialise_packed_containers +from .packing import pack_stream_objects, pack_stream_mc, pack_stream_mc_locations, packers_map +from .persistreco import persistreco_line_outputs from .truth_matching import truth_match_lines, CHARGED_PP2MC_LOC, NEUTRAL_PP2MC_LOC log = logging.getLogger(__name__) @@ -62,37 +60,26 @@ def _referenced_inputs(lines, inputs): #fill the packer inputs dictionary based on object type for dh in line_locs: - type = get_type(dh) - - if type and type in inputs.keys(): - inputs[type] += [dh.location] + typ = get_type(dh) + if typ and typ in inputs.keys(): + inputs[typ] += [dh] return inputs def _referenced_locations(lines): all_locs = {} - all_types = {} for l in lines: # Include the locations of the line outputs themselves line_locs = set() # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - - # Convert DataHandle to str, for configuring the ANN service - all_locs[l.decision_name] = [dh.location for dh in line_locs] - all_types[l.decision_name] = [] - for dh in line_locs: - if get_type(dh): - all_types[l.decision_name] += [get_type(dh)] - else: - all_types[l.decision_name] += [dh.type] - #zipped = zip(all_locs[l.decision_name], all_types[l.decision_name]) + all_locs[l.decision_name] = [dh for dh in line_locs] return all_locs def get_type(dh): - #For this to work, one needs to add new types to object_types.py in Pyconf + #For this to work, one needs to add new types to object_types.py in GaudiConf types = type_map() if dh.type in types.keys(): return types[dh.type] @@ -115,6 +102,30 @@ def get_type(dh): return None +def get_packed_locations(inputs, stream): + packed_dhs = [] + + types = type_map() + k = list(types.keys()) + v = list(types.values()) + + for key, locs in inputs.items(): + for i in locs: + if isinstance(i, str): + t = k[v.index(key)] + + packed_dhs += [(prefix(i, stream), t)] + else: + t = i.type + if i.type == "unknown_t": + t = k[v.index(key)] + + packed_dhs += [(prefix(i.location, stream), t)] + + packed_dhs = list(dict.fromkeys(packed_dhs)) + return {'PackedLocations': packed_dhs} + + @configurable def persist_line_outputs( lines, @@ -122,6 +133,7 @@ def persist_line_outputs( dec_reports, associate_mc, source_id, + output_manifest_file, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from clone_mc=True): @@ -165,27 +177,38 @@ def persist_line_outputs( if log.isEnabledFor(logging.DEBUG): log.debug('line_locations: ' + pformat(persistence_svc.Locations)) - # Make a dictionary for all known object types with empty values - inputs = PersistRecoPacking().dictionary() + # Make a dictinary for all known object types with emty values + p_map = packers_map() + inputs = {t: [] for t in p_map.keys()} #add line outputs to fill the dictionary inputs = _referenced_inputs(lines, inputs) #add the locations from reco objects to the dictionary prdict = persistreco_line_outputs() - prdict_packed = persistreco_line_outputs_packed(stream, reco_stream) - for key, val in prdict.items(): + for val in prdict.values(): name = get_type(val) #find type of object for this DH - if name: - inputs[name] += [get_output(val).location] + if name: inputs[name] += [get_output(val)] + else: + log.warning( + '*** WARNING: get_type failed for {} -- {} not supported for persistence, skipping!' + .format(val, val.type)) # add proto particle relations if they exist for p in protoparticle_relations: - if isinstance(p, str): - inputs["PP2MCPRelations"] += [p] - else: - inputs["PP2MCPRelations"] += [p.location] + inputs["PP2MCPRelations"] += [p] + + if output_manifest_file: + with open(output_manifest_file, 'w') as f: + json.dump( + get_packed_locations(inputs, stream), + f, + indent=4, + sort_keys=True) + + locify = lambda i: i.location if hasattr(i, 'location') else i + inputs = {t: [locify(i) for i in dhs] for t, dhs in inputs.items()} #for each key remove duplicates in the list #and add stream to locations to match post cloning locations @@ -210,86 +233,35 @@ def persist_line_outputs( pformat(output_cloner_locations)) cf.append(output_cloner_cf) - #Make a dictionary for output packer locations - #For line outputs, "stream+/p" added to input locations - #For reco objects, there are pre-defined output locations - #This is to be able to find reco objects regardless of their producer - outputs = {} - for key, value in inputs.items(): - outputs[key] = [] - for v in value: - if v in prdict_packed.keys(): - outputs[key] += [prdict_packed[v]] #reco - else: - outputs[key] += [packed_prefix(v, stream)] #line + ### TODO: reduce the set of encoding keys to the smallest possible one... + locations = set([ i for ilist in inputs.values() for i in ilist]) | \ + set([ i.location for i in itertools.chain( *_referenced_locations(lines).values()) ]) - prpacking = PersistRecoPacking( - stream=stream, - unpacked=inputs, - packed=outputs, - data_type=data_type, - ) + if clone_mc: + mc_stream = stream + if reco_stream not in stream: mc_stream = prefix(reco_stream, stream) + locations = locations.union(pack_stream_mc_locations(mc_stream)) - ### TODO: reduce the set of encoding keys to the smallest possible one... encoding_key = int( - register_encoding_dictionary( - "PackedObjectLocations", - sorted( - set([i for i in prpacking.packedLocations()]) - | set([ - unpacked_prefix(i, stream) - for i in prpacking.packedLocations() - ]) - | set([i for i in prpacking.unpackedLocations()]) - | set([ - i for i in itertools.chain( - *_referenced_locations(lines).values()) - ]))), 16) - - packer_cf, packer_locations = pack_stream_objects(stream, prpacking, - encoding_key) - cf.append(packer_cf) + register_encoding_dictionary("PackedObjectLocations", + sorted(locations)), 16) - packer_mc_locations = [] + packers_cf, serialisation_cf, output_raw_data = pack_stream_objects( + stream, inputs, encoding_key, source_id) + cf.append(packers_cf) + + packer_mc_locations = [] if clone_mc: - mc_stream = stream - if reco_stream not in stream: - mc_stream = prefix(reco_stream, stream) mc_packer_cf, packer_mc_locations = pack_stream_mc(prefix(mc_stream)) cf.append(mc_packer_cf) - if log.isEnabledFor(logging.DEBUG): - log.debug('packer_locations: ' + pformat(packer_locations)) - log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) - - serialisation_cf, output_raw_data = serialise_packed_containers( - packer_locations, source_id) + cf.append(serialisation_cf) if log.isEnabledFor(logging.DEBUG): + log.debug('packer_locations: ' + pformat(inputs.values())) + log.debug('packer_mc_locations: ' + pformat(packer_mc_locations)) log.debug('output_raw_data: %s', pformat(output_raw_data)) - cf.append(serialisation_cf) - - unpacked_mc = unpacked_mc_locations() - unpacked_mc_loc = [prefix(l, reco_stream) for l in unpacked_mc.values()] - - # Gather all possible locations which might be referenced... - #registered_locs = list( - # itertools.chain( - # packer_locations, - # [ unpacked_prefix(keys, stream) for keys in prpacking.packedLocations() ], - # prpacking.packedLocations(), - # prpacking.unpackedLocations(), - # unpacked_mc_locations().values(), - # [prefix(l, stream) for l in unpacked_mc_loc], - # itertools.chain(*_referenced_locations(lines).values()), - # )) - - # ...including all prefixed (post-cloning) locations - #registered_locs += [prefix(l, tes_prefix=stream) for l in registered_locs] - - #if log.isEnabledFor(logging.DEBUG): - # log.debug('registered_locs: ' + pformat(registered_locs)) control_flow_node = CompositeNode( "hlt2_line_output_persistence", diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index f568a2b9ec5..da1123b12db 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -15,6 +15,7 @@ from PyConf.Algorithms import PrForwardTrackingVelo from GaudiConf.PersistRecoConf import persisted_location + def make_two_reconstructions(): charged_protos_1 = reconstruction()["ChargedProtos"] neutral_protos_1 = reconstruction()["NeutralProtos"] diff --git a/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py b/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py index 54ec24f8b67..df6c134a5ab 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py +++ b/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py @@ -32,6 +32,7 @@ from PyConf.Algorithms import (TrackContainerCopy, RecSummaryMaker, ProtoParticlesEmptyProducer) + # TODO make things configurable, if needed @configurable def make_legacy_reconstruction(usePatPVFuture=False): diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 397a04ea168..420a450f1a5 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -26,6 +26,7 @@ _reco_loc = { } + def upfront_reconstruction(manifest): """Return a list DataHandles that define the upfront reconstruction output. -- GitLab From 591de9f521e8a64e2eb872a491a91bc84a002f53 Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 22 Jul 2022 18:36:40 +0200 Subject: [PATCH 067/102] fix config --- Hlt/Moore/python/Moore/config.py | 44 +++++++++++++------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 9d537d9e788..8059dbcbc76 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -31,6 +31,7 @@ from PyConf.application import ( default_raw_event, root_writer, make_data_with_FetchDataFromFile, + generate_encoding_dictionary, register_encoding_dictionary, ) from GaudiConf.reading import unpack_rawevent, mc_unpackers @@ -117,11 +118,12 @@ class Reconstruction(namedtuple('Reconstruction', ['node'])): # noqa @configurable -def report_writers_node(streams, - data_type, - process, - associate_mc=False, - clone_mc=False): +def report_writers_nodes(streams, + data_type, + process, + output_manifest_file, + associate_mc=False, + clone_mc=False): """Return the control flow node and locations to persist of the default reports writers. Args: @@ -169,17 +171,19 @@ def report_writers_node(streams, "hlt1": "Hlt1", "hlt2": "Hlt2", "spruce": "Spruce", - "passthrough": "Spruce" + "pass": "Spruce" }[process] major_name = { - "hlt1": "Hlt1DecisionID", - "hlt2": "Hlt2DecisionID", - "spruce": "SpruceDecisionID", - "passthrough": "SpruceDecisionID" + "hlt1": "Hlt1SelectionID", + "hlt2": "Hlt2SelectionID", + "spruce": "SpruceSelectionID", + "pass": "SpruceSelectionID" }[process] dec_key = int( register_encoding_dictionary( - major_name, ["{}Decision".format(i.name) for i in lines]), + major_name, + generate_encoding_dictionary(major_name, + [l.decision_name for l in lines])), 16) # TODO unsigned? Stick to hex string? if process == "hlt1" or process == "hlt2": @@ -215,7 +219,8 @@ def report_writers_node(streams, (line_output_cf, line_output_locations, packed_data) = persist_line_outputs( physics_lines, data_type, erw.DecReportsLocation, associate_mc, - process.capitalize()) + process.capitalize(), output_manifest_file) + algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent extra_locations_to_persist.extend(line_output_locations) @@ -243,6 +248,7 @@ def report_writers_node(streams, erw.DecReportsLocation, associate_mc, process.capitalize(), + output_manifest_file, stream="/Event/Spruce", reco_stream="/Event/HLT2", clone_mc=options.simulation and options.input_type == ROOT_KEY) @@ -447,20 +453,6 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): streams[stream] = sorted(stream_lines, key=lambda line: line.name) lines = streams_dict_to_lines_list(streams) - ann_config = dict( - hlt1_decision_ids={}, hlt2_decision_ids={}, spruce_decision_ids={}) - if allen_hlt1: - ann_config["hlt1_decision_ids"] = get_allen_hlt1_decision_ids() - key = process + "_decision_ids" - #For passthrough lines want decisions a la Sprucing - if process == "pass": - key = "spruce_decision_ids" - if process == "hlt2": offset = 1000 - elif process == "spruce" or process == "pass": offset = 5000 - else: offset = 1 - ann_config[key] = build_decision_ids([l.decision_name for l in lines], - offset) - # TODO -- register the decision_ids and get their oids back... setup_ann_service(**ann_config) rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( streams, -- GitLab From f0070984cad93934b237a0be1046b4bd2c21526f Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 26 Aug 2022 17:29:27 +0200 Subject: [PATCH 068/102] updates from require_key --- .../hlt2_all_lines_with_reco_with_streams.py | 3 +- ...t2_all_lines_with_reco_with_streams_mdf.py | 3 +- .../options/hlt2_2or3bodytopo_fromfile.py | 3 +- .../options/hlt2_2or3bodytopo_realtime.py | 3 +- .../options/hlt2_2or3bodytopo_realtime_dst.py | 3 +- .../options/hlt2_noUT_trackeff_test.py | 36 +++++++++++++------ .../options/hlt2_persistreco_fromfile.py | 2 ++ Hlt/Hlt2Conf/options/hlt2_trackeff_test.py | 11 +++--- .../sprucing/hlt2_2or3bodytopo_realtime.py | 7 ++-- 9 files changed, 49 insertions(+), 22 deletions(-) diff --git a/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams.py b/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams.py index 20da3790999..944eae3292e 100644 --- a/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams.py +++ b/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams.py @@ -79,4 +79,5 @@ print("Number of HLT2 lines {}".format(len(hlt2_lines))) public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False): - config = run_moore(options, make_streams, public_tools) + config = run_moore( + options, make_streams, public_tools, exclude_incompatible=False) diff --git a/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams_mdf.py b/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams_mdf.py index ae1751f594b..63479b0a341 100755 --- a/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams_mdf.py +++ b/Hlt/Hlt2Conf/options/fest/hlt2_all_lines_with_reco_with_streams_mdf.py @@ -75,4 +75,5 @@ options.lines_maker = make_streams public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False), pack_stream_objects.bind( enable_check=False): - config = run_moore(options, public_tools=public_tools) + config = run_moore( + options, public_tools=public_tools, exclude_incompatible=False) diff --git a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_fromfile.py b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_fromfile.py index 04ab39d2e1d..cee77086011 100644 --- a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_fromfile.py +++ b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_fromfile.py @@ -48,4 +48,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=True): - config = run_moore(options, make_lines, public_tools) + config = run_moore( + options, make_lines, public_tools, exclude_incompatible=False) diff --git a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime.py b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime.py index c822113a4b3..c7fe18ebca8 100644 --- a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime.py +++ b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime.py @@ -52,4 +52,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False): - config = run_moore(options, make_lines, public_tools) + config = run_moore( + options, make_lines, public_tools, exclude_incompatible=False) diff --git a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime_dst.py b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime_dst.py index 20d1dd52648..5beabeb7d35 100644 --- a/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime_dst.py +++ b/Hlt/Hlt2Conf/options/hlt2_2or3bodytopo_realtime_dst.py @@ -54,4 +54,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False): - config = run_moore(options, make_lines, public_tools) + config = run_moore( + options, make_lines, public_tools, exclude_incompatible=False) diff --git a/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py b/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py index 6232eb824ba..6c5b712068a 100644 --- a/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py +++ b/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py @@ -17,11 +17,10 @@ Run like any other options file: from Moore import options, run_moore from RecoConf.reconstruction_objects import reconstruction as reconstruction -from RecoConf.hlt2_global_reco import reconstruction as reconstruction_from_reco, make_fastest_reconstruction from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.decoders import default_ft_decoding_version -from RecoConf.hlt2_tracking import get_global_ut_hits_tool -from Hlt2Conf.lines.DiMuonTrackEfficiency import all_lines +from Hlt2Conf.lines.trackeff.DiMuonTrackEfficiency import all_lines +import re from Configurables import HiveDataBrokerSvc HiveDataBrokerSvc().OutputLevel = 5 @@ -42,18 +41,35 @@ options.input_type = 'ROOT' options.input_raw_format = 0.3 options.evt_max = 100 -options.output_file = 'hlt2_alltriggerlines.dst' +options.output_file = 'hlt2_trackeff_noUT.dst' options.output_type = 'ROOT' -options.output_manifest_file = "my_hlt2.tck.json" +options.output_manifest_file = "hlt2_trackeff_noUT.tck.json" + + +def remove_lines(lines_dict, pattern_to_remove): + filtered = { + name: line + for name, line in lines_dict.items() + if re.search(pattern_to_remove, name) is None + } + print("Removed lines: ", set(lines_dict) - set(filtered)) + return filtered + + +# Remove lines which need UT +muonut_to_remove = "Hlt2_TrackEffDiMuon_MuonUT" +downstream_to_remove = "Hlt2_TrackEffDiMuon_Downstream" + +hlt2_lines = remove_lines(all_lines, muonut_to_remove) +trackeff_lines = remove_lines(hlt2_lines, downstream_to_remove) + +print("Number of HLT2 lines {}".format(len(trackeff_lines))) def make_lines(): - return [builder() for builder in all_lines.values()] + return [builder() for builder in trackeff_lines.values()] public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind(from_file=False),\ - reconstruction_from_reco.bind(make_reconstruction=make_fastest_reconstruction),\ - make_fastest_reconstruction.bind(skipUT=True),\ - get_global_ut_hits_tool.bind(enable=False): +with reconstruction.bind(from_file=False): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py index 39258563de8..2b443848468 100644 --- a/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py +++ b/Hlt/Hlt2Conf/options/hlt2_persistreco_fromfile.py @@ -130,9 +130,11 @@ if options.output_type == "ROOT": elif options.output_type == "MDF": options.output_manifest_file = "hlt2_persistreco_fromfile_mdf_output.tck.json" + def make_lines(): return [test_persistreco_line(), test_nopersistreco_line()] + public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/hlt2_trackeff_test.py b/Hlt/Hlt2Conf/options/hlt2_trackeff_test.py index f2267c9adda..c76e59b04e5 100644 --- a/Hlt/Hlt2Conf/options/hlt2_trackeff_test.py +++ b/Hlt/Hlt2Conf/options/hlt2_trackeff_test.py @@ -17,7 +17,8 @@ Run like any other options file: from Moore import options, run_moore from RecoConf.reconstruction_objects import reconstruction -from Hlt2Conf.lines.DiMuonTrackEfficiency import all_lines +from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_fastest_reconstruction +from Hlt2Conf.lines.trackeff.DiMuonTrackEfficiency import all_lines from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.decoders import default_ft_decoding_version @@ -28,9 +29,9 @@ options.set_input_and_conds_from_testfiledb('upgrade_DC19_01_Bs2JPsiPhi_MD') options.input_raw_format = 0.3 options.evt_max = 100 default_ft_decoding_version.global_bind(value=6) -options.output_file = 'hlt2_alltriggerlines.dst' +options.output_file = 'hlt2_trackeff_alllines.dst' options.output_type = 'ROOT' -options.output_manifest_file = "my_hlt2.tck.json" +options.output_manifest_file = "hlt2_trackeff_withUT.tck.json" def make_lines(): @@ -39,5 +40,7 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind(from_file=False): +with reconstruction.bind(from_file=False),\ + hlt2_reconstruction.bind(make_reconstruction=make_fastest_reconstruction),\ + make_fastest_reconstruction.bind(skipUT=False): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/hlt2_2or3bodytopo_realtime.py b/Hlt/Hlt2Conf/options/sprucing/hlt2_2or3bodytopo_realtime.py index eda8b0e6b7a..b680a9a6440 100644 --- a/Hlt/Hlt2Conf/options/sprucing/hlt2_2or3bodytopo_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/hlt2_2or3bodytopo_realtime.py @@ -46,9 +46,9 @@ options.data_type = 'Upgrade' options.dddb_tag = 'dddb-20171126' options.conddb_tag = 'sim-20171127-vc-md100' -options.output_file = 'hlt2_2or3bodytopo_realtime_newPacking.mdf' +options.output_file = 'hlt2_2or3bodytopo_realtime_newPacking_newDst.mdf' options.output_type = 'MDF' -options.output_manifest_file = "hlt2_2or3bodytopo_realtime_newPacking.tck.json" +options.output_manifest_file = "hlt2_2or3bodytopo_realtime_newPacking_newDst.tck.json" ft_decoding_version = 2 #4,6 default_ft_decoding_version.global_bind(value=ft_decoding_version) @@ -60,4 +60,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind(from_file=False): - config = run_moore(options, make_lines, public_tools) + config = run_moore( + options, make_lines, public_tools, exclude_incompatible=False) -- GitLab From 9de4187c26d76de25d43917bb4ab4a61049894b9 Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 26 Aug 2022 17:50:02 +0200 Subject: [PATCH 069/102] updates from require_key --- Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py | 35 +- .../test_spruce_all_lines_realtime.qmt | 17 +- .../refs/hlt2_combinations_particle_v2.ref | 135 ++++--- ...combinations_particle_v2.ref.x86_64_v3-opt | 137 ++++--- ...streco_check_flavourtags.ref.x86_64_v3-opt | 153 +++++--- ...sspion_tagger_on_example_b2jpsik_lines.ref | 349 +++--------------- ...on_example_b2jpsik_lines.ref.x86_64_v3-opt | 347 +++-------------- .../tests/refs/hlt2_with_hlt1_decisions.ref | 45 ++- ...hlt2_with_hlt1_decisions.ref.x86_64_v3-opt | 73 ++-- Hlt/Moore/python/Moore/config.py | 21 +- .../python/Moore/persistence/__init__.py | 2 +- Hlt/Moore/python/Moore/persistence/packing.py | 76 ++-- .../python/Moore/persistence/serialisation.py | 4 +- Hlt/Moore/python/Moore/selreports.py | 13 +- .../python/Moore/tests/test_ft_persistency.py | 169 --------- .../RecoConf/calorimeter_reconstruction.py | 9 +- .../python/RecoConf/data_from_file.py | 3 - Hlt/RecoConf/python/RecoConf/hlt1_tracking.py | 18 +- Hlt/RecoConf/python/RecoConf/hlt2_tracking.py | 17 +- .../python/RecoConf/muon_reconstruction.py | 6 +- .../RecoConf/reco_objects_for_spruce.py | 24 +- 21 files changed, 541 insertions(+), 1112 deletions(-) delete mode 100644 Hlt/Moore/python/Moore/tests/test_ft_persistency.py diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py b/Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py index e5fe413ed3d..9d6fe5272c9 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_dzero2kpi.py @@ -11,19 +11,14 @@ from Moore import options, run_moore from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction -from Hlt2Conf.lines.charm.d0_to_hh import ( - dzero2kpi_line, - make_dzeros, - make_selected_particles, -) -from GaudiKernel.SystemOfUnits import MeV, mm, mrad +from Hlt2Conf.lines.charm.d0_to_hh import dzero2kpi_line from RecoConf.hlt1_tracking import default_ft_decoding_version -options.output_file = "hlt2_D0_Kpi_10evts_newPacking.dst" +options.output_file = "hlt2_D0_Kpi_100evts_newPacking_newDst.dst" options.output_type = "ROOT" -options.output_manifest_file = "hlt2_D0_Kpi_10evts_newPacking.tck.json" -options.evt_max = 10 +options.output_manifest_file = "hlt2_D0_Kpi_100evts_newPacking_newDst.tck.json" +options.evt_max = 100 default_ft_decoding_version.global_bind(value=6) options.set_input_and_conds_from_testfiledb( 'upgrade-magdown-sim10-up08-27163003-digi') @@ -33,27 +28,7 @@ def make_lines(): return [dzero2kpi_line()] -D0_params = dict( - am_min=1715 * MeV, - am_max=2015 * MeV, - amaxchild_pt_min=0 * MeV, - apt_min=0 * MeV, - amindoca_max=5.0 * mm, - vchi2pdof_max=100, - bpvvdchi2_min=0, - acos_bpvdira_min=10 * mrad, -) - -stable_params = dict( - trchi2_max=3, # not used yet - trghostprob_max=0.4, # not used yet - mipchi2_min=0, # this is not available offline? - pt_min=0.0, - p_min=0.0, -) - public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind(from_file=False), make_dzeros.bind( - **D0_params), make_selected_particles.bind(**stable_params): +with reconstruction.bind(from_file=False): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_spruce_all_lines_realtime.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_spruce_all_lines_realtime.qmt index 7c8d5254fa3..e79c65559e1 100644 --- a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_spruce_all_lines_realtime.qmt +++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_spruce_all_lines_realtime.qmt @@ -23,9 +23,22 @@ Runs over hlt2_2or3bodytopo_realtime.mdf with the tck stored in eos/ created wit true +from GaudiTesting.BaseTest import LineSkipper from Moore.qmtest.exclusions import remove_known_warnings -countErrorLines({"FATAL": 0, "WARNING":22, "ERROR": 0}, - stdout=remove_known_warnings(stdout)) + +# Brunel does not persist VELO tracks and so the PVs we unpack in HLT2 have +# null SmartRef pointers to their VELO tracks; this causes the PVs-with-tracks +# cloner to complain because it can't clone the VELO tracks associated to PVs. +# We can't do anything about this so ignore the warning from the cloner. +remove_known_warnings = remove_known_warnings + LineSkipper([ +"CopyLinePersistenceLocations.Tur... WARNING VertexBaseFromRecVertexClonerWithTracks:: Null Track SmartRef found in PV in '/Event/HLT2/Rec/Vertex/Primary'", +"CopyLinePersistenceLocations.Tur... WARNING VertexBaseFromRecVertexClonerWithTracks:: The WARNING message is suppressed : 'Null Track SmartRef found in PV in '/Event/HLT2/Rec/Vertex/Primary''", +"WARNING Lifetime fit did not converge. Aborting.", +"WARNING Negative variance produced in lifetime fit iteration.", +]) + +countErrorLines({"FATAL": 0, "WARNING":0, "ERROR": 0}, +stdout=remove_known_warnings(stdout)) import re matches = re.findall('LAZY_AND: (Spruce.*) .*Sum=(\d+)', stdout) diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref b/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref index 2080f93fdeb..ea6b2a49f9e 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref @@ -47,20 +47,20 @@ ApplicationMgr INFO Application Manager Finalized succes ApplicationMgr INFO Application Manager Terminated successfully CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6465 | 64.650 | 33.264 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 4706 | 47.060 | 24.419 | 6.0000 | 117.00 | + | "#total tracks" | 100 | 6464 | 64.640 | 33.248 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 4705 | 47.050 | 24.401 | 6.0000 | 117.00 | CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6465 | 64.650 | 33.264 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 5409 | 54.090 | 28.259 | 6.0000 | 122.00 | + | "#total tracks" | 100 | 6464 | 64.640 | 33.248 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 5408 | 54.080 | 28.242 | 6.0000 | 122.00 | CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#total tracks" | 100 | 4485 | 44.850 | 23.552 | 8.0000 | 142.00 | | "#tracks in acceptance" | 100 | 3596 | 35.960 | 19.869 | 8.0000 | 125.00 | CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6465 | 64.650 | 33.264 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 5074 | 50.740 | 26.116 | 6.0000 | 118.00 | + | "#total tracks" | 100 | 6464 | 64.640 | 33.248 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 5073 | 50.730 | 26.100 | 6.0000 | 118.00 | CaloFutureClusterCovarianceAlg INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# clusters" | 20150 | @@ -74,70 +74,69 @@ CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 | "Corrected Clusters: size ratio" | 4674 | 1461.408 | 0.31267 | 0.33962 | -7.3447e-16 | 2.8531 | CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 1784 | 17.840 | 14.941 | 0.0000 | 64.000 | - | "average chi2" | 1784 | 1355.364 | 0.75973 | 1.1515 | 4.8035e-07 | 11.986 | - | "average energy (track based)" | 4706 | 104698.3 | 22.248 | 89.014 | 0.0000 | 1687.8 | + | "#links in table" | 100 | 1787 | 17.870 | 14.982 | 0.0000 | 64.000 | + | "average chi2" | 1787 | 1357.991 | 0.75993 | 1.1522 | 4.8261e-07 | 11.990 | + | "average energy (track based)" | 4705 | 104692.5 | 22.251 | 89.024 | 0.0000 | 1687.8 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 19 | 19 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 100 | 4660 | 46.600 | 26.711 | 5.0000 | 117.00 | - | "average chi2" | 4660 | 57043.87 | 12.241 | 24.747 | 0.00028121 | 385.57 | + | "#links in table" | 100 | 4661 | 46.610 | 26.696 | 5.0000 | 117.00 | + | "average chi2" | 4661 | 57094.64 | 12.249 | 24.791 | 0.00028116 | 386.19 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 5112 | 51.120 | 29.464 | 5.0000 | 131.00 | - | "average chi2" | 5112 | 747.9162 | 0.14631 | 0.22932 | 1.8498e-06 | 3.1021 | + | "#links in table" | 100 | 5111 | 51.110 | 29.447 | 5.0000 | 131.00 | + | "average chi2" | 5111 | 748.0089 | 0.14635 | 0.22934 | 1.8499e-06 | 3.1021 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 100 | 3175 | 31.750 | 18.750 | 4.0000 | 112.00 | | "average chi2" | 3175 | 515.2747 | 0.16229 | 0.27034 | 9.1213e-06 | 4.4074 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 5409 | -322.0047 | -0.059531 | 0.090314 | -1.4426 | 0.22496 | - | "average E/p" | 5409 | 36.84863 | 0.0068125 | 0.0099943 | 0.0000 | 0.38679 | + | "average DLL" | 5408 | -322.0323 | -0.059547 | 0.090319 | -1.4425 | 0.22497 | + | "average E/p" | 5408 | 36.8465 | 0.0068133 | 0.0099953 | 0.0000 | 0.38679 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 5074 |3.700945e+07 | 7293.9 | 16551.0 | 0.0000 | 2.7634e+05 | + | "energy (calo) associated to track" | 5073 |3.700922e+07 | 7295.3 | 16552.0 | 0.0000 | 2.7634e+05 | ChargedBasicsFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6131 | 91 |( 1.484260 +- 0.1544337)% | + |*"Cut selection efficiency" | 6130 | 92 |( 1.500816 +- 0.1552922)% | ChargedBasicsFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6131 | 167 |( 2.723862 +- 0.2078883)% | + |*"Cut selection efficiency" | 6130 | 170 |( 2.773246 +- 0.2097282)% | ClassifyPhotonElectronAlg INFO Number of counters : 14 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 6185 | -2493667 | -403.18 | 552.89 | -5610.4 | 5164.3 | + | "Electron Delta(E)" | 6185 | -2422241 | -391.63 | 535.50 | -5191.5 | 5164.3 | | "Electron Delta(X)" | 6185 | -1874.295 | -0.30304 | 12.108 | -22.782 | 22.326 | | "Electron Delta(Y)" | 6185 | -1394.095 | -0.22540 | 12.169 | -22.782 | 22.326 | - | "Electron Delta(Z)" | 6185 | 398752.3 | 64.471 | 15.335 | 4.4014 | 116.90 | - | "Electron corrected energy" | 6185 | 4.2129e+07 | 6811.5 | 10463.0 | 68.412 | 2.5275e+05 | - | "Electrons pT-rejected after correction" | 112 | - | "Photon Delta(E)" | 12037 | -3068594 | -254.93 | 442.72 | -4620.9 | 3257.8 | + | "Electron Delta(Z)" | 6185 | 399111.6 | 64.529 | 15.291 | -6.3916 | 116.90 | + | "Electron corrected energy" | 6185 |4.220042e+07 | 6823.0 | 10467.0 | 27.094 | 2.5275e+05 | + | "Electrons pT-rejected after correction" | 111 | + | "Photon Delta(E)" | 12037 | -2964609 | -246.29 | 426.94 | -4620.9 | 3257.8 | | "Photon Delta(X)" | 12037 | -843.1878 | -0.070050 | 12.305 | -32.293 | 22.326 | | "Photon Delta(Y)" | 12037 | -1766.104 | -0.14672 | 12.390 | -32.090 | 22.326 | - | "Photon Delta(Z)" | 12037 | 656604.6 | 54.549 | 14.157 | -1.2969 | 114.48 | - | "Photon corrected energy" | 12037 |4.596004e+07 | 3818.2 | 7719.6 | 62.642 | 2.3441e+05 | - | "Photons pT-rejected after correction" | 410 | - | "electronHypos" | 100 | 6073 | 60.730 | 29.056 | 11.000 | 141.00 | - | "photonHypos" | 100 | 11627 | 116.27 | 45.825 | 21.000 | 221.00 | + | "Photon Delta(Z)" | 12037 | 657376.1 | 54.613 | 14.121 | -6.3916 | 114.48 | + | "Photon corrected energy" | 12037 |4.606403e+07 | 3826.9 | 7723.6 | 27.094 | 2.3441e+05 | + | "Photons pT-rejected after correction" | 380 | + | "electronHypos" | 100 | 6074 | 60.740 | 29.075 | 11.000 | 141.00 | + | "photonHypos" | 100 | 11657 | 116.57 | 45.977 | 21.000 | 221.00 | ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | " Inner" | 5445 | 5409.357 | 0.99345 | 0.018885 | 0.96455 | 1.1037 | - | " Middle" | 4678 | 4698.509 | 1.0044 | 0.018876 | 0.97717 | 1.2113 | - | " Outer" | 8039 | 8012.387 | 0.99669 | 0.014681 | 0.97368 | 1.0565 | - | "Pileup offset" | 18162 | 6793983 | 374.08 | 448.90 | -2051.8 | 4321.7 | - | "Pileup scale" | 18222 | 104116 | 5.7138 | 2.1863 | 1.0000 | 11.000 | - | "Pileup subtracted ratio" | 18162 | 15782.64 | 0.86899 | 0.13904 | 0.0079682 | 1.9034 | - | "Skip negative energy correction" | 60 | -CloneKillerForward INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 100 | 6088 | 60.880 | - | "nTracksSelected" | 100 | 755 | 7.5500 | + | " Inner" | 5446 | 5410.352 | 0.99345 | 0.018884 | 0.96455 | 1.1037 | + | " Middle" | 4683 | 4703.459 | 1.0044 | 0.018874 | 0.97717 | 1.2113 | + | " Outer" | 8043 | 8016.397 | 0.99669 | 0.014678 | 0.97368 | 1.0565 | + | "Pileup offset" | 18172 | 6618645 | 364.22 | 430.94 | -2051.8 | 3889.5 | + | "Pileup scale" | 18222 | 101310 | 5.5598 | 2.0043 | 1.0000 | 10.000 | + | "Pileup subtracted ratio" | 18172 | 15848.08 | 0.87212 | 0.13495 | 0.0079682 | 1.9034 | + | "Skip negative energy correction" | 50 | +CloneKillerForward INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "nTracksSelected" | 100 | 756 | 7.5600 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | FunctionalChargedProtoParticleMaker INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CreatedProtos" | 6465 | + | "CreatedProtos" | 6464 | FutureEcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | @@ -152,7 +151,7 @@ GraphClustering INFO Number of counters : 4 | "Negative energy clusters" | 4 | 4 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Tracks" | 100 | 6465 | 64.650 | + | "Nb of Produced Tracks" | 100 | 6464 | 64.640 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Tracks" | 100 | 4485 | 44.850 | @@ -161,13 +160,13 @@ MuonIDHlt2AlgLong INFO Number of counters : 7 | "BgLL" | 604 | -373.7537 | -0.61880 | 1.0411 | -7.8829 | 0.0000 | | "MuLL" | 604 | -5411.978 | -8.9602 | 3.4179 | -11.513 | -0.022240 | | "muonMVAStat" | 604 | -289.7609 | -0.47974 | 1.1644 | -3.0113 | 4.3193 | - |*"nInAcceptance" | 6465 | 5203 |( 80.47951 +- 0.4929511)% | - |*"nIsMuon" | 6465 | 604 |( 9.342614 +- 0.3619525)% | - |*"nIsMuonTight" | 6465 | 245 |( 3.789637 +- 0.2374791)% | - |*"nMomentumCut" | 6465 | 5610 |( 86.77494 +- 0.4213196)% | + |*"nInAcceptance" | 6464 | 5202 |( 80.47649 +- 0.4930181)% | + |*"nIsMuon" | 6464 | 604 |( 9.344059 +- 0.3620056)% | + |*"nIsMuonTight" | 6464 | 245 |( 3.790223 +- 0.2375151)% | + |*"nMomentumCut" | 6464 | 5609 |( 86.77290 +- 0.4213798)% | MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 100 | 6465 | 64.650 | + | "Nb of input v2 MuonPIDs" | 100 | 6464 | 64.640 | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Accepted input tracks" | 100 | 12389 | 123.89 | @@ -206,19 +205,19 @@ PrHybridSeeding INFO Number of counters : 21 PrKalmanFilterForward INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 86 | - | "chi2 cut" | 176 | - | "nIterations" | 755 | 1905 | 2.5232 | - | "nOutlierIterations" | 669 | 659 | 0.98505 | - | "nTracksInput" | 100 | 755 | 7.5500 | + | "chi2 cut" | 177 | + | "nIterations" | 756 | 1908 | 2.5238 | + | "nOutlierIterations" | 670 | 661 | 0.98657 | + | "nTracksInput" | 100 | 756 | 7.5600 | | "nTracksOutput" | 100 | 493 | 4.9300 | PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 53 | - | "chi2 cut" | 197 | - | "nIterations" | 6238 | 13102 | 2.1004 | - | "nOutlierIterations" | 6185 | 2778 | 0.44915 | + | "chi2 cut" | 198 | + | "nIterations" | 6238 | 13097 | 2.0996 | + | "nOutlierIterations" | 6185 | 2779 | 0.44931 | | "nTracksInput" | 100 | 6238 | 62.380 | - | "nTracksOutput" | 100 | 5988 | 59.880 | + | "nTracksOutput" | 100 | 5987 | 59.870 | PrMatchNN INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#MatchingChi2" | 100 | 83846.62 | 838.47 | @@ -253,15 +252,15 @@ PrStoreSciFiHits INFO Number of counters : 25 | "Total number of hits" | 100 | 381773 | 3817.7 | 1334.3 | 1217.0 | 7447.0 | Proto2ChargedBasic INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6465 | 6131 |( 94.83372 +- 0.2752873)% | - |*"# passed Track filter" | 6465 | 6465 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 3011 | 30.110 | 15.843 | 4.0000 | 71.000 | + |*"# passed ProtoParticle filter" | 6464 | 6130 |( 94.83292 +- 0.2753287)% | + |*"# passed Track filter" | 6464 | 6464 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 3010 | 30.100 | 15.828 | 4.0000 | 71.000 | | "Nb created particles" | 100 | 3120 | 31.200 | 16.223 | 3.0000 | 74.000 | Proto2ChargedBasic#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6465 | 6131 |( 94.83372 +- 0.2752873)% | - |*"# passed Track filter" | 6465 | 6465 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 3011 | 30.110 | 15.843 | 4.0000 | 71.000 | + |*"# passed ProtoParticle filter" | 6464 | 6130 |( 94.83292 +- 0.2753287)% | + |*"# passed Track filter" | 6464 | 6464 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 3010 | 30.100 | 15.828 | 4.0000 | 71.000 | | "Nb created particles" | 100 | 3120 | 31.200 | 16.223 | 3.0000 | 74.000 | TBTCForward INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -270,23 +269,23 @@ TBTCForward INFO Number of counters : 3 | "FittedBefore" | 491 | TBTC_Match INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 5974 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 5974 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 5974 | + |*"BadInput" | 5973 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 5973 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 5973 | ThOrCombiner__2ChargedBasics INFO Number of counters : 5 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# output reallocations" | 100 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed CombinationCut" | 131 | 1 |(0.7633588 +- 0.7604396)% | + |*"# passed CombinationCut" | 142 | 1 |(0.7042254 +- 0.7017413)% | |*"# passed vertex fit" | 1 | 0 |( 0.000000 +- 0.000000)% | - |*"CombinationCut SIMD utilisation" | 268 | 131 |( 48.88060 +- 3.053471)% | - |*"CombinationCut ideal SIMD utilisation" | 196 | 131 |( 66.83673 +- 3.362856)% | + |*"CombinationCut SIMD utilisation" | 288 | 142 |( 49.30556 +- 2.945994)% | + |*"CombinationCut ideal SIMD utilisation" | 216 | 142 |( 65.74074 +- 3.229084)% | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | ToolSvc.TrackFunctorFactory INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 100 | 512 | 5.1200 | + | "Nb PVs" | 100 | 499 | 4.9900 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 157947 | 1579.5 | @@ -299,4 +298,4 @@ fromPrSeedingTracksV1Tracks INFO Number of counters : 1 | "Nb of converted Tracks" | 100 | 10260 | 102.60 | fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 100 | 6465 | 64.650 | + | "Nb of Produced MuonPIDs" | 100 | 6464 | 64.640 | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref.x86_64_v3-opt index 2ce2790d353..e2c0eb7cbdd 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref.x86_64_v3-opt @@ -47,20 +47,20 @@ ApplicationMgr INFO Application Manager Finalized succes ApplicationMgr INFO Application Manager Terminated successfully CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6469 | 64.690 | 33.335 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 4707 | 47.070 | 24.455 | 6.0000 | 117.00 | + | "#total tracks" | 100 | 6468 | 64.680 | 33.318 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 4706 | 47.060 | 24.436 | 6.0000 | 117.00 | CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6469 | 64.690 | 33.335 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 5417 | 54.170 | 28.340 | 6.0000 | 122.00 | + | "#total tracks" | 100 | 6468 | 64.680 | 33.318 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 5416 | 54.160 | 28.323 | 6.0000 | 122.00 | CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#total tracks" | 100 | 4487 | 44.870 | 23.561 | 8.0000 | 142.00 | | "#tracks in acceptance" | 100 | 3595 | 35.950 | 19.858 | 8.0000 | 125.00 | CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6469 | 64.690 | 33.335 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 5080 | 50.800 | 26.181 | 6.0000 | 118.00 | + | "#total tracks" | 100 | 6468 | 64.680 | 33.318 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 5079 | 50.790 | 26.165 | 6.0000 | 118.00 | CaloFutureClusterCovarianceAlg INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# clusters" | 20150 | @@ -74,70 +74,69 @@ CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 | "Corrected Clusters: size ratio" | 4674 | 1461.408 | 0.31267 | 0.33962 | -7.3447e-16 | 2.8531 | CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 1776 | 17.760 | 14.925 | 0.0000 | 65.000 | - | "average chi2" | 1776 | 1355.314 | 0.76313 | 1.1534 | 4.8035e-07 | 11.986 | - | "average energy (track based)" | 4707 | 105614.1 | 22.438 | 90.011 | 0.0000 | 1687.8 | + | "#links in table" | 100 | 1786 | 17.860 | 15.054 | 0.0000 | 65.000 | + | "average chi2" | 1786 | 1357.288 | 0.75996 | 1.1521 | 4.8261e-07 | 11.990 | + | "average energy (track based)" | 4706 | 105608.4 | 22.441 | 90.021 | 0.0000 | 1687.8 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 19 | 19 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 100 | 4664 | 46.640 | 26.735 | 5.0000 | 117.00 | - | "average chi2" | 4664 | 56929.88 | 12.206 | 24.672 | 0.00028120 | 385.57 | + | "#links in table" | 100 | 4667 | 46.670 | 26.751 | 5.0000 | 117.00 | + | "average chi2" | 4667 | 57088.59 | 12.232 | 24.768 | 0.00028114 | 386.19 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 5120 | 51.200 | 29.554 | 5.0000 | 131.00 | - | "average chi2" | 5120 | 748.2665 | 0.14615 | 0.22881 | 1.8498e-06 | 3.1021 | + | "#links in table" | 100 | 5119 | 51.190 | 29.536 | 5.0000 | 131.00 | + | "average chi2" | 5119 | 748.3601 | 0.14619 | 0.22884 | 1.8499e-06 | 3.1021 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 100 | 3174 | 31.740 | 18.749 | 4.0000 | 112.00 | | "average chi2" | 3174 | 514.8937 | 0.16222 | 0.27072 | 9.3627e-06 | 4.4074 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 5417 | -321.9894 | -0.059441 | 0.090227 | -1.4426 | 0.22496 | - | "average E/p" | 5417 | 36.8626 | 0.0068050 | 0.0099874 | 0.0000 | 0.38679 | + | "average DLL" | 5416 | -322.0181 | -0.059457 | 0.090232 | -1.4425 | 0.22497 | + | "average E/p" | 5416 | 36.86279 | 0.0068063 | 0.0099882 | 0.0000 | 0.38679 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 5080 |3.703052e+07 | 7289.5 | 16541.0 | 0.0000 | 2.7634e+05 | + | "energy (calo) associated to track" | 5079 |3.703029e+07 | 7290.9 | 16543.0 | 0.0000 | 2.7634e+05 | ChargedBasicsFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6134 | 90 |( 1.467232 +- 0.1535210)% | + |*"Cut selection efficiency" | 6133 | 87 |( 1.418555 +- 0.1510025)% | ChargedBasicsFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6134 | 169 |( 2.755135 +- 0.2089936)% | + |*"Cut selection efficiency" | 6133 | 170 |( 2.771890 +- 0.2096271)% | ClassifyPhotonElectronAlg INFO Number of counters : 14 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 6185 | -2566435 | -414.95 | 562.32 | -5610.4 | 5164.3 | + | "Electron Delta(E)" | 6185 | -2424170 | -391.94 | 535.63 | -5191.5 | 5164.3 | | "Electron Delta(X)" | 6185 | -1874.294 | -0.30304 | 12.108 | -22.782 | 22.326 | | "Electron Delta(Y)" | 6185 | -1394.095 | -0.22540 | 12.169 | -22.782 | 22.326 | - | "Electron Delta(Z)" | 6185 | 398447.5 | 64.422 | 15.372 | 4.4014 | 116.90 | - | "Electron corrected energy" | 6185 |4.205623e+07 | 6799.7 | 10458.0 | 68.412 | 2.5259e+05 | - | "Electrons pT-rejected after correction" | 119 | - | "Photon Delta(E)" | 12038 | -3168302 | -263.19 | 451.89 | -4620.9 | 3238.7 | + | "Electron Delta(Z)" | 6185 | 399088.2 | 64.525 | 15.296 | -6.3916 | 116.90 | + | "Electron corrected energy" | 6185 |4.21985e+07 | 6822.7 | 10467.0 | 27.094 | 2.5275e+05 | + | "Electrons pT-rejected after correction" | 111 | + | "Photon Delta(E)" | 12038 | -2973428 | -247.00 | 427.67 | -4620.9 | 3257.8 | | "Photon Delta(X)" | 12038 | -840.7048 | -0.069838 | 12.304 | -32.293 | 22.326 | | "Photon Delta(Y)" | 12038 | -1786.489 | -0.14840 | 12.391 | -32.090 | 22.326 | - | "Photon Delta(Z)" | 12038 | 655796.9 | 54.477 | 14.220 | -1.2969 | 114.48 | - | "Photon corrected energy" | 12038 |4.586166e+07 | 3809.7 | 7714.6 | 62.642 | 2.3441e+05 | - | "Photons pT-rejected after correction" | 435 | - | "electronHypos" | 100 | 6066 | 60.660 | 28.949 | 11.000 | 140.00 | - | "photonHypos" | 100 | 11603 | 116.03 | 45.688 | 21.000 | 221.00 | + | "Photon Delta(Z)" | 12038 | 657361 | 54.607 | 14.126 | -6.3916 | 114.48 | + | "Photon corrected energy" | 12038 |4.605654e+07 | 3825.9 | 7723.0 | 27.094 | 2.3441e+05 | + | "Photons pT-rejected after correction" | 383 | + | "electronHypos" | 100 | 6074 | 60.740 | 29.081 | 11.000 | 141.00 | + | "photonHypos" | 100 | 11655 | 116.55 | 45.965 | 21.000 | 221.00 | ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | " Inner" | 5446 | 5410.352 | 0.99345 | 0.018884 | 0.96455 | 1.1037 | - | " Middle" | 4679 | 4699.517 | 1.0044 | 0.018874 | 0.97717 | 1.2113 | - | " Outer" | 8035 | 8008.467 | 0.99670 | 0.014683 | 0.97368 | 1.0565 | - | "Pileup offset" | 18160 | 6966867 | 383.64 | 459.72 | -2051.8 | 4321.7 | - | "Pileup scale" | 18223 | 106821 | 5.8619 | 2.2632 | 1.0000 | 10.000 | - | "Pileup subtracted ratio" | 18160 | 15723.27 | 0.86582 | 0.14223 | 0.0079682 | 1.9034 | - | "Skip negative energy correction" | 63 | -CloneKillerForward INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 100 | 6089 | 60.890 | - | "nTracksSelected" | 100 | 757 | 7.5700 | + | " Middle" | 4683 | 4703.459 | 1.0044 | 0.018874 | 0.97717 | 1.2113 | + | " Outer" | 8044 | 8017.419 | 0.99670 | 0.014680 | 0.97368 | 1.0565 | + | "Pileup offset" | 18173 | 6629524 | 364.80 | 431.39 | -2051.8 | 3889.5 | + | "Pileup scale" | 18223 | 101493 | 5.5695 | 1.9981 | 1.0000 | 10.000 | + | "Pileup subtracted ratio" | 18173 | 15843.45 | 0.87181 | 0.13519 | 0.0079682 | 1.9034 | + | "Skip negative energy correction" | 50 | +CloneKillerForward INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "nTracksSelected" | 100 | 758 | 7.5800 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | FunctionalChargedProtoParticleMaker INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CreatedProtos" | 6469 | + | "CreatedProtos" | 6468 | FutureEcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | @@ -152,22 +151,22 @@ GraphClustering INFO Number of counters : 4 | "Negative energy clusters" | 4 | 4 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Tracks" | 100 | 6469 | 64.690 | + | "Nb of Produced Tracks" | 100 | 6468 | 64.680 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Tracks" | 100 | 4487 | 44.870 | MuonIDHlt2AlgLong INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 602 | -373.7537 | -0.62085 | 1.0422 | -7.8829 | 0.0000 | - | "MuLL" | 602 | -5388.953 | -8.9517 | 3.4204 | -11.513 | -0.022240 | + | "BgLL" | 602 | -373.7544 | -0.62085 | 1.0422 | -7.8829 | 0.0000 | + | "MuLL" | 602 | -5388.952 | -8.9517 | 3.4204 | -11.513 | -0.022240 | | "muonMVAStat" | 602 | -288.7827 | -0.47971 | 1.1661 | -3.0113 | 4.3193 | - |*"nInAcceptance" | 6469 | 5205 |( 80.46066 +- 0.4929787)% | - |*"nIsMuon" | 6469 | 602 |( 9.305921 +- 0.3612023)% | - |*"nIsMuonTight" | 6469 | 245 |( 3.787293 +- 0.2373352)% | - |*"nMomentumCut" | 6469 | 5613 |( 86.76766 +- 0.4212876)% | + |*"nInAcceptance" | 6468 | 5204 |( 80.45764 +- 0.4930457)% | + |*"nIsMuon" | 6468 | 602 |( 9.307359 +- 0.3612553)% | + |*"nIsMuonTight" | 6468 | 245 |( 3.787879 +- 0.2373711)% | + |*"nMomentumCut" | 6468 | 5612 |( 86.76562 +- 0.4213478)% | MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 100 | 6469 | 64.690 | + | "Nb of input v2 MuonPIDs" | 100 | 6468 | 64.680 | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Accepted input tracks" | 100 | 12407 | 124.07 | @@ -206,19 +205,19 @@ PrHybridSeeding INFO Number of counters : 21 PrKalmanFilterForward INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 87 | - | "chi2 cut" | 175 | - | "nIterations" | 757 | 1916 | 2.5310 | - | "nOutlierIterations" | 670 | 661 | 0.98657 | - | "nTracksInput" | 100 | 757 | 7.5700 | + | "chi2 cut" | 176 | + | "nIterations" | 758 | 1912 | 2.5224 | + | "nOutlierIterations" | 671 | 663 | 0.98808 | + | "nTracksInput" | 100 | 758 | 7.5800 | | "nTracksOutput" | 100 | 495 | 4.9500 | PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 53 | - | "chi2 cut" | 199 | - | "nIterations" | 6250 | 13122 | 2.0995 | - | "nOutlierIterations" | 6197 | 2794 | 0.45086 | + | "chi2 cut" | 200 | + | "nIterations" | 6250 | 13120 | 2.0992 | + | "nOutlierIterations" | 6197 | 2795 | 0.45102 | | "nTracksInput" | 100 | 6250 | 62.500 | - | "nTracksOutput" | 100 | 5998 | 59.980 | + | "nTracksOutput" | 100 | 5997 | 59.970 | PrMatchNN INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#MatchingChi2" | 100 | 84026.23 | 840.26 | @@ -253,15 +252,15 @@ PrStoreSciFiHits INFO Number of counters : 25 | "Total number of hits" | 100 | 381773 | 3817.7 | 1334.3 | 1217.0 | 7447.0 | Proto2ChargedBasic INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6469 | 6134 |( 94.82146 +- 0.2755108)% | - |*"# passed Track filter" | 6469 | 6469 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 3015 | 30.150 | 15.880 | 4.0000 | 71.000 | + |*"# passed ProtoParticle filter" | 6468 | 6133 |( 94.82066 +- 0.2755522)% | + |*"# passed Track filter" | 6468 | 6468 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 3014 | 30.140 | 15.865 | 4.0000 | 71.000 | | "Nb created particles" | 100 | 3119 | 31.190 | 16.226 | 3.0000 | 74.000 | Proto2ChargedBasic#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6469 | 6134 |( 94.82146 +- 0.2755108)% | - |*"# passed Track filter" | 6469 | 6469 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 3015 | 30.150 | 15.880 | 4.0000 | 71.000 | + |*"# passed ProtoParticle filter" | 6468 | 6133 |( 94.82066 +- 0.2755522)% | + |*"# passed Track filter" | 6468 | 6468 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 3014 | 30.140 | 15.865 | 4.0000 | 71.000 | | "Nb created particles" | 100 | 3119 | 31.190 | 16.226 | 3.0000 | 74.000 | TBTCForward INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -270,23 +269,23 @@ TBTCForward INFO Number of counters : 3 | "FittedBefore" | 492 | TBTC_Match INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 5977 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 5977 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 5977 | + |*"BadInput" | 5976 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 5976 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 5976 | ThOrCombiner__2ChargedBasics INFO Number of counters : 5 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# output reallocations" | 100 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed CombinationCut" | 128 | 1 |(0.7812500 +- 0.7781923)% | + |*"# passed CombinationCut" | 119 | 1 |(0.8403361 +- 0.8367979)% | |*"# passed vertex fit" | 1 | 0 |( 0.000000 +- 0.000000)% | - |*"CombinationCut SIMD utilisation" | 536 | 128 |( 23.88060 +- 1.841569)% | - |*"CombinationCut ideal SIMD utilisation" | 336 | 128 |( 38.09524 +- 2.649279)% | + |*"CombinationCut SIMD utilisation" | 504 | 119 |( 23.61111 +- 1.891725)% | + |*"CombinationCut ideal SIMD utilisation" | 328 | 119 |( 36.28049 +- 2.654825)% | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | ToolSvc.TrackFunctorFactory INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 100 | 524 | 5.2400 | + | "Nb PVs" | 100 | 500 | 5.0000 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 157947 | 1579.5 | @@ -299,4 +298,4 @@ fromPrSeedingTracksV1Tracks INFO Number of counters : 1 | "Nb of converted Tracks" | 100 | 10262 | 102.62 | fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 100 | 6469 | 64.690 | + | "Nb of Produced MuonPIDs" | 100 | 6468 | 64.680 | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_persistreco_check_flavourtags.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_persistreco_check_flavourtags.ref.x86_64_v3-opt index 9c2264bef62..a1be7efc3a0 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_persistreco_check_flavourtags.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_persistreco_check_flavourtags.ref.x86_64_v3-opt @@ -4,18 +4,41 @@ ApplicationMgr SUCCESS ApplicationMgr INFO Application Manager Configured successfully DetectorPersist... INFO Added successfully Conversion service:XmlCnvSvc DetectorDataSvc SUCCESS Detector description database: git:/lhcb.xml +MagneticFieldGridReader INFO Opened magnetic field file: DBASE/FieldMap/vXrYpZ/cdf//field.v5r0.c1.down.cdf +MagneticFieldGridReader INFO Opened magnetic field file: DBASE/FieldMap/vXrYpZ/cdf//field.v5r0.c2.down.cdf +MagneticFieldGridReader INFO Opened magnetic field file: DBASE/FieldMap/vXrYpZ/cdf//field.v5r0.c3.down.cdf +MagneticFieldGridReader INFO Opened magnetic field file: DBASE/FieldMap/vXrYpZ/cdf//field.v5r0.c4.down.cdf EventPersistenc... INFO Added successfully Conversion service:RootCnvSvc ApplicationMgr INFO Application Manager Initialized successfully ApplicationMgr INFO Application Manager Started successfully EventSelector SUCCESS Reading Event record 1. Record number within stream 1: 1 +Hlt2 WARNING TCK obtained from rawbank seems to be 0 -- blindly ASSUMING that the current HltANNSvc somehow has the same configuration as when the input data was written. Proceed at your own risk, good luck... +HltPackedBuffer...WARNING TCK in rawbank seems to be 0 -- blindly ASSUMING that the current HltANNSvc somehow has the same configuration as when the input data was written. Proceed at your own risk, good luck... EventSelector SUCCESS Reading Event record 11. Record number within stream 1: 11 EventSelector SUCCESS Reading Event record 21. Record number within stream 1: 21 +EventSelector SUCCESS Reading Event record 31. Record number within stream 1: 31 EventLoopMgr INFO No more events in event selection 16 -0.4535333216190338 --0.010520000010728836 +0.4295666813850403 +0.1634099930524826 1 16 +0.45766666531562805 +-0.048239998519420624 +1 +16 +0.4749999940395355 +-0.247529998421669 +1 +16 +0.44350001215934753 +0.06998000293970108 +1 +16 +0.5 +0.0 +0 +16 0.5 0.0 0 @@ -24,113 +47,133 @@ EventLoopMgr INFO No more events in event selection 0.0 0 16 -0.47476667165756226 --0.24389000236988068 +0.4806666672229767 +-0.3318299949169159 +1 +16 +0.4806666672229767 +-0.3318299949169159 1 16 -0.4717000126838684 --0.20305000245571136 +0.4402333199977875 +0.09348999708890915 1 16 -0.47093334794044495 --0.19300000369548798 +0.44893333315849304 +0.027979999780654907 1 16 -0.453000009059906 --0.005880000069737434 +0.2612999975681305 +0.7510600090026855 1 16 -0.44013333320617676 -0.09421999752521515 +0.4771000146865845 +-0.2775599956512451 1 16 -0.4736333191394806 --0.228410005569458 +0.4663333296775818 +-0.13795000314712524 1 16 -0.3617333471775055 -0.47077998518943787 +0.4559333324432373 +-0.031980000436306 1 16 -0.4511333405971527 -0.009770000353455544 +0.41626667976379395 +0.23902000486850739 1 16 -0.47673332691192627 --0.2723099887371063 +0.46463334560394287 +-0.11897999793291092 1 16 -0.47163334488868713 --0.20231999456882477 +0.46463334560394287 +-0.11897999793291092 1 16 0.5 0.0 0 16 -0.4655666649341583 --0.12950000166893005 +0.47369998693466187 +-0.22946999967098236 1 16 -0.45579999685287476 --0.030969999730587006 +0.45633333921432495 +-0.03570999950170517 1 16 -0.46166667342185974 --0.08749999850988388 +0.5 +0.0 +0 +16 +0.5 +0.0 +0 +16 +0.5 +0.0 +0 +16 +0.4724000096321106 +-0.21193000674247742 1 16 -0.46166667342185974 --0.08749999850988388 +0.4005666673183441 +0.31610000133514404 1 16 -0.3656333386898041 -0.456959992647171 +0.4434666633605957 +0.07012999802827835 1 16 -0.46059998869895935 --0.07667999714612961 +0.4787999987602234 +-0.30296000838279724 1 16 -0.47589999437332153 --0.26006001234054565 +0.4559333324432373 +-0.032189998775720596 1 16 -0.4842666685581207 --0.39164999127388 +0.4406333267688751 +0.09053999930620193 1 16 -0.3876333236694336 -0.3724299967288971 +0.458133339881897 +-0.05268000066280365 1 16 -0.48536667227745056 --0.4101099967956543 +0.44156667590141296 +0.08399999886751175 1 16 -0.48240000009536743 --0.3600499927997589 +0.4406333267688751 +0.09053999930620193 1 16 -0.5 -0.0 -0 +0.47690001130104065 +-0.27432000637054443 +1 16 -0.4713333249092102 --0.19839000701904297 +0.4611666798591614 +-0.0825899988412857 1 16 -0.42713332176208496 -0.17802999913692474 +0.48249998688697815 +-0.36201998591423035 1 16 -0.4758666753768921 --0.25949999690055847 +0.4510333240032196 +0.010710000060498714 1 16 -0.4519333243370056 -0.0029899999499320984 +0.4496000111103058 +0.022530000656843185 1 +16 +0.5 +0.0 +0 ApplicationMgr INFO Application Manager Stopped successfully EventLoopMgr INFO Histograms converted successfully according to request. ToolSvc INFO Removing all tools created by ToolSvc diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref b/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref index 3c2fbebeddc..90697bb7201 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref @@ -1,337 +1,106 @@ -GraphClustering INFO Built <283.14> graph calo clustering clusters/event -CopyInputStream INFO Events output: 29 +CopyInputStream INFO Events output: 32 ToolSvc INFO Removing all tools created by ToolSvc ApplicationMgr INFO Application Manager Finalized successfully ApplicationMgr INFO Application Manager Terminated successfully -CaloAcceptanceBremAlg_Long INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 9525 | 95.250 | 42.851 | 20.000 | 269.00 | - | "#tracks in acceptance" | 100 | 6835 | 68.350 | 31.509 | 12.000 | 203.00 | -CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 9525 | 95.250 | 42.851 | 20.000 | 269.00 | - | "#tracks in acceptance" | 100 | 7936 | 79.360 | 36.817 | 18.000 | 225.00 | -CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6300 | 63.000 | 38.502 | 13.000 | 267.00 | - | "#tracks in acceptance" | 100 | 5045 | 50.450 | 32.212 | 11.000 | 217.00 | -CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 9525 | 95.250 | 42.851 | 20.000 | 269.00 | - | "#tracks in acceptance" | 100 | 7493 | 74.930 | 34.830 | 15.000 | 213.00 | -CaloFutureClusterCovarianceAlg INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# clusters" | 28314 | -CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "parameter updated" | 2 | -CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Corrected Clusters: # cells " | 6419 | 22527 | 3.5094 | 1.1182 | 2.0000 | 12.000 | - | "Corrected Clusters: ET" | 6419 | 619486.8 | 96.508 | 196.11 | 0.0000 | 4220.4 | - | "Corrected Clusters: size ratio" | 6419 | 2319.819 | 0.36140 | 0.42755 | -1.1017e-15 | 5.3593 | -CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 3111 | 31.110 | 23.021 | 0.0000 | 113.00 | - | "average chi2" | 3111 | 1569.999 | 0.50466 | 0.91863 | 4.1440e-07 | 27.427 | - | "average energy (track based)" | 6835 | 104856.8 | 15.341 | 43.920 | 0.0000 | 1028.3 | -CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#above threshold" | 11 | 11 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 100 | 7041 | 70.410 | 37.157 | 14.000 | 206.00 | - | "average chi2" | 7041 | 30546.09 | 4.3383 | 11.945 | -38.682 | 372.23 | -CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 7739 | 77.390 | 41.007 | 16.000 | 236.00 | - | "average chi2" | 7739 | 1068.392 | 0.13805 | 0.83647 | 2.5772e-06 | 63.682 | -CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#above threshold" | 1 | 1 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 100 | 4844 | 48.440 | 32.454 | 11.000 | 219.00 | - | "average chi2" | 4844 | 704.7311 | 0.14549 | 1.3462 | 6.1522e-07 | 90.908 | -CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 7936 | -297.126 | -0.037440 | 0.055542 | -0.48267 | 0.22289 | - | "average E/p" | 7936 | 36.87316 | 0.0046463 | 0.0052249 | 0.0000 | 0.067706 | -CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 7493 |4.929095e+07 | 6578.3 | 12324.0 | 0.0000 | 2.0210e+05 | ChargedProtoParticleAssociator INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Efficiency" | 2756 | 2244 |( 81.42235 +- 0.7408454)% | - | "MC particles per ProtoParticle" | 2244 | 2671 | 1.1903 | -ClassifyPhotonElectronAlg INFO Number of counters : 14 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 8749 | -3524946 | -402.90 | 529.99 | -4571.1 | 4551.3 | - | "Electron Delta(X)" | 8749 | -2464.865 | -0.28173 | 12.249 | -52.217 | 23.742 | - | "Electron Delta(Y)" | 8749 | -2528.095 | -0.28896 | 12.284 | -22.782 | 37.727 | - | "Electron Delta(Z)" | 8749 | 559983.1 | 64.005 | 15.137 | -1.7256 | 112.75 | - | "Electron corrected energy" | 8749 |5.140987e+07 | 5876.1 | 7261.9 | 37.195 | 1.0532e+05 | - | "Electrons pT-rejected after correction" | 161 | - | "Photon Delta(E)" | 16721 | -4142898 | -247.77 | 407.89 | -4571.1 | 1487.7 | - | "Photon Delta(X)" | 16721 | -5431.202 | -0.32481 | 12.512 | -88.809 | 44.008 | - | "Photon Delta(Y)" | 16721 | -5389.977 | -0.32235 | 12.522 | -92.068 | 111.91 | - | "Photon Delta(Z)" | 16721 | 906771.8 | 54.230 | 13.800 | -7.3809 | 114.19 | - | "Photon corrected energy" | 16721 |5.596928e+07 | 3347.2 | 5614.6 | 24.826 | 1.4002e+05 | - | "Photons pT-rejected after correction" | 606 | - | "electronHypos" | 100 | 8588 | 85.880 | 37.298 | 22.000 | 222.00 | - | "photonHypos" | 100 | 16115 | 161.15 | 52.693 | 44.000 | 274.00 | -ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | " Inner" | 7196 | 7161.255 | 0.99517 | 0.020325 | 0.96451 | 1.1112 | - | " Middle" | 7017 | 7063.478 | 1.0066 | 0.020360 | 0.97680 | 1.1911 | - | " Outer" | 11216 | 11213.65 | 0.99979 | 0.016348 | 0.97356 | 1.1451 | - | "Pileup offset" | 25429 | 9506144 | 373.83 | 435.54 | -3287.6 | 3890.8 | - | "Pileup scale" | 25470 | 157200 | 6.1720 | 1.8494 | 2.0000 | 10.000 | - | "Pileup subtracted ratio" | 25429 | 22043.8 | 0.86688 | 0.13251 | 0.0061236 | 1.4188 | - | "Skip negative energy correction" | 41 | -CloneKillerForward INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 100 | 8984 | 89.840 | - | "nTracksSelected" | 100 | 1491 | 14.910 | + |*"Efficiency" | 3947 | 3181 |( 80.59286 +- 0.6294997)% | + | "MC particles per ProtoParticle" | 3181 | 3599 | 1.1314 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | DeterministicPrescaler#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | -FunctionalChargedProtoParticleMaker INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CreatedProtos" | 9525 | FunctionalParticleMaker INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 9525 | 1273 |( 13.36483 +- 0.3486554)% | - |*"# passed Track filter" | 9525 | 9525 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 595 | 5.9500 | 4.4640 | 0.0000 | 23.000 | - | "Nb created particles" | 100 | 678 | 6.7800 | 5.7734 | 0.0000 | 30.000 | + |*"# passed ProtoParticle filter" | 9876 | 1444 |( 14.62130 +- 0.3555308)% | + |*"# passed Track filter" | 13276 | 9876 |( 74.38988 +- 0.3788167)% | + | "Nb created anti-particles" | 100 | 705 | 7.0500 | 6.7814 | 0.0000 | 45.000 | + | "Nb created particles" | 100 | 739 | 7.3900 | 7.4899 | 0.0000 | 51.000 | FunctionalParticleMaker#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 9525 | 8938 |( 93.83727 +- 0.2464006)% | - |*"# passed Track filter" | 9525 | 9525 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 4430 | 44.300 | 20.155 | 7.0000 | 133.00 | - | "Nb created particles" | 100 | 4508 | 45.080 | 20.832 | 11.000 | 114.00 | + |*"# passed ProtoParticle filter" | 9876 | 9381 |( 94.98785 +- 0.2195612)% | + |*"# passed Track filter" | 13276 | 9876 |( 74.38988 +- 0.3788167)% | + | "Nb created anti-particles" | 100 | 4700 | 47.000 | 25.030 | 2.0000 | 167.00 | + | "Nb created particles" | 100 | 4681 | 46.810 | 23.838 | 3.0000 | 143.00 | FunctionalParticleMaker#2 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 2756 | 2581 |( 93.65022 +- 0.4645091)% | - |*"# passed Track filter" | 2756 | 2756 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 29 | 1295 | 44.655 | 15.847 | 10.000 | 79.000 | - | "Nb created particles" | 29 | 1286 | 44.345 | 16.035 | 11.000 | 78.000 | + |*"# passed ProtoParticle filter" | 2968 | 2818 |( 94.94609 +- 0.4020872)% | + |*"# passed Track filter" | 3947 | 2968 |( 75.19635 +- 0.6874207)% | + | "Nb created anti-particles" | 32 | 1395 | 43.594 | 24.114 | 6.0000 | 98.000 | + | "Nb created particles" | 32 | 1423 | 44.469 | 24.882 | 6.0000 | 100.00 | FunctionalSSPionTagger INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#BCandidates" | 29 | 29 | 1.0000 | - | "#goodFlavourTags" | 25 | 25 | 1.0000 | - | "#taggingPions" | 29 | 2581 | 89.000 | + | "#BCandidates" | 32 | 35 | 1.0938 | + | "#goodFlavourTags" | 28 | 28 | 1.0000 | + | "#taggingPions" | 32 | 2818 | 88.062 | FunctionalSSPionTagger#1 INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#BCandidates" | 1 | 1 | 1.0000 | - | "#goodFlavourTags" | 1 | 1 | 1.0000 | - | "#taggingPions" | 1 | 33 | 33.000 | + | "#BCandidates" | 4 | 4 | 1.0000 | + | "#goodFlavourTags" | 3 | 3 | 1.0000 | + | "#taggingPions" | 4 | 344 | 86.000 | FunctionalSSPionTagger#1.Tagging... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#iterations/1" | 5 | 6 | 1.2000 | 0.40000 | 1.0000 | 2.0000 | - | "#iterations/2" | 1 | 2 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | - | "#iterations/Opt" | 5 | 1 | 0.20000 | 0.40000 | 0.0000 | 1.0000 | + | "#iterations/1" | 12 | 17 | 1.4167 | 0.49301 | 1.0000 | 2.0000 | + | "#iterations/2" | 6 | 12 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | + | "#iterations/Opt" | 13 | 6 | 0.46154 | 0.49852 | 0.0000 | 1.0000 | FunctionalSSPionTagger.TaggingHe... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#iterations/1" | 103 | 121 | 1.1748 | 0.37976 | 1.0000 | 2.0000 | - | "#iterations/2" | 19 | 38 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | - | "#iterations/Opt" | 104 | 19 | 0.18269 | 0.38641 | 0.0000 | 1.0000 | -FutureEcalZSup INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | -FutureHcalZSup INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | -GraphClustering INFO Number of counters : 4 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# clusters" | 100 | 28314 | 283.14 | 95.762 | 83.000 | 532.00 | - | "Cluster energy" | 28314 |1.08316e+08 | 3825.5 | 6198.5 | 0.20000 | 1.3853e+05 | - | "Cluster size" | 28314 | 252238 | 8.9086 | 3.0259 | 3.0000 | 24.000 | - | "Negative energy clusters" | 69 | 132 | 1.9130 | 0.94392 | 1.0000 | 5.0000 | -LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Tracks" | 100 | 9525 | 95.250 | -LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Tracks" | 100 | 6300 | 63.000 | -MuonIDHlt2AlgLong INFO Number of counters : 7 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 1273 | -1363.851 | -1.0714 | 1.3758 | -9.2504 | 0.0000 | - | "MuLL" | 1273 | -9532.988 | -7.4886 | 3.7951 | -11.513 | -0.0044717 | - | "muonMVAStat" | 1273 | -22.83644 | -0.017939 | 1.6061 | -3.3631 | 4.6126 | - |*"nInAcceptance" | 9525 | 7568 |( 79.45407 +- 0.4139887)% | - |*"nIsMuon" | 9525 | 1273 |( 13.36483 +- 0.3486554)% | - |*"nIsMuonTight" | 9525 | 775 |( 8.136483 +- 0.2801286)% | - |*"nMomentumCut" | 9525 | 8135 |( 85.40682 +- 0.3617335)% | -MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 100 | 9525 | 95.250 | -PrForwardTrackingVelo INFO Number of counters : 10 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Accepted input tracks" | 100 | 17740 | 177.40 | - | "Created long tracks" | 100 | 8984 | 89.840 | - | "Input tracks" | 100 | 18331 | 183.31 | - | "Number of candidate bins per track" | 17740 | 288691 | 16.273 | 22.373 | 0.0000 | 149.00 | - | "Number of complete candidates/track 1st Loop" | 16013 | 9564 | 0.59726 | 0.67268 | 0.0000 | 5.0000 | - | "Number of complete candidates/track 2nd Loop" | 8763 | 920 | 0.10499 | 0.32250 | 0.0000 | 3.0000 | - | "Number of x candidates per track 1st Loop" | 16013 | 39272 | 2.4525 | 2.9530 | - | "Number of x candidates per track 2nd Loop" | 8763 | 65100 | 7.4290 | 10.528 | - | "Percentage second loop execution" | 16013 | 8763 | 0.54724 | - | "Removed duplicates" | 100 | 477 | 4.7700 | -PrHybridSeeding INFO Number of counters : 21 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Created T2x1 three-hit combinations in case 0" | 267093 | 167310 | 0.62641 | 0.63723 | 0.0000 | 6.0000 | - | "Created T2x1 three-hit combinations in case 1" | 348265 | 237932 | 0.68319 | 0.77608 | 0.0000 | 10.000 | - | "Created T2x1 three-hit combinations in case 2" | 531712 | 467881 | 0.87995 | 1.0517 | 0.0000 | 20.000 | - | "Created XZ tracks (part 0)" | 300 | 28393 | 94.643 | 136.13 | 2.0000 | 884.00 | - | "Created XZ tracks (part 1)" | 300 | 29284 | 97.613 | 163.11 | 0.0000 | 1438.0 | - | "Created XZ tracks in case 0" | 200 | 18064 | 90.320 | 103.81 | 9.0000 | 831.00 | - | "Created XZ tracks in case 1" | 200 | 20802 | 104.01 | 151.20 | 8.0000 | 1275.0 | - | "Created XZ tracks in case 2" | 200 | 18811 | 94.055 | 184.31 | 0.0000 | 1438.0 | - | "Created full hit combinations in case 0" | 31888 | 31888 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "Created full hit combinations in case 1" | 25283 | 25283 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "Created full hit combinations in case 2" | 30515 | 30515 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "Created seed tracks" | 200 | 14584 | 72.920 | 35.342 | 16.000 | 286.00 | - | "Created seed tracks (part 0)" | 100 | 8098 | 80.980 | 36.506 | 16.000 | 196.00 | - | "Created seed tracks (part 1)" | 100 | 8179 | 81.790 | 43.982 | 18.000 | 325.00 | - | "Created seed tracks in case 0" | 200 | 7515 | 37.575 | 18.383 | 8.0000 | 136.00 | - | "Created seed tracks in case 1" | 200 | 13690 | 68.450 | 32.278 | 14.000 | 261.00 | - | "Created seed tracks in case 2" | 200 | 15440 | 77.200 | 38.380 | 14.000 | 316.00 | - | "Created seed tracks in recovery step" | 100 | 837 | 8.3700 | 5.5311 | 1.0000 | 29.000 | - | "Created two-hit combinations in case 0" | 32389 | 879736 | 27.162 | 19.730 | 0.0000 | 123.00 | - | "Created two-hit combinations in case 1" | 28337 | 1036395 | 36.574 | 24.711 | 0.0000 | 130.00 | - | "Created two-hit combinations in case 2" | 21984 | 1222956 | 55.629 | 38.066 | 0.0000 | 186.00 | -PrKalmanFilterForward INFO Number of counters : 6 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Pre outlier chi2 cut" | 192 | - | "chi2 cut" | 392 | - | "nIterations" | 1491 | 3909 | 2.6217 | - | "nOutlierIterations" | 1299 | 1439 | 1.1078 | - | "nTracksInput" | 100 | 1491 | 14.910 | - | "nTracksOutput" | 100 | 907 | 9.0700 | -PrKalmanFilterMatch INFO Number of counters : 6 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Pre outlier chi2 cut" | 130 | - | "chi2 cut" | 401 | - | "nIterations" | 9179 | 19531 | 2.1278 | - | "nOutlierIterations" | 9049 | 4941 | 0.54603 | - | "nTracksInput" | 100 | 9179 | 91.790 | - | "nTracksOutput" | 100 | 8648 | 86.480 | -PrLHCbID2MCParticleVPUTFTMU INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#removed null MCParticles" | 240248 | 0 | 0.0000 | -PrMatchNN INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#MatchingChi2" | 100 | 157413.3 | 1574.1 | - | "#MatchingMLP" | 9179 | 7823.351 | 0.85231 | - | "#MatchingTracks" | 100 | 9179 | 91.790 | -PrStoreSciFiHits INFO Number of counters : 25 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Average X in T1U" | 32970 | -1233815 | -37.422 | 1122.5 | -2656.2 | 2655.7 | - | "Average X in T1V" | 33500 | -867026.2 | -25.881 | 1108.4 | -2655.9 | 2655.8 | - | "Average X in T1X1" | 32389 | -807161.9 | -24.921 | 1132.6 | -2646.1 | 2646.2 | - | "Average X in T1X2" | 34150 | -397825.7 | -11.649 | 1107.3 | -2645.9 | 2645.9 | - | "Average X in T2U" | 33025 | -1030976 | -31.218 | 1142.6 | -2656.1 | 2654.8 | - | "Average X in T2V" | 33968 | -1049433 | -30.895 | 1122.9 | -2656.1 | 2656.3 | - | "Average X in T2X1" | 31279 | -1247906 | -39.896 | 1139.9 | -2646.2 | 2646.1 | - | "Average X in T2X2" | 35068 | -773526.4 | -22.058 | 1125.7 | -2646.1 | 2646.2 | - | "Average X in T3U" | 35871 | 113337.7 | 3.1596 | 1325.7 | -3188.0 | 3188.2 | - | "Average X in T3V" | 36875 | -771515.3 | -20.922 | 1327.3 | -3188.4 | 3188.1 | - | "Average X in T3X1" | 34684 | -504515.9 | -14.546 | 1338.1 | -3176.0 | 3175.4 | - | "Average X in T3X2" | 37897 | -601617 | -15.875 | 1316.5 | -3175.4 | 3176.1 | - | "Hits in T1U" | 400 | 32970 | 82.425 | 36.142 | 10.000 | 232.00 | - | "Hits in T1V" | 400 | 33500 | 83.750 | 35.079 | 15.000 | 214.00 | - | "Hits in T1X1" | 400 | 32389 | 80.972 | 34.832 | 9.0000 | 202.00 | - | "Hits in T1X2" | 400 | 34150 | 85.375 | 35.455 | 13.000 | 215.00 | - | "Hits in T2U" | 400 | 33025 | 82.562 | 35.126 | 17.000 | 208.00 | - | "Hits in T2V" | 400 | 33968 | 84.920 | 35.954 | 18.000 | 237.00 | - | "Hits in T2X1" | 400 | 31279 | 78.198 | 31.971 | 11.000 | 192.00 | - | "Hits in T2X2" | 400 | 35068 | 87.670 | 35.868 | 17.000 | 246.00 | - | "Hits in T3U" | 400 | 35871 | 89.677 | 36.292 | 17.000 | 236.00 | - | "Hits in T3V" | 400 | 36875 | 92.188 | 38.492 | 16.000 | 249.00 | - | "Hits in T3X1" | 400 | 34684 | 86.710 | 36.146 | 16.000 | 234.00 | - | "Hits in T3X2" | 400 | 37897 | 94.743 | 38.718 | 15.000 | 274.00 | - | "Total number of hits" | 100 | 411676 | 4116.8 | 1551.2 | 1069.0 | 9085.0 | -PrStoreUTHit INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#banks" | 29 | 6264 | 216.00 | -PrTrackAssociator INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Efficiency" | 4598 | 3819 |( 83.05785 +- 0.5532101)% | - | "MC particles per track" | 3819 | 4246 | 1.1118 | + | "#iterations/1" | 115 | 129 | 1.1217 | 0.32698 | 1.0000 | 2.0000 | + | "#iterations/2" | 15 | 30 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | + | "#iterations/Opt" | 116 | 15 | 0.12931 | 0.33554 | 0.0000 | 1.0000 | Streaming_filter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 29 | 29 |( 100.0000 +- 0.000000)% | -TBTCForward INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 903 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 903 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 903 | -TBTC_Match INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 8622 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 8622 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 8622 | + |*"Cut selection efficiency" | 32 | 32 |( 100.0000 +- 0.000000)% | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | -ToolSvc.TrackFunctorFactory INFO Number of counters : 2 +ToolSvc.TrackFunctorFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | -TrackBeamLineVertexFinderSoA INFO Number of counters : 1 +UnpackBestTracks INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 100 | 573 | 5.7300 | -VPClus INFO Number of counters : 1 + | "# Unpacked Tracks" | 100 | 41843 | 418.43 | +UnpackMuonPIDs INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Clusters" | 100 | 255452 | 2554.5 | -VeloClusterTrackingSIMD INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Clusters" | 100 | 255452 | 2554.5 | - | "Nb of Produced Tracks" | 100 | 28379 | 283.79 | + | "# UnPackedData" | 100 | 9808 | 98.080 | 51.754 | 8.0000 | 340.00 | bandq_b_hadron INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 29 |( 29.00000 +- 4.537621)% | - |*"# passed CombinationCut" | 470 | 55 |( 11.70213 +- 1.482718)% | - |*"# passed CompositeCut" | 55 | 29 |( 52.72727 +- 6.731962)% | - |*"# passed vertex fit" | 55 | 55 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 50 | 0.50000 | - | "Input2 size" | 100 | 937 | 9.3700 | - | "Lifetime fit did not converge. Aborting." | 5 | -bandq_b_hadron#1 INFO Number of counters : 6 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 1 |( 1.000000 +- 0.9949874)% | - |*"# passed CombinationCut" | 470 | 55 |( 11.70213 +- 1.482718)% | - |*"# passed CompositeCut" | 55 | 1 |( 1.818182 +- 1.801577)% | - |*"# passed vertex fit" | 55 | 55 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 50 | 0.50000 | - | "Input2 size" | 100 | 937 | 9.3700 | + |*"# passed" | 100 | 32 |( 32.00000 +- 4.664762)% | + |*"# passed CombinationCut" | 485 | 83 |( 17.11340 +- 1.710171)% | + |*"# passed CompositeCut" | 83 | 35 |( 42.16867 +- 5.420477)% | + |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 60 | 0.60000 | + | "Input2 size" | 100 | 843 | 8.4300 | + | "Lifetime fit did not converge. Aborting." | 3 | +bandq_b_hadron#1 INFO Number of counters : 7 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"# passed" | 100 | 4 |( 4.000000 +- 1.959592)% | + |*"# passed CombinationCut" | 485 | 83 |( 17.11340 +- 1.710171)% | + |*"# passed CompositeCut" | 83 | 4 |( 4.819277 +- 2.350858)% | + |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 60 | 0.60000 | + | "Input2 size" | 100 | 843 | 8.4300 | + | "Lifetime fit did not converge. Aborting." | 1 | bandq_detached_kaons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 8938 | 937 |( 10.48333 +- 0.3240272)% | + |*"Cut selection efficiency" | 9381 | 843 |( 8.986249 +- 0.2952692)% | charmonium_dimuon INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 53 | 50 |( 94.33962 +- 3.174182)% | + |*"Cut selection efficiency" | 64 | 60 |( 93.75000 +- 3.025768)% | charmonium_dimuon_base INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 53 |( 53.00000 +- 4.990992)% | - |*"# passed CombinationCut" | 145 | 56 |( 38.62069 +- 4.043310)% | - |*"# passed CompositeCut" | 56 | 53 |( 94.64286 +- 3.008961)% | - |*"# passed vertex fit" | 56 | 56 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 234 | 2.3400 | - | "Input2 size" | 100 | 234 | 2.3400 | + |*"# passed" | 100 | 60 |( 60.00000 +- 4.898979)% | + |*"# passed CombinationCut" | 843 | 74 |( 8.778173 +- 0.9746253)% | + |*"# passed CompositeCut" | 74 | 64 |( 86.48649 +- 3.974133)% | + |*"# passed vertex fit" | 74 | 74 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 452 | 4.5200 | + | "Input2 size" | 100 | 452 | 4.5200 | charmonium_muons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 1273 | 234 |( 18.38178 +- 1.085608)% | -fromPrSeedingTracksV1Tracks INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of converted Tracks" | 100 | 14584 | 145.84 | -fromPrVeloTracksV1TracksMerger INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of converted Tracks" | 29 | 8213 | 283.21 | -fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 100 | 9525 | 95.250 | + |*"Cut selection efficiency" | 1444 | 452 |( 31.30194 +- 1.220322)% | jpsi INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 50 | 50 |( 100.0000 +- 0.000000)% | + |*"Cut selection efficiency" | 60 | 60 |( 100.0000 +- 0.000000)% | require_pvs INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 100 | 100 |( 100.0000 +- 0.000000)% | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref.x86_64_v3-opt index e1e17fc3dca..35363e8efd8 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref.x86_64_v3-opt @@ -1,337 +1,106 @@ -GraphClustering INFO Built <283.14> graph calo clustering clusters/event -CopyInputStream INFO Events output: 29 +CopyInputStream INFO Events output: 32 ToolSvc INFO Removing all tools created by ToolSvc ApplicationMgr INFO Application Manager Finalized successfully ApplicationMgr INFO Application Manager Terminated successfully -CaloAcceptanceBremAlg_Long INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 9524 | 95.240 | 42.645 | 20.000 | 270.00 | - | "#tracks in acceptance" | 100 | 6833 | 68.330 | 31.415 | 12.000 | 204.00 | -CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 9524 | 95.240 | 42.645 | 20.000 | 270.00 | - | "#tracks in acceptance" | 100 | 7934 | 79.340 | 36.674 | 18.000 | 226.00 | -CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6296 | 62.960 | 38.526 | 13.000 | 267.00 | - | "#tracks in acceptance" | 100 | 5040 | 50.400 | 32.197 | 11.000 | 217.00 | -CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 9524 | 95.240 | 42.645 | 20.000 | 270.00 | - | "#tracks in acceptance" | 100 | 7489 | 74.890 | 34.705 | 15.000 | 214.00 | -CaloFutureClusterCovarianceAlg INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# clusters" | 28314 | -CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "parameter updated" | 2 | -CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Corrected Clusters: # cells " | 6419 | 22527 | 3.5094 | 1.1182 | 2.0000 | 12.000 | - | "Corrected Clusters: ET" | 6419 | 619486.8 | 96.508 | 196.11 | 0.0000 | 4220.4 | - | "Corrected Clusters: size ratio" | 6419 | 2319.819 | 0.36140 | 0.42755 | -1.1017e-15 | 5.3593 | -CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 3097 | 30.970 | 22.950 | 0.0000 | 113.00 | - | "average chi2" | 3097 | 1567.57 | 0.50616 | 0.92169 | 4.2336e-07 | 27.426 | - | "average energy (track based)" | 6833 | 105109.4 | 15.383 | 43.974 | 0.0000 | 1028.3 | -CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#above threshold" | 11 | 11 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 100 | 7041 | 70.410 | 37.105 | 14.000 | 207.00 | - | "average chi2" | 7041 | 30562.35 | 4.3406 | 11.945 | -38.295 | 372.24 | -CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 7738 | 77.380 | 40.857 | 16.000 | 237.00 | - | "average chi2" | 7738 | 1068.215 | 0.13805 | 0.83653 | 2.5772e-06 | 63.682 | -CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#above threshold" | 1 | 1 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 100 | 4838 | 48.380 | 32.437 | 11.000 | 219.00 | - | "average chi2" | 4838 | 705.5488 | 0.14583 | 1.3477 | 6.2284e-07 | 90.908 | -CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 7934 | -296.6618 | -0.037391 | 0.055541 | -0.48267 | 0.22289 | - | "average E/p" | 7934 | 36.93599 | 0.0046554 | 0.0052278 | 0.0000 | 0.067706 | -CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 7489 |4.925479e+07 | 6577.0 | 12325.0 | 0.0000 | 2.0210e+05 | ChargedProtoParticleAssociator INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Efficiency" | 2749 | 2247 |( 81.73881 +- 0.7368707)% | - | "MC particles per ProtoParticle" | 2247 | 2674 | 1.1900 | -ClassifyPhotonElectronAlg INFO Number of counters : 14 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 8747 | -3633822 | -415.44 | 540.17 | -4571.1 | 4551.3 | - | "Electron Delta(X)" | 8747 | -2435.972 | -0.27849 | 12.248 | -52.217 | 23.742 | - | "Electron Delta(Y)" | 8747 | -2483.802 | -0.28396 | 12.281 | -22.782 | 37.727 | - | "Electron Delta(Z)" | 8747 | 559360.2 | 63.949 | 15.171 | -1.7256 | 112.75 | - | "Electron corrected energy" | 8747 |5.129604e+07 | 5864.4 | 7257.7 | 37.195 | 1.0517e+05 | - | "Electrons pT-rejected after correction" | 165 | - | "Photon Delta(E)" | 16722 | -4296959 | -256.96 | 416.39 | -4571.1 | 1365.2 | - | "Photon Delta(X)" | 16722 | -5438.308 | -0.32522 | 12.512 | -88.809 | 44.008 | - | "Photon Delta(Y)" | 16722 | -5411.494 | -0.32362 | 12.522 | -92.068 | 111.91 | - | "Photon Delta(Z)" | 16722 | 905456.2 | 54.148 | 13.865 | -7.3809 | 114.16 | - | "Photon corrected energy" | 16722 |5.58181e+07 | 3338.0 | 5609.4 | 24.826 | 1.3990e+05 | - | "Photons pT-rejected after correction" | 639 | - | "electronHypos" | 100 | 8582 | 85.820 | 37.321 | 22.000 | 222.00 | - | "photonHypos" | 100 | 16083 | 160.83 | 52.951 | 44.000 | 274.00 | -ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | " Inner" | 7196 | 7161.255 | 0.99517 | 0.020325 | 0.96451 | 1.1112 | - | " Middle" | 7018 | 7064.516 | 1.0066 | 0.020358 | 0.97680 | 1.1911 | - | " Outer" | 11211 | 11208.68 | 0.99979 | 0.016350 | 0.97356 | 1.1451 | - | "Pileup offset" | 25425 | 9769103 | 384.23 | 445.39 | -3287.6 | 3833.6 | - | "Pileup scale" | 25469 | 161365 | 6.3357 | 1.8585 | 2.0000 | 10.000 | - | "Pileup subtracted ratio" | 25425 | 21943.99 | 0.86309 | 0.13593 | 0.0061236 | 1.4188 | - | "Skip negative energy correction" | 44 | -CloneKillerForward INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 100 | 8991 | 89.910 | - | "nTracksSelected" | 100 | 1496 | 14.960 | + |*"Efficiency" | 3947 | 3181 |( 80.59286 +- 0.6294997)% | + | "MC particles per ProtoParticle" | 3181 | 3599 | 1.1314 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | DeterministicPrescaler#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | -FunctionalChargedProtoParticleMaker INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CreatedProtos" | 9524 | FunctionalParticleMaker INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 9524 | 1274 |( 13.37673 +- 0.3488049)% | - |*"# passed Track filter" | 9524 | 9524 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 595 | 5.9500 | 4.4640 | 0.0000 | 23.000 | - | "Nb created particles" | 100 | 679 | 6.7900 | 5.7729 | 0.0000 | 30.000 | + |*"# passed ProtoParticle filter" | 9876 | 1444 |( 14.62130 +- 0.3555308)% | + |*"# passed Track filter" | 13276 | 9876 |( 74.38988 +- 0.3788167)% | + | "Nb created anti-particles" | 100 | 705 | 7.0500 | 6.7814 | 0.0000 | 45.000 | + | "Nb created particles" | 100 | 739 | 7.3900 | 7.4899 | 0.0000 | 51.000 | FunctionalParticleMaker#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 9524 | 8936 |( 93.82612 +- 0.2466216)% | - |*"# passed Track filter" | 9524 | 9524 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 4426 | 44.260 | 20.085 | 7.0000 | 134.00 | - | "Nb created particles" | 100 | 4510 | 45.100 | 20.755 | 11.000 | 114.00 | + |*"# passed ProtoParticle filter" | 9876 | 9381 |( 94.98785 +- 0.2195612)% | + |*"# passed Track filter" | 13276 | 9876 |( 74.38988 +- 0.3788167)% | + | "Nb created anti-particles" | 100 | 4700 | 47.000 | 25.030 | 2.0000 | 167.00 | + | "Nb created particles" | 100 | 4681 | 46.810 | 23.838 | 3.0000 | 143.00 | FunctionalParticleMaker#2 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 2749 | 2574 |( 93.63405 +- 0.4656517)% | - |*"# passed Track filter" | 2749 | 2749 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 29 | 1292 | 44.552 | 15.657 | 10.000 | 77.000 | - | "Nb created particles" | 29 | 1282 | 44.207 | 15.936 | 11.000 | 78.000 | + |*"# passed ProtoParticle filter" | 2968 | 2818 |( 94.94609 +- 0.4020872)% | + |*"# passed Track filter" | 3947 | 2968 |( 75.19635 +- 0.6874207)% | + | "Nb created anti-particles" | 32 | 1395 | 43.594 | 24.114 | 6.0000 | 98.000 | + | "Nb created particles" | 32 | 1423 | 44.469 | 24.882 | 6.0000 | 100.00 | FunctionalSSPionTagger INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#BCandidates" | 29 | 29 | 1.0000 | - | "#goodFlavourTags" | 25 | 25 | 1.0000 | - | "#taggingPions" | 29 | 2574 | 88.759 | + | "#BCandidates" | 32 | 35 | 1.0938 | + | "#goodFlavourTags" | 28 | 28 | 1.0000 | + | "#taggingPions" | 32 | 2818 | 88.062 | FunctionalSSPionTagger#1 INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#BCandidates" | 1 | 1 | 1.0000 | - | "#goodFlavourTags" | 1 | 1 | 1.0000 | - | "#taggingPions" | 1 | 33 | 33.000 | + | "#BCandidates" | 4 | 4 | 1.0000 | + | "#goodFlavourTags" | 3 | 3 | 1.0000 | + | "#taggingPions" | 4 | 344 | 86.000 | FunctionalSSPionTagger#1.Tagging... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#iterations/1" | 5 | 6 | 1.2000 | 0.40000 | 1.0000 | 2.0000 | - | "#iterations/2" | 1 | 2 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | - | "#iterations/Opt" | 5 | 1 | 0.20000 | 0.40000 | 0.0000 | 1.0000 | + | "#iterations/1" | 12 | 17 | 1.4167 | 0.49301 | 1.0000 | 2.0000 | + | "#iterations/2" | 6 | 12 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | + | "#iterations/Opt" | 13 | 6 | 0.46154 | 0.49852 | 0.0000 | 1.0000 | FunctionalSSPionTagger.TaggingHe... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#iterations/1" | 104 | 122 | 1.1731 | 0.37831 | 1.0000 | 2.0000 | - | "#iterations/2" | 19 | 38 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | - | "#iterations/Opt" | 105 | 19 | 0.18095 | 0.38498 | 0.0000 | 1.0000 | -FutureEcalZSup INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | -FutureHcalZSup INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | -GraphClustering INFO Number of counters : 4 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# clusters" | 100 | 28314 | 283.14 | 95.762 | 83.000 | 532.00 | - | "Cluster energy" | 28314 |1.08316e+08 | 3825.5 | 6198.5 | 0.20000 | 1.3853e+05 | - | "Cluster size" | 28314 | 252238 | 8.9086 | 3.0259 | 3.0000 | 24.000 | - | "Negative energy clusters" | 69 | 132 | 1.9130 | 0.94392 | 1.0000 | 5.0000 | -LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Tracks" | 100 | 9524 | 95.240 | -LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Tracks" | 100 | 6296 | 62.960 | -MuonIDHlt2AlgLong INFO Number of counters : 7 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 1274 | -1367.297 | -1.0732 | 1.3758 | -9.2505 | 0.0000 | - | "MuLL" | 1274 | -9533.386 | -7.4830 | 3.7968 | -11.513 | -0.0044713 | - | "muonMVAStat" | 1274 | -21.96418 | -0.017240 | 1.6053 | -3.3631 | 4.6126 | - |*"nInAcceptance" | 9524 | 7563 |( 79.40991 +- 0.4143399)% | - |*"nIsMuon" | 9524 | 1274 |( 13.37673 +- 0.3488049)% | - |*"nIsMuonTight" | 9524 | 777 |( 8.158337 +- 0.2804859)% | - |*"nMomentumCut" | 9524 | 8129 |( 85.35279 +- 0.3623069)% | -MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 100 | 9524 | 95.240 | -PrForwardTrackingVelo INFO Number of counters : 10 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Accepted input tracks" | 100 | 17778 | 177.78 | - | "Created long tracks" | 100 | 8991 | 89.910 | - | "Input tracks" | 100 | 18392 | 183.92 | - | "Number of candidate bins per track" | 17778 | 289197 | 16.267 | 22.365 | 0.0000 | 149.00 | - | "Number of complete candidates/track 1st Loop" | 16042 | 9567 | 0.59637 | 0.67233 | 0.0000 | 5.0000 | - | "Number of complete candidates/track 2nd Loop" | 8788 | 925 | 0.10526 | 0.32279 | 0.0000 | 3.0000 | - | "Number of x candidates per track 1st Loop" | 16042 | 39320 | 2.4511 | 2.9533 | - | "Number of x candidates per track 2nd Loop" | 8788 | 65299 | 7.4305 | 10.526 | - | "Percentage second loop execution" | 16042 | 8788 | 0.54781 | - | "Removed duplicates" | 100 | 480 | 4.8000 | -PrHybridSeeding INFO Number of counters : 21 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Created T2x1 three-hit combinations in case 0" | 267094 | 167313 | 0.62642 | 0.63724 | 0.0000 | 6.0000 | - | "Created T2x1 three-hit combinations in case 1" | 348263 | 237932 | 0.68320 | 0.77609 | 0.0000 | 10.000 | - | "Created T2x1 three-hit combinations in case 2" | 531776 | 467909 | 0.87990 | 1.0516 | 0.0000 | 20.000 | - | "Created XZ tracks (part 0)" | 300 | 28396 | 94.653 | 136.15 | 2.0000 | 884.00 | - | "Created XZ tracks (part 1)" | 300 | 29282 | 97.607 | 163.11 | 0.0000 | 1438.0 | - | "Created XZ tracks in case 0" | 200 | 18064 | 90.320 | 103.81 | 9.0000 | 831.00 | - | "Created XZ tracks in case 1" | 200 | 20802 | 104.01 | 151.20 | 8.0000 | 1275.0 | - | "Created XZ tracks in case 2" | 200 | 18812 | 94.060 | 184.34 | 0.0000 | 1438.0 | - | "Created full hit combinations in case 0" | 31887 | 31887 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "Created full hit combinations in case 1" | 25283 | 25283 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "Created full hit combinations in case 2" | 30515 | 30515 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "Created seed tracks" | 200 | 14585 | 72.925 | 35.338 | 16.000 | 286.00 | - | "Created seed tracks (part 0)" | 100 | 8099 | 80.990 | 36.500 | 16.000 | 196.00 | - | "Created seed tracks (part 1)" | 100 | 8178 | 81.780 | 43.926 | 18.000 | 324.00 | - | "Created seed tracks in case 0" | 200 | 7515 | 37.575 | 18.383 | 8.0000 | 136.00 | - | "Created seed tracks in case 1" | 200 | 13689 | 68.445 | 32.267 | 14.000 | 261.00 | - | "Created seed tracks in case 2" | 200 | 15438 | 77.190 | 38.337 | 14.000 | 315.00 | - | "Created seed tracks in recovery step" | 100 | 839 | 8.3900 | 5.5315 | 1.0000 | 29.000 | - | "Created two-hit combinations in case 0" | 32389 | 879736 | 27.162 | 19.730 | 0.0000 | 123.00 | - | "Created two-hit combinations in case 1" | 28337 | 1036395 | 36.574 | 24.711 | 0.0000 | 130.00 | - | "Created two-hit combinations in case 2" | 21984 | 1223027 | 55.633 | 38.068 | 0.0000 | 186.00 | -PrKalmanFilterForward INFO Number of counters : 6 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Pre outlier chi2 cut" | 194 | - | "chi2 cut" | 393 | - | "nIterations" | 1496 | 3929 | 2.6263 | - | "nOutlierIterations" | 1302 | 1444 | 1.1091 | - | "nTracksInput" | 100 | 1496 | 14.960 | - | "nTracksOutput" | 100 | 909 | 9.0900 | -PrKalmanFilterMatch INFO Number of counters : 6 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Pre outlier chi2 cut" | 132 | - | "chi2 cut" | 407 | - | "nIterations" | 9199 | 19566 | 2.1270 | - | "nOutlierIterations" | 9067 | 4958 | 0.54682 | - | "nTracksInput" | 100 | 9199 | 91.990 | - | "nTracksOutput" | 100 | 8660 | 86.600 | -PrLHCbID2MCParticleVPUTFTMU INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#removed null MCParticles" | 240248 | 0 | 0.0000 | -PrMatchNN INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#MatchingChi2" | 100 | 157972.2 | 1579.7 | - | "#MatchingMLP" | 9199 | 7837.057 | 0.85195 | - | "#MatchingTracks" | 100 | 9199 | 91.990 | -PrStoreSciFiHits INFO Number of counters : 25 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Average X in T1U" | 32970 | -1233815 | -37.422 | 1122.5 | -2656.2 | 2655.7 | - | "Average X in T1V" | 33500 | -867026.2 | -25.881 | 1108.4 | -2655.9 | 2655.8 | - | "Average X in T1X1" | 32389 | -807161.9 | -24.921 | 1132.6 | -2646.1 | 2646.2 | - | "Average X in T1X2" | 34150 | -397825.7 | -11.649 | 1107.3 | -2645.9 | 2645.9 | - | "Average X in T2U" | 33025 | -1030976 | -31.218 | 1142.6 | -2656.1 | 2654.8 | - | "Average X in T2V" | 33968 | -1049433 | -30.895 | 1122.9 | -2656.1 | 2656.3 | - | "Average X in T2X1" | 31279 | -1247906 | -39.896 | 1139.9 | -2646.2 | 2646.1 | - | "Average X in T2X2" | 35068 | -773526.4 | -22.058 | 1125.7 | -2646.1 | 2646.2 | - | "Average X in T3U" | 35871 | 113337.7 | 3.1596 | 1325.7 | -3188.0 | 3188.2 | - | "Average X in T3V" | 36875 | -771515.3 | -20.922 | 1327.3 | -3188.4 | 3188.1 | - | "Average X in T3X1" | 34684 | -504515.9 | -14.546 | 1338.1 | -3176.0 | 3175.4 | - | "Average X in T3X2" | 37897 | -601617 | -15.875 | 1316.5 | -3175.4 | 3176.1 | - | "Hits in T1U" | 400 | 32970 | 82.425 | 36.142 | 10.000 | 232.00 | - | "Hits in T1V" | 400 | 33500 | 83.750 | 35.079 | 15.000 | 214.00 | - | "Hits in T1X1" | 400 | 32389 | 80.972 | 34.832 | 9.0000 | 202.00 | - | "Hits in T1X2" | 400 | 34150 | 85.375 | 35.455 | 13.000 | 215.00 | - | "Hits in T2U" | 400 | 33025 | 82.562 | 35.126 | 17.000 | 208.00 | - | "Hits in T2V" | 400 | 33968 | 84.920 | 35.954 | 18.000 | 237.00 | - | "Hits in T2X1" | 400 | 31279 | 78.198 | 31.971 | 11.000 | 192.00 | - | "Hits in T2X2" | 400 | 35068 | 87.670 | 35.868 | 17.000 | 246.00 | - | "Hits in T3U" | 400 | 35871 | 89.677 | 36.292 | 17.000 | 236.00 | - | "Hits in T3V" | 400 | 36875 | 92.188 | 38.492 | 16.000 | 249.00 | - | "Hits in T3X1" | 400 | 34684 | 86.710 | 36.146 | 16.000 | 234.00 | - | "Hits in T3X2" | 400 | 37897 | 94.743 | 38.718 | 15.000 | 274.00 | - | "Total number of hits" | 100 | 411676 | 4116.8 | 1551.2 | 1069.0 | 9085.0 | -PrStoreUTHit INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#banks" | 29 | 6264 | 216.00 | -PrTrackAssociator INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Efficiency" | 4590 | 3821 |( 83.24619 +- 0.5512298)% | - | "MC particles per track" | 3821 | 4248 | 1.1118 | + | "#iterations/1" | 115 | 129 | 1.1217 | 0.32698 | 1.0000 | 2.0000 | + | "#iterations/2" | 15 | 30 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | + | "#iterations/Opt" | 116 | 15 | 0.12931 | 0.33554 | 0.0000 | 1.0000 | Streaming_filter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 29 | 29 |( 100.0000 +- 0.000000)% | -TBTCForward INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 905 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 905 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 905 | -TBTC_Match INFO Number of counters : 3 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 8619 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 8619 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 8619 | + |*"Cut selection efficiency" | 32 | 32 |( 100.0000 +- 0.000000)% | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | -ToolSvc.TrackFunctorFactory INFO Number of counters : 2 +ToolSvc.TrackFunctorFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | -TrackBeamLineVertexFinderSoA INFO Number of counters : 1 +UnpackBestTracks INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 100 | 591 | 5.9100 | -VPClus INFO Number of counters : 1 + | "# Unpacked Tracks" | 100 | 41843 | 418.43 | +UnpackMuonPIDs INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Clusters" | 100 | 255452 | 2554.5 | -VeloClusterTrackingSIMD INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Clusters" | 100 | 255452 | 2554.5 | - | "Nb of Produced Tracks" | 100 | 28465 | 284.65 | + | "# UnPackedData" | 100 | 9808 | 98.080 | 51.754 | 8.0000 | 340.00 | bandq_b_hadron INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 29 |( 29.00000 +- 4.537621)% | - |*"# passed CombinationCut" | 471 | 58 |( 12.31423 +- 1.514111)% | - |*"# passed CompositeCut" | 58 | 29 |( 50.00000 +- 6.565322)% | - |*"# passed vertex fit" | 58 | 58 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 50 | 0.50000 | - | "Input2 size" | 100 | 934 | 9.3400 | + |*"# passed" | 100 | 32 |( 32.00000 +- 4.664762)% | + |*"# passed CombinationCut" | 485 | 83 |( 17.11340 +- 1.710171)% | + |*"# passed CompositeCut" | 83 | 35 |( 42.16867 +- 5.420477)% | + |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 60 | 0.60000 | + | "Input2 size" | 100 | 843 | 8.4300 | | "Lifetime fit did not converge. Aborting." | 2 | -bandq_b_hadron#1 INFO Number of counters : 6 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 1 |( 1.000000 +- 0.9949874)% | - |*"# passed CombinationCut" | 471 | 58 |( 12.31423 +- 1.514111)% | - |*"# passed CompositeCut" | 58 | 1 |( 1.724138 +- 1.709210)% | - |*"# passed vertex fit" | 58 | 58 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 50 | 0.50000 | - | "Input2 size" | 100 | 934 | 9.3400 | +bandq_b_hadron#1 INFO Number of counters : 7 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"# passed" | 100 | 4 |( 4.000000 +- 1.959592)% | + |*"# passed CombinationCut" | 485 | 83 |( 17.11340 +- 1.710171)% | + |*"# passed CompositeCut" | 83 | 4 |( 4.819277 +- 2.350858)% | + |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 60 | 0.60000 | + | "Input2 size" | 100 | 843 | 8.4300 | + | "Lifetime fit did not converge. Aborting." | 1 | bandq_detached_kaons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 8936 | 934 |( 10.45210 +- 0.3236369)% | + |*"Cut selection efficiency" | 9381 | 843 |( 8.986249 +- 0.2952692)% | charmonium_dimuon INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 53 | 50 |( 94.33962 +- 3.174182)% | + |*"Cut selection efficiency" | 64 | 60 |( 93.75000 +- 3.025768)% | charmonium_dimuon_base INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 53 |( 53.00000 +- 4.990992)% | - |*"# passed CombinationCut" | 147 | 56 |( 38.09524 +- 4.005334)% | - |*"# passed CompositeCut" | 56 | 53 |( 94.64286 +- 3.008961)% | - |*"# passed vertex fit" | 56 | 56 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 234 | 2.3400 | - | "Input2 size" | 100 | 234 | 2.3400 | + |*"# passed" | 100 | 60 |( 60.00000 +- 4.898979)% | + |*"# passed CombinationCut" | 843 | 74 |( 8.778173 +- 0.9746253)% | + |*"# passed CompositeCut" | 74 | 64 |( 86.48649 +- 3.974133)% | + |*"# passed vertex fit" | 74 | 74 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 452 | 4.5200 | + | "Input2 size" | 100 | 452 | 4.5200 | charmonium_muons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 1274 | 234 |( 18.36735 +- 1.084852)% | -fromPrSeedingTracksV1Tracks INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of converted Tracks" | 100 | 14585 | 145.85 | -fromPrVeloTracksV1TracksMerger INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of converted Tracks" | 29 | 8232 | 283.86 | -fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 100 | 9524 | 95.240 | + |*"Cut selection efficiency" | 1444 | 452 |( 31.30194 +- 1.220322)% | jpsi INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 50 | 50 |( 100.0000 +- 0.000000)% | + |*"Cut selection efficiency" | 60 | 60 |( 100.0000 +- 0.000000)% | require_pvs INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 100 | 100 |( 100.0000 +- 0.000000)% | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref b/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref index 6203106016c..08e301c9bab 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref @@ -2,20 +2,19 @@ GraphClustering INFO Built <320.6> graph calo clustering ToolSvc INFO Removing all tools created by ToolSvc ApplicationMgr INFO Application Manager Finalized successfully ApplicationMgr INFO Application Manager Terminated successfully -BdsToPhiPhiCombiner INFO Number of counters : 4 +BdsToPhiPhiCombiner INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 5 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed CombinationCut" | 2 | 0 |( 0.000000 +- 0.000000)% | - | "Input1 size" | 5 | 2 | 0.40000 | - | "Input2 size" | 5 | 2 | 0.40000 | + | "Input1 size" | 5 | 0 | 0.0000 | + | "Input2 size" | 5 | 0 | 0.0000 | BnoCPhiCombiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 5 | 1 |( 20.00000 +- 17.88854)% | - |*"# passed CombinationCut" | 162 | 4 |( 2.469136 +- 1.219231)% | - |*"# passed CompositeCut" | 4 | 2 |( 50.00000 +- 25.00000)% | - |*"# passed vertex fit" | 4 | 4 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 5 | 39 | 7.8000 | - | "Input2 size" | 5 | 39 | 7.8000 | + |*"# passed" | 5 | 0 |( 0.000000 +- 0.000000)% | + |*"# passed CombinationCut" | 136 | 2 |( 1.470588 +- 1.032189)% | + |*"# passed CompositeCut" | 2 | 0 |( 0.000000 +- 0.000000)% | + |*"# passed vertex fit" | 2 | 2 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 5 | 37 | 7.4000 | + | "Input2 size" | 5 | 37 | 7.4000 | CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#total tracks" | 5 | 625 | 125.00 | 57.834 | 58.000 | 201.00 | @@ -49,25 +48,25 @@ CaloFutureMergedPi0.EcalCovariance INFO Number of counters : 1 CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 216 | 43.200 | 29.721 | 9.0000 | 81.000 | - | "average chi2" | 216 | 83.16676 | 0.38503 | 0.68874 | 0.0015031 | 4.3440 | + | "average chi2" | 216 | 83.16766 | 0.38504 | 0.68873 | 0.0015031 | 4.3440 | | "average energy (track based)" | 418 | 8325.499 | 19.917 | 48.359 | 0.0000 | 533.94 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 3 | 3 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | | "#links in table" | 5 | 489 | 97.800 | 47.309 | 37.000 | 155.00 | - | "average chi2" | 489 | 3871.032 | 7.9162 | 15.650 | 0.0012662 | 120.09 | + | "average chi2" | 489 | 3871.074 | 7.9163 | 15.650 | 0.0012664 | 120.10 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 532 | 106.40 | 50.078 | 43.000 | 166.00 | - | "average chi2" | 532 | 46.36882 | 0.087159 | 0.11883 | 1.0794e-05 | 0.99110 | + | "average chi2" | 532 | 46.36885 | 0.087159 | 0.11883 | 1.0796e-05 | 0.99110 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 327 | 65.400 | 24.679 | 46.000 | 111.00 | | "average chi2" | 327 | 30.1319 | 0.092146 | 0.12916 | 0.00021690 | 0.76357 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 507 | -12.407 | -0.024471 | 0.044314 | -0.20720 | 0.077631 | - | "average E/p" | 507 | 2.165586 | 0.0042714 | 0.0045773 | 0.0000 | 0.038752 | + | "average DLL" | 507 | -12.40702 | -0.024471 | 0.044314 | -0.20720 | 0.077630 | + | "average E/p" | 507 | 2.165585 | 0.0042714 | 0.0045773 | 0.0000 | 0.038752 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "energy (calo) associated to track" | 484 | 4519907 | 9338.7 | 15225.0 | 0.0000 | 1.0861e+05 | @@ -96,9 +95,8 @@ ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | "Pileup scale" | 1465 | 10062 | 6.8683 | 1.6773 | 4.0000 | 9.0000 | | "Pileup subtracted ratio" | 1462 | 1266.505 | 0.86628 | 0.13457 | 0.10630 | 0.99751 | | "Skip negative energy correction" | 3 | -CloneKillerForward INFO Number of counters : 2 +CloneKillerForward INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 5 | 598 | 119.60 | | "nTracksSelected" | 5 | 136 | 27.200 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -118,13 +116,12 @@ FutureEcalZSup INFO Number of counters : 1 FutureHcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"No bank found" | 5 | 0 |( 0.000000 +- 0.000000)% | -GaudiAllenCountAndDumpLineDecisions INFO Number of counters : 56 +GaudiAllenCountAndDumpLineDecisions INFO Number of counters : 55 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Selected by Hlt1BeamGasDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BeamOneDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BeamTwoDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BothBeamsDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | - |*"Selected by Hlt1Bs2GammaGammaDecision" | 5 | 1 |( 20.00000 +- 17.88854)% | |*"Selected by Hlt1D2KKDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1D2KPiAlignmentDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1D2KPiDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | @@ -189,7 +186,7 @@ LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | "Nb of Produced Tracks" | 5 | 456 | 91.200 | MuonIDHlt2AlgLong INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 84 | -64.64965 | -0.76964 | 1.2100 | -5.6539 | 0.0000 | + | "BgLL" | 84 | -64.64967 | -0.76964 | 1.2100 | -5.6539 | 0.0000 | | "MuLL" | 84 | -716.1308 | -8.5254 | 3.6350 | -11.513 | -0.20127 | | "muonMVAStat" | 84 | -20.79248 | -0.24753 | 1.2310 | -2.1618 | 3.7953 | |*"nInAcceptance" | 625 | 492 |( 78.72000 +- 1.637150)% | @@ -201,10 +198,10 @@ MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | "Nb of input v2 MuonPIDs" | 5 | 625 | 125.00 | ParticleRangeFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 582 | 79 |( 13.57388 +- 1.419754)% | + |*"Cut selection efficiency" | 582 | 73 |( 12.54296 +- 1.372890)% | ParticleRangeFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 79 | 39 |( 49.36709 +- 5.624989)% | + |*"Cut selection efficiency" | 73 | 37 |( 50.68493 +- 5.851508)% | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Accepted input tracks" | 5 | 1048 | 209.60 | @@ -244,7 +241,7 @@ PrKalmanFilterForward INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 20 | | "chi2 cut" | 33 | - | "nIterations" | 136 | 350 | 2.5735 | + | "nIterations" | 136 | 351 | 2.5809 | | "nOutlierIterations" | 116 | 118 | 1.0172 | | "nTracksInput" | 5 | 136 | 27.200 | | "nTracksOutput" | 5 | 83 | 16.600 | @@ -252,7 +249,7 @@ PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 7 | | "chi2 cut" | 33 | - | "nIterations" | 582 | 1241 | 2.1323 | + | "nIterations" | 582 | 1242 | 2.1340 | | "nOutlierIterations" | 575 | 318 | 0.55304 | | "nTracksInput" | 5 | 582 | 116.40 | | "nTracksOutput" | 5 | 542 | 108.40 | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref.x86_64_v3-opt index 9c4ec600207..341b0d6f072 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref.x86_64_v3-opt @@ -2,20 +2,19 @@ GraphClustering INFO Built <320.6> graph calo clustering ToolSvc INFO Removing all tools created by ToolSvc ApplicationMgr INFO Application Manager Finalized successfully ApplicationMgr INFO Application Manager Terminated successfully -BdsToPhiPhiCombiner INFO Number of counters : 4 +BdsToPhiPhiCombiner INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 5 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed CombinationCut" | 2 | 0 |( 0.000000 +- 0.000000)% | - | "Input1 size" | 5 | 2 | 0.40000 | - | "Input2 size" | 5 | 2 | 0.40000 | + | "Input1 size" | 5 | 0 | 0.0000 | + | "Input2 size" | 5 | 0 | 0.0000 | BnoCPhiCombiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 5 | 1 |( 20.00000 +- 17.88854)% | - |*"# passed CombinationCut" | 150 | 4 |( 2.666667 +- 1.315435)% | - |*"# passed CompositeCut" | 4 | 2 |( 50.00000 +- 25.00000)% | - |*"# passed vertex fit" | 4 | 4 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 5 | 38 | 7.6000 | - | "Input2 size" | 5 | 38 | 7.6000 | + |*"# passed" | 5 | 0 |( 0.000000 +- 0.000000)% | + |*"# passed CombinationCut" | 136 | 2 |( 1.470588 +- 1.032189)% | + |*"# passed CompositeCut" | 2 | 0 |( 0.000000 +- 0.000000)% | + |*"# passed vertex fit" | 2 | 2 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 5 | 37 | 7.4000 | + | "Input2 size" | 5 | 37 | 7.4000 | CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#total tracks" | 5 | 626 | 125.20 | 58.342 | 58.000 | 201.00 | @@ -49,56 +48,55 @@ CaloFutureMergedPi0.EcalCovariance INFO Number of counters : 1 CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 215 | 43.000 | 29.509 | 9.0000 | 81.000 | - | "average chi2" | 215 | 84.95025 | 0.39512 | 0.69722 | 0.0015030 | 4.3440 | + | "average chi2" | 215 | 84.95163 | 0.39512 | 0.69722 | 0.0015031 | 4.3440 | | "average energy (track based)" | 418 | 8297.31 | 19.850 | 47.577 | 0.0000 | 529.67 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 3 | 3 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | | "#links in table" | 5 | 488 | 97.600 | 47.411 | 37.000 | 155.00 | - | "average chi2" | 488 | 3883.873 | 7.9588 | 15.705 | 0.0012662 | 120.23 | + | "average chi2" | 488 | 3876.389 | 7.9434 | 15.670 | 0.0012664 | 120.10 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 532 | 106.40 | 50.413 | 43.000 | 167.00 | - | "average chi2" | 532 | 46.44627 | 0.087305 | 0.11892 | 1.0729e-05 | 0.99110 | + | "average chi2" | 532 | 46.4463 | 0.087305 | 0.11892 | 1.0732e-05 | 0.99110 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 326 | 65.200 | 24.310 | 46.000 | 110.00 | | "average chi2" | 326 | 30.05494 | 0.092193 | 0.12948 | 0.00021717 | 0.76358 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 507 | -12.49922 | -0.024653 | 0.044278 | -0.20720 | 0.077632 | - | "average E/p" | 507 | 2.156642 | 0.0042537 | 0.0045691 | 0.0000 | 0.038492 | + | "average DLL" | 507 | -12.49924 | -0.024653 | 0.044278 | -0.20720 | 0.077632 | + | "average E/p" | 507 | 2.156643 | 0.0042537 | 0.0045691 | 0.0000 | 0.038492 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "energy (calo) associated to track" | 484 | 4519907 | 9338.7 | 15225.0 | 0.0000 | 1.0861e+05 | ClassifyPhotonElectronAlg INFO Number of counters : 14 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 563 | -281417.6 | -499.85 | 604.76 | -4041.4 | 893.16 | + | "Electron Delta(E)" | 563 | -276974.3 | -491.96 | 598.07 | -4041.4 | 893.16 | | "Electron Delta(X)" | 563 | -420.2936 | -0.74653 | 11.638 | -22.780 | 22.317 | | "Electron Delta(Y)" | 563 | 2.688982 | 0.0047762 | 11.868 | -22.755 | 22.326 | - | "Electron Delta(Z)" | 563 | 36470.69 | 64.779 | 14.851 | 21.656 | 107.49 | - | "Electron corrected energy" | 563 | 3923893 | 6969.6 | 8852.7 | 133.16 | 99561.0 | - | "Electrons pT-rejected after correction" | 7 | - | "Photon Delta(E)" | 902 | -253236.6 | -280.75 | 450.82 | -4053.1 | 3246.9 | + | "Electron Delta(Z)" | 563 | 36479.31 | 64.795 | 14.849 | 23.449 | 107.49 | + | "Electron corrected energy" | 563 | 3928336 | 6977.5 | 8853.7 | 133.16 | 99561.0 | + | "Electrons pT-rejected after correction" | 8 | + | "Photon Delta(E)" | 902 | -245351.3 | -272.01 | 439.73 | -4053.1 | 3246.9 | | "Photon Delta(X)" | 902 | -106.9161 | -0.11853 | 12.200 | -22.781 | 22.326 | | "Photon Delta(Y)" | 902 | -178.3985 | -0.19778 | 11.972 | -22.781 | 25.024 | - | "Photon Delta(Z)" | 902 | 50409.97 | 55.887 | 14.607 | 11.387 | 101.64 | - | "Photon corrected energy" | 902 | 4167092 | 4619.8 | 10426.0 | 92.686 | 1.4783e+05 | + | "Photon Delta(Z)" | 902 | 50499.45 | 55.986 | 14.483 | 19.106 | 101.64 | + | "Photon corrected energy" | 902 | 4174977 | 4628.6 | 10427.0 | 127.87 | 1.4783e+05 | | "Photons pT-rejected after correction" | 22 | - | "electronHypos" | 5 | 556 | 111.20 | 35.617 | 68.000 | 161.00 | + | "electronHypos" | 5 | 555 | 111.00 | 35.861 | 67.000 | 161.00 | | "photonHypos" | 5 | 880 | 176.00 | 41.410 | 130.00 | 232.00 | ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | " Inner" | 439 | 435.8088 | 0.99273 | 0.018134 | 0.96565 | 1.0735 | | " Middle" | 414 | 415.8637 | 1.0045 | 0.019131 | 0.97751 | 1.1058 | - | " Outer" | 608 | 606.929 | 0.99824 | 0.014859 | 0.97378 | 1.0575 | - | "Pileup offset" | 1461 | 621737.3 | 425.56 | 463.68 | 4.3231 | 3301.8 | - | "Pileup scale" | 1465 | 10268 | 7.0089 | 1.6401 | 4.0000 | 9.0000 | - | "Pileup subtracted ratio" | 1461 | 1261.09 | 0.86317 | 0.13815 | 0.035532 | 0.99751 | - | "Skip negative energy correction" | 4 | -CloneKillerForward INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 5 | 596 | 119.20 | + | " Outer" | 609 | 607.9526 | 0.99828 | 0.014882 | 0.97378 | 1.0575 | + | "Pileup offset" | 1462 | 609422.2 | 416.84 | 453.64 | 4.3231 | 3301.8 | + | "Pileup scale" | 1465 | 10062 | 6.8683 | 1.6773 | 4.0000 | 9.0000 | + | "Pileup subtracted ratio" | 1462 | 1266.505 | 0.86628 | 0.13457 | 0.10630 | 0.99751 | + | "Skip negative energy correction" | 3 | +CloneKillerForward INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "nTracksSelected" | 5 | 137 | 27.400 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -118,13 +116,12 @@ FutureEcalZSup INFO Number of counters : 1 FutureHcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"No bank found" | 5 | 0 |( 0.000000 +- 0.000000)% | -GaudiAllenCountAndDumpLineDecisions INFO Number of counters : 56 +GaudiAllenCountAndDumpLineDecisions INFO Number of counters : 55 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Selected by Hlt1BeamGasDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BeamOneDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BeamTwoDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BothBeamsDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | - |*"Selected by Hlt1Bs2GammaGammaDecision" | 5 | 1 |( 20.00000 +- 17.88854)% | |*"Selected by Hlt1D2KKDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1D2KPiAlignmentDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1D2KPiDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | @@ -189,7 +186,7 @@ LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | "Nb of Produced Tracks" | 5 | 455 | 91.000 | MuonIDHlt2AlgLong INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 84 | -64.64964 | -0.76964 | 1.2100 | -5.6539 | 0.0000 | + | "BgLL" | 84 | -64.64965 | -0.76964 | 1.2100 | -5.6539 | 0.0000 | | "MuLL" | 84 | -716.1311 | -8.5254 | 3.6350 | -11.513 | -0.20127 | | "muonMVAStat" | 84 | -20.79248 | -0.24753 | 1.2310 | -2.1618 | 3.7953 | |*"nInAcceptance" | 626 | 491 |( 78.43450 +- 1.643789)% | @@ -201,10 +198,10 @@ MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | "Nb of input v2 MuonPIDs" | 5 | 626 | 125.20 | ParticleRangeFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 583 | 75 |( 12.86449 +- 1.386627)% | + |*"Cut selection efficiency" | 583 | 72 |( 12.34991 +- 1.362617)% | ParticleRangeFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 75 | 38 |( 50.66667 +- 5.772989)% | + |*"Cut selection efficiency" | 72 | 37 |( 51.38889 +- 5.890283)% | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Accepted input tracks" | 5 | 1047 | 209.40 | @@ -252,7 +249,7 @@ PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 7 | | "chi2 cut" | 32 | - | "nIterations" | 582 | 1241 | 2.1323 | + | "nIterations" | 582 | 1242 | 2.1340 | | "nOutlierIterations" | 575 | 318 | 0.55304 | | "nTracksInput" | 5 | 582 | 116.40 | | "nTracksOutput" | 5 | 543 | 108.60 | @@ -304,7 +301,7 @@ ToolSvc.TrackFunctorFactory INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 5 | 34 | 6.8000 | + | "Nb PVs" | 5 | 33 | 6.6000 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 5 | 12452 | 2490.4 | diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 8059dbcbc76..c300014a6b3 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -30,10 +30,10 @@ from PyConf.application import ( make_odin, default_raw_event, root_writer, - make_data_with_FetchDataFromFile, - generate_encoding_dictionary, - register_encoding_dictionary, -) + make_data_with_FetchDataFromFile + ) + +from PyConf.filecontent_metadata import generate_encoding_dictionary, register_encoding_dictionary from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError from PyConf.application import all_nodes_and_algs @@ -57,11 +57,7 @@ from .selreports import make_selreports log = logging.getLogger(__name__) -# TODO move the options global to a separate module such that functions -# defined here cannot access it -# FIXME _enabled is a workaround for using ConfigurableUser -#: Global ApplicationOptions instance holding the options for Moore -options = ApplicationOptions(_enabled=False) +from .options import options ROOT_RAW_EVENT_LOCATION = '/Event/DAQ/RawEvent' @@ -202,7 +198,6 @@ def report_writers_nodes(streams, if process == "hlt1": srm = make_selreports(process, physics_lines, erw) - algs.append(srm) # The SelReports maker must be a barrier as its inputs are conditional # on line decisions (if a line does not fire, its outputs will not be # available to make SelReports with) @@ -454,13 +449,15 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): lines = streams_dict_to_lines_list(streams) - rw_node, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_node( + rw_nodes, new_raw_banks, extra_outputs, barriers, dec_reports = report_writers_nodes( streams, options.data_type, process, + options.output_manifest_file, # Can only run association when we have access to the linker tables. Only want association for hlt step associate_mc=process == "hlt2" and options.simulation - and options.input_type == ROOT_KEY and options.output_type == ROOT_KEY, + and options.input_type == ROOT_KEY + and options.output_type == ROOT_KEY, clone_mc=options.simulation and options.input_type == 'ROOT') dec = CompositeNode( diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 8aaea1cd3fc..759fa046534 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -21,7 +21,7 @@ from PyConf import configurable from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.components import get_output from PyConf.location_prefix import prefix -from PyConf.application import register_encoding_dictionary +from PyConf.filecontent_metadata import register_encoding_dictionary from GaudiConf.reading import type_map from .cloning import clone_line_outputs diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index a9a165b65de..44f06a41c88 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -11,53 +11,83 @@ import logging import os -from PyConf.Algorithms import ( - PackMCParticle, - PackMCVertex, -) +from PyConf.packing import packers_map from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic from Gaudi.Configuration import WARNING as OUTPUTLEVEL +from PyConf.Algorithms import PackMCParticle, PackMCVertex, HltPackedBufferWriter + log = logging.getLogger(__name__) from PyConf import configurable @configurable -def pack_stream_objects(stream, prpacking, encoding_key, enable_check=False): - """Return a list of packers that will produce all packed output. - +def pack_stream_objects(stream, + inputs, + encoding_key, + source_id, + enable_check=False): + """Return CF node that packs and serialises a set of containers to a raw bank. Args: - stream (str): TES root containing objects to be packed. - prpacking (PersistRecoPacking object): PersistRecoPacking object that describes packing configuration. + stream (str): TES root containing objects to be persisted. + inputs (map): Type: locations to be persisted Returns: - algs (list): Algorithms to run the packing. - outputs (list of str): Locations that should be persisted, in the - specification used by ROOT output writers (e.g. OutputStream). + serialisation_node (CompositeNode). + output_raw_data (DataHandle): Raw event with serialised data, + i.e. the DstData bank. """ + p_map = packers_map() + packers = [] + + for t, p in p_map.items(): + if t in inputs.keys(): + packer = p( + InputName=[force_location(loc) for loc in inputs[t]], + OutputLevel=OUTPUTLEVEL, + EnableCheck=enable_check, + EncodingKey=encoding_key) - persistreco_packers = prpacking.packers( - output_level=OUTPUTLEVEL, - enable_check=enable_check, - encoding_key=encoding_key) + packers += [packer] packers_cf = CompositeNode( "packers", - children=persistreco_packers, + children=packers, combine_logic=NodeLogic.NONLAZY_OR, force_order=True, ) - packers_output_locations = [] - for p in persistreco_packers: - packers_output_locations += [ - get_output(p.outputs["OutputName"]).location - ] + packers_output_locations = [ + get_output(p.outputs["OutputName"]).location for p in packers + ] + + bank_writer = HltPackedBufferWriter( + PackedContainers=packers_output_locations, + OutputLevel=OUTPUTLEVEL, + SourceID=source_id) + + serialisation_cf = CompositeNode( + "serialisation", + children=[bank_writer], + ) - return packers_cf, packers_output_locations + return packers_cf, serialisation_cf, bank_writer + + +def pack_stream_mc_locations(stream): + return [ + os.path.join(stream, + str(PackMCParticle.getDefaultProperties()["InputName"])), + os.path.join(stream, + str(PackMCVertex.getDefaultProperties()["InputName"])), + os.path.join(stream, + str(PackMCParticle.getDefaultProperties()["OutputName"])), + os.path.join(stream, + str(PackMCVertex.getDefaultProperties()["OutputName"])) + ] def pack_stream_mc(stream): diff --git a/Hlt/Moore/python/Moore/persistence/serialisation.py b/Hlt/Moore/python/Moore/persistence/serialisation.py index a66b767eee5..658a8210a88 100644 --- a/Hlt/Moore/python/Moore/persistence/serialisation.py +++ b/Hlt/Moore/python/Moore/persistence/serialisation.py @@ -20,7 +20,7 @@ from PyConf.control_flow import CompositeNode from Gaudi.Configuration import WARNING as OUTPUTLEVEL -def serialise_packed_containers(packed_locations, source_id): +def serialise_packed_containers(packed_handles, source_id): """Return CF node that serialises a set of packed containers to a raw bank. Args: @@ -33,7 +33,7 @@ def serialise_packed_containers(packed_locations, source_id): """ bank_writer = HltPackedBufferWriter( - PackedContainers=packed_locations, + PackedContainers=packed_handles, OutputLevel=OUTPUTLEVEL, SourceID=source_id) diff --git a/Hlt/Moore/python/Moore/selreports.py b/Hlt/Moore/python/Moore/selreports.py index 642fe7b6af6..362bce4dc36 100644 --- a/Hlt/Moore/python/Moore/selreports.py +++ b/Hlt/Moore/python/Moore/selreports.py @@ -38,7 +38,7 @@ from PyConf.Algorithms import ( LHCb__Converters__Composites__TracksWithMuonIDToVectorOfRecVertex, SelReportsMaker, ) -from PyConf.application import register_encoding_dictionary +from PyConf.filecontent_metadata import retrieve_encoding_dictionary __all__ = ["make_selreports"] log = logging.getLogger(__name__) @@ -227,9 +227,14 @@ def make_selreports(process, lines, decreports, **kwargs): # No lines we can handle, so do nothing names, outputs, types = [], [], [] - key = int( - register_encoding_dictionary( - "{}SelectionID".format(process.capitalize()), names), 16) + dec_props = decreports.properties + # TODO: perhaps ExecutionReportsWriter should get an explicit encoding key.. + key = dec_props.get('EncodingKey', dec_props.get('TCK', None)) + assert key is not None + # get the content for this key, and verify it contains SelectionIDs + table = retrieve_encoding_dictionary('{:08x}'.format(key)) + sid = table["{}SelectionID".format(process.capitalize())] + assert all(n in sid.values() for n in names) # Each line output should be unique; we expect no two lines to do exactly # the same work diff --git a/Hlt/Moore/python/Moore/tests/test_ft_persistency.py b/Hlt/Moore/python/Moore/tests/test_ft_persistency.py deleted file mode 100644 index ef62e23fa1c..00000000000 --- a/Hlt/Moore/python/Moore/tests/test_ft_persistency.py +++ /dev/null @@ -1,169 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb Collaboration # -# # -# This software is distributed under the terms of the GNU General Public # -# Licence version 3 (GPL Version 3), 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. # -############################################################################### -############################################################################### -# This script aims to test the ability as adding FlavourTag object to the list of extra_outputs defined in an HLT2 line. -# Eventually the FlavourTags should be written to /Event/HLT2//FlavourTags or similar. - -# To run the script: -# /pathToStack/Moore/run gaudirun.py test_moore_options.py -# Instructions: -# 1. set up the software stack, for example like this: https://gitlab.cern.ch/rmatev/lb-stack-setup -# 2. in Phys checkout the branch ft_hack_for_moore, and in Moore check out the Master branch - -# To investigate the output dst: -# ./run python -i DSTexplore.py out.dst out.hlt2.annsvc.pol.json out.hlt2.annsvc.json -# DSTexplore script found here: https://gitlab.cern.ch/-/snippets/1607 - -from Moore import options, run_moore -from Moore.config import HltLine -from RecoConf.global_tools import stateProvider_with_simplified_geom -from RecoConf.reconstruction_objects import make_pvs, upfront_reconstruction -from RecoConf.event_filters import require_pvs -from RecoConf.decoders import default_ft_decoding_version - -from GaudiKernel.SystemOfUnits import MeV, GeV - -from PyConf.Algorithms import FunctionalSSPionTagger - -from Hlt2Conf.standard_particles import make_mass_constrained_jpsi2mumu, make_has_rich_long_pions, make_phi2kk -from Hlt2Conf.algorithms import require_all, ParticleFilterWithPVs, ParticleFilter, ParticleCombiner - -decay = "Bs2JpsiPhi" -#decay = "B2jPsiK" - -# 4. specify which data file you want to run over, and ammend options accordingly -if decay == "Bs2JpsiPhi": - input_files = [ - # Bs2JpsiPhi, 13144011 - "root://eoslhcb.cern.ch//eos/lhcb/grid/prod/lhcb/MC/Upgrade/LDST/00076706/0000/00076706_00000001_1.ldst" - ] -elif decay == "B2jPsiK": - input_files = [ - # B+ -> Jpsi K+, Jpsi->dimuon, 12143001 - "root://eoslhcb.cern.ch//eos/lhcb/grid/prod/lhcb/MC/Upgrade/LDST/00076711/0000/00076711_00000003_1.ldst", - ] - -else: - print("No matching input file for decay", decay) - -default_ft_decoding_version.global_bind(value=2) - - -def taggingPions(make_particles=make_has_rich_long_pions, - pvs=make_pvs, - p_min=2 * MeV, - p_max=200 * GeV, - pt_min=0.4 * GeV, - pt_max=10 * GeV, - eta_min=1.068, - pidp_max=5, - pidk_max=5, - ghostprob_max=0.5): - code = require_all('P > {p_min}', 'P < {p_max}', 'PT > {pt_min}', - 'PT < {pt_max}', 'PIDp < {pidp_max}', - 'PIDK < {pidk_max}', 'TRGHOSTPROB < {ghostprob_max}', - 'ETA > {eta_min}').format( - p_min=p_min, - p_max=p_max, - pt_min=pt_min, - pt_max=pt_max, - eta_min=eta_min, - pidp_max=pidp_max, - pidk_max=pidk_max, - ghostprob_max=ghostprob_max) - return ParticleFilterWithPVs(make_particles(), pvs(), Code=code) - - -# make sure we passed GEC and have PV in event -def prefilters(): - return [require_pvs(make_pvs())] - - -def make_phi(am_min=980 * MeV, - am_max=1060 * MeV, - pt=500. * MeV, - vchi2=10, - tr_chi2pdof=5, - pid_k=0): - phis = make_phi2kk() - code = require_all("in_range({am_min}, M, {am_max})", "PT > {pt}", - "VFASPF(VCHI2) < {vchi2}", - "MAXTREE('K+'==ABSID, TRCHI2DOF) < {tr_chi2pdof}", - "MINTREE('K+'==ABSID, PIDK) > {pid_k}").format( - am_min=am_min, - am_max=am_max, - pt=pt, - vchi2=vchi2, - tr_chi2pdof=tr_chi2pdof, - pid_k=pid_k) - return ParticleFilter(particles=phis, Code=code) - - -def make_bs2jpsiphi(am_min=5050 * MeV, - am_max=5650 * MeV, - am_min_vtx=5050 * MeV, - am_max_vtx=5650 * MeV, - vtx_chi2pdof=20): - phi = make_phi() - jpsi = make_mass_constrained_jpsi2mumu() - combination_code = require_all("in_range({am_min}, AM, {am_max})").format( - am_min=am_min, am_max=am_max) - vertex_code = require_all("in_range({am_min_vtx}, M, {am_max_vtx})", - "VFASPF(VCHI2PDOF) < {vtx_chi2pdof}").format( - am_min_vtx=am_min_vtx, - am_max_vtx=am_max_vtx, - vtx_chi2pdof=vtx_chi2pdof) - return ParticleCombiner( - particles=[phi, jpsi], - DecayDescriptors=['B_s0 -> J/psi(1S) phi(1020)'], - CombinationCut=combination_code, - MotherCut=vertex_code) - - -def bs2jpsiphi_line(name='Hlt2BsToJpsiPhiLine', prescale=1): - - b2jpsiphi = make_bs2jpsiphi() - pvs = make_pvs() - taggingParticles = taggingPions() - - sspionTagger = FunctionalSSPionTagger( - BCandidates=b2jpsiphi, - TaggingPions=taggingParticles, - PrimaryVertices=pvs) - - return [ - HltLine( - name=name, - algs=upfront_reconstruction() + prefilters() + [make_bs2jpsiphi()], - prescale=prescale, - extra_outputs=[("FlavourTagger", sspionTagger)]) - ] - - -public_tools = [stateProvider_with_simplified_geom()] - -options.input_files = input_files -options.input_type = 'ROOT' -options.input_raw_format = 4.3 -options.evt_max = 1000 -options.simulation = True -options.data_type = 'Upgrade' -options.dddb_tag = 'dddb-20171126' #'dddb-20201211' -options.conddb_tag = 'sim-20171127-vc-md100' #'sim-20201218-vc-md100' - -# 5. Name of the dst that is going to be written -options.output_file = 'out_{}_FT.dst'.format(decay) -options.output_type = 'ROOT' -options.output_manifest_file = '{}_FT_.hlt2.annsvc.pol.json'.format(decay) - -# runs the HLT2 line -if decay == "Bs2JpsiPhi": - run_moore(options, bs2jpsiphi_line, public_tools) diff --git a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py index 1d4ab39b34c..4c06fe704bb 100644 --- a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py @@ -419,14 +419,19 @@ def make_merged_pi0_various(ecalClusters, pvs): def make_calo(tracks, pvs, make_raw=default_raw_event, + calo_raw_event=False, chargedpid_types={ "calo": ["Long", "Downstream"], "brem": ["Long", "Downstream", "Upstream"] }, trackrels=None): # digits - rawEventEcal = make_raw(["EcalPacked"]) - rawEventHcal = make_raw(["HcalPacked"]) + if calo_raw_event: # needed for real data + rawEventEcal = make_raw(["Calo"]) + rawEventHcal = make_raw(["Calo"]) + else: + rawEventEcal = make_raw(["EcalPacked"]) + rawEventHcal = make_raw(["HcalPacked"]) rawToDigitsOutputEcal = make_digits(rawEventEcal) rawToDigitsOutputHcal = make_digits(rawEventHcal) digitsEcal = rawToDigitsOutputEcal["digitsEcal"] diff --git a/Hlt/RecoConf/python/RecoConf/data_from_file.py b/Hlt/RecoConf/python/RecoConf/data_from_file.py index 04f093c533e..9fe57d18f33 100644 --- a/Hlt/RecoConf/python/RecoConf/data_from_file.py +++ b/Hlt/RecoConf/python/RecoConf/data_from_file.py @@ -62,7 +62,6 @@ def _packed_reco_from_file(): 'PackedMuonPIDs': '/Event/pRec/Muon/MuonPID', 'PackedRichPIDs': '/Event/pRec/Rich/PIDs', 'PackedTracks': '/Event/pRec/Track/Best', - #'PackedMuonTracks': '/Event/pRec/Track/Muon', 'PackedNeutralProtos': '/Event/pRec/ProtoP/Neutrals', 'PackedChargedProtos': '/Event/pRec/ProtoP/Charged', } @@ -206,8 +205,6 @@ def reco_unpackers(): ('RichPIDs', richPIDs), ('Tracks', reco_unpacker('PackedTracks', UnpackTrack, 'UnpackBestTracks')), - #('MuonTracks', - # reco_unpacker('PackedMuonTracks', UnpackTrack, 'UnpackMuonTracks')), ('NeutralProtos', reco_unpacker('PackedNeutralProtos', UnpackProtoParticle, 'UnpackNeutralProtos')), diff --git a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py index ecfc674de31..6664bac6e6f 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py @@ -75,19 +75,24 @@ def require_gec(make_raw=default_raw_banks, cut=-1, **kwargs): @configurable def make_VeloClusterTrackingSIMD(algorithm=VeloClusterTrackingSIMD, - raw_event=default_raw_event): + raw_event=default_raw_event, + masked_sensors=[]): """Simple helper to make sure both, make_VeloClusterTrackingSIMD_tracks and make_VeloClusterTrackingSIMD_hits, access the identically configured version of VeloClusterTrackingSIMD Args: - make_raw (DataHandle): RawEventLocation for VeloClusterTrackingSIMD, defaults to `default_raw_event `. - algorithm: The Velo tracking algorithm to run. + make_raw (DataHandle): RawEventLocation for VeloClusterTrackingSIMD, defaults to `default_raw_event `; + algorithm: The Velo tracking algorithm to run; + masked_sensors: List of unique sensor IDs that will *not* be considered in the pattern reco's *tracks*, but are included in the *clusters* returned. Returns: The Velo tracking algorithm. """ - return algorithm(RawEventLocation=raw_event(["VP"])) + my_SensorMasks = [j in masked_sensors for j in range(208) + ] # 208 = LHCb::Pr::Velo::VPInfos::NSensors + return algorithm( + RawEventLocation=raw_event(["VP"]), SensorMasks=tuple(my_SensorMasks)) @configurable @@ -281,7 +286,8 @@ def make_TrackBeamLineVertexFinderSoA_pvs(velo_tracks): return pvs -def make_PatPV3DFuture_pvs(velo_tracks): +@configurable +def make_PatPV3DFuture_pvs(velo_tracks, use_beam_spot_cut=True): """Makes primary vertices from velo tracks using PatPV3DFuture. Args: @@ -298,7 +304,7 @@ def make_PatPV3DFuture_pvs(velo_tracks): PatPV3DFuture( InputTracks=velo_tracks["v1"], BeamSpotRCut=0.6, - UseBeamSpotRCut=True, + UseBeamSpotRCut=use_beam_spot_cut, minClusterMult=4).OutputVerticesName } from PyConf.Algorithms import RecV1ToPVConverter diff --git a/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py index 4d197813756..c0ea2af7707 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt2_tracking.py @@ -652,6 +652,7 @@ def make_light_reco_best_tracks( def make_pr_kf_light_reco_best_tracks(tracks, fast_reco, get_ghost_tool=get_UpgradeGhostId_tool, + max_chi2=2.8, fit_forward_first=True): """ Preselect forward,match, and downstream tracks @@ -692,8 +693,6 @@ def make_pr_kf_light_reco_best_tracks(tracks, first_ut_hits = ut_hits first_ft_hits = ft_hits - max_chi2 = 2.8 - kf_template = partial( PrKalmanFilter, MaxChi2=max_chi2, @@ -715,7 +714,7 @@ def make_pr_kf_light_reco_best_tracks(tracks, name="PrKalmanFilter" + name_1, Input=first, HitsUT=first_ut_hits, - HitsFT=first_ft_hits).Output + HitsFT=first_ft_hits).OutputTracks best_1 = tbtc_template( name="TBTC_" + name_1, @@ -731,7 +730,7 @@ def make_pr_kf_light_reco_best_tracks(tracks, name="PrKalmanFilter" + name_2, Input=declonned_2, HitsUT=second_ut_hits, - HitsFT=second_ft_hits).Output + HitsFT=second_ft_hits).OutputTracks best_2 = tbtc_template( name="TBTC" + name_2, TracksInContainers=[fitted_2]).TracksOutContainer @@ -752,7 +751,7 @@ def make_pr_kf_light_reco_best_tracks(tracks, HitsFT=ft_hits, ReferenceExtrapolator=TrackMasterExtrapolator( MaterialLocator=get_global_materiallocator()), - InputUniqueIDGenerator=make_unique_id_generator()).Output + InputUniqueIDGenerator=make_unique_id_generator()).OutputTracks best_down = tbtc_template( name="TBTC_down", TracksInContainers=[fitted_down]).TracksOutContainer @@ -773,6 +772,7 @@ def make_pr_kf_light_reco_best_tracks_without_UT( tracks, fast_reco, get_ghost_tool=get_UpgradeGhostId_tool_no_UT, + max_chi2=2.8, fit_forward_first=True): """ Preselect forward, match, and downstream tracks @@ -805,9 +805,6 @@ def make_pr_kf_light_reco_best_tracks_without_UT( second_ft_hits = tracks['FTHitsRes'] if fast_reco else ft_hits first_ft_hits = ft_hits - ## not sure we should hardcode this here... - max_chi2 = 2.8 - kf_template = partial( PrKalmanFilter, MaxChi2=max_chi2, @@ -827,7 +824,7 @@ def make_pr_kf_light_reco_best_tracks_without_UT( fitted_1 = kf_template( name="PrKalmanFilter" + name_1, Input=first, - HitsFT=first_ft_hits).Output + HitsFT=first_ft_hits).OutputTracks best_1 = tbtc_template( name="TBTC_" + name_1, @@ -842,7 +839,7 @@ def make_pr_kf_light_reco_best_tracks_without_UT( fitted_2 = kf_template( name="PrKalmanFilter" + name_2, Input=declonned_2, - HitsFT=second_ft_hits).Output + HitsFT=second_ft_hits).OutputTracks best_2 = tbtc_template( name="TBTC" + name_2, TracksInContainers=[fitted_2]).TracksOutContainer diff --git a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py index 1c296cf6634..945b7faafda 100644 --- a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py @@ -12,7 +12,7 @@ from PyConf import configurable from GaudiConf.PersistRecoConf import persisted_location from PyConf.Algorithms import (LHCb__Converters__Track__SOA__fromV1Track as - TrackSOAFromV1, MuonPIDConverter, + TrackSOAFromV1, fromV2MuonPIDV1MuonPID, MergeMuonPIDsV1, MuonPIDV2ToMuonTracks) from .hlt2_muonid import make_muon_ids @@ -64,8 +64,8 @@ def make_conv_muon_pids(muonPidsConfs, }).OutputMuonTracks # Convert to Keyed Container for ProtoParticle - muon_pids_v1[track_type] = MuonPIDConverter( - name="MuonPIDConverter" + track_type, + muon_pids_v1[track_type] = fromV2MuonPIDV1MuonPID( + name="fromV2MuonPIDV1MuonPID" + track_type, InputMuonPIDs=muonPidsConfs[track_type], InputMuonTracks=muon_tracks[track_type], InputTracks=best_tracks[track_type]["v1"] diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 420a450f1a5..5b2f467b53b 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -9,6 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from GaudiConf import reading +from GaudiConf.PersistRecoConf import persisted_location _reco_loc = { "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), @@ -20,13 +21,12 @@ _reco_loc = { "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), - "MuonPIDTracks": ("/Event/HLT2/Rec/Muon/MuonTracks","Tracks"), + "MuonPIDTracks": ("/Event/HLT2/Rec/Muon/MuonTracks", "Tracks"), "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs"), "RecSummary": ("/Event/HLT2/Rec/Summary", "RecSummary") } - def upfront_reconstruction(manifest): """Return a list DataHandles that define the upfront reconstruction output. @@ -45,18 +45,15 @@ def upfront_reconstruction(manifest): inv_map = {v: k for k, v in reading.type_map().items()} - #TODO/FIXME make sure that reco_manifest is a pure subset of manifest... - reco_manifest = { - 'PackedLocations': [(v[0], inv_map[v[1]]) for v in _reco_loc.values()] - } - - #d = manifest['PackedLocations'] - #print('*** got manifest:',d) + # make sure that the reco locations are spliced into the provided manifest... + dl = {v[0]: v[1] for v in manifest['PackedLocations']} + dl.update((v[0], inv_map[v[1]]) for v in _reco_loc.values()) + m = {'PackedLocations': [(k, v) for k, v in dl.items()]} ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... unpackers = reading.unpackers( - reading.make_locations(manifest, stream), - manifest, + reading.make_locations(m, stream), + m, decoder.OutputBuffers, configurables=False, mc=mc_algs, @@ -88,7 +85,10 @@ def reconstruction(manifest): ### Temporary: This to be compatible with data where the RecSummary does not exist. if "RecSummary" not in data.keys(): from PyConf.Algorithms import FakeRecSummaryMaker - data["RecSummary"] = FakeRecSummaryMaker().Output + data["RecSummary"] = FakeRecSummaryMaker( + outputs={ + "Output": persisted_location('RecSummary') + }).Output return data -- GitLab From fe046e563ee6e563b106a222304da5d6ef61cdcd Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 26 Aug 2022 17:55:14 +0200 Subject: [PATCH 070/102] updates from require_key --- Hlt/Moore/python/Moore/tcks.py | 5 ++--- Hlt/RecoConf/options/run_two_hlt2_recos.py | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Hlt/Moore/python/Moore/tcks.py b/Hlt/Moore/python/Moore/tcks.py index bb5a367da9c..05541a736da 100644 --- a/Hlt/Moore/python/Moore/tcks.py +++ b/Hlt/Moore/python/Moore/tcks.py @@ -47,9 +47,8 @@ The functions in this module currently support persisting the configuration of .. _TCK: https://twiki.cern.ch/twiki/bin/view/LHCb/TCK """ -import json +import GaudiConf def load_manifest(fname): - with open(fname, 'r', encoding='utf-8') as f: - return json.load(f) + return GaudiConf.reading.load_manifest(fname) diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index da1123b12db..f568a2b9ec5 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -15,7 +15,6 @@ from PyConf.Algorithms import PrForwardTrackingVelo from GaudiConf.PersistRecoConf import persisted_location - def make_two_reconstructions(): charged_protos_1 = reconstruction()["ChargedProtos"] neutral_protos_1 = reconstruction()["NeutralProtos"] -- GitLab From cd0eb1ea1c6d946864506facfc1ba1e5879b3834 Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 26 Aug 2022 17:55:30 +0200 Subject: [PATCH 071/102] updates from require_key --- Hlt/Moore/python/Moore/config.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index c300014a6b3..6ef83704863 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -23,15 +23,14 @@ from PyConf.control_flow import CompositeNode, NodeLogic from PyConf.application import ( MDF_KEY, ROOT_KEY, - ApplicationOptions, mdf_writer, online_writer, root_copy_input_writer, make_odin, default_raw_event, root_writer, - make_data_with_FetchDataFromFile - ) + make_data_with_FetchDataFromFile, +) from PyConf.filecontent_metadata import generate_encoding_dictionary, register_encoding_dictionary from GaudiConf.reading import unpack_rawevent, mc_unpackers -- GitLab From d2ba0c627ffe8065996b6b638d8645a82157e37b Mon Sep 17 00:00:00 2001 From: sesen Date: Mon, 29 Aug 2022 12:35:28 +0200 Subject: [PATCH 072/102] fixes for persistency --- Hlt/Moore/python/Moore/config.py | 10 ++++++- .../python/Moore/persistence/__init__.py | 30 ++++++++++++------- .../RecoConf/reco_objects_for_spruce.py | 1 - 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 6ef83704863..c8ff4ef6ec4 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -9,6 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from __future__ import absolute_import +from shutil import copy import re, logging, inspect, itertools from collections import namedtuple from PyConf import configurable @@ -250,7 +251,14 @@ def report_writers_nodes(streams, new_hlt_banks['DstData'] = packed_data.OutputView algs.append(line_output_cf) extra_locations_to_persist.extend(line_output_locations) - + + if process == "pass": + if not options.input_manifest_file: + raise RuntimeError( + ' pass-through configuration -- must specify an input manifest' + ) + copy(options.input_manifest_file, options.output_manifest_file) + node = CompositeNode( 'report_writers', combine_logic=NodeLogic.NONLAZY_OR, diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 759fa046534..42bbd083e6e 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -57,7 +57,7 @@ def _referenced_inputs(lines, inputs): # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - + #fill the packer inputs dictionary based on object type for dh in line_locs: typ = get_type(dh) @@ -102,7 +102,14 @@ def get_type(dh): return None -def get_packed_locations(inputs, stream): +def get_packed_locations(lines, inputs, stream): + + line_locs = set() + + for l in lines: + for dh in l.objects_to_persist: + line_locs.add(dh) + packed_dhs = [] types = type_map() @@ -111,16 +118,17 @@ def get_packed_locations(inputs, stream): for key, locs in inputs.items(): for i in locs: - if isinstance(i, str): - t = k[v.index(key)] - - packed_dhs += [(prefix(i, stream), t)] - else: - t = i.type - if i.type == "unknown_t": + if i in line_locs: + if isinstance(i, str): t = k[v.index(key)] + + packed_dhs += [(prefix(i, stream), t)] + else: + t = i.type + if i.type == "unknown_t": + t = k[v.index(key)] - packed_dhs += [(prefix(i.location, stream), t)] + packed_dhs += [(prefix(i.location, stream), t)] packed_dhs = list(dict.fromkeys(packed_dhs)) return {'PackedLocations': packed_dhs} @@ -202,7 +210,7 @@ def persist_line_outputs( if output_manifest_file: with open(output_manifest_file, 'w') as f: json.dump( - get_packed_locations(inputs, stream), + get_packed_locations(lines, inputs, stream), f, indent=4, sort_keys=True) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 5b2f467b53b..f9e92b72073 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -56,7 +56,6 @@ def upfront_reconstruction(manifest): m, decoder.OutputBuffers, configurables=False, - mc=mc_algs, output_level=4) ### TODO:FIXME take advantage of the fact that the above have datahandles... -- GitLab From 94af86663598be5e556bf5ac2c68a568b3ea87c2 Mon Sep 17 00:00:00 2001 From: sesen Date: Mon, 29 Aug 2022 12:44:43 +0200 Subject: [PATCH 073/102] fix hlt2_noUT_trackeff_test --- Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py b/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py index 6c5b712068a..e95b95b9d42 100644 --- a/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py +++ b/Hlt/Hlt2Conf/options/hlt2_noUT_trackeff_test.py @@ -52,19 +52,21 @@ def remove_lines(lines_dict, pattern_to_remove): for name, line in lines_dict.items() if re.search(pattern_to_remove, name) is None } - print("Removed lines: ", set(lines_dict) - set(filtered)) return filtered # Remove lines which need UT -muonut_to_remove = "Hlt2_TrackEffDiMuon_MuonUT" -downstream_to_remove = "Hlt2_TrackEffDiMuon_Downstream" +muonut_to_remove = "Hlt2TrackEff_DiMuon_MuonUT.*" +downstream_to_remove = "Hlt2TrackEff_DiMuon_Downstream.*" hlt2_lines = remove_lines(all_lines, muonut_to_remove) trackeff_lines = remove_lines(hlt2_lines, downstream_to_remove) +print("Removed lines: ", all_lines.keys() - trackeff_lines.keys()) + print("Number of HLT2 lines {}".format(len(trackeff_lines))) + def make_lines(): return [builder() for builder in trackeff_lines.values()] -- GitLab From 14a90de3fe11dad2fac21166e08bc8a748179ac9 Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 30 Aug 2022 11:59:41 +0200 Subject: [PATCH 074/102] make spuring only unpack reco objects and pp2mcp relations --- .../RecoConf/reco_objects_for_spruce.py | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index f9e92b72073..dacead11e22 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -9,22 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from GaudiConf import reading -from GaudiConf.PersistRecoConf import persisted_location - -_reco_loc = { - "ChargedProtos": ("/Event/HLT2/Rec/ProtoP/Charged", "ProtoParticles"), - "NeutralProtos": ("/Event/HLT2/Rec/ProtoP/Neutrals", "ProtoParticles"), - "Tracks": ("/Event/HLT2/Rec/Track/Best", "Tracks"), - "PVs": ("/Event/HLT2/Rec/Vertex/Primary", "PVs"), - "CaloElectrons": ("/Event/HLT2/Rec/Calo/Electrons", "CaloHypos"), - "CaloPhotons": ("/Event/HLT2/Rec/Calo/Photons", "CaloHypos"), - "CaloMergedPi0s": ("/Event/HLT2/Rec/Calo/MergedPi0s", "CaloHypos"), - "CaloSplitPhotons": ("/Event/HLT2/Rec/Calo/SplitPhotons", "CaloHypos"), - "MuonPIDs": ("/Event/HLT2/Rec/Muon/MuonPID", "MuonPIDs"), - "MuonPIDTracks": ("/Event/HLT2/Rec/Muon/MuonTracks", "Tracks"), - "RichPIDs": ("/Event/HLT2/Rec/Rich/PIDs", "RichPIDs"), - "RecSummary": ("/Event/HLT2/Rec/Summary", "RecSummary") -} +from PyConf.packing import persisted_location, reco_locations, pp2mcp_locations def upfront_reconstruction(manifest): @@ -37,6 +22,9 @@ def upfront_reconstruction(manifest): """ stream = '/Event/HLT2' + reco_loc = reco_locations(stream) + pp2mcp_loc = pp2mcp_locations(stream) + decoder = reading.decoder( configurables=False, output_level=4, stream=stream) @@ -46,8 +34,9 @@ def upfront_reconstruction(manifest): inv_map = {v: k for k, v in reading.type_map().items()} # make sure that the reco locations are spliced into the provided manifest... - dl = {v[0]: v[1] for v in manifest['PackedLocations']} - dl.update((v[0], inv_map[v[1]]) for v in _reco_loc.values()) + #dl = {v[0]: v[1] for v in manifest['PackedLocations']} + dl = { v[0]: inv_map[v[1]] for v in pp2mcp_loc.values()} + dl.update((v[0], inv_map[v[1]]) for v in reco_loc.values()) m = {'PackedLocations': [(k, v) for k, v in dl.items()]} ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... @@ -69,8 +58,9 @@ def reconstruction(manifest): data = {} unpackers = upfront_reconstruction(manifest) - - for key, value in _reco_loc.items(): + reco_loc = reco_locations("/Event/HLT2") + + for key, value in reco_loc.items(): for v in unpackers: if "OutputName" in v.outputs.keys( ) and v.OutputName.location == value[0]: -- GitLab From 1a007c2251772413413ecedeb701a516e088f097 Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 30 Aug 2022 12:21:47 +0200 Subject: [PATCH 075/102] fix differences to main branch --- Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py | 8 ++++---- Hlt/RecoConf/python/RecoConf/rich_reconstruction.py | 8 +++++++- Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt | 1 - 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py b/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py index b073070ebf4..4e732047a61 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/check_output.py @@ -15,9 +15,9 @@ import cppyy not_found = cppyy.bind_object(0, cppyy.gbl.DataObject) # These locations do not exist in old brunel outputs or any file produced -# before 07.2022 for the moment ignore the errors in unpacking checks. +# before LHCb!3622, for the moment ignore the errors in unpacking checks. # until we have some versioning of the reco locations -UnexpectedReco = ["MuonTracks", "Rec/Summary"] +UnexpectedReco = ["MuonTracks"] def check_persistreco(TES, locations, process="Hlt2", N=0): @@ -42,7 +42,7 @@ def check_persistreco(TES, locations, process="Hlt2", N=0): print( "Persistreco ERROR for pass through line. RecSummary not persisted." ) - elif unpacked.size() < N and not any(x in loc for x in Unexpected): + elif len(unpacked) < N and not any(x in loc for x in Unexpected): if "Vertex" not in loc: ## Do not expect N_TURBO+ vertices print("Persistreco ERROR for pass through line. ", loc, - " has only ", unpacked.size(), " entries.") + " has only ", len(unpacked), " entries.") diff --git a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py index 4e9533ecbbe..fa6a40293f3 100644 --- a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py @@ -80,6 +80,9 @@ def default_rich_reco_options(): # Should pixel clustering be run, for either ( RICH1, RICH2 ) "ApplyPixelClustering": (False, False), + # Activate pixels in specific panels in each RICH only. + "ActivatePanel": (True, True), + #=========================================================== # Track treatment options #=========================================================== @@ -256,7 +259,10 @@ def make_rich_pixels(options, make_raw=default_raw_event): # Decode the Raw event to RichSmartIDs richDecode = RichDecoder( - name="RichRawDecoder", RawEventLocation=rawEvent, Detectors=det_opts) + name="RichRawDecoder", + RawEventLocation=rawEvent, + Detectors=det_opts, + Panels=options["ActivatePanel"]) results["RichDecodedData"] = richDecode.DecodedDataLocation # Run clustering diff --git a/Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt b/Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt index 0170364544e..fe58e0935c9 100644 --- a/Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt +++ b/Hlt/RecoConf/tests/qmtest/hlt2_run_two_recos.qmt @@ -14,7 +14,6 @@ Simple test to demonstrate and test how to run two different but similar reconst --> gaudirun.py -1800 $MOOREROOT/tests/options/default_input_and_conds_hlt2.py $MOOREROOT/tests/options/set_evt_max_to_5.py -- GitLab From 79e49e36a750bdd636649a5e431cc66df0786146 Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 30 Aug 2022 12:38:45 +0200 Subject: [PATCH 076/102] fix a typo --- Hlt/Moore/python/Moore/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index c8ff4ef6ec4..0b29b85cc17 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -571,7 +571,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): stream_writers_nodes = [] moore_children = ( - stream_writers_setup + unpack + [dec, rw_node] + stream_writers_nodes) + stream_writers_setup + unpack + [dec] + rw_nodes + stream_writers_nodes) moore = CompositeNode( 'moore', combine_logic=NodeLogic.LAZY_AND, -- GitLab From 0f4e9c03b6864e6f50db92b19aeeb449d13acd7d Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 30 Aug 2022 14:51:39 +0200 Subject: [PATCH 077/102] fix moore config --- Hlt/Moore/python/Moore/config.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 0b29b85cc17..194dcb6b232 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -267,8 +267,9 @@ def report_writers_nodes(streams, # Transform to a list of unique str extra_locations_to_persist = _unique(extra_locations_to_persist) - return node, new_hlt_banks, extra_locations_to_persist, barrier_algorithms, erw - + return [ + node + ], new_hlt_banks, extra_locations_to_persist, barrier_algorithms, erw @configurable def stream_writer(stream, -- GitLab From 74b6f4729c94407362f75f6895861c90deadbbf0 Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 7 Sep 2022 14:48:15 +0200 Subject: [PATCH 078/102] fix references --- .../refs/hlt2_combinations_particle_v2.ref | 135 +++---- ...combinations_particle_v2.ref.x86_64_v3-opt | 137 +++---- ...streco_check_flavourtags.ref.x86_64_v3-opt | 153 +++----- ...sspion_tagger_on_example_b2jpsik_lines.ref | 349 +++++++++++++++--- ...on_example_b2jpsik_lines.ref.x86_64_v3-opt | 347 ++++++++++++++--- .../tests/refs/hlt2_with_hlt1_decisions.ref | 45 +-- ...hlt2_with_hlt1_decisions.ref.x86_64_v3-opt | 73 ++-- .../python/Moore/persistence/__init__.py | 3 + 8 files changed, 836 insertions(+), 406 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref b/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref index ea6b2a49f9e..2080f93fdeb 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref @@ -47,20 +47,20 @@ ApplicationMgr INFO Application Manager Finalized succes ApplicationMgr INFO Application Manager Terminated successfully CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6464 | 64.640 | 33.248 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 4705 | 47.050 | 24.401 | 6.0000 | 117.00 | + | "#total tracks" | 100 | 6465 | 64.650 | 33.264 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 4706 | 47.060 | 24.419 | 6.0000 | 117.00 | CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6464 | 64.640 | 33.248 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 5408 | 54.080 | 28.242 | 6.0000 | 122.00 | + | "#total tracks" | 100 | 6465 | 64.650 | 33.264 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 5409 | 54.090 | 28.259 | 6.0000 | 122.00 | CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#total tracks" | 100 | 4485 | 44.850 | 23.552 | 8.0000 | 142.00 | | "#tracks in acceptance" | 100 | 3596 | 35.960 | 19.869 | 8.0000 | 125.00 | CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6464 | 64.640 | 33.248 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 5073 | 50.730 | 26.100 | 6.0000 | 118.00 | + | "#total tracks" | 100 | 6465 | 64.650 | 33.264 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 5074 | 50.740 | 26.116 | 6.0000 | 118.00 | CaloFutureClusterCovarianceAlg INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# clusters" | 20150 | @@ -74,69 +74,70 @@ CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 | "Corrected Clusters: size ratio" | 4674 | 1461.408 | 0.31267 | 0.33962 | -7.3447e-16 | 2.8531 | CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 1787 | 17.870 | 14.982 | 0.0000 | 64.000 | - | "average chi2" | 1787 | 1357.991 | 0.75993 | 1.1522 | 4.8261e-07 | 11.990 | - | "average energy (track based)" | 4705 | 104692.5 | 22.251 | 89.024 | 0.0000 | 1687.8 | + | "#links in table" | 100 | 1784 | 17.840 | 14.941 | 0.0000 | 64.000 | + | "average chi2" | 1784 | 1355.364 | 0.75973 | 1.1515 | 4.8035e-07 | 11.986 | + | "average energy (track based)" | 4706 | 104698.3 | 22.248 | 89.014 | 0.0000 | 1687.8 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 19 | 19 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 100 | 4661 | 46.610 | 26.696 | 5.0000 | 117.00 | - | "average chi2" | 4661 | 57094.64 | 12.249 | 24.791 | 0.00028116 | 386.19 | + | "#links in table" | 100 | 4660 | 46.600 | 26.711 | 5.0000 | 117.00 | + | "average chi2" | 4660 | 57043.87 | 12.241 | 24.747 | 0.00028121 | 385.57 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 5111 | 51.110 | 29.447 | 5.0000 | 131.00 | - | "average chi2" | 5111 | 748.0089 | 0.14635 | 0.22934 | 1.8499e-06 | 3.1021 | + | "#links in table" | 100 | 5112 | 51.120 | 29.464 | 5.0000 | 131.00 | + | "average chi2" | 5112 | 747.9162 | 0.14631 | 0.22932 | 1.8498e-06 | 3.1021 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 100 | 3175 | 31.750 | 18.750 | 4.0000 | 112.00 | | "average chi2" | 3175 | 515.2747 | 0.16229 | 0.27034 | 9.1213e-06 | 4.4074 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 5408 | -322.0323 | -0.059547 | 0.090319 | -1.4425 | 0.22497 | - | "average E/p" | 5408 | 36.8465 | 0.0068133 | 0.0099953 | 0.0000 | 0.38679 | + | "average DLL" | 5409 | -322.0047 | -0.059531 | 0.090314 | -1.4426 | 0.22496 | + | "average E/p" | 5409 | 36.84863 | 0.0068125 | 0.0099943 | 0.0000 | 0.38679 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 5073 |3.700922e+07 | 7295.3 | 16552.0 | 0.0000 | 2.7634e+05 | + | "energy (calo) associated to track" | 5074 |3.700945e+07 | 7293.9 | 16551.0 | 0.0000 | 2.7634e+05 | ChargedBasicsFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6130 | 92 |( 1.500816 +- 0.1552922)% | + |*"Cut selection efficiency" | 6131 | 91 |( 1.484260 +- 0.1544337)% | ChargedBasicsFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6130 | 170 |( 2.773246 +- 0.2097282)% | + |*"Cut selection efficiency" | 6131 | 167 |( 2.723862 +- 0.2078883)% | ClassifyPhotonElectronAlg INFO Number of counters : 14 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 6185 | -2422241 | -391.63 | 535.50 | -5191.5 | 5164.3 | + | "Electron Delta(E)" | 6185 | -2493667 | -403.18 | 552.89 | -5610.4 | 5164.3 | | "Electron Delta(X)" | 6185 | -1874.295 | -0.30304 | 12.108 | -22.782 | 22.326 | | "Electron Delta(Y)" | 6185 | -1394.095 | -0.22540 | 12.169 | -22.782 | 22.326 | - | "Electron Delta(Z)" | 6185 | 399111.6 | 64.529 | 15.291 | -6.3916 | 116.90 | - | "Electron corrected energy" | 6185 |4.220042e+07 | 6823.0 | 10467.0 | 27.094 | 2.5275e+05 | - | "Electrons pT-rejected after correction" | 111 | - | "Photon Delta(E)" | 12037 | -2964609 | -246.29 | 426.94 | -4620.9 | 3257.8 | + | "Electron Delta(Z)" | 6185 | 398752.3 | 64.471 | 15.335 | 4.4014 | 116.90 | + | "Electron corrected energy" | 6185 | 4.2129e+07 | 6811.5 | 10463.0 | 68.412 | 2.5275e+05 | + | "Electrons pT-rejected after correction" | 112 | + | "Photon Delta(E)" | 12037 | -3068594 | -254.93 | 442.72 | -4620.9 | 3257.8 | | "Photon Delta(X)" | 12037 | -843.1878 | -0.070050 | 12.305 | -32.293 | 22.326 | | "Photon Delta(Y)" | 12037 | -1766.104 | -0.14672 | 12.390 | -32.090 | 22.326 | - | "Photon Delta(Z)" | 12037 | 657376.1 | 54.613 | 14.121 | -6.3916 | 114.48 | - | "Photon corrected energy" | 12037 |4.606403e+07 | 3826.9 | 7723.6 | 27.094 | 2.3441e+05 | - | "Photons pT-rejected after correction" | 380 | - | "electronHypos" | 100 | 6074 | 60.740 | 29.075 | 11.000 | 141.00 | - | "photonHypos" | 100 | 11657 | 116.57 | 45.977 | 21.000 | 221.00 | + | "Photon Delta(Z)" | 12037 | 656604.6 | 54.549 | 14.157 | -1.2969 | 114.48 | + | "Photon corrected energy" | 12037 |4.596004e+07 | 3818.2 | 7719.6 | 62.642 | 2.3441e+05 | + | "Photons pT-rejected after correction" | 410 | + | "electronHypos" | 100 | 6073 | 60.730 | 29.056 | 11.000 | 141.00 | + | "photonHypos" | 100 | 11627 | 116.27 | 45.825 | 21.000 | 221.00 | ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | " Inner" | 5446 | 5410.352 | 0.99345 | 0.018884 | 0.96455 | 1.1037 | - | " Middle" | 4683 | 4703.459 | 1.0044 | 0.018874 | 0.97717 | 1.2113 | - | " Outer" | 8043 | 8016.397 | 0.99669 | 0.014678 | 0.97368 | 1.0565 | - | "Pileup offset" | 18172 | 6618645 | 364.22 | 430.94 | -2051.8 | 3889.5 | - | "Pileup scale" | 18222 | 101310 | 5.5598 | 2.0043 | 1.0000 | 10.000 | - | "Pileup subtracted ratio" | 18172 | 15848.08 | 0.87212 | 0.13495 | 0.0079682 | 1.9034 | - | "Skip negative energy correction" | 50 | -CloneKillerForward INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksSelected" | 100 | 756 | 7.5600 | + | " Inner" | 5445 | 5409.357 | 0.99345 | 0.018885 | 0.96455 | 1.1037 | + | " Middle" | 4678 | 4698.509 | 1.0044 | 0.018876 | 0.97717 | 1.2113 | + | " Outer" | 8039 | 8012.387 | 0.99669 | 0.014681 | 0.97368 | 1.0565 | + | "Pileup offset" | 18162 | 6793983 | 374.08 | 448.90 | -2051.8 | 4321.7 | + | "Pileup scale" | 18222 | 104116 | 5.7138 | 2.1863 | 1.0000 | 11.000 | + | "Pileup subtracted ratio" | 18162 | 15782.64 | 0.86899 | 0.13904 | 0.0079682 | 1.9034 | + | "Skip negative energy correction" | 60 | +CloneKillerForward INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "nTracksInput" | 100 | 6088 | 60.880 | + | "nTracksSelected" | 100 | 755 | 7.5500 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | FunctionalChargedProtoParticleMaker INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CreatedProtos" | 6464 | + | "CreatedProtos" | 6465 | FutureEcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | @@ -151,7 +152,7 @@ GraphClustering INFO Number of counters : 4 | "Negative energy clusters" | 4 | 4 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Tracks" | 100 | 6464 | 64.640 | + | "Nb of Produced Tracks" | 100 | 6465 | 64.650 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Tracks" | 100 | 4485 | 44.850 | @@ -160,13 +161,13 @@ MuonIDHlt2AlgLong INFO Number of counters : 7 | "BgLL" | 604 | -373.7537 | -0.61880 | 1.0411 | -7.8829 | 0.0000 | | "MuLL" | 604 | -5411.978 | -8.9602 | 3.4179 | -11.513 | -0.022240 | | "muonMVAStat" | 604 | -289.7609 | -0.47974 | 1.1644 | -3.0113 | 4.3193 | - |*"nInAcceptance" | 6464 | 5202 |( 80.47649 +- 0.4930181)% | - |*"nIsMuon" | 6464 | 604 |( 9.344059 +- 0.3620056)% | - |*"nIsMuonTight" | 6464 | 245 |( 3.790223 +- 0.2375151)% | - |*"nMomentumCut" | 6464 | 5609 |( 86.77290 +- 0.4213798)% | + |*"nInAcceptance" | 6465 | 5203 |( 80.47951 +- 0.4929511)% | + |*"nIsMuon" | 6465 | 604 |( 9.342614 +- 0.3619525)% | + |*"nIsMuonTight" | 6465 | 245 |( 3.789637 +- 0.2374791)% | + |*"nMomentumCut" | 6465 | 5610 |( 86.77494 +- 0.4213196)% | MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 100 | 6464 | 64.640 | + | "Nb of input v2 MuonPIDs" | 100 | 6465 | 64.650 | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Accepted input tracks" | 100 | 12389 | 123.89 | @@ -205,19 +206,19 @@ PrHybridSeeding INFO Number of counters : 21 PrKalmanFilterForward INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 86 | - | "chi2 cut" | 177 | - | "nIterations" | 756 | 1908 | 2.5238 | - | "nOutlierIterations" | 670 | 661 | 0.98657 | - | "nTracksInput" | 100 | 756 | 7.5600 | + | "chi2 cut" | 176 | + | "nIterations" | 755 | 1905 | 2.5232 | + | "nOutlierIterations" | 669 | 659 | 0.98505 | + | "nTracksInput" | 100 | 755 | 7.5500 | | "nTracksOutput" | 100 | 493 | 4.9300 | PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 53 | - | "chi2 cut" | 198 | - | "nIterations" | 6238 | 13097 | 2.0996 | - | "nOutlierIterations" | 6185 | 2779 | 0.44931 | + | "chi2 cut" | 197 | + | "nIterations" | 6238 | 13102 | 2.1004 | + | "nOutlierIterations" | 6185 | 2778 | 0.44915 | | "nTracksInput" | 100 | 6238 | 62.380 | - | "nTracksOutput" | 100 | 5987 | 59.870 | + | "nTracksOutput" | 100 | 5988 | 59.880 | PrMatchNN INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#MatchingChi2" | 100 | 83846.62 | 838.47 | @@ -252,15 +253,15 @@ PrStoreSciFiHits INFO Number of counters : 25 | "Total number of hits" | 100 | 381773 | 3817.7 | 1334.3 | 1217.0 | 7447.0 | Proto2ChargedBasic INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6464 | 6130 |( 94.83292 +- 0.2753287)% | - |*"# passed Track filter" | 6464 | 6464 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 3010 | 30.100 | 15.828 | 4.0000 | 71.000 | + |*"# passed ProtoParticle filter" | 6465 | 6131 |( 94.83372 +- 0.2752873)% | + |*"# passed Track filter" | 6465 | 6465 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 3011 | 30.110 | 15.843 | 4.0000 | 71.000 | | "Nb created particles" | 100 | 3120 | 31.200 | 16.223 | 3.0000 | 74.000 | Proto2ChargedBasic#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6464 | 6130 |( 94.83292 +- 0.2753287)% | - |*"# passed Track filter" | 6464 | 6464 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 3010 | 30.100 | 15.828 | 4.0000 | 71.000 | + |*"# passed ProtoParticle filter" | 6465 | 6131 |( 94.83372 +- 0.2752873)% | + |*"# passed Track filter" | 6465 | 6465 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 3011 | 30.110 | 15.843 | 4.0000 | 71.000 | | "Nb created particles" | 100 | 3120 | 31.200 | 16.223 | 3.0000 | 74.000 | TBTCForward INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -269,23 +270,23 @@ TBTCForward INFO Number of counters : 3 | "FittedBefore" | 491 | TBTC_Match INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 5973 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 5973 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 5973 | + |*"BadInput" | 5974 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 5974 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 5974 | ThOrCombiner__2ChargedBasics INFO Number of counters : 5 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# output reallocations" | 100 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed CombinationCut" | 142 | 1 |(0.7042254 +- 0.7017413)% | + |*"# passed CombinationCut" | 131 | 1 |(0.7633588 +- 0.7604396)% | |*"# passed vertex fit" | 1 | 0 |( 0.000000 +- 0.000000)% | - |*"CombinationCut SIMD utilisation" | 288 | 142 |( 49.30556 +- 2.945994)% | - |*"CombinationCut ideal SIMD utilisation" | 216 | 142 |( 65.74074 +- 3.229084)% | + |*"CombinationCut SIMD utilisation" | 268 | 131 |( 48.88060 +- 3.053471)% | + |*"CombinationCut ideal SIMD utilisation" | 196 | 131 |( 66.83673 +- 3.362856)% | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | ToolSvc.TrackFunctorFactory INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 100 | 499 | 4.9900 | + | "Nb PVs" | 100 | 512 | 5.1200 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 157947 | 1579.5 | @@ -298,4 +299,4 @@ fromPrSeedingTracksV1Tracks INFO Number of counters : 1 | "Nb of converted Tracks" | 100 | 10260 | 102.60 | fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 100 | 6464 | 64.640 | + | "Nb of Produced MuonPIDs" | 100 | 6465 | 64.650 | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref.x86_64_v3-opt index e2c0eb7cbdd..2ce2790d353 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_combinations_particle_v2.ref.x86_64_v3-opt @@ -47,20 +47,20 @@ ApplicationMgr INFO Application Manager Finalized succes ApplicationMgr INFO Application Manager Terminated successfully CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6468 | 64.680 | 33.318 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 4706 | 47.060 | 24.436 | 6.0000 | 117.00 | + | "#total tracks" | 100 | 6469 | 64.690 | 33.335 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 4707 | 47.070 | 24.455 | 6.0000 | 117.00 | CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6468 | 64.680 | 33.318 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 5416 | 54.160 | 28.323 | 6.0000 | 122.00 | + | "#total tracks" | 100 | 6469 | 64.690 | 33.335 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 5417 | 54.170 | 28.340 | 6.0000 | 122.00 | CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#total tracks" | 100 | 4487 | 44.870 | 23.561 | 8.0000 | 142.00 | | "#tracks in acceptance" | 100 | 3595 | 35.950 | 19.858 | 8.0000 | 125.00 | CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6468 | 64.680 | 33.318 | 7.0000 | 154.00 | - | "#tracks in acceptance" | 100 | 5079 | 50.790 | 26.165 | 6.0000 | 118.00 | + | "#total tracks" | 100 | 6469 | 64.690 | 33.335 | 7.0000 | 154.00 | + | "#tracks in acceptance" | 100 | 5080 | 50.800 | 26.181 | 6.0000 | 118.00 | CaloFutureClusterCovarianceAlg INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# clusters" | 20150 | @@ -74,69 +74,70 @@ CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 | "Corrected Clusters: size ratio" | 4674 | 1461.408 | 0.31267 | 0.33962 | -7.3447e-16 | 2.8531 | CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 1786 | 17.860 | 15.054 | 0.0000 | 65.000 | - | "average chi2" | 1786 | 1357.288 | 0.75996 | 1.1521 | 4.8261e-07 | 11.990 | - | "average energy (track based)" | 4706 | 105608.4 | 22.441 | 90.021 | 0.0000 | 1687.8 | + | "#links in table" | 100 | 1776 | 17.760 | 14.925 | 0.0000 | 65.000 | + | "average chi2" | 1776 | 1355.314 | 0.76313 | 1.1534 | 4.8035e-07 | 11.986 | + | "average energy (track based)" | 4707 | 105614.1 | 22.438 | 90.011 | 0.0000 | 1687.8 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 19 | 19 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 100 | 4667 | 46.670 | 26.751 | 5.0000 | 117.00 | - | "average chi2" | 4667 | 57088.59 | 12.232 | 24.768 | 0.00028114 | 386.19 | + | "#links in table" | 100 | 4664 | 46.640 | 26.735 | 5.0000 | 117.00 | + | "average chi2" | 4664 | 56929.88 | 12.206 | 24.672 | 0.00028120 | 385.57 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 5119 | 51.190 | 29.536 | 5.0000 | 131.00 | - | "average chi2" | 5119 | 748.3601 | 0.14619 | 0.22884 | 1.8499e-06 | 3.1021 | + | "#links in table" | 100 | 5120 | 51.200 | 29.554 | 5.0000 | 131.00 | + | "average chi2" | 5120 | 748.2665 | 0.14615 | 0.22881 | 1.8498e-06 | 3.1021 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 100 | 3174 | 31.740 | 18.749 | 4.0000 | 112.00 | | "average chi2" | 3174 | 514.8937 | 0.16222 | 0.27072 | 9.3627e-06 | 4.4074 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 5416 | -322.0181 | -0.059457 | 0.090232 | -1.4425 | 0.22497 | - | "average E/p" | 5416 | 36.86279 | 0.0068063 | 0.0099882 | 0.0000 | 0.38679 | + | "average DLL" | 5417 | -321.9894 | -0.059441 | 0.090227 | -1.4426 | 0.22496 | + | "average E/p" | 5417 | 36.8626 | 0.0068050 | 0.0099874 | 0.0000 | 0.38679 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 5079 |3.703029e+07 | 7290.9 | 16543.0 | 0.0000 | 2.7634e+05 | + | "energy (calo) associated to track" | 5080 |3.703052e+07 | 7289.5 | 16541.0 | 0.0000 | 2.7634e+05 | ChargedBasicsFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6133 | 87 |( 1.418555 +- 0.1510025)% | + |*"Cut selection efficiency" | 6134 | 90 |( 1.467232 +- 0.1535210)% | ChargedBasicsFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6133 | 170 |( 2.771890 +- 0.2096271)% | + |*"Cut selection efficiency" | 6134 | 169 |( 2.755135 +- 0.2089936)% | ClassifyPhotonElectronAlg INFO Number of counters : 14 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 6185 | -2424170 | -391.94 | 535.63 | -5191.5 | 5164.3 | + | "Electron Delta(E)" | 6185 | -2566435 | -414.95 | 562.32 | -5610.4 | 5164.3 | | "Electron Delta(X)" | 6185 | -1874.294 | -0.30304 | 12.108 | -22.782 | 22.326 | | "Electron Delta(Y)" | 6185 | -1394.095 | -0.22540 | 12.169 | -22.782 | 22.326 | - | "Electron Delta(Z)" | 6185 | 399088.2 | 64.525 | 15.296 | -6.3916 | 116.90 | - | "Electron corrected energy" | 6185 |4.21985e+07 | 6822.7 | 10467.0 | 27.094 | 2.5275e+05 | - | "Electrons pT-rejected after correction" | 111 | - | "Photon Delta(E)" | 12038 | -2973428 | -247.00 | 427.67 | -4620.9 | 3257.8 | + | "Electron Delta(Z)" | 6185 | 398447.5 | 64.422 | 15.372 | 4.4014 | 116.90 | + | "Electron corrected energy" | 6185 |4.205623e+07 | 6799.7 | 10458.0 | 68.412 | 2.5259e+05 | + | "Electrons pT-rejected after correction" | 119 | + | "Photon Delta(E)" | 12038 | -3168302 | -263.19 | 451.89 | -4620.9 | 3238.7 | | "Photon Delta(X)" | 12038 | -840.7048 | -0.069838 | 12.304 | -32.293 | 22.326 | | "Photon Delta(Y)" | 12038 | -1786.489 | -0.14840 | 12.391 | -32.090 | 22.326 | - | "Photon Delta(Z)" | 12038 | 657361 | 54.607 | 14.126 | -6.3916 | 114.48 | - | "Photon corrected energy" | 12038 |4.605654e+07 | 3825.9 | 7723.0 | 27.094 | 2.3441e+05 | - | "Photons pT-rejected after correction" | 383 | - | "electronHypos" | 100 | 6074 | 60.740 | 29.081 | 11.000 | 141.00 | - | "photonHypos" | 100 | 11655 | 116.55 | 45.965 | 21.000 | 221.00 | + | "Photon Delta(Z)" | 12038 | 655796.9 | 54.477 | 14.220 | -1.2969 | 114.48 | + | "Photon corrected energy" | 12038 |4.586166e+07 | 3809.7 | 7714.6 | 62.642 | 2.3441e+05 | + | "Photons pT-rejected after correction" | 435 | + | "electronHypos" | 100 | 6066 | 60.660 | 28.949 | 11.000 | 140.00 | + | "photonHypos" | 100 | 11603 | 116.03 | 45.688 | 21.000 | 221.00 | ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | " Inner" | 5446 | 5410.352 | 0.99345 | 0.018884 | 0.96455 | 1.1037 | - | " Middle" | 4683 | 4703.459 | 1.0044 | 0.018874 | 0.97717 | 1.2113 | - | " Outer" | 8044 | 8017.419 | 0.99670 | 0.014680 | 0.97368 | 1.0565 | - | "Pileup offset" | 18173 | 6629524 | 364.80 | 431.39 | -2051.8 | 3889.5 | - | "Pileup scale" | 18223 | 101493 | 5.5695 | 1.9981 | 1.0000 | 10.000 | - | "Pileup subtracted ratio" | 18173 | 15843.45 | 0.87181 | 0.13519 | 0.0079682 | 1.9034 | - | "Skip negative energy correction" | 50 | -CloneKillerForward INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksSelected" | 100 | 758 | 7.5800 | + | " Middle" | 4679 | 4699.517 | 1.0044 | 0.018874 | 0.97717 | 1.2113 | + | " Outer" | 8035 | 8008.467 | 0.99670 | 0.014683 | 0.97368 | 1.0565 | + | "Pileup offset" | 18160 | 6966867 | 383.64 | 459.72 | -2051.8 | 4321.7 | + | "Pileup scale" | 18223 | 106821 | 5.8619 | 2.2632 | 1.0000 | 10.000 | + | "Pileup subtracted ratio" | 18160 | 15723.27 | 0.86582 | 0.14223 | 0.0079682 | 1.9034 | + | "Skip negative energy correction" | 63 | +CloneKillerForward INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "nTracksInput" | 100 | 6089 | 60.890 | + | "nTracksSelected" | 100 | 757 | 7.5700 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | FunctionalChargedProtoParticleMaker INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CreatedProtos" | 6468 | + | "CreatedProtos" | 6469 | FutureEcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | @@ -151,22 +152,22 @@ GraphClustering INFO Number of counters : 4 | "Negative energy clusters" | 4 | 4 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced Tracks" | 100 | 6468 | 64.680 | + | "Nb of Produced Tracks" | 100 | 6469 | 64.690 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Tracks" | 100 | 4487 | 44.870 | MuonIDHlt2AlgLong INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 602 | -373.7544 | -0.62085 | 1.0422 | -7.8829 | 0.0000 | - | "MuLL" | 602 | -5388.952 | -8.9517 | 3.4204 | -11.513 | -0.022240 | + | "BgLL" | 602 | -373.7537 | -0.62085 | 1.0422 | -7.8829 | 0.0000 | + | "MuLL" | 602 | -5388.953 | -8.9517 | 3.4204 | -11.513 | -0.022240 | | "muonMVAStat" | 602 | -288.7827 | -0.47971 | 1.1661 | -3.0113 | 4.3193 | - |*"nInAcceptance" | 6468 | 5204 |( 80.45764 +- 0.4930457)% | - |*"nIsMuon" | 6468 | 602 |( 9.307359 +- 0.3612553)% | - |*"nIsMuonTight" | 6468 | 245 |( 3.787879 +- 0.2373711)% | - |*"nMomentumCut" | 6468 | 5612 |( 86.76562 +- 0.4213478)% | + |*"nInAcceptance" | 6469 | 5205 |( 80.46066 +- 0.4929787)% | + |*"nIsMuon" | 6469 | 602 |( 9.305921 +- 0.3612023)% | + |*"nIsMuonTight" | 6469 | 245 |( 3.787293 +- 0.2373352)% | + |*"nMomentumCut" | 6469 | 5613 |( 86.76766 +- 0.4212876)% | MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 100 | 6468 | 64.680 | + | "Nb of input v2 MuonPIDs" | 100 | 6469 | 64.690 | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Accepted input tracks" | 100 | 12407 | 124.07 | @@ -205,19 +206,19 @@ PrHybridSeeding INFO Number of counters : 21 PrKalmanFilterForward INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 87 | - | "chi2 cut" | 176 | - | "nIterations" | 758 | 1912 | 2.5224 | - | "nOutlierIterations" | 671 | 663 | 0.98808 | - | "nTracksInput" | 100 | 758 | 7.5800 | + | "chi2 cut" | 175 | + | "nIterations" | 757 | 1916 | 2.5310 | + | "nOutlierIterations" | 670 | 661 | 0.98657 | + | "nTracksInput" | 100 | 757 | 7.5700 | | "nTracksOutput" | 100 | 495 | 4.9500 | PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 53 | - | "chi2 cut" | 200 | - | "nIterations" | 6250 | 13120 | 2.0992 | - | "nOutlierIterations" | 6197 | 2795 | 0.45102 | + | "chi2 cut" | 199 | + | "nIterations" | 6250 | 13122 | 2.0995 | + | "nOutlierIterations" | 6197 | 2794 | 0.45086 | | "nTracksInput" | 100 | 6250 | 62.500 | - | "nTracksOutput" | 100 | 5997 | 59.970 | + | "nTracksOutput" | 100 | 5998 | 59.980 | PrMatchNN INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#MatchingChi2" | 100 | 84026.23 | 840.26 | @@ -252,15 +253,15 @@ PrStoreSciFiHits INFO Number of counters : 25 | "Total number of hits" | 100 | 381773 | 3817.7 | 1334.3 | 1217.0 | 7447.0 | Proto2ChargedBasic INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6468 | 6133 |( 94.82066 +- 0.2755522)% | - |*"# passed Track filter" | 6468 | 6468 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 3014 | 30.140 | 15.865 | 4.0000 | 71.000 | + |*"# passed ProtoParticle filter" | 6469 | 6134 |( 94.82146 +- 0.2755108)% | + |*"# passed Track filter" | 6469 | 6469 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 3015 | 30.150 | 15.880 | 4.0000 | 71.000 | | "Nb created particles" | 100 | 3119 | 31.190 | 16.226 | 3.0000 | 74.000 | Proto2ChargedBasic#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6468 | 6133 |( 94.82066 +- 0.2755522)% | - |*"# passed Track filter" | 6468 | 6468 |( 100.0000 +- 0.000000)% | - | "Nb created anti-particles" | 100 | 3014 | 30.140 | 15.865 | 4.0000 | 71.000 | + |*"# passed ProtoParticle filter" | 6469 | 6134 |( 94.82146 +- 0.2755108)% | + |*"# passed Track filter" | 6469 | 6469 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 3015 | 30.150 | 15.880 | 4.0000 | 71.000 | | "Nb created particles" | 100 | 3119 | 31.190 | 16.226 | 3.0000 | 74.000 | TBTCForward INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -269,23 +270,23 @@ TBTCForward INFO Number of counters : 3 | "FittedBefore" | 492 | TBTC_Match INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 5976 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 5976 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 5976 | + |*"BadInput" | 5977 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 5977 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 5977 | ThOrCombiner__2ChargedBasics INFO Number of counters : 5 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# output reallocations" | 100 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed CombinationCut" | 119 | 1 |(0.8403361 +- 0.8367979)% | + |*"# passed CombinationCut" | 128 | 1 |(0.7812500 +- 0.7781923)% | |*"# passed vertex fit" | 1 | 0 |( 0.000000 +- 0.000000)% | - |*"CombinationCut SIMD utilisation" | 504 | 119 |( 23.61111 +- 1.891725)% | - |*"CombinationCut ideal SIMD utilisation" | 328 | 119 |( 36.28049 +- 2.654825)% | + |*"CombinationCut SIMD utilisation" | 536 | 128 |( 23.88060 +- 1.841569)% | + |*"CombinationCut ideal SIMD utilisation" | 336 | 128 |( 38.09524 +- 2.649279)% | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | ToolSvc.TrackFunctorFactory INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 100 | 500 | 5.0000 | + | "Nb PVs" | 100 | 524 | 5.2400 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 157947 | 1579.5 | @@ -298,4 +299,4 @@ fromPrSeedingTracksV1Tracks INFO Number of counters : 1 | "Nb of converted Tracks" | 100 | 10262 | 102.62 | fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 100 | 6468 | 64.680 | + | "Nb of Produced MuonPIDs" | 100 | 6469 | 64.690 | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_persistreco_check_flavourtags.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_persistreco_check_flavourtags.ref.x86_64_v3-opt index a1be7efc3a0..9c2264bef62 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_persistreco_check_flavourtags.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_persistreco_check_flavourtags.ref.x86_64_v3-opt @@ -4,41 +4,18 @@ ApplicationMgr SUCCESS ApplicationMgr INFO Application Manager Configured successfully DetectorPersist... INFO Added successfully Conversion service:XmlCnvSvc DetectorDataSvc SUCCESS Detector description database: git:/lhcb.xml -MagneticFieldGridReader INFO Opened magnetic field file: DBASE/FieldMap/vXrYpZ/cdf//field.v5r0.c1.down.cdf -MagneticFieldGridReader INFO Opened magnetic field file: DBASE/FieldMap/vXrYpZ/cdf//field.v5r0.c2.down.cdf -MagneticFieldGridReader INFO Opened magnetic field file: DBASE/FieldMap/vXrYpZ/cdf//field.v5r0.c3.down.cdf -MagneticFieldGridReader INFO Opened magnetic field file: DBASE/FieldMap/vXrYpZ/cdf//field.v5r0.c4.down.cdf EventPersistenc... INFO Added successfully Conversion service:RootCnvSvc ApplicationMgr INFO Application Manager Initialized successfully ApplicationMgr INFO Application Manager Started successfully EventSelector SUCCESS Reading Event record 1. Record number within stream 1: 1 -Hlt2 WARNING TCK obtained from rawbank seems to be 0 -- blindly ASSUMING that the current HltANNSvc somehow has the same configuration as when the input data was written. Proceed at your own risk, good luck... -HltPackedBuffer...WARNING TCK in rawbank seems to be 0 -- blindly ASSUMING that the current HltANNSvc somehow has the same configuration as when the input data was written. Proceed at your own risk, good luck... EventSelector SUCCESS Reading Event record 11. Record number within stream 1: 11 EventSelector SUCCESS Reading Event record 21. Record number within stream 1: 21 -EventSelector SUCCESS Reading Event record 31. Record number within stream 1: 31 EventLoopMgr INFO No more events in event selection 16 -0.4295666813850403 -0.1634099930524826 +0.4535333216190338 +-0.010520000010728836 1 16 -0.45766666531562805 --0.048239998519420624 -1 -16 -0.4749999940395355 --0.247529998421669 -1 -16 -0.44350001215934753 -0.06998000293970108 -1 -16 -0.5 -0.0 -0 -16 0.5 0.0 0 @@ -47,133 +24,113 @@ EventLoopMgr INFO No more events in event selection 0.0 0 16 -0.4806666672229767 --0.3318299949169159 -1 -16 -0.4806666672229767 --0.3318299949169159 +0.47476667165756226 +-0.24389000236988068 1 16 -0.4402333199977875 -0.09348999708890915 +0.4717000126838684 +-0.20305000245571136 1 16 -0.44893333315849304 -0.027979999780654907 +0.47093334794044495 +-0.19300000369548798 1 16 -0.2612999975681305 -0.7510600090026855 +0.453000009059906 +-0.005880000069737434 1 16 -0.4771000146865845 --0.2775599956512451 +0.44013333320617676 +0.09421999752521515 1 16 -0.4663333296775818 --0.13795000314712524 +0.4736333191394806 +-0.228410005569458 1 16 -0.4559333324432373 --0.031980000436306 +0.3617333471775055 +0.47077998518943787 1 16 -0.41626667976379395 -0.23902000486850739 +0.4511333405971527 +0.009770000353455544 1 16 -0.46463334560394287 --0.11897999793291092 +0.47673332691192627 +-0.2723099887371063 1 16 -0.46463334560394287 --0.11897999793291092 +0.47163334488868713 +-0.20231999456882477 1 16 0.5 0.0 0 16 -0.47369998693466187 --0.22946999967098236 +0.4655666649341583 +-0.12950000166893005 1 16 -0.45633333921432495 --0.03570999950170517 +0.45579999685287476 +-0.030969999730587006 1 16 -0.5 -0.0 -0 -16 -0.5 -0.0 -0 -16 -0.5 -0.0 -0 -16 -0.4724000096321106 --0.21193000674247742 +0.46166667342185974 +-0.08749999850988388 1 16 -0.4005666673183441 -0.31610000133514404 +0.46166667342185974 +-0.08749999850988388 1 16 -0.4434666633605957 -0.07012999802827835 +0.3656333386898041 +0.456959992647171 1 16 -0.4787999987602234 --0.30296000838279724 +0.46059998869895935 +-0.07667999714612961 1 16 -0.4559333324432373 --0.032189998775720596 +0.47589999437332153 +-0.26006001234054565 1 16 -0.4406333267688751 -0.09053999930620193 +0.4842666685581207 +-0.39164999127388 1 16 -0.458133339881897 --0.05268000066280365 +0.3876333236694336 +0.3724299967288971 1 16 -0.44156667590141296 -0.08399999886751175 +0.48536667227745056 +-0.4101099967956543 1 16 -0.4406333267688751 -0.09053999930620193 +0.48240000009536743 +-0.3600499927997589 1 16 -0.47690001130104065 --0.27432000637054443 -1 +0.5 +0.0 +0 16 -0.4611666798591614 --0.0825899988412857 +0.4713333249092102 +-0.19839000701904297 1 16 -0.48249998688697815 --0.36201998591423035 +0.42713332176208496 +0.17802999913692474 1 16 -0.4510333240032196 -0.010710000060498714 +0.4758666753768921 +-0.25949999690055847 1 16 -0.4496000111103058 -0.022530000656843185 +0.4519333243370056 +0.0029899999499320984 1 -16 -0.5 -0.0 -0 ApplicationMgr INFO Application Manager Stopped successfully EventLoopMgr INFO Histograms converted successfully according to request. ToolSvc INFO Removing all tools created by ToolSvc diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref b/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref index 90697bb7201..3c2fbebeddc 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref @@ -1,106 +1,337 @@ -CopyInputStream INFO Events output: 32 +GraphClustering INFO Built <283.14> graph calo clustering clusters/event +CopyInputStream INFO Events output: 29 ToolSvc INFO Removing all tools created by ToolSvc ApplicationMgr INFO Application Manager Finalized successfully ApplicationMgr INFO Application Manager Terminated successfully +CaloAcceptanceBremAlg_Long INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#total tracks" | 100 | 9525 | 95.250 | 42.851 | 20.000 | 269.00 | + | "#tracks in acceptance" | 100 | 6835 | 68.350 | 31.509 | 12.000 | 203.00 | +CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#total tracks" | 100 | 9525 | 95.250 | 42.851 | 20.000 | 269.00 | + | "#tracks in acceptance" | 100 | 7936 | 79.360 | 36.817 | 18.000 | 225.00 | +CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#total tracks" | 100 | 6300 | 63.000 | 38.502 | 13.000 | 267.00 | + | "#tracks in acceptance" | 100 | 5045 | 50.450 | 32.212 | 11.000 | 217.00 | +CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#total tracks" | 100 | 9525 | 95.250 | 42.851 | 20.000 | 269.00 | + | "#tracks in acceptance" | 100 | 7493 | 74.930 | 34.830 | 15.000 | 213.00 | +CaloFutureClusterCovarianceAlg INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# clusters" | 28314 | +CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "parameter updated" | 2 | +CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Corrected Clusters: # cells " | 6419 | 22527 | 3.5094 | 1.1182 | 2.0000 | 12.000 | + | "Corrected Clusters: ET" | 6419 | 619486.8 | 96.508 | 196.11 | 0.0000 | 4220.4 | + | "Corrected Clusters: size ratio" | 6419 | 2319.819 | 0.36140 | 0.42755 | -1.1017e-15 | 5.3593 | +CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#links in table" | 100 | 3111 | 31.110 | 23.021 | 0.0000 | 113.00 | + | "average chi2" | 3111 | 1569.999 | 0.50466 | 0.91863 | 4.1440e-07 | 27.427 | + | "average energy (track based)" | 6835 | 104856.8 | 15.341 | 43.920 | 0.0000 | 1028.3 | +CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#above threshold" | 11 | 11 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "#links in table" | 100 | 7041 | 70.410 | 37.157 | 14.000 | 206.00 | + | "average chi2" | 7041 | 30546.09 | 4.3383 | 11.945 | -38.682 | 372.23 | +CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#links in table" | 100 | 7739 | 77.390 | 41.007 | 16.000 | 236.00 | + | "average chi2" | 7739 | 1068.392 | 0.13805 | 0.83647 | 2.5772e-06 | 63.682 | +CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#above threshold" | 1 | 1 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "#links in table" | 100 | 4844 | 48.440 | 32.454 | 11.000 | 219.00 | + | "average chi2" | 4844 | 704.7311 | 0.14549 | 1.3462 | 6.1522e-07 | 90.908 | +CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "average DLL" | 7936 | -297.126 | -0.037440 | 0.055542 | -0.48267 | 0.22289 | + | "average E/p" | 7936 | 36.87316 | 0.0046463 | 0.0052249 | 0.0000 | 0.067706 | +CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "energy (calo) associated to track" | 7493 |4.929095e+07 | 6578.3 | 12324.0 | 0.0000 | 2.0210e+05 | ChargedProtoParticleAssociator INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Efficiency" | 3947 | 3181 |( 80.59286 +- 0.6294997)% | - | "MC particles per ProtoParticle" | 3181 | 3599 | 1.1314 | + |*"Efficiency" | 2756 | 2244 |( 81.42235 +- 0.7408454)% | + | "MC particles per ProtoParticle" | 2244 | 2671 | 1.1903 | +ClassifyPhotonElectronAlg INFO Number of counters : 14 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Electron Delta(E)" | 8749 | -3524946 | -402.90 | 529.99 | -4571.1 | 4551.3 | + | "Electron Delta(X)" | 8749 | -2464.865 | -0.28173 | 12.249 | -52.217 | 23.742 | + | "Electron Delta(Y)" | 8749 | -2528.095 | -0.28896 | 12.284 | -22.782 | 37.727 | + | "Electron Delta(Z)" | 8749 | 559983.1 | 64.005 | 15.137 | -1.7256 | 112.75 | + | "Electron corrected energy" | 8749 |5.140987e+07 | 5876.1 | 7261.9 | 37.195 | 1.0532e+05 | + | "Electrons pT-rejected after correction" | 161 | + | "Photon Delta(E)" | 16721 | -4142898 | -247.77 | 407.89 | -4571.1 | 1487.7 | + | "Photon Delta(X)" | 16721 | -5431.202 | -0.32481 | 12.512 | -88.809 | 44.008 | + | "Photon Delta(Y)" | 16721 | -5389.977 | -0.32235 | 12.522 | -92.068 | 111.91 | + | "Photon Delta(Z)" | 16721 | 906771.8 | 54.230 | 13.800 | -7.3809 | 114.19 | + | "Photon corrected energy" | 16721 |5.596928e+07 | 3347.2 | 5614.6 | 24.826 | 1.4002e+05 | + | "Photons pT-rejected after correction" | 606 | + | "electronHypos" | 100 | 8588 | 85.880 | 37.298 | 22.000 | 222.00 | + | "photonHypos" | 100 | 16115 | 161.15 | 52.693 | 44.000 | 274.00 | +ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | " Inner" | 7196 | 7161.255 | 0.99517 | 0.020325 | 0.96451 | 1.1112 | + | " Middle" | 7017 | 7063.478 | 1.0066 | 0.020360 | 0.97680 | 1.1911 | + | " Outer" | 11216 | 11213.65 | 0.99979 | 0.016348 | 0.97356 | 1.1451 | + | "Pileup offset" | 25429 | 9506144 | 373.83 | 435.54 | -3287.6 | 3890.8 | + | "Pileup scale" | 25470 | 157200 | 6.1720 | 1.8494 | 2.0000 | 10.000 | + | "Pileup subtracted ratio" | 25429 | 22043.8 | 0.86688 | 0.13251 | 0.0061236 | 1.4188 | + | "Skip negative energy correction" | 41 | +CloneKillerForward INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "nTracksInput" | 100 | 8984 | 89.840 | + | "nTracksSelected" | 100 | 1491 | 14.910 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | DeterministicPrescaler#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | +FunctionalChargedProtoParticleMaker INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "CreatedProtos" | 9525 | FunctionalParticleMaker INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 9876 | 1444 |( 14.62130 +- 0.3555308)% | - |*"# passed Track filter" | 13276 | 9876 |( 74.38988 +- 0.3788167)% | - | "Nb created anti-particles" | 100 | 705 | 7.0500 | 6.7814 | 0.0000 | 45.000 | - | "Nb created particles" | 100 | 739 | 7.3900 | 7.4899 | 0.0000 | 51.000 | + |*"# passed ProtoParticle filter" | 9525 | 1273 |( 13.36483 +- 0.3486554)% | + |*"# passed Track filter" | 9525 | 9525 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 595 | 5.9500 | 4.4640 | 0.0000 | 23.000 | + | "Nb created particles" | 100 | 678 | 6.7800 | 5.7734 | 0.0000 | 30.000 | FunctionalParticleMaker#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 9876 | 9381 |( 94.98785 +- 0.2195612)% | - |*"# passed Track filter" | 13276 | 9876 |( 74.38988 +- 0.3788167)% | - | "Nb created anti-particles" | 100 | 4700 | 47.000 | 25.030 | 2.0000 | 167.00 | - | "Nb created particles" | 100 | 4681 | 46.810 | 23.838 | 3.0000 | 143.00 | + |*"# passed ProtoParticle filter" | 9525 | 8938 |( 93.83727 +- 0.2464006)% | + |*"# passed Track filter" | 9525 | 9525 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 4430 | 44.300 | 20.155 | 7.0000 | 133.00 | + | "Nb created particles" | 100 | 4508 | 45.080 | 20.832 | 11.000 | 114.00 | FunctionalParticleMaker#2 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 2968 | 2818 |( 94.94609 +- 0.4020872)% | - |*"# passed Track filter" | 3947 | 2968 |( 75.19635 +- 0.6874207)% | - | "Nb created anti-particles" | 32 | 1395 | 43.594 | 24.114 | 6.0000 | 98.000 | - | "Nb created particles" | 32 | 1423 | 44.469 | 24.882 | 6.0000 | 100.00 | + |*"# passed ProtoParticle filter" | 2756 | 2581 |( 93.65022 +- 0.4645091)% | + |*"# passed Track filter" | 2756 | 2756 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 29 | 1295 | 44.655 | 15.847 | 10.000 | 79.000 | + | "Nb created particles" | 29 | 1286 | 44.345 | 16.035 | 11.000 | 78.000 | FunctionalSSPionTagger INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#BCandidates" | 32 | 35 | 1.0938 | - | "#goodFlavourTags" | 28 | 28 | 1.0000 | - | "#taggingPions" | 32 | 2818 | 88.062 | + | "#BCandidates" | 29 | 29 | 1.0000 | + | "#goodFlavourTags" | 25 | 25 | 1.0000 | + | "#taggingPions" | 29 | 2581 | 89.000 | FunctionalSSPionTagger#1 INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#BCandidates" | 4 | 4 | 1.0000 | - | "#goodFlavourTags" | 3 | 3 | 1.0000 | - | "#taggingPions" | 4 | 344 | 86.000 | + | "#BCandidates" | 1 | 1 | 1.0000 | + | "#goodFlavourTags" | 1 | 1 | 1.0000 | + | "#taggingPions" | 1 | 33 | 33.000 | FunctionalSSPionTagger#1.Tagging... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#iterations/1" | 12 | 17 | 1.4167 | 0.49301 | 1.0000 | 2.0000 | - | "#iterations/2" | 6 | 12 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | - | "#iterations/Opt" | 13 | 6 | 0.46154 | 0.49852 | 0.0000 | 1.0000 | + | "#iterations/1" | 5 | 6 | 1.2000 | 0.40000 | 1.0000 | 2.0000 | + | "#iterations/2" | 1 | 2 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | + | "#iterations/Opt" | 5 | 1 | 0.20000 | 0.40000 | 0.0000 | 1.0000 | FunctionalSSPionTagger.TaggingHe... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#iterations/1" | 115 | 129 | 1.1217 | 0.32698 | 1.0000 | 2.0000 | - | "#iterations/2" | 15 | 30 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | - | "#iterations/Opt" | 116 | 15 | 0.12931 | 0.33554 | 0.0000 | 1.0000 | + | "#iterations/1" | 103 | 121 | 1.1748 | 0.37976 | 1.0000 | 2.0000 | + | "#iterations/2" | 19 | 38 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | + | "#iterations/Opt" | 104 | 19 | 0.18269 | 0.38641 | 0.0000 | 1.0000 | +FutureEcalZSup INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | +FutureHcalZSup INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | +GraphClustering INFO Number of counters : 4 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# clusters" | 100 | 28314 | 283.14 | 95.762 | 83.000 | 532.00 | + | "Cluster energy" | 28314 |1.08316e+08 | 3825.5 | 6198.5 | 0.20000 | 1.3853e+05 | + | "Cluster size" | 28314 | 252238 | 8.9086 | 3.0259 | 3.0000 | 24.000 | + | "Negative energy clusters" | 69 | 132 | 1.9130 | 0.94392 | 1.0000 | 5.0000 | +LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of Produced Tracks" | 100 | 9525 | 95.250 | +LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of Produced Tracks" | 100 | 6300 | 63.000 | +MuonIDHlt2AlgLong INFO Number of counters : 7 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "BgLL" | 1273 | -1363.851 | -1.0714 | 1.3758 | -9.2504 | 0.0000 | + | "MuLL" | 1273 | -9532.988 | -7.4886 | 3.7951 | -11.513 | -0.0044717 | + | "muonMVAStat" | 1273 | -22.83644 | -0.017939 | 1.6061 | -3.3631 | 4.6126 | + |*"nInAcceptance" | 9525 | 7568 |( 79.45407 +- 0.4139887)% | + |*"nIsMuon" | 9525 | 1273 |( 13.36483 +- 0.3486554)% | + |*"nIsMuonTight" | 9525 | 775 |( 8.136483 +- 0.2801286)% | + |*"nMomentumCut" | 9525 | 8135 |( 85.40682 +- 0.3617335)% | +MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of input v2 MuonPIDs" | 100 | 9525 | 95.250 | +PrForwardTrackingVelo INFO Number of counters : 10 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Accepted input tracks" | 100 | 17740 | 177.40 | + | "Created long tracks" | 100 | 8984 | 89.840 | + | "Input tracks" | 100 | 18331 | 183.31 | + | "Number of candidate bins per track" | 17740 | 288691 | 16.273 | 22.373 | 0.0000 | 149.00 | + | "Number of complete candidates/track 1st Loop" | 16013 | 9564 | 0.59726 | 0.67268 | 0.0000 | 5.0000 | + | "Number of complete candidates/track 2nd Loop" | 8763 | 920 | 0.10499 | 0.32250 | 0.0000 | 3.0000 | + | "Number of x candidates per track 1st Loop" | 16013 | 39272 | 2.4525 | 2.9530 | + | "Number of x candidates per track 2nd Loop" | 8763 | 65100 | 7.4290 | 10.528 | + | "Percentage second loop execution" | 16013 | 8763 | 0.54724 | + | "Removed duplicates" | 100 | 477 | 4.7700 | +PrHybridSeeding INFO Number of counters : 21 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Created T2x1 three-hit combinations in case 0" | 267093 | 167310 | 0.62641 | 0.63723 | 0.0000 | 6.0000 | + | "Created T2x1 three-hit combinations in case 1" | 348265 | 237932 | 0.68319 | 0.77608 | 0.0000 | 10.000 | + | "Created T2x1 three-hit combinations in case 2" | 531712 | 467881 | 0.87995 | 1.0517 | 0.0000 | 20.000 | + | "Created XZ tracks (part 0)" | 300 | 28393 | 94.643 | 136.13 | 2.0000 | 884.00 | + | "Created XZ tracks (part 1)" | 300 | 29284 | 97.613 | 163.11 | 0.0000 | 1438.0 | + | "Created XZ tracks in case 0" | 200 | 18064 | 90.320 | 103.81 | 9.0000 | 831.00 | + | "Created XZ tracks in case 1" | 200 | 20802 | 104.01 | 151.20 | 8.0000 | 1275.0 | + | "Created XZ tracks in case 2" | 200 | 18811 | 94.055 | 184.31 | 0.0000 | 1438.0 | + | "Created full hit combinations in case 0" | 31888 | 31888 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "Created full hit combinations in case 1" | 25283 | 25283 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "Created full hit combinations in case 2" | 30515 | 30515 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "Created seed tracks" | 200 | 14584 | 72.920 | 35.342 | 16.000 | 286.00 | + | "Created seed tracks (part 0)" | 100 | 8098 | 80.980 | 36.506 | 16.000 | 196.00 | + | "Created seed tracks (part 1)" | 100 | 8179 | 81.790 | 43.982 | 18.000 | 325.00 | + | "Created seed tracks in case 0" | 200 | 7515 | 37.575 | 18.383 | 8.0000 | 136.00 | + | "Created seed tracks in case 1" | 200 | 13690 | 68.450 | 32.278 | 14.000 | 261.00 | + | "Created seed tracks in case 2" | 200 | 15440 | 77.200 | 38.380 | 14.000 | 316.00 | + | "Created seed tracks in recovery step" | 100 | 837 | 8.3700 | 5.5311 | 1.0000 | 29.000 | + | "Created two-hit combinations in case 0" | 32389 | 879736 | 27.162 | 19.730 | 0.0000 | 123.00 | + | "Created two-hit combinations in case 1" | 28337 | 1036395 | 36.574 | 24.711 | 0.0000 | 130.00 | + | "Created two-hit combinations in case 2" | 21984 | 1222956 | 55.629 | 38.066 | 0.0000 | 186.00 | +PrKalmanFilterForward INFO Number of counters : 6 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Pre outlier chi2 cut" | 192 | + | "chi2 cut" | 392 | + | "nIterations" | 1491 | 3909 | 2.6217 | + | "nOutlierIterations" | 1299 | 1439 | 1.1078 | + | "nTracksInput" | 100 | 1491 | 14.910 | + | "nTracksOutput" | 100 | 907 | 9.0700 | +PrKalmanFilterMatch INFO Number of counters : 6 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Pre outlier chi2 cut" | 130 | + | "chi2 cut" | 401 | + | "nIterations" | 9179 | 19531 | 2.1278 | + | "nOutlierIterations" | 9049 | 4941 | 0.54603 | + | "nTracksInput" | 100 | 9179 | 91.790 | + | "nTracksOutput" | 100 | 8648 | 86.480 | +PrLHCbID2MCParticleVPUTFTMU INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#removed null MCParticles" | 240248 | 0 | 0.0000 | +PrMatchNN INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#MatchingChi2" | 100 | 157413.3 | 1574.1 | + | "#MatchingMLP" | 9179 | 7823.351 | 0.85231 | + | "#MatchingTracks" | 100 | 9179 | 91.790 | +PrStoreSciFiHits INFO Number of counters : 25 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Average X in T1U" | 32970 | -1233815 | -37.422 | 1122.5 | -2656.2 | 2655.7 | + | "Average X in T1V" | 33500 | -867026.2 | -25.881 | 1108.4 | -2655.9 | 2655.8 | + | "Average X in T1X1" | 32389 | -807161.9 | -24.921 | 1132.6 | -2646.1 | 2646.2 | + | "Average X in T1X2" | 34150 | -397825.7 | -11.649 | 1107.3 | -2645.9 | 2645.9 | + | "Average X in T2U" | 33025 | -1030976 | -31.218 | 1142.6 | -2656.1 | 2654.8 | + | "Average X in T2V" | 33968 | -1049433 | -30.895 | 1122.9 | -2656.1 | 2656.3 | + | "Average X in T2X1" | 31279 | -1247906 | -39.896 | 1139.9 | -2646.2 | 2646.1 | + | "Average X in T2X2" | 35068 | -773526.4 | -22.058 | 1125.7 | -2646.1 | 2646.2 | + | "Average X in T3U" | 35871 | 113337.7 | 3.1596 | 1325.7 | -3188.0 | 3188.2 | + | "Average X in T3V" | 36875 | -771515.3 | -20.922 | 1327.3 | -3188.4 | 3188.1 | + | "Average X in T3X1" | 34684 | -504515.9 | -14.546 | 1338.1 | -3176.0 | 3175.4 | + | "Average X in T3X2" | 37897 | -601617 | -15.875 | 1316.5 | -3175.4 | 3176.1 | + | "Hits in T1U" | 400 | 32970 | 82.425 | 36.142 | 10.000 | 232.00 | + | "Hits in T1V" | 400 | 33500 | 83.750 | 35.079 | 15.000 | 214.00 | + | "Hits in T1X1" | 400 | 32389 | 80.972 | 34.832 | 9.0000 | 202.00 | + | "Hits in T1X2" | 400 | 34150 | 85.375 | 35.455 | 13.000 | 215.00 | + | "Hits in T2U" | 400 | 33025 | 82.562 | 35.126 | 17.000 | 208.00 | + | "Hits in T2V" | 400 | 33968 | 84.920 | 35.954 | 18.000 | 237.00 | + | "Hits in T2X1" | 400 | 31279 | 78.198 | 31.971 | 11.000 | 192.00 | + | "Hits in T2X2" | 400 | 35068 | 87.670 | 35.868 | 17.000 | 246.00 | + | "Hits in T3U" | 400 | 35871 | 89.677 | 36.292 | 17.000 | 236.00 | + | "Hits in T3V" | 400 | 36875 | 92.188 | 38.492 | 16.000 | 249.00 | + | "Hits in T3X1" | 400 | 34684 | 86.710 | 36.146 | 16.000 | 234.00 | + | "Hits in T3X2" | 400 | 37897 | 94.743 | 38.718 | 15.000 | 274.00 | + | "Total number of hits" | 100 | 411676 | 4116.8 | 1551.2 | 1069.0 | 9085.0 | +PrStoreUTHit INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#banks" | 29 | 6264 | 216.00 | +PrTrackAssociator INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"Efficiency" | 4598 | 3819 |( 83.05785 +- 0.5532101)% | + | "MC particles per track" | 3819 | 4246 | 1.1118 | Streaming_filter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 32 | 32 |( 100.0000 +- 0.000000)% | + |*"Cut selection efficiency" | 29 | 29 |( 100.0000 +- 0.000000)% | +TBTCForward INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"BadInput" | 903 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 903 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 903 | +TBTC_Match INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"BadInput" | 8622 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 8622 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 8622 | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | -ToolSvc.TrackFunctorFactory INFO Number of counters : 1 +ToolSvc.TrackFunctorFactory INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | -UnpackBestTracks INFO Number of counters : 1 +TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# Unpacked Tracks" | 100 | 41843 | 418.43 | -UnpackMuonPIDs INFO Number of counters : 1 + | "Nb PVs" | 100 | 573 | 5.7300 | +VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# UnPackedData" | 100 | 9808 | 98.080 | 51.754 | 8.0000 | 340.00 | + | "Nb of Produced Clusters" | 100 | 255452 | 2554.5 | +VeloClusterTrackingSIMD INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of Produced Clusters" | 100 | 255452 | 2554.5 | + | "Nb of Produced Tracks" | 100 | 28379 | 283.79 | bandq_b_hadron INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 32 |( 32.00000 +- 4.664762)% | - |*"# passed CombinationCut" | 485 | 83 |( 17.11340 +- 1.710171)% | - |*"# passed CompositeCut" | 83 | 35 |( 42.16867 +- 5.420477)% | - |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 60 | 0.60000 | - | "Input2 size" | 100 | 843 | 8.4300 | - | "Lifetime fit did not converge. Aborting." | 3 | -bandq_b_hadron#1 INFO Number of counters : 7 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 4 |( 4.000000 +- 1.959592)% | - |*"# passed CombinationCut" | 485 | 83 |( 17.11340 +- 1.710171)% | - |*"# passed CompositeCut" | 83 | 4 |( 4.819277 +- 2.350858)% | - |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 60 | 0.60000 | - | "Input2 size" | 100 | 843 | 8.4300 | - | "Lifetime fit did not converge. Aborting." | 1 | + |*"# passed" | 100 | 29 |( 29.00000 +- 4.537621)% | + |*"# passed CombinationCut" | 470 | 55 |( 11.70213 +- 1.482718)% | + |*"# passed CompositeCut" | 55 | 29 |( 52.72727 +- 6.731962)% | + |*"# passed vertex fit" | 55 | 55 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 50 | 0.50000 | + | "Input2 size" | 100 | 937 | 9.3700 | + | "Lifetime fit did not converge. Aborting." | 5 | +bandq_b_hadron#1 INFO Number of counters : 6 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"# passed" | 100 | 1 |( 1.000000 +- 0.9949874)% | + |*"# passed CombinationCut" | 470 | 55 |( 11.70213 +- 1.482718)% | + |*"# passed CompositeCut" | 55 | 1 |( 1.818182 +- 1.801577)% | + |*"# passed vertex fit" | 55 | 55 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 50 | 0.50000 | + | "Input2 size" | 100 | 937 | 9.3700 | bandq_detached_kaons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 9381 | 843 |( 8.986249 +- 0.2952692)% | + |*"Cut selection efficiency" | 8938 | 937 |( 10.48333 +- 0.3240272)% | charmonium_dimuon INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 64 | 60 |( 93.75000 +- 3.025768)% | + |*"Cut selection efficiency" | 53 | 50 |( 94.33962 +- 3.174182)% | charmonium_dimuon_base INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 60 |( 60.00000 +- 4.898979)% | - |*"# passed CombinationCut" | 843 | 74 |( 8.778173 +- 0.9746253)% | - |*"# passed CompositeCut" | 74 | 64 |( 86.48649 +- 3.974133)% | - |*"# passed vertex fit" | 74 | 74 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 452 | 4.5200 | - | "Input2 size" | 100 | 452 | 4.5200 | + |*"# passed" | 100 | 53 |( 53.00000 +- 4.990992)% | + |*"# passed CombinationCut" | 145 | 56 |( 38.62069 +- 4.043310)% | + |*"# passed CompositeCut" | 56 | 53 |( 94.64286 +- 3.008961)% | + |*"# passed vertex fit" | 56 | 56 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 234 | 2.3400 | + | "Input2 size" | 100 | 234 | 2.3400 | charmonium_muons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 1444 | 452 |( 31.30194 +- 1.220322)% | + |*"Cut selection efficiency" | 1273 | 234 |( 18.38178 +- 1.085608)% | +fromPrSeedingTracksV1Tracks INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of converted Tracks" | 100 | 14584 | 145.84 | +fromPrVeloTracksV1TracksMerger INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of converted Tracks" | 29 | 8213 | 283.21 | +fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of Produced MuonPIDs" | 100 | 9525 | 95.250 | jpsi INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 60 | 60 |( 100.0000 +- 0.000000)% | + |*"Cut selection efficiency" | 50 | 50 |( 100.0000 +- 0.000000)% | require_pvs INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 100 | 100 |( 100.0000 +- 0.000000)% | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref.x86_64_v3-opt index 35363e8efd8..e1e17fc3dca 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_sspion_tagger_on_example_b2jpsik_lines.ref.x86_64_v3-opt @@ -1,106 +1,337 @@ -CopyInputStream INFO Events output: 32 +GraphClustering INFO Built <283.14> graph calo clustering clusters/event +CopyInputStream INFO Events output: 29 ToolSvc INFO Removing all tools created by ToolSvc ApplicationMgr INFO Application Manager Finalized successfully ApplicationMgr INFO Application Manager Terminated successfully +CaloAcceptanceBremAlg_Long INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#total tracks" | 100 | 9524 | 95.240 | 42.645 | 20.000 | 270.00 | + | "#tracks in acceptance" | 100 | 6833 | 68.330 | 31.415 | 12.000 | 204.00 | +CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#total tracks" | 100 | 9524 | 95.240 | 42.645 | 20.000 | 270.00 | + | "#tracks in acceptance" | 100 | 7934 | 79.340 | 36.674 | 18.000 | 226.00 | +CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#total tracks" | 100 | 6296 | 62.960 | 38.526 | 13.000 | 267.00 | + | "#tracks in acceptance" | 100 | 5040 | 50.400 | 32.197 | 11.000 | 217.00 | +CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#total tracks" | 100 | 9524 | 95.240 | 42.645 | 20.000 | 270.00 | + | "#tracks in acceptance" | 100 | 7489 | 74.890 | 34.705 | 15.000 | 214.00 | +CaloFutureClusterCovarianceAlg INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# clusters" | 28314 | +CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "parameter updated" | 2 | +CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Corrected Clusters: # cells " | 6419 | 22527 | 3.5094 | 1.1182 | 2.0000 | 12.000 | + | "Corrected Clusters: ET" | 6419 | 619486.8 | 96.508 | 196.11 | 0.0000 | 4220.4 | + | "Corrected Clusters: size ratio" | 6419 | 2319.819 | 0.36140 | 0.42755 | -1.1017e-15 | 5.3593 | +CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#links in table" | 100 | 3097 | 30.970 | 22.950 | 0.0000 | 113.00 | + | "average chi2" | 3097 | 1567.57 | 0.50616 | 0.92169 | 4.2336e-07 | 27.426 | + | "average energy (track based)" | 6833 | 105109.4 | 15.383 | 43.974 | 0.0000 | 1028.3 | +CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#above threshold" | 11 | 11 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "#links in table" | 100 | 7041 | 70.410 | 37.105 | 14.000 | 207.00 | + | "average chi2" | 7041 | 30562.35 | 4.3406 | 11.945 | -38.295 | 372.24 | +CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#links in table" | 100 | 7738 | 77.380 | 40.857 | 16.000 | 237.00 | + | "average chi2" | 7738 | 1068.215 | 0.13805 | 0.83653 | 2.5772e-06 | 63.682 | +CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#above threshold" | 1 | 1 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "#links in table" | 100 | 4838 | 48.380 | 32.437 | 11.000 | 219.00 | + | "average chi2" | 4838 | 705.5488 | 0.14583 | 1.3477 | 6.2284e-07 | 90.908 | +CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "average DLL" | 7934 | -296.6618 | -0.037391 | 0.055541 | -0.48267 | 0.22289 | + | "average E/p" | 7934 | 36.93599 | 0.0046554 | 0.0052278 | 0.0000 | 0.067706 | +CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "energy (calo) associated to track" | 7489 |4.925479e+07 | 6577.0 | 12325.0 | 0.0000 | 2.0210e+05 | ChargedProtoParticleAssociator INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Efficiency" | 3947 | 3181 |( 80.59286 +- 0.6294997)% | - | "MC particles per ProtoParticle" | 3181 | 3599 | 1.1314 | + |*"Efficiency" | 2749 | 2247 |( 81.73881 +- 0.7368707)% | + | "MC particles per ProtoParticle" | 2247 | 2674 | 1.1900 | +ClassifyPhotonElectronAlg INFO Number of counters : 14 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Electron Delta(E)" | 8747 | -3633822 | -415.44 | 540.17 | -4571.1 | 4551.3 | + | "Electron Delta(X)" | 8747 | -2435.972 | -0.27849 | 12.248 | -52.217 | 23.742 | + | "Electron Delta(Y)" | 8747 | -2483.802 | -0.28396 | 12.281 | -22.782 | 37.727 | + | "Electron Delta(Z)" | 8747 | 559360.2 | 63.949 | 15.171 | -1.7256 | 112.75 | + | "Electron corrected energy" | 8747 |5.129604e+07 | 5864.4 | 7257.7 | 37.195 | 1.0517e+05 | + | "Electrons pT-rejected after correction" | 165 | + | "Photon Delta(E)" | 16722 | -4296959 | -256.96 | 416.39 | -4571.1 | 1365.2 | + | "Photon Delta(X)" | 16722 | -5438.308 | -0.32522 | 12.512 | -88.809 | 44.008 | + | "Photon Delta(Y)" | 16722 | -5411.494 | -0.32362 | 12.522 | -92.068 | 111.91 | + | "Photon Delta(Z)" | 16722 | 905456.2 | 54.148 | 13.865 | -7.3809 | 114.16 | + | "Photon corrected energy" | 16722 |5.58181e+07 | 3338.0 | 5609.4 | 24.826 | 1.3990e+05 | + | "Photons pT-rejected after correction" | 639 | + | "electronHypos" | 100 | 8582 | 85.820 | 37.321 | 22.000 | 222.00 | + | "photonHypos" | 100 | 16083 | 160.83 | 52.951 | 44.000 | 274.00 | +ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | " Inner" | 7196 | 7161.255 | 0.99517 | 0.020325 | 0.96451 | 1.1112 | + | " Middle" | 7018 | 7064.516 | 1.0066 | 0.020358 | 0.97680 | 1.1911 | + | " Outer" | 11211 | 11208.68 | 0.99979 | 0.016350 | 0.97356 | 1.1451 | + | "Pileup offset" | 25425 | 9769103 | 384.23 | 445.39 | -3287.6 | 3833.6 | + | "Pileup scale" | 25469 | 161365 | 6.3357 | 1.8585 | 2.0000 | 10.000 | + | "Pileup subtracted ratio" | 25425 | 21943.99 | 0.86309 | 0.13593 | 0.0061236 | 1.4188 | + | "Skip negative energy correction" | 44 | +CloneKillerForward INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "nTracksInput" | 100 | 8991 | 89.910 | + | "nTracksSelected" | 100 | 1496 | 14.960 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | DeterministicPrescaler#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | +FunctionalChargedProtoParticleMaker INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "CreatedProtos" | 9524 | FunctionalParticleMaker INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 9876 | 1444 |( 14.62130 +- 0.3555308)% | - |*"# passed Track filter" | 13276 | 9876 |( 74.38988 +- 0.3788167)% | - | "Nb created anti-particles" | 100 | 705 | 7.0500 | 6.7814 | 0.0000 | 45.000 | - | "Nb created particles" | 100 | 739 | 7.3900 | 7.4899 | 0.0000 | 51.000 | + |*"# passed ProtoParticle filter" | 9524 | 1274 |( 13.37673 +- 0.3488049)% | + |*"# passed Track filter" | 9524 | 9524 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 595 | 5.9500 | 4.4640 | 0.0000 | 23.000 | + | "Nb created particles" | 100 | 679 | 6.7900 | 5.7729 | 0.0000 | 30.000 | FunctionalParticleMaker#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 9876 | 9381 |( 94.98785 +- 0.2195612)% | - |*"# passed Track filter" | 13276 | 9876 |( 74.38988 +- 0.3788167)% | - | "Nb created anti-particles" | 100 | 4700 | 47.000 | 25.030 | 2.0000 | 167.00 | - | "Nb created particles" | 100 | 4681 | 46.810 | 23.838 | 3.0000 | 143.00 | + |*"# passed ProtoParticle filter" | 9524 | 8936 |( 93.82612 +- 0.2466216)% | + |*"# passed Track filter" | 9524 | 9524 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 100 | 4426 | 44.260 | 20.085 | 7.0000 | 134.00 | + | "Nb created particles" | 100 | 4510 | 45.100 | 20.755 | 11.000 | 114.00 | FunctionalParticleMaker#2 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 2968 | 2818 |( 94.94609 +- 0.4020872)% | - |*"# passed Track filter" | 3947 | 2968 |( 75.19635 +- 0.6874207)% | - | "Nb created anti-particles" | 32 | 1395 | 43.594 | 24.114 | 6.0000 | 98.000 | - | "Nb created particles" | 32 | 1423 | 44.469 | 24.882 | 6.0000 | 100.00 | + |*"# passed ProtoParticle filter" | 2749 | 2574 |( 93.63405 +- 0.4656517)% | + |*"# passed Track filter" | 2749 | 2749 |( 100.0000 +- 0.000000)% | + | "Nb created anti-particles" | 29 | 1292 | 44.552 | 15.657 | 10.000 | 77.000 | + | "Nb created particles" | 29 | 1282 | 44.207 | 15.936 | 11.000 | 78.000 | FunctionalSSPionTagger INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#BCandidates" | 32 | 35 | 1.0938 | - | "#goodFlavourTags" | 28 | 28 | 1.0000 | - | "#taggingPions" | 32 | 2818 | 88.062 | + | "#BCandidates" | 29 | 29 | 1.0000 | + | "#goodFlavourTags" | 25 | 25 | 1.0000 | + | "#taggingPions" | 29 | 2574 | 88.759 | FunctionalSSPionTagger#1 INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#BCandidates" | 4 | 4 | 1.0000 | - | "#goodFlavourTags" | 3 | 3 | 1.0000 | - | "#taggingPions" | 4 | 344 | 86.000 | + | "#BCandidates" | 1 | 1 | 1.0000 | + | "#goodFlavourTags" | 1 | 1 | 1.0000 | + | "#taggingPions" | 1 | 33 | 33.000 | FunctionalSSPionTagger#1.Tagging... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#iterations/1" | 12 | 17 | 1.4167 | 0.49301 | 1.0000 | 2.0000 | - | "#iterations/2" | 6 | 12 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | - | "#iterations/Opt" | 13 | 6 | 0.46154 | 0.49852 | 0.0000 | 1.0000 | + | "#iterations/1" | 5 | 6 | 1.2000 | 0.40000 | 1.0000 | 2.0000 | + | "#iterations/2" | 1 | 2 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | + | "#iterations/Opt" | 5 | 1 | 0.20000 | 0.40000 | 0.0000 | 1.0000 | FunctionalSSPionTagger.TaggingHe... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#iterations/1" | 115 | 129 | 1.1217 | 0.32698 | 1.0000 | 2.0000 | - | "#iterations/2" | 15 | 30 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | - | "#iterations/Opt" | 116 | 15 | 0.12931 | 0.33554 | 0.0000 | 1.0000 | + | "#iterations/1" | 104 | 122 | 1.1731 | 0.37831 | 1.0000 | 2.0000 | + | "#iterations/2" | 19 | 38 | 2.0000 | 0.0000 | 2.0000 | 2.0000 | + | "#iterations/Opt" | 105 | 19 | 0.18095 | 0.38498 | 0.0000 | 1.0000 | +FutureEcalZSup INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | +FutureHcalZSup INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | +GraphClustering INFO Number of counters : 4 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# clusters" | 100 | 28314 | 283.14 | 95.762 | 83.000 | 532.00 | + | "Cluster energy" | 28314 |1.08316e+08 | 3825.5 | 6198.5 | 0.20000 | 1.3853e+05 | + | "Cluster size" | 28314 | 252238 | 8.9086 | 3.0259 | 3.0000 | 24.000 | + | "Negative energy clusters" | 69 | 132 | 1.9130 | 0.94392 | 1.0000 | 5.0000 | +LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of Produced Tracks" | 100 | 9524 | 95.240 | +LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of Produced Tracks" | 100 | 6296 | 62.960 | +MuonIDHlt2AlgLong INFO Number of counters : 7 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "BgLL" | 1274 | -1367.297 | -1.0732 | 1.3758 | -9.2505 | 0.0000 | + | "MuLL" | 1274 | -9533.386 | -7.4830 | 3.7968 | -11.513 | -0.0044713 | + | "muonMVAStat" | 1274 | -21.96418 | -0.017240 | 1.6053 | -3.3631 | 4.6126 | + |*"nInAcceptance" | 9524 | 7563 |( 79.40991 +- 0.4143399)% | + |*"nIsMuon" | 9524 | 1274 |( 13.37673 +- 0.3488049)% | + |*"nIsMuonTight" | 9524 | 777 |( 8.158337 +- 0.2804859)% | + |*"nMomentumCut" | 9524 | 8129 |( 85.35279 +- 0.3623069)% | +MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of input v2 MuonPIDs" | 100 | 9524 | 95.240 | +PrForwardTrackingVelo INFO Number of counters : 10 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Accepted input tracks" | 100 | 17778 | 177.78 | + | "Created long tracks" | 100 | 8991 | 89.910 | + | "Input tracks" | 100 | 18392 | 183.92 | + | "Number of candidate bins per track" | 17778 | 289197 | 16.267 | 22.365 | 0.0000 | 149.00 | + | "Number of complete candidates/track 1st Loop" | 16042 | 9567 | 0.59637 | 0.67233 | 0.0000 | 5.0000 | + | "Number of complete candidates/track 2nd Loop" | 8788 | 925 | 0.10526 | 0.32279 | 0.0000 | 3.0000 | + | "Number of x candidates per track 1st Loop" | 16042 | 39320 | 2.4511 | 2.9533 | + | "Number of x candidates per track 2nd Loop" | 8788 | 65299 | 7.4305 | 10.526 | + | "Percentage second loop execution" | 16042 | 8788 | 0.54781 | + | "Removed duplicates" | 100 | 480 | 4.8000 | +PrHybridSeeding INFO Number of counters : 21 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Created T2x1 three-hit combinations in case 0" | 267094 | 167313 | 0.62642 | 0.63724 | 0.0000 | 6.0000 | + | "Created T2x1 three-hit combinations in case 1" | 348263 | 237932 | 0.68320 | 0.77609 | 0.0000 | 10.000 | + | "Created T2x1 three-hit combinations in case 2" | 531776 | 467909 | 0.87990 | 1.0516 | 0.0000 | 20.000 | + | "Created XZ tracks (part 0)" | 300 | 28396 | 94.653 | 136.15 | 2.0000 | 884.00 | + | "Created XZ tracks (part 1)" | 300 | 29282 | 97.607 | 163.11 | 0.0000 | 1438.0 | + | "Created XZ tracks in case 0" | 200 | 18064 | 90.320 | 103.81 | 9.0000 | 831.00 | + | "Created XZ tracks in case 1" | 200 | 20802 | 104.01 | 151.20 | 8.0000 | 1275.0 | + | "Created XZ tracks in case 2" | 200 | 18812 | 94.060 | 184.34 | 0.0000 | 1438.0 | + | "Created full hit combinations in case 0" | 31887 | 31887 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "Created full hit combinations in case 1" | 25283 | 25283 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "Created full hit combinations in case 2" | 30515 | 30515 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | + | "Created seed tracks" | 200 | 14585 | 72.925 | 35.338 | 16.000 | 286.00 | + | "Created seed tracks (part 0)" | 100 | 8099 | 80.990 | 36.500 | 16.000 | 196.00 | + | "Created seed tracks (part 1)" | 100 | 8178 | 81.780 | 43.926 | 18.000 | 324.00 | + | "Created seed tracks in case 0" | 200 | 7515 | 37.575 | 18.383 | 8.0000 | 136.00 | + | "Created seed tracks in case 1" | 200 | 13689 | 68.445 | 32.267 | 14.000 | 261.00 | + | "Created seed tracks in case 2" | 200 | 15438 | 77.190 | 38.337 | 14.000 | 315.00 | + | "Created seed tracks in recovery step" | 100 | 839 | 8.3900 | 5.5315 | 1.0000 | 29.000 | + | "Created two-hit combinations in case 0" | 32389 | 879736 | 27.162 | 19.730 | 0.0000 | 123.00 | + | "Created two-hit combinations in case 1" | 28337 | 1036395 | 36.574 | 24.711 | 0.0000 | 130.00 | + | "Created two-hit combinations in case 2" | 21984 | 1223027 | 55.633 | 38.068 | 0.0000 | 186.00 | +PrKalmanFilterForward INFO Number of counters : 6 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Pre outlier chi2 cut" | 194 | + | "chi2 cut" | 393 | + | "nIterations" | 1496 | 3929 | 2.6263 | + | "nOutlierIterations" | 1302 | 1444 | 1.1091 | + | "nTracksInput" | 100 | 1496 | 14.960 | + | "nTracksOutput" | 100 | 909 | 9.0900 | +PrKalmanFilterMatch INFO Number of counters : 6 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Pre outlier chi2 cut" | 132 | + | "chi2 cut" | 407 | + | "nIterations" | 9199 | 19566 | 2.1270 | + | "nOutlierIterations" | 9067 | 4958 | 0.54682 | + | "nTracksInput" | 100 | 9199 | 91.990 | + | "nTracksOutput" | 100 | 8660 | 86.600 | +PrLHCbID2MCParticleVPUTFTMU INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#removed null MCParticles" | 240248 | 0 | 0.0000 | +PrMatchNN INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#MatchingChi2" | 100 | 157972.2 | 1579.7 | + | "#MatchingMLP" | 9199 | 7837.057 | 0.85195 | + | "#MatchingTracks" | 100 | 9199 | 91.990 | +PrStoreSciFiHits INFO Number of counters : 25 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Average X in T1U" | 32970 | -1233815 | -37.422 | 1122.5 | -2656.2 | 2655.7 | + | "Average X in T1V" | 33500 | -867026.2 | -25.881 | 1108.4 | -2655.9 | 2655.8 | + | "Average X in T1X1" | 32389 | -807161.9 | -24.921 | 1132.6 | -2646.1 | 2646.2 | + | "Average X in T1X2" | 34150 | -397825.7 | -11.649 | 1107.3 | -2645.9 | 2645.9 | + | "Average X in T2U" | 33025 | -1030976 | -31.218 | 1142.6 | -2656.1 | 2654.8 | + | "Average X in T2V" | 33968 | -1049433 | -30.895 | 1122.9 | -2656.1 | 2656.3 | + | "Average X in T2X1" | 31279 | -1247906 | -39.896 | 1139.9 | -2646.2 | 2646.1 | + | "Average X in T2X2" | 35068 | -773526.4 | -22.058 | 1125.7 | -2646.1 | 2646.2 | + | "Average X in T3U" | 35871 | 113337.7 | 3.1596 | 1325.7 | -3188.0 | 3188.2 | + | "Average X in T3V" | 36875 | -771515.3 | -20.922 | 1327.3 | -3188.4 | 3188.1 | + | "Average X in T3X1" | 34684 | -504515.9 | -14.546 | 1338.1 | -3176.0 | 3175.4 | + | "Average X in T3X2" | 37897 | -601617 | -15.875 | 1316.5 | -3175.4 | 3176.1 | + | "Hits in T1U" | 400 | 32970 | 82.425 | 36.142 | 10.000 | 232.00 | + | "Hits in T1V" | 400 | 33500 | 83.750 | 35.079 | 15.000 | 214.00 | + | "Hits in T1X1" | 400 | 32389 | 80.972 | 34.832 | 9.0000 | 202.00 | + | "Hits in T1X2" | 400 | 34150 | 85.375 | 35.455 | 13.000 | 215.00 | + | "Hits in T2U" | 400 | 33025 | 82.562 | 35.126 | 17.000 | 208.00 | + | "Hits in T2V" | 400 | 33968 | 84.920 | 35.954 | 18.000 | 237.00 | + | "Hits in T2X1" | 400 | 31279 | 78.198 | 31.971 | 11.000 | 192.00 | + | "Hits in T2X2" | 400 | 35068 | 87.670 | 35.868 | 17.000 | 246.00 | + | "Hits in T3U" | 400 | 35871 | 89.677 | 36.292 | 17.000 | 236.00 | + | "Hits in T3V" | 400 | 36875 | 92.188 | 38.492 | 16.000 | 249.00 | + | "Hits in T3X1" | 400 | 34684 | 86.710 | 36.146 | 16.000 | 234.00 | + | "Hits in T3X2" | 400 | 37897 | 94.743 | 38.718 | 15.000 | 274.00 | + | "Total number of hits" | 100 | 411676 | 4116.8 | 1551.2 | 1069.0 | 9085.0 | +PrStoreUTHit INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "#banks" | 29 | 6264 | 216.00 | +PrTrackAssociator INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"Efficiency" | 4590 | 3821 |( 83.24619 +- 0.5512298)% | + | "MC particles per track" | 3821 | 4248 | 1.1118 | Streaming_filter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 32 | 32 |( 100.0000 +- 0.000000)% | + |*"Cut selection efficiency" | 29 | 29 |( 100.0000 +- 0.000000)% | +TBTCForward INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"BadInput" | 905 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 905 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 905 | +TBTC_Match INFO Number of counters : 3 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"BadInput" | 8619 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 8619 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 8619 | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | -ToolSvc.TrackFunctorFactory INFO Number of counters : 1 +ToolSvc.TrackFunctorFactory INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | -UnpackBestTracks INFO Number of counters : 1 +TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# Unpacked Tracks" | 100 | 41843 | 418.43 | -UnpackMuonPIDs INFO Number of counters : 1 + | "Nb PVs" | 100 | 591 | 5.9100 | +VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# UnPackedData" | 100 | 9808 | 98.080 | 51.754 | 8.0000 | 340.00 | + | "Nb of Produced Clusters" | 100 | 255452 | 2554.5 | +VeloClusterTrackingSIMD INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of Produced Clusters" | 100 | 255452 | 2554.5 | + | "Nb of Produced Tracks" | 100 | 28465 | 284.65 | bandq_b_hadron INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 32 |( 32.00000 +- 4.664762)% | - |*"# passed CombinationCut" | 485 | 83 |( 17.11340 +- 1.710171)% | - |*"# passed CompositeCut" | 83 | 35 |( 42.16867 +- 5.420477)% | - |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 60 | 0.60000 | - | "Input2 size" | 100 | 843 | 8.4300 | + |*"# passed" | 100 | 29 |( 29.00000 +- 4.537621)% | + |*"# passed CombinationCut" | 471 | 58 |( 12.31423 +- 1.514111)% | + |*"# passed CompositeCut" | 58 | 29 |( 50.00000 +- 6.565322)% | + |*"# passed vertex fit" | 58 | 58 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 50 | 0.50000 | + | "Input2 size" | 100 | 934 | 9.3400 | | "Lifetime fit did not converge. Aborting." | 2 | -bandq_b_hadron#1 INFO Number of counters : 7 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 4 |( 4.000000 +- 1.959592)% | - |*"# passed CombinationCut" | 485 | 83 |( 17.11340 +- 1.710171)% | - |*"# passed CompositeCut" | 83 | 4 |( 4.819277 +- 2.350858)% | - |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 60 | 0.60000 | - | "Input2 size" | 100 | 843 | 8.4300 | - | "Lifetime fit did not converge. Aborting." | 1 | +bandq_b_hadron#1 INFO Number of counters : 6 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + |*"# passed" | 100 | 1 |( 1.000000 +- 0.9949874)% | + |*"# passed CombinationCut" | 471 | 58 |( 12.31423 +- 1.514111)% | + |*"# passed CompositeCut" | 58 | 1 |( 1.724138 +- 1.709210)% | + |*"# passed vertex fit" | 58 | 58 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 50 | 0.50000 | + | "Input2 size" | 100 | 934 | 9.3400 | bandq_detached_kaons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 9381 | 843 |( 8.986249 +- 0.2952692)% | + |*"Cut selection efficiency" | 8936 | 934 |( 10.45210 +- 0.3236369)% | charmonium_dimuon INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 64 | 60 |( 93.75000 +- 3.025768)% | + |*"Cut selection efficiency" | 53 | 50 |( 94.33962 +- 3.174182)% | charmonium_dimuon_base INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 60 |( 60.00000 +- 4.898979)% | - |*"# passed CombinationCut" | 843 | 74 |( 8.778173 +- 0.9746253)% | - |*"# passed CompositeCut" | 74 | 64 |( 86.48649 +- 3.974133)% | - |*"# passed vertex fit" | 74 | 74 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 452 | 4.5200 | - | "Input2 size" | 100 | 452 | 4.5200 | + |*"# passed" | 100 | 53 |( 53.00000 +- 4.990992)% | + |*"# passed CombinationCut" | 147 | 56 |( 38.09524 +- 4.005334)% | + |*"# passed CompositeCut" | 56 | 53 |( 94.64286 +- 3.008961)% | + |*"# passed vertex fit" | 56 | 56 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 234 | 2.3400 | + | "Input2 size" | 100 | 234 | 2.3400 | charmonium_muons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 1444 | 452 |( 31.30194 +- 1.220322)% | + |*"Cut selection efficiency" | 1274 | 234 |( 18.36735 +- 1.084852)% | +fromPrSeedingTracksV1Tracks INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of converted Tracks" | 100 | 14585 | 145.85 | +fromPrVeloTracksV1TracksMerger INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of converted Tracks" | 29 | 8232 | 283.86 | +fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Nb of Produced MuonPIDs" | 100 | 9524 | 95.240 | jpsi INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 60 | 60 |( 100.0000 +- 0.000000)% | + |*"Cut selection efficiency" | 50 | 50 |( 100.0000 +- 0.000000)% | require_pvs INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 100 | 100 |( 100.0000 +- 0.000000)% | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref b/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref index 08e301c9bab..6203106016c 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref @@ -2,19 +2,20 @@ GraphClustering INFO Built <320.6> graph calo clustering ToolSvc INFO Removing all tools created by ToolSvc ApplicationMgr INFO Application Manager Finalized successfully ApplicationMgr INFO Application Manager Terminated successfully -BdsToPhiPhiCombiner INFO Number of counters : 3 +BdsToPhiPhiCombiner INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 5 | 0 |( 0.000000 +- 0.000000)% | - | "Input1 size" | 5 | 0 | 0.0000 | - | "Input2 size" | 5 | 0 | 0.0000 | + |*"# passed CombinationCut" | 2 | 0 |( 0.000000 +- 0.000000)% | + | "Input1 size" | 5 | 2 | 0.40000 | + | "Input2 size" | 5 | 2 | 0.40000 | BnoCPhiCombiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 5 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed CombinationCut" | 136 | 2 |( 1.470588 +- 1.032189)% | - |*"# passed CompositeCut" | 2 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed vertex fit" | 2 | 2 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 5 | 37 | 7.4000 | - | "Input2 size" | 5 | 37 | 7.4000 | + |*"# passed" | 5 | 1 |( 20.00000 +- 17.88854)% | + |*"# passed CombinationCut" | 162 | 4 |( 2.469136 +- 1.219231)% | + |*"# passed CompositeCut" | 4 | 2 |( 50.00000 +- 25.00000)% | + |*"# passed vertex fit" | 4 | 4 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 5 | 39 | 7.8000 | + | "Input2 size" | 5 | 39 | 7.8000 | CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#total tracks" | 5 | 625 | 125.00 | 57.834 | 58.000 | 201.00 | @@ -48,25 +49,25 @@ CaloFutureMergedPi0.EcalCovariance INFO Number of counters : 1 CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 216 | 43.200 | 29.721 | 9.0000 | 81.000 | - | "average chi2" | 216 | 83.16766 | 0.38504 | 0.68873 | 0.0015031 | 4.3440 | + | "average chi2" | 216 | 83.16676 | 0.38503 | 0.68874 | 0.0015031 | 4.3440 | | "average energy (track based)" | 418 | 8325.499 | 19.917 | 48.359 | 0.0000 | 533.94 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 3 | 3 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | | "#links in table" | 5 | 489 | 97.800 | 47.309 | 37.000 | 155.00 | - | "average chi2" | 489 | 3871.074 | 7.9163 | 15.650 | 0.0012664 | 120.10 | + | "average chi2" | 489 | 3871.032 | 7.9162 | 15.650 | 0.0012662 | 120.09 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 532 | 106.40 | 50.078 | 43.000 | 166.00 | - | "average chi2" | 532 | 46.36885 | 0.087159 | 0.11883 | 1.0796e-05 | 0.99110 | + | "average chi2" | 532 | 46.36882 | 0.087159 | 0.11883 | 1.0794e-05 | 0.99110 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 327 | 65.400 | 24.679 | 46.000 | 111.00 | | "average chi2" | 327 | 30.1319 | 0.092146 | 0.12916 | 0.00021690 | 0.76357 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 507 | -12.40702 | -0.024471 | 0.044314 | -0.20720 | 0.077630 | - | "average E/p" | 507 | 2.165585 | 0.0042714 | 0.0045773 | 0.0000 | 0.038752 | + | "average DLL" | 507 | -12.407 | -0.024471 | 0.044314 | -0.20720 | 0.077631 | + | "average E/p" | 507 | 2.165586 | 0.0042714 | 0.0045773 | 0.0000 | 0.038752 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "energy (calo) associated to track" | 484 | 4519907 | 9338.7 | 15225.0 | 0.0000 | 1.0861e+05 | @@ -95,8 +96,9 @@ ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | "Pileup scale" | 1465 | 10062 | 6.8683 | 1.6773 | 4.0000 | 9.0000 | | "Pileup subtracted ratio" | 1462 | 1266.505 | 0.86628 | 0.13457 | 0.10630 | 0.99751 | | "Skip negative energy correction" | 3 | -CloneKillerForward INFO Number of counters : 1 +CloneKillerForward INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "nTracksInput" | 5 | 598 | 119.60 | | "nTracksSelected" | 5 | 136 | 27.200 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -116,12 +118,13 @@ FutureEcalZSup INFO Number of counters : 1 FutureHcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"No bank found" | 5 | 0 |( 0.000000 +- 0.000000)% | -GaudiAllenCountAndDumpLineDecisions INFO Number of counters : 55 +GaudiAllenCountAndDumpLineDecisions INFO Number of counters : 56 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Selected by Hlt1BeamGasDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BeamOneDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BeamTwoDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BothBeamsDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | + |*"Selected by Hlt1Bs2GammaGammaDecision" | 5 | 1 |( 20.00000 +- 17.88854)% | |*"Selected by Hlt1D2KKDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1D2KPiAlignmentDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1D2KPiDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | @@ -186,7 +189,7 @@ LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | "Nb of Produced Tracks" | 5 | 456 | 91.200 | MuonIDHlt2AlgLong INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 84 | -64.64967 | -0.76964 | 1.2100 | -5.6539 | 0.0000 | + | "BgLL" | 84 | -64.64965 | -0.76964 | 1.2100 | -5.6539 | 0.0000 | | "MuLL" | 84 | -716.1308 | -8.5254 | 3.6350 | -11.513 | -0.20127 | | "muonMVAStat" | 84 | -20.79248 | -0.24753 | 1.2310 | -2.1618 | 3.7953 | |*"nInAcceptance" | 625 | 492 |( 78.72000 +- 1.637150)% | @@ -198,10 +201,10 @@ MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | "Nb of input v2 MuonPIDs" | 5 | 625 | 125.00 | ParticleRangeFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 582 | 73 |( 12.54296 +- 1.372890)% | + |*"Cut selection efficiency" | 582 | 79 |( 13.57388 +- 1.419754)% | ParticleRangeFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 73 | 37 |( 50.68493 +- 5.851508)% | + |*"Cut selection efficiency" | 79 | 39 |( 49.36709 +- 5.624989)% | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Accepted input tracks" | 5 | 1048 | 209.60 | @@ -241,7 +244,7 @@ PrKalmanFilterForward INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 20 | | "chi2 cut" | 33 | - | "nIterations" | 136 | 351 | 2.5809 | + | "nIterations" | 136 | 350 | 2.5735 | | "nOutlierIterations" | 116 | 118 | 1.0172 | | "nTracksInput" | 5 | 136 | 27.200 | | "nTracksOutput" | 5 | 83 | 16.600 | @@ -249,7 +252,7 @@ PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 7 | | "chi2 cut" | 33 | - | "nIterations" | 582 | 1242 | 2.1340 | + | "nIterations" | 582 | 1241 | 2.1323 | | "nOutlierIterations" | 575 | 318 | 0.55304 | | "nTracksInput" | 5 | 582 | 116.40 | | "nTracksOutput" | 5 | 542 | 108.40 | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref.x86_64_v3-opt index 341b0d6f072..9c4ec600207 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_with_hlt1_decisions.ref.x86_64_v3-opt @@ -2,19 +2,20 @@ GraphClustering INFO Built <320.6> graph calo clustering ToolSvc INFO Removing all tools created by ToolSvc ApplicationMgr INFO Application Manager Finalized successfully ApplicationMgr INFO Application Manager Terminated successfully -BdsToPhiPhiCombiner INFO Number of counters : 3 +BdsToPhiPhiCombiner INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 5 | 0 |( 0.000000 +- 0.000000)% | - | "Input1 size" | 5 | 0 | 0.0000 | - | "Input2 size" | 5 | 0 | 0.0000 | + |*"# passed CombinationCut" | 2 | 0 |( 0.000000 +- 0.000000)% | + | "Input1 size" | 5 | 2 | 0.40000 | + | "Input2 size" | 5 | 2 | 0.40000 | BnoCPhiCombiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 5 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed CombinationCut" | 136 | 2 |( 1.470588 +- 1.032189)% | - |*"# passed CompositeCut" | 2 | 0 |( 0.000000 +- 0.000000)% | - |*"# passed vertex fit" | 2 | 2 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 5 | 37 | 7.4000 | - | "Input2 size" | 5 | 37 | 7.4000 | + |*"# passed" | 5 | 1 |( 20.00000 +- 17.88854)% | + |*"# passed CombinationCut" | 150 | 4 |( 2.666667 +- 1.315435)% | + |*"# passed CompositeCut" | 4 | 2 |( 50.00000 +- 25.00000)% | + |*"# passed vertex fit" | 4 | 4 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 5 | 38 | 7.6000 | + | "Input2 size" | 5 | 38 | 7.6000 | CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#total tracks" | 5 | 626 | 125.20 | 58.342 | 58.000 | 201.00 | @@ -48,55 +49,56 @@ CaloFutureMergedPi0.EcalCovariance INFO Number of counters : 1 CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 215 | 43.000 | 29.509 | 9.0000 | 81.000 | - | "average chi2" | 215 | 84.95163 | 0.39512 | 0.69722 | 0.0015031 | 4.3440 | + | "average chi2" | 215 | 84.95025 | 0.39512 | 0.69722 | 0.0015030 | 4.3440 | | "average energy (track based)" | 418 | 8297.31 | 19.850 | 47.577 | 0.0000 | 529.67 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 3 | 3 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | | "#links in table" | 5 | 488 | 97.600 | 47.411 | 37.000 | 155.00 | - | "average chi2" | 488 | 3876.389 | 7.9434 | 15.670 | 0.0012664 | 120.10 | + | "average chi2" | 488 | 3883.873 | 7.9588 | 15.705 | 0.0012662 | 120.23 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 532 | 106.40 | 50.413 | 43.000 | 167.00 | - | "average chi2" | 532 | 46.4463 | 0.087305 | 0.11892 | 1.0732e-05 | 0.99110 | + | "average chi2" | 532 | 46.44627 | 0.087305 | 0.11892 | 1.0729e-05 | 0.99110 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 5 | 326 | 65.200 | 24.310 | 46.000 | 110.00 | | "average chi2" | 326 | 30.05494 | 0.092193 | 0.12948 | 0.00021717 | 0.76358 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 507 | -12.49924 | -0.024653 | 0.044278 | -0.20720 | 0.077632 | - | "average E/p" | 507 | 2.156643 | 0.0042537 | 0.0045691 | 0.0000 | 0.038492 | + | "average DLL" | 507 | -12.49922 | -0.024653 | 0.044278 | -0.20720 | 0.077632 | + | "average E/p" | 507 | 2.156642 | 0.0042537 | 0.0045691 | 0.0000 | 0.038492 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "energy (calo) associated to track" | 484 | 4519907 | 9338.7 | 15225.0 | 0.0000 | 1.0861e+05 | ClassifyPhotonElectronAlg INFO Number of counters : 14 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 563 | -276974.3 | -491.96 | 598.07 | -4041.4 | 893.16 | + | "Electron Delta(E)" | 563 | -281417.6 | -499.85 | 604.76 | -4041.4 | 893.16 | | "Electron Delta(X)" | 563 | -420.2936 | -0.74653 | 11.638 | -22.780 | 22.317 | | "Electron Delta(Y)" | 563 | 2.688982 | 0.0047762 | 11.868 | -22.755 | 22.326 | - | "Electron Delta(Z)" | 563 | 36479.31 | 64.795 | 14.849 | 23.449 | 107.49 | - | "Electron corrected energy" | 563 | 3928336 | 6977.5 | 8853.7 | 133.16 | 99561.0 | - | "Electrons pT-rejected after correction" | 8 | - | "Photon Delta(E)" | 902 | -245351.3 | -272.01 | 439.73 | -4053.1 | 3246.9 | + | "Electron Delta(Z)" | 563 | 36470.69 | 64.779 | 14.851 | 21.656 | 107.49 | + | "Electron corrected energy" | 563 | 3923893 | 6969.6 | 8852.7 | 133.16 | 99561.0 | + | "Electrons pT-rejected after correction" | 7 | + | "Photon Delta(E)" | 902 | -253236.6 | -280.75 | 450.82 | -4053.1 | 3246.9 | | "Photon Delta(X)" | 902 | -106.9161 | -0.11853 | 12.200 | -22.781 | 22.326 | | "Photon Delta(Y)" | 902 | -178.3985 | -0.19778 | 11.972 | -22.781 | 25.024 | - | "Photon Delta(Z)" | 902 | 50499.45 | 55.986 | 14.483 | 19.106 | 101.64 | - | "Photon corrected energy" | 902 | 4174977 | 4628.6 | 10427.0 | 127.87 | 1.4783e+05 | + | "Photon Delta(Z)" | 902 | 50409.97 | 55.887 | 14.607 | 11.387 | 101.64 | + | "Photon corrected energy" | 902 | 4167092 | 4619.8 | 10426.0 | 92.686 | 1.4783e+05 | | "Photons pT-rejected after correction" | 22 | - | "electronHypos" | 5 | 555 | 111.00 | 35.861 | 67.000 | 161.00 | + | "electronHypos" | 5 | 556 | 111.20 | 35.617 | 68.000 | 161.00 | | "photonHypos" | 5 | 880 | 176.00 | 41.410 | 130.00 | 232.00 | ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | " Inner" | 439 | 435.8088 | 0.99273 | 0.018134 | 0.96565 | 1.0735 | | " Middle" | 414 | 415.8637 | 1.0045 | 0.019131 | 0.97751 | 1.1058 | - | " Outer" | 609 | 607.9526 | 0.99828 | 0.014882 | 0.97378 | 1.0575 | - | "Pileup offset" | 1462 | 609422.2 | 416.84 | 453.64 | 4.3231 | 3301.8 | - | "Pileup scale" | 1465 | 10062 | 6.8683 | 1.6773 | 4.0000 | 9.0000 | - | "Pileup subtracted ratio" | 1462 | 1266.505 | 0.86628 | 0.13457 | 0.10630 | 0.99751 | - | "Skip negative energy correction" | 3 | -CloneKillerForward INFO Number of counters : 1 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | " Outer" | 608 | 606.929 | 0.99824 | 0.014859 | 0.97378 | 1.0575 | + | "Pileup offset" | 1461 | 621737.3 | 425.56 | 463.68 | 4.3231 | 3301.8 | + | "Pileup scale" | 1465 | 10268 | 7.0089 | 1.6401 | 4.0000 | 9.0000 | + | "Pileup subtracted ratio" | 1461 | 1261.09 | 0.86317 | 0.13815 | 0.035532 | 0.99751 | + | "Skip negative energy correction" | 4 | +CloneKillerForward INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "nTracksInput" | 5 | 596 | 119.20 | | "nTracksSelected" | 5 | 137 | 27.400 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -116,12 +118,13 @@ FutureEcalZSup INFO Number of counters : 1 FutureHcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"No bank found" | 5 | 0 |( 0.000000 +- 0.000000)% | -GaudiAllenCountAndDumpLineDecisions INFO Number of counters : 55 +GaudiAllenCountAndDumpLineDecisions INFO Number of counters : 56 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Selected by Hlt1BeamGasDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BeamOneDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BeamTwoDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1BothBeamsDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | + |*"Selected by Hlt1Bs2GammaGammaDecision" | 5 | 1 |( 20.00000 +- 17.88854)% | |*"Selected by Hlt1D2KKDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1D2KPiAlignmentDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | |*"Selected by Hlt1D2KPiDecision" | 5 | 0 |( 0.000000 +- 0.000000)% | @@ -186,7 +189,7 @@ LHCb__Converters__Track__SOA__fr... INFO Number of counters : 1 | "Nb of Produced Tracks" | 5 | 455 | 91.000 | MuonIDHlt2AlgLong INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 84 | -64.64965 | -0.76964 | 1.2100 | -5.6539 | 0.0000 | + | "BgLL" | 84 | -64.64964 | -0.76964 | 1.2100 | -5.6539 | 0.0000 | | "MuLL" | 84 | -716.1311 | -8.5254 | 3.6350 | -11.513 | -0.20127 | | "muonMVAStat" | 84 | -20.79248 | -0.24753 | 1.2310 | -2.1618 | 3.7953 | |*"nInAcceptance" | 626 | 491 |( 78.43450 +- 1.643789)% | @@ -198,10 +201,10 @@ MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | "Nb of input v2 MuonPIDs" | 5 | 626 | 125.20 | ParticleRangeFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 583 | 72 |( 12.34991 +- 1.362617)% | + |*"Cut selection efficiency" | 583 | 75 |( 12.86449 +- 1.386627)% | ParticleRangeFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 72 | 37 |( 51.38889 +- 5.890283)% | + |*"Cut selection efficiency" | 75 | 38 |( 50.66667 +- 5.772989)% | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Accepted input tracks" | 5 | 1047 | 209.40 | @@ -249,7 +252,7 @@ PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 7 | | "chi2 cut" | 32 | - | "nIterations" | 582 | 1242 | 2.1340 | + | "nIterations" | 582 | 1241 | 2.1323 | | "nOutlierIterations" | 575 | 318 | 0.55304 | | "nTracksInput" | 5 | 582 | 116.40 | | "nTracksOutput" | 5 | 543 | 108.60 | @@ -301,7 +304,7 @@ ToolSvc.TrackFunctorFactory INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 5 | 33 | 6.6000 | + | "Nb PVs" | 5 | 34 | 6.8000 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 5 | 12452 | 2490.4 | diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 42bbd083e6e..856b98a449c 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -110,6 +110,9 @@ def get_packed_locations(lines, inputs, stream): for dh in l.objects_to_persist: line_locs.add(dh) + if "PP2MCPRelations" in inputs.keys(): + for loc in inputs["PP2MCPRelations"]: + line_locs.add(loc) packed_dhs = [] types = type_map() -- GitLab From 0af54d3a6e3c92b04b8c4ce87d2833ab68d0d0b8 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 7 Sep 2022 12:50:49 +0000 Subject: [PATCH 079/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/24408920 --- Hlt/Moore/python/Moore/config.py | 18 +++++++++--------- Hlt/Moore/python/Moore/persistence/__init__.py | 4 ++-- .../python/RecoConf/reco_objects_for_spruce.py | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 194dcb6b232..5c21730399a 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -251,14 +251,14 @@ def report_writers_nodes(streams, new_hlt_banks['DstData'] = packed_data.OutputView algs.append(line_output_cf) extra_locations_to_persist.extend(line_output_locations) - - if process == "pass": + + if process == "pass": if not options.input_manifest_file: raise RuntimeError( ' pass-through configuration -- must specify an input manifest' - ) + ) copy(options.input_manifest_file, options.output_manifest_file) - + node = CompositeNode( 'report_writers', combine_logic=NodeLogic.NONLAZY_OR, @@ -269,7 +269,8 @@ def report_writers_nodes(streams, extra_locations_to_persist = _unique(extra_locations_to_persist) return [ node - ], new_hlt_banks, extra_locations_to_persist, barrier_algorithms, erw + ], new_hlt_banks, extra_locations_to_persist, barrier_algorithms, erw + @configurable def stream_writer(stream, @@ -464,8 +465,7 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): options.output_manifest_file, # Can only run association when we have access to the linker tables. Only want association for hlt step associate_mc=process == "hlt2" and options.simulation - and options.input_type == ROOT_KEY - and options.output_type == ROOT_KEY, + and options.input_type == ROOT_KEY and options.output_type == ROOT_KEY, clone_mc=options.simulation and options.input_type == 'ROOT') dec = CompositeNode( @@ -571,8 +571,8 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): else: stream_writers_nodes = [] - moore_children = ( - stream_writers_setup + unpack + [dec] + rw_nodes + stream_writers_nodes) + moore_children = (stream_writers_setup + unpack + [dec] + rw_nodes + + stream_writers_nodes) moore = CompositeNode( 'moore', combine_logic=NodeLogic.LAZY_AND, diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 856b98a449c..be8672d8a60 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -57,7 +57,7 @@ def _referenced_inputs(lines, inputs): # Gather locations referenced from higher up the data flow tree for dh in l.objects_to_persist: line_locs.update(l.referenced_locations(dh)) - + #fill the packer inputs dictionary based on object type for dh in line_locs: typ = get_type(dh) @@ -124,7 +124,7 @@ def get_packed_locations(lines, inputs, stream): if i in line_locs: if isinstance(i, str): t = k[v.index(key)] - + packed_dhs += [(prefix(i, stream), t)] else: t = i.type diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index dacead11e22..cf869ac5ce7 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -35,7 +35,7 @@ def upfront_reconstruction(manifest): # make sure that the reco locations are spliced into the provided manifest... #dl = {v[0]: v[1] for v in manifest['PackedLocations']} - dl = { v[0]: inv_map[v[1]] for v in pp2mcp_loc.values()} + dl = {v[0]: inv_map[v[1]] for v in pp2mcp_loc.values()} dl.update((v[0], inv_map[v[1]]) for v in reco_loc.values()) m = {'PackedLocations': [(k, v) for k, v in dl.items()]} @@ -59,7 +59,7 @@ def reconstruction(manifest): data = {} unpackers = upfront_reconstruction(manifest) reco_loc = reco_locations("/Event/HLT2") - + for key, value in reco_loc.items(): for v in unpackers: if "OutputName" in v.outputs.keys( -- GitLab From ff57d0da482092a19d95d33247a6dfc69ba3ecda Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 14 Sep 2022 10:32:19 +0200 Subject: [PATCH 080/102] fix tests --- .../bandq/spruce_bandq_example_fromfile.py | 4 +-- .../examples/b_to_charmonia/spruce_b2cc.py | 4 +-- .../b_to_open_charm/spruce_b2oc_fromfile.py | 4 +-- .../b_to_open_charm/spruce_b2oc_realtime.py | 4 +-- Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py | 3 -- .../options/qee/spruce_qee_example.py | 6 ++-- .../sprucing/spruce_all_lines_realtime.py | 36 +++++++------------ .../sprucing/spruce_example_fromfile.py | 4 +-- .../sprucing/spruce_example_realtime.py | 1 + .../streaming/spruce_test_streaming.py | 4 +-- Hlt/Moore/python/Moore/qmtest/exclusions.py | 5 +++ 11 files changed, 26 insertions(+), 49 deletions(-) diff --git a/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py b/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py index 96c6777f6c1..568445a385a 100644 --- a/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/bandq/spruce_bandq_example_fromfile.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_bandq_example_fromfile.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -26,6 +25,7 @@ input_files = [ ] options.input_files = input_files +options.input_manifest_file = "Hlt2DiMuonLines_test.tck.json" options.input_type = 'ROOT' # When running from Upgrade MC, must use the post-juggling locations of the raw # event @@ -40,8 +40,6 @@ options.output_file = 'spruce_B2JpsiK.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_onia_example_fromfile.tck.json" -load_hlt2_configuration("Hlt2DiMuonLines_test.tck.json") - def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py b/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py index 2f1463cb8eb..2d372f0d549 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_charmonia/spruce_b2cc.py @@ -18,7 +18,6 @@ ./Moore/run gaudirun.py spruce_b2cc_example.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -28,6 +27,7 @@ input_files = ['./dst/fromPersistReco/Bs2JpsiPhi.dst'] options.input_files = input_files options.input_type = 'ROOT' +options.input_manifest_file = "Hlt2DiMuonLines_Bs2JpsiPhi.tck.json" # When running from Upgrade MC, must use the post-juggling locations of the raw # event @@ -41,8 +41,6 @@ options.output_file = 'spruce_Bs2JpsiPhi.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2cc_example.tck.json" -load_hlt2_configuration("Hlt2DiMuonLines_Bs2JpsiPhi.tck.json") - def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py index 7af6e3077e9..cbac1a7f9b6 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_fromfile.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_fromfile.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -24,6 +23,7 @@ from Hlt2Conf.lines.b_to_open_charm import sprucing_lines input_files = ['hlt2_2or3bodytopo_fromfile.mdf'] options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_fromfile.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -36,8 +36,6 @@ options.output_file = 'spruce_fromfilereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2oc_example_fromfile.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_fromfile.tck.json") - def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py index b15aa67fc58..96d0d8bfafd 100644 --- a/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py +++ b/Hlt/Hlt2Conf/options/examples/b_to_open_charm/spruce_b2oc_realtime.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_realtime.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -24,6 +23,7 @@ from Hlt2Conf.lines.b_to_open_charm import sprucing_lines input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -36,8 +36,6 @@ options.output_file = 'spruce_b2oc_realtimereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_b2oc_example_realtime.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): lines = [builder() for builder in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py index 4d6b4811c1e..e69bb13a98c 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_bbbar.py @@ -17,7 +17,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_qee_bbbar.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -38,8 +37,6 @@ options.output_file = 'qee_bjet_spruce.dst' options.output_type = 'ROOT' options.output_manifest_file = "qee_bjet_spruce.tck.json" -load_hlt2_configuration('hlt2_qee_bjet.tck.json') - def make_lines(): return [line() for line in sprucing_lines.values()] diff --git a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py index 4b2a4a831d9..dfb7bf07c23 100644 --- a/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py +++ b/Hlt/Hlt2Conf/options/qee/spruce_qee_example.py @@ -17,7 +17,6 @@ Run like any other options file: ./Moore/run gaudirun.py hlt2_qee_spruce_example.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.qee import sprucing_lines @@ -26,6 +25,7 @@ input_files = ['hlt2_qee_zmumu.mdf'] options.input_files = input_files options.input_type = 'MDF' +options.input_manifest_file = "hlt2_qee_zmumu.tck.json" options.evt_max = -1 options.simulation = True options.data_type = 'Upgrade' @@ -33,9 +33,7 @@ options.dddb_tag = 'dddb-20201211' options.conddb_tag = 'sim-20201218-vc-mu100' options.output_file = 'qee_zmumu_spruce.dst' options.output_type = 'ROOT' -options.ouptut_manifest_file = "qee_zmumu_spruce.tck.json" - -load_hlt2_configuration('hlt2_qee_zmumu.tck.json') +options.output_manifest_file = "qee_zmumu_spruce.tck.json" def make_lines(): diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index b485a4fdbfc..f6b21aa966f 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -22,35 +22,19 @@ from Moore import options, run_moore from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines import sprucing_lines -from PyConf.application import configured_ann_svc - -import XRootD.client - - -## Return HltANNSvc when tck is on eos -def configure_annsvc_from_eos(url): - with XRootD.client.File() as f: - status, _ = f.open(url) - if not status.ok: - raise RuntimeError(f"could not open {url}: {status.message}") - status, data = f.read() - if not status.ok: - raise RuntimeError(f"could not read {url}: {status.message}") - configured_ann_svc(old_json=data.decode('utf-8')) - - -## Configure `HltANNSvc` -url = 'root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.tck.json' -configure_annsvc_from_eos(url) +from PyConf.application import metainfo_repos ##Run over HLT1 filtered Min bias sample that has been processed by TOPO{2, 3} HLT2 lines. ##To produce this see `Hlt/Hlt2Conf/options/Sprucing/hlt2_2or3bodytopo_realtime.py` options.input_raw_format = 0.3 +options.input_type = 'MDF' + options.input_files = [ - 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking.mdf' + 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking_newDst.mdf' ] -options.input_type = 'MDF' +options.input_manifest_file = 'root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking_newDst.tck.json' +metainfo_repos.global_bind(extra_central_tags=['key-5b3d0522']) options.evt_max = -1 options.simulation = True @@ -58,9 +42,13 @@ options.data_type = 'Upgrade' options.dddb_tag = 'dddb-20171126' options.conddb_tag = 'sim-20171127-vc-md100' -options.output_file = 'spruce_all_lines_realtimereco_newPacking.dst' +options.output_file = 'spruce_all_lines_realtimereco_newPacking_newDst.dst' options.output_type = 'ROOT' -options.output_manifest_file = "spruce_all_lines_realtime_newPacking.tck.json" +options.output_manifest_file = "spruce_all_lines_realtime_newPacking_newDst.tck.json" + +# and then in the readback application configure the GitANNSvc to use the branch key-43a25419 by doing +# from PyConf.application import metainfo_repos +# metainfo_repos.global_bind( extra_central_tags = [ 'key-43a25419' ] ) def make_lines(): diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py index bfe33817c1b..077670f45f2 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_b2oc_example_fromfile.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction @@ -25,6 +24,7 @@ input_files = ['hlt2_2or3bodytopo_fromfile.mdf'] options.input_raw_format = 0.3 options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_fromfile.tck.json" options.input_type = 'MDF' # When running from Upgrade MC, must use the post-juggling locations of the raw @@ -40,8 +40,6 @@ options.output_file = 'spruce_fromfilereco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_fromfile.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_fromfile.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index d3753b362ba..e33bfe845b4 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -19,6 +19,7 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 diff --git a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py index c2f3dc4d1fa..96ed793e66d 100644 --- a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py +++ b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py @@ -15,7 +15,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_test_streaming.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line, Test_extraoutputs_sprucing_line @@ -25,6 +24,7 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' # When running from Upgrade MC, must use the post-juggling locations of the raw # event @@ -39,8 +39,6 @@ options.output_file = 'spruce_streaming.{stream}.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_streaming.tck.json" -# load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_streams(): linedict = dict( diff --git a/Hlt/Moore/python/Moore/qmtest/exclusions.py b/Hlt/Moore/python/Moore/qmtest/exclusions.py index a4bf7407d53..0890d70e580 100644 --- a/Hlt/Moore/python/Moore/qmtest/exclusions.py +++ b/Hlt/Moore/python/Moore/qmtest/exclusions.py @@ -36,6 +36,11 @@ remove_known_warnings = LineSkipper( # expected WARNINGs from MuonUTTracking when extrapolation is failed r"ToolSvc.LoKi::VertexFitter +WARNING LoKi::VertexFitter:: Error from Kalman-step, skip *", r"MuonUTTracking +WARNING Could not propagate state to VELO!", + # backwards compatibility -- key is from manifest, not git + r"key 0x[0-9a-f]+ has an explicitly configured overrule -- using that", + # backwards compatibility -- old data + r"DstData raw bank has a zero encoding key, and it is not explicitly specified for decoding", + r"HltDecReports has a zero TCK, and it is not explicitly specified for decoding", ]) preprocessor = remove_known_warnings + LineSkipper(regexps=[ -- GitLab From 4feec5c3b5fe9f3499aa439111d9033127d29efe Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 14 Sep 2022 10:37:38 +0200 Subject: [PATCH 081/102] fix tests --- CMakeLists.txt | 11 +---------- .../sprucing/spruce_example_realtime_dstinput.py | 4 +--- .../sprucing/spruce_example_realtime_extraoutputs.py | 4 +--- .../sprucing/spruce_example_realtime_persistreco.py | 4 +--- Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py | 4 +--- Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py | 4 +--- .../options/sprucing/spruce_passthrough_dstinput.py | 4 +--- .../tests/options/hlt_filters_test_sprucepass.py | 4 +--- 8 files changed, 8 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f6ce6eb1120..ed10298b773 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.15) -project(Moore VERSION 53.6 +project(Moore VERSION 53.7 LANGUAGES CXX) # Enable testing with CTest/CDash @@ -28,15 +28,6 @@ include(MooreDependencies) include(FileContentMetadataRepository) lhcb_create_local_filecontent_metadata_repo( "${CMAKE_CURRENT_BINARY_DIR}/file-content-metadata/" ) -if(USE_DD4HEP) - option(LOKI_BUILD_FUNCTOR_CACHE "Enable building of LoKi Functors Caches." FALSE) -endif() - -find_package(Git REQUIRED) -set( LHCBFILECONTENTMETADATAREPO "${CMAKE_CURRENT_BINARY_DIR}/file-content-metadata/" ) -execute_process( COMMAND ${GIT_EXECUTABLE} clone ssh://git@gitlab.cern.ch:7999/lhcb-conddb/file-content-metadata ${LHCBFILECONTENTMETADATAREPO}) -lhcb_env(PRIVATE SET LHCbFileContentMetaDataRepo "${LHCBFILECONTENTMETADATAREPO}/.git") - # -- Subdirectories lhcb_add_subdirectories( Hlt/Hlt1Conf diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py index 889033bb622..a4b16217e03 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py @@ -15,7 +15,6 @@ Input from HLT2 is DST as will be the case for simulation. Produces spruce_realtimereco_dstinput.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_sprucing_line @@ -24,6 +23,7 @@ input_files = ['hlt2_2or3bodytopo_realtime_dst.dst'] options.input_raw_format = 0.3 options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_realtime_dst.tck.json" options.input_type = 'ROOT' options.evt_max = -1 @@ -36,8 +36,6 @@ options.output_file = 'spruce_realtimereco_dstinput.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_dstinput.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime_dst.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py index c6372bb2010..eb7e27b1615 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py @@ -11,7 +11,6 @@ """Test Sprucing line with `extra_outputs` on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_realtimereco_extraoutputs.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_extraoutputs_sprucing_line @@ -20,6 +19,7 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -32,8 +32,6 @@ options.output_file = 'spruce_realtimereco_extraoutputs.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_extraoutputs.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py index 19c0480b332..b7a659ce77f 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py @@ -11,7 +11,6 @@ """Test Sprucing line with `persistreco` on output of topo{2,3} persistreco hlt2 lines (original reco real time). Produces spruce_realtimereco_persistreco.dst """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Hlt2Conf.lines.test.spruce_test import Test_persistreco_sprucing_line @@ -20,6 +19,7 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -32,8 +32,6 @@ options.output_file = 'spruce_realtimereco_persistreco.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_example_realtime_persistreco.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def make_lines(): return [ diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py index 64e5e6f491a..1415f674cb5 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py @@ -16,7 +16,6 @@ Run like any other options file: """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import SpruceLine @@ -27,6 +26,7 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files +options.input_manifest_file = "hlt2_2or3bodytopo_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -39,8 +39,6 @@ options.output_file = 'spruce_HLT2filter.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_HLT2filter.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def Sprucing_line_1(name='Spruce_filteronTopo2'): line_alg = b_to_dh.make_BdToDsmK_DsmToKpKmPim(process='spruce') diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py index 60d766800a6..0c01ac28536 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py @@ -17,7 +17,6 @@ Run like any other options file: from __future__ import absolute_import, division, print_function from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import PassLine @@ -27,6 +26,7 @@ input_files = ['hlt2_2or3bodytopo_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files options.input_type = 'MDF' +options.input_manifest_file = 'hlt2_2or3bodytopo_realtime.tck.json' options.evt_max = -1 options.simulation = True @@ -38,8 +38,6 @@ options.output_file = 'spruce_passthrough.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_passthrough.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime.tck.json") - def pass_through_line(name="PassThrough"): """Return a Sprucing line that performs no selection diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py index c99532700f2..e6eef9269a7 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py @@ -19,7 +19,6 @@ Run like any other options file: from __future__ import absolute_import, division, print_function from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction from Moore.lines import PassLine @@ -29,6 +28,7 @@ input_files = ['hlt2_2or3bodytopo_realtime_dst.dst'] options.input_raw_format = 0.3 options.input_files = input_files options.input_type = 'ROOT' +options.input_manifest_file = 'hlt2_2or3bodytopo_realtime_dst.tck.json' options.evt_max = -1 options.simulation = True @@ -40,8 +40,6 @@ options.output_file = 'spruce_passthrough_dstinput.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_passthrough_dstinput.tck.json" -load_hlt2_configuration("hlt2_2or3bodytopo_realtime_dst.tck.json") - def pass_through_line(name="PassThrough"): """Return a Sprucing line that performs no selection diff --git a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py index ea18977b7cc..0dde20d357f 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py +++ b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py @@ -18,7 +18,6 @@ Run like any other options file: ./Moore/run gaudirun.py spruce_filters_test.py """ from Moore import options, run_moore -from Moore.tcks import load_hlt2_configuration from RecoConf.global_tools import stateProvider_with_simplified_geom from RecoConf.reconstruction_objects import reconstruction, upfront_reconstruction ##Make dummy SpruceLine @@ -33,6 +32,7 @@ input_files = ['hlt_filterstest_realtime.mdf'] options.input_raw_format = 0.3 options.input_files = input_files +options.input_manifest_file = "hlt_filterstest_realtime.tck.json" options.input_type = 'MDF' options.evt_max = -1 @@ -45,8 +45,6 @@ options.output_file = 'spruce_filterstest.dst' options.output_type = 'ROOT' options.output_manifest_file = "spruce_filterstest.tck.json" -load_hlt2_configuration("hlt_filterstest_realtime.tck.json") - ## Make 2 identical lines except for filters def make_line1(name='SpruceTest1'): -- GitLab From 0b94daf1fa3782bbe5969dd4629eece88e6cd0c8 Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 14 Sep 2022 21:05:40 +0200 Subject: [PATCH 082/102] fix tests --- .../options/sprucing/spruce_all_lines_realtime.py | 1 + .../tests/options/hlt2_passthrough_persistreco_check.py | 8 ++++---- Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py | 4 +--- .../tests/qmtest/test_hlt2_standard_particles.qmt | 2 +- Hlt/Moore/python/Moore/config.py | 9 +++++++-- Hlt/Moore/python/Moore/persistence/__init__.py | 9 ++++++--- Hlt/Moore/python/Moore/persistence/cloning.py | 4 +++- Hlt/RecoConf/options/run_two_hlt2_recos.py | 3 +-- .../python/RecoConf/calorimeter_reconstruction.py | 2 +- Hlt/RecoConf/python/RecoConf/hlt1_tracking.py | 2 +- Hlt/RecoConf/python/RecoConf/muon_reconstruction.py | 2 +- Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py | 2 +- Hlt/RecoConf/python/RecoConf/rich_reconstruction.py | 2 +- 13 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index f6b21aa966f..3e111e33418 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -34,6 +34,7 @@ options.input_files = [ 'mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking_newDst.mdf' ] options.input_manifest_file = 'root://eoslhcb.cern.ch//eos/lhcb/wg/rta/samples/mc/Hlt1Hlt2filtered_MinBias_sprucing/hlt2_2or3bodytopo_realtime_newPacking_newDst.tck.json' + metainfo_repos.global_bind(extra_central_tags=['key-5b3d0522']) options.evt_max = -1 diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_passthrough_persistreco_check.py b/Hlt/Hlt2Conf/tests/options/hlt2_passthrough_persistreco_check.py index 920dcdb73e1..2e4d9b22050 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_passthrough_persistreco_check.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_passthrough_persistreco_check.py @@ -29,19 +29,18 @@ from GaudiConf import IOExtension from Configurables import (ApplicationMgr, CondDB, LHCbApp, IODataManager, HistogramPersistencySvc) from GaudiConf.reading import load_manifest -from GaudiConf.PersistRecoConf import PersistRecoPacking from GaudiConf.reading import do_unpacking from PyConf.application import configured_ann_svc from Hlt2Conf.check_output import check_persistreco +from PyConf.packing import default_persisted_locations + parser = argparse.ArgumentParser() parser.add_argument('input', help='Input filename') parser.add_argument('hlt2_tck', help='HLT2 JSON TCK dump') args = parser.parse_args() -prp = PersistRecoPacking(stream='/Event/HLT2/', data_type='Upgrade') - algs = do_unpacking(load_manifest(args.hlt2_tck), process='Hlt2') ##Prepare application @@ -74,7 +73,8 @@ while True: if not TES['/Event']: break - check_persistreco(TES, prp.unpackedLocations(), "Turbo", N_TURBO) + locations = default_persisted_locations(stream="/Event/HLT2") + check_persistreco(TES, locations.values(), "Turbo", N_TURBO) hlt2reports = TES['/Event/Hlt2/DecReports'] hlt2report = hlt2reports.decReport( diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py index ae59e1ad999..fe21b3ea11a 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py @@ -61,13 +61,11 @@ process = args.p stream = args.s if process == "Spruce": - FULL_ROOT = "/Event/Spruce" RECO_ROOT = "/Event/Spruce/HLT2" loc = "Spruce" dec_to_check = "Spruce_Test_line" elif process == "Turbo": - FULL_ROOT = "/Event/HLT2" RECO_ROOT = "/Event/HLT2" loc = "HLT2" dec_to_check = "PassThrough" @@ -199,7 +197,7 @@ for ii in range(nevents): print("MC ERROR MC vertices not correctly propagated") # Forth step: check persistency of packed containers - locations = default_persisted_locations(stream="/Event/Spruce/HLT2") + locations = default_persisted_locations(stream=RECO_ROOT) check_persistreco(TES, locations.values(), "Spruce") # Check a random RawBank is populated diff --git a/Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt b/Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt index 49d2c549ceb..e8089d0f553 100644 --- a/Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt +++ b/Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt @@ -23,6 +23,6 @@ HiveDataBrokerSvc().OutputLevel = 5 true -countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 2}) +countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 0}) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 5c21730399a..d1a9d6fe4e5 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -213,8 +213,13 @@ def report_writers_nodes(streams, elif process == "hlt2": (line_output_cf, line_output_locations, packed_data) = persist_line_outputs( - physics_lines, data_type, erw.DecReportsLocation, associate_mc, - process.capitalize(), output_manifest_file) + physics_lines, + data_type, + erw.DecReportsLocation, + associate_mc, + process.capitalize(), + output_manifest_file, + clone_mc=options.simulation and options.input_type == ROOT_KEY) algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index be8672d8a60..8542da1f6f8 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -119,9 +119,11 @@ def get_packed_locations(lines, inputs, stream): k = list(types.keys()) v = list(types.values()) + prdict = persistreco_line_outputs() + for key, locs in inputs.items(): for i in locs: - if i in line_locs: + if i in line_locs or i in prdict.values(): if isinstance(i, str): t = k[v.index(key)] @@ -147,7 +149,7 @@ def persist_line_outputs( output_manifest_file, stream=DEFAULT_OUTPUT_PREFIX, #this is where everything goes reco_stream=DEFAULT_OUTPUT_PREFIX, #this is where reco objects come from - clone_mc=True): + clone_mc=False): """Return CF node and output locations of the HLT2 line persistence. Returns: @@ -183,7 +185,8 @@ def persist_line_outputs( l.decision_name: [dh.location for dh in l.objects_to_persist] for l in lines }, - TurboPPLines=[l.decision_name for l in lines if l.persistreco], + #TurboPPLines=[l.decision_name for l in lines if l.persistreco], + TurboPPLines=[], ) if log.isEnabledFor(logging.DEBUG): log.debug('line_locations: ' + pformat(persistence_svc.Locations)) diff --git a/Hlt/Moore/python/Moore/persistence/cloning.py b/Hlt/Moore/python/Moore/persistence/cloning.py index a1f869f219f..38ad0bab9a4 100644 --- a/Hlt/Moore/python/Moore/persistence/cloning.py +++ b/Hlt/Moore/python/Moore/persistence/cloning.py @@ -144,6 +144,7 @@ def clone_line_outputs(persistence_svc, CloneClustersAlways=False, CloneDigitsAlways=False, ) + else: # Always clone all information associated to CALO objects # This may end up being impossible due to bandwidth constraints, but @@ -187,11 +188,12 @@ def clone_line_outputs(persistence_svc, ICloneCaloCluster=cluster_cloner, ICloneProtoParticle=protoparticle_cloner, ICloneParticle=particle_cloner, + #TurboPPICloneVertexBase='VertexBaseFromRecVertexClonerNoTracks', # We need to declare outputs since packers are now using DataHandles # and CopyLinePersistenceLocations is not. To be removed when this # algorithm is dropped or ported to DataHandles. ExtraOutputs=line_outputs, - OutputLevel=4, + OutputLevel=5, ) p2pv_cloner = CopyParticle2PVRelationsFromLinePersistenceLocations( diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index f568a2b9ec5..fc7248f1fc0 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -12,8 +12,7 @@ from Moore import options, run_reconstruction from Moore.config import Reconstruction from RecoConf.hlt2_global_reco import reconstruction from PyConf.Algorithms import PrForwardTrackingVelo -from GaudiConf.PersistRecoConf import persisted_location - +from PyConf.packing import persisted_location def make_two_reconstructions(): charged_protos_1 = reconstruction()["ChargedProtos"] diff --git a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py index 4c06fe704bb..2ba18351f56 100644 --- a/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/calorimeter_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import ( AcceptanceBremAlg, AcceptanceEcalAlg, AcceptanceHcalAlg, TrackToEcalEnergyAlg, TrackToHcalEnergyAlg, CaloChargedPIDsAlg, diff --git a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py index 6664bac6e6f..71fc3322136 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py +++ b/Hlt/RecoConf/python/RecoConf/hlt1_tracking.py @@ -12,7 +12,7 @@ import logging from PyConf import configurable from PyConf.application import default_raw_event, default_raw_banks from PyConf.utilities import DISABLE_TOOL -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import ( fromPrUpstreamTracksV1Tracks, diff --git a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py index 945b7faafda..8e5866a4dc9 100644 --- a/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/muon_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import (LHCb__Converters__Track__SOA__fromV1Track as TrackSOAFromV1, fromV2MuonPIDV1MuonPID, diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index cf869ac5ce7..b8723a2c121 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -45,7 +45,7 @@ def upfront_reconstruction(manifest): m, decoder.OutputBuffers, configurables=False, - output_level=4) + output_level=5) ### TODO:FIXME take advantage of the fact that the above have datahandles... # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms diff --git a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py index fa6a40293f3..cc659560e43 100644 --- a/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py +++ b/Hlt/RecoConf/python/RecoConf/rich_reconstruction.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.application import default_raw_event from Configurables import Rich__Future__ParticleProperties as PartProps -- GitLab From 1a4876e1ad163c93f52e357fc7d45a31e58f1e0d Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 14 Sep 2022 19:06:21 +0000 Subject: [PATCH 083/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/24547466 --- .../hlt2_passthrough_persistreco_check.py | 1 - Hlt/Moore/python/Moore/config.py | 18 +++++++++--------- Hlt/Moore/python/Moore/persistence/__init__.py | 2 +- Hlt/Moore/python/Moore/persistence/cloning.py | 2 +- Hlt/RecoConf/options/run_two_hlt2_recos.py | 1 + .../python/RecoConf/hlt2_global_reco.py | 1 + 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_passthrough_persistreco_check.py b/Hlt/Hlt2Conf/tests/options/hlt2_passthrough_persistreco_check.py index 2e4d9b22050..b22f3fea143 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_passthrough_persistreco_check.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_passthrough_persistreco_check.py @@ -35,7 +35,6 @@ from PyConf.application import configured_ann_svc from Hlt2Conf.check_output import check_persistreco from PyConf.packing import default_persisted_locations - parser = argparse.ArgumentParser() parser.add_argument('input', help='Input filename') parser.add_argument('hlt2_tck', help='HLT2 JSON TCK dump') diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index d1a9d6fe4e5..ea3b3ca7492 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -211,15 +211,15 @@ def report_writers_nodes(streams, algs.append(srw) new_hlt_banks['HltSelReports'] = srw.RawEvent elif process == "hlt2": - (line_output_cf, - line_output_locations, packed_data) = persist_line_outputs( - physics_lines, - data_type, - erw.DecReportsLocation, - associate_mc, - process.capitalize(), - output_manifest_file, - clone_mc=options.simulation and options.input_type == ROOT_KEY) + (line_output_cf, line_output_locations, + packed_data) = persist_line_outputs( + physics_lines, + data_type, + erw.DecReportsLocation, + associate_mc, + process.capitalize(), + output_manifest_file, + clone_mc=options.simulation and options.input_type == ROOT_KEY) algs.append(line_output_cf) new_hlt_banks['DstData'] = packed_data.OutputRawEvent diff --git a/Hlt/Moore/python/Moore/persistence/__init__.py b/Hlt/Moore/python/Moore/persistence/__init__.py index 8542da1f6f8..02d8e011311 100644 --- a/Hlt/Moore/python/Moore/persistence/__init__.py +++ b/Hlt/Moore/python/Moore/persistence/__init__.py @@ -120,7 +120,7 @@ def get_packed_locations(lines, inputs, stream): v = list(types.values()) prdict = persistreco_line_outputs() - + for key, locs in inputs.items(): for i in locs: if i in line_locs or i in prdict.values(): diff --git a/Hlt/Moore/python/Moore/persistence/cloning.py b/Hlt/Moore/python/Moore/persistence/cloning.py index 38ad0bab9a4..60ab8b502d6 100644 --- a/Hlt/Moore/python/Moore/persistence/cloning.py +++ b/Hlt/Moore/python/Moore/persistence/cloning.py @@ -144,7 +144,7 @@ def clone_line_outputs(persistence_svc, CloneClustersAlways=False, CloneDigitsAlways=False, ) - + else: # Always clone all information associated to CALO objects # This may end up being impossible due to bandwidth constraints, but diff --git a/Hlt/RecoConf/options/run_two_hlt2_recos.py b/Hlt/RecoConf/options/run_two_hlt2_recos.py index fc7248f1fc0..9533fbafd4d 100644 --- a/Hlt/RecoConf/options/run_two_hlt2_recos.py +++ b/Hlt/RecoConf/options/run_two_hlt2_recos.py @@ -14,6 +14,7 @@ from RecoConf.hlt2_global_reco import reconstruction from PyConf.Algorithms import PrForwardTrackingVelo from PyConf.packing import persisted_location + def make_two_reconstructions(): charged_protos_1 = reconstruction()["ChargedProtos"] neutral_protos_1 = reconstruction()["NeutralProtos"] diff --git a/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py b/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py index df6c134a5ab..1f80c05b0b4 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py +++ b/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py @@ -33,6 +33,7 @@ from PyConf.Algorithms import (TrackContainerCopy, RecSummaryMaker, + # TODO make things configurable, if needed @configurable def make_legacy_reconstruction(usePatPVFuture=False): -- GitLab From 7364c3276988c0969e1abd06d6ca53d94d85b4f1 Mon Sep 17 00:00:00 2001 From: sesen Date: Mon, 19 Sep 2022 08:30:29 +0200 Subject: [PATCH 084/102] remove known warnigns from test_hlt2_standard_particles.qmt --- Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt b/Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt index e8089d0f553..772f6a58952 100644 --- a/Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt +++ b/Hlt/Hlt2Conf/tests/qmtest/test_hlt2_standard_particles.qmt @@ -23,6 +23,8 @@ HiveDataBrokerSvc().OutputLevel = 5 true -countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 0}) +from Moore.qmtest.exclusions import remove_known_warnings +countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 0}, + stdout=remove_known_warnings(stdout)) -- GitLab From 841f3280efe46e96e1c369cbb1dd9871228844b4 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Mon, 19 Sep 2022 09:23:56 +0000 Subject: [PATCH 085/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/24633036 --- Hlt/Moore/python/Moore/config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index ea3b3ca7492..0148dd68c88 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -713,6 +713,7 @@ def get_allen_hlt1_decision_ids(): from AllenConf.persistency import build_decision_ids return build_decision_ids(get_allen_line_names()) + def allen_control_flow(options, write_detector_raw_banks=True): from RecoConf.hlt1_allen import (allen_gaudi_node_barriers, call_allen_raw_reports) -- GitLab From 2a3f20417548b3761a6d16fb686578a6843b3d2a Mon Sep 17 00:00:00 2001 From: sesen Date: Mon, 19 Sep 2022 11:25:18 +0200 Subject: [PATCH 086/102] remove unused import --- Hlt/Moore/python/Moore/config.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 0148dd68c88..4e1c73e74b7 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -37,7 +37,6 @@ from PyConf.filecontent_metadata import generate_encoding_dictionary, register_e from GaudiConf.reading import unpack_rawevent, mc_unpackers from PyConf.utilities import ConfigurationError from PyConf.application import all_nodes_and_algs -from AllenConf.persistency import build_decision_ids #: Regular expression (compiled) defining the valid selection line names # Meaning: line names should start with either of Hlt1, Hlt2, Spruce, Pass -- GitLab From 0059525b29819a6bf12e49e1559f2b86df8add5d Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 23 Sep 2022 18:59:55 +0200 Subject: [PATCH 087/102] remove manifest for reco unpacking --- .../options/sprucing/spruce_all_lines.py | 3 +- .../sprucing/spruce_all_lines_analytics.py | 2 +- .../sprucing/spruce_all_lines_realtime.py | 3 +- ...spruce_all_lines_realtime_test_old_json.py | 3 +- .../sprucing/spruce_example_fromfile.py | 3 +- .../sprucing/spruce_example_realtime.py | 3 +- .../spruce_example_realtime_dstinput.py | 3 +- .../spruce_example_realtime_extraoutputs.py | 3 +- .../spruce_example_realtime_persistreco.py | 3 +- .../options/sprucing/spruce_hlt2filter.py | 3 +- .../options/sprucing/spruce_passthrough.py | 3 +- .../sprucing/spruce_passthrough_dstinput.py | 3 +- .../streaming/spruce_test_streaming.py | 3 +- .../RecoConf/reco_objects_for_spruce.py | 32 ++++--- .../python/RecoConf/reconstruction_objects.py | 84 ++++++++++++++++--- 15 files changed, 106 insertions(+), 48 deletions(-) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines.py index 93e18bc7931..8bdc1a147a9 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines.py @@ -107,6 +107,5 @@ public_tools = [ options.scheduler_legacy_mode = False with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_streams, public_tools, analytics=True) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_analytics.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_analytics.py index aae1a830807..447d3aa5089 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_analytics.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_analytics.py @@ -115,6 +115,6 @@ Moore.streams_spruce.stream_banks = { public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, manifest_file=options.input_manifest_file + from_file=True, spruce=True ), CombineRawBankViewsToRawEvent.bind(OutputLevel=4): config = run_moore(options, make_streams, public_tools, analytics=True) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 3e111e33418..74c3c727cc6 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -59,6 +59,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime_test_old_json.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime_test_old_json.py index 625b4c02a0a..e0f3639fef5 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime_test_old_json.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime_test_old_json.py @@ -52,6 +52,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py index 077670f45f2..24ae7ecdc3f 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py @@ -50,6 +50,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index e33bfe845b4..d8e6856f412 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -42,6 +42,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py index a4b16217e03..b36339299d1 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py @@ -46,6 +46,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py index eb7e27b1615..fed2887b78c 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py @@ -42,6 +42,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py index b7a659ce77f..e08eeb64da2 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py @@ -42,6 +42,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py index 1415f674cb5..4f4f4c7d548 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py @@ -65,6 +65,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py index 0c01ac28536..cc4fb5df126 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py @@ -52,6 +52,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py index e6eef9269a7..252f8a731c1 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py @@ -54,6 +54,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py index 96ed793e66d..69c7d6cb478 100644 --- a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py +++ b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py @@ -69,6 +69,5 @@ pprint(Moore.streams_spruce.stream_banks) public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): + from_file=True, spruce=True): config = run_moore(options, make_streams, public_tools) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index b8723a2c121..dc04bd8f77e 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -12,7 +12,7 @@ from GaudiConf import reading from PyConf.packing import persisted_location, reco_locations, pp2mcp_locations -def upfront_reconstruction(manifest): +def upfront_reconstruction(simulation=True): """Return a list DataHandles that define the upfront reconstruction output. This differs from `reconstruction` as it should not be used as inputs to @@ -22,21 +22,26 @@ def upfront_reconstruction(manifest): """ stream = '/Event/HLT2' - reco_loc = reco_locations(stream) - pp2mcp_loc = pp2mcp_locations(stream) decoder = reading.decoder( configurables=False, output_level=4, stream=stream) - mc_algs = reading.mc_unpackers( - process='Hlt2', configurables=False, output_level=4) - + inv_map = {v: k for k, v in reading.type_map().items()} - # make sure that the reco locations are spliced into the provided manifest... - #dl = {v[0]: v[1] for v in manifest['PackedLocations']} - dl = {v[0]: inv_map[v[1]] for v in pp2mcp_loc.values()} - dl.update((v[0], inv_map[v[1]]) for v in reco_loc.values()) + reco_loc = reco_locations(stream) + dl = {v[0]: inv_map[v[1]] for v in reco_loc.values()} + + mc_algs =[] + if simulation: + mc_algs = reading.mc_unpackers( + process='Hlt2', configurables=False, output_level=4) + + pp2mcp_loc = pp2mcp_locations(stream) + dl.update((v[0], inv_map[v[1]]) for v in pp2mcp_loc.values()) + + # As reco locations have predefined types, there is no need for a manifest file + # To use same functionality as in reding.py, make a manifest from known locations/types m = {'PackedLocations': [(k, v) for k, v in dl.items()]} ## TODO: only pass manifest _once_ into reading.whatever -- i.e. `unpackers` can call make_locations itself... @@ -53,11 +58,11 @@ def upfront_reconstruction(manifest): return [decoder] + mc_algs + unpackers -def reconstruction(manifest): +def reconstruction(simulation=True): """Return a {name: DataHandle} dict that define the reconstruction output.""" data = {} - unpackers = upfront_reconstruction(manifest) + unpackers = upfront_reconstruction(simulation) reco_loc = reco_locations("/Event/HLT2") for key, value in reco_loc.items(): @@ -81,6 +86,8 @@ def reconstruction(manifest): return data +""" +Why are these here? def make_charged_protoparticles(): return reconstruction()['ChargedProtos'] @@ -95,3 +102,4 @@ def make_pvs(): def make_tracks(): return reconstruction()['Tracks'] +""" diff --git a/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py b/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py index 6a38fed9153..ec4251ea837 100644 --- a/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py +++ b/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py @@ -26,30 +26,22 @@ from RecoConf.reco_objects_for_spruce import ( ) from RecoConf.hlt2_global_reco import reconstruction as reconstruction_from_reco -from GaudiConf.reading import load_manifest @configurable(cached=True) def reconstruction(from_file=True, - spruce=False, - manifest=None, - manifest_file=None): + spruce=False): """Return reconstruction objects. Note it is advised to use this function if more than one object is needed, rather than the accessors below as it makes the configuration slower. """ - if manifest_file: - assert not manifest, "must only specify one of manifest and manifest_file" - manifest = load_manifest(manifest_file) if spruce: assert from_file, 'For sprucing, from_file must be set to True (default value)' if from_file: if spruce: - assert manifest, 'For sprucing, a manifest with file contents must be specified' - reco = reconstruction_for_spruce(manifest) - upfront_reconstruction = upfront_reconstruction_for_spruce( - manifest) + reco = reconstruction_for_spruce() + upfront_reconstruction = upfront_reconstruction_for_spruce() else: reco = reconstruction_from_file() upfront_reconstruction = upfront_reconstruction_from_file() @@ -103,3 +95,73 @@ def make_tracks(): """ return reconstruction()["Tracks"] + +def make_rich_pids(): + """Return a DataHandle to the container of RichPIDS + + """ + return reconstruction()['RichPIDs'] + + +def make_muon_pids(): + """Return a DataHandle to the container of MuonPIDs + + """ + return reconstruction()['MuonPIDs'] + + + +def make_calo_electrons(): + """Return a DataHandle to the container of Calo Electrons + + """ + return reconstruction()['CaloElectrons'] + + +def make_calo_photons(): + """Return a DataHandle to the container of Calo Photons + + """ + return reconstruction()['CaloPhotons'] + +def make_calo_splitphotons(): + """Return a DataHandle to the container of Calo SplitPhotons + + """ + return reconstruction()['CaloSplitPhotons'] + +def make_calo_mergedPi0s(): + """Return a DataHandle to the container of Calo Merged Pi0s + + """ + return reconstruction()['CaloMergedPi0ss'] + + + +def get_particles(location): + """ + Unpacking of particles. This will also unpack the decay vertices associated with these particles implicitely + Also unpack P2V relations explicitely as ExtraInputs. + """ + p2v_location = location.replace("/Particles", "/Particle2VertexRelations") + p2v_unpacker = unpackers_map()["P2VRelations"] + + p2v_relations = p2v_unpacker( + InputName=force_location( + "/Event/HltPackedBufferDecoder/OutputBuffers"), + outputs={ + "OutputName": force_location(p2v_location) + }, + OutputLevel=5).OutputName + + unpacker = unpackers_map()["Particles"] + + particles = unpacker( + InputName=force_location( + "/Event/HltPackedBufferDecoder/OutputBuffers"), + outputs={ + "OutputName": force_location(location) + }, + OutputLevel=5).OutputName + + return particles -- GitLab From 097903610a428b40b796d06113fd935a664d87f8 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Fri, 23 Sep 2022 17:01:32 +0000 Subject: [PATCH 088/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/24748098 --- .../options/sprucing/spruce_all_lines.py | 3 +-- .../sprucing/spruce_all_lines_analytics.py | 4 ++-- .../sprucing/spruce_all_lines_realtime.py | 3 +-- ...spruce_all_lines_realtime_test_old_json.py | 3 +-- .../sprucing/spruce_example_fromfile.py | 3 +-- .../sprucing/spruce_example_realtime.py | 3 +-- .../spruce_example_realtime_dstinput.py | 3 +-- .../spruce_example_realtime_extraoutputs.py | 3 +-- .../spruce_example_realtime_persistreco.py | 3 +-- .../options/sprucing/spruce_hlt2filter.py | 3 +-- .../options/sprucing/spruce_passthrough.py | 3 +-- .../sprucing/spruce_passthrough_dstinput.py | 3 +-- .../streaming/spruce_test_streaming.py | 3 +-- .../RecoConf/reco_objects_for_spruce.py | 5 ++-- .../python/RecoConf/reconstruction_objects.py | 24 +++++++++---------- 15 files changed, 28 insertions(+), 41 deletions(-) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines.py index 8bdc1a147a9..c1bcd2fdf93 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines.py @@ -106,6 +106,5 @@ public_tools = [ options.scheduler_legacy_mode = False -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_streams, public_tools, analytics=True) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_analytics.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_analytics.py index 447d3aa5089..c24e933c00f 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_analytics.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_analytics.py @@ -115,6 +115,6 @@ Moore.streams_spruce.stream_banks = { public_tools = [stateProvider_with_simplified_geom()] with reconstruction.bind( - from_file=True, spruce=True -), CombineRawBankViewsToRawEvent.bind(OutputLevel=4): + from_file=True, + spruce=True), CombineRawBankViewsToRawEvent.bind(OutputLevel=4): config = run_moore(options, make_streams, public_tools, analytics=True) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py index 74c3c727cc6..28d3bc6bd9f 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime.py @@ -58,6 +58,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime_test_old_json.py b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime_test_old_json.py index e0f3639fef5..3ace7331821 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime_test_old_json.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_all_lines_realtime_test_old_json.py @@ -51,6 +51,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py index 24ae7ecdc3f..ed8795b2fab 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_fromfile.py @@ -49,6 +49,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py index d8e6856f412..60d7b00ebbc 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime.py @@ -41,6 +41,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py index b36339299d1..8f15d0a3d38 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_dstinput.py @@ -45,6 +45,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py index fed2887b78c..fb9341467d6 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_extraoutputs.py @@ -41,6 +41,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py index e08eeb64da2..e347b0b2854 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_example_realtime_persistreco.py @@ -41,6 +41,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py index 4f4f4c7d548..aefd8a8d0bf 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_hlt2filter.py @@ -64,6 +64,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py index cc4fb5df126..d0dd652f901 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough.py @@ -51,6 +51,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py index 252f8a731c1..a5d2cbe5a52 100644 --- a/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py +++ b/Hlt/Hlt2Conf/options/sprucing/spruce_passthrough_dstinput.py @@ -53,6 +53,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) diff --git a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py index 69c7d6cb478..b6fb82bd906 100644 --- a/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py +++ b/Hlt/Hlt2Conf/options/streaming/spruce_test_streaming.py @@ -68,6 +68,5 @@ pprint(Moore.streams_spruce.stream_banks) public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_streams, public_tools) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index dc04bd8f77e..0048004f1c4 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -26,17 +26,16 @@ def upfront_reconstruction(simulation=True): decoder = reading.decoder( configurables=False, output_level=4, stream=stream) - inv_map = {v: k for k, v in reading.type_map().items()} reco_loc = reco_locations(stream) dl = {v[0]: inv_map[v[1]] for v in reco_loc.values()} - mc_algs =[] + mc_algs = [] if simulation: mc_algs = reading.mc_unpackers( process='Hlt2', configurables=False, output_level=4) - + pp2mcp_loc = pp2mcp_locations(stream) dl.update((v[0], inv_map[v[1]]) for v in pp2mcp_loc.values()) diff --git a/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py b/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py index ec4251ea837..e516277d34a 100644 --- a/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py +++ b/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py @@ -29,8 +29,7 @@ from RecoConf.hlt2_global_reco import reconstruction as reconstruction_from_reco @configurable(cached=True) -def reconstruction(from_file=True, - spruce=False): +def reconstruction(from_file=True, spruce=False): """Return reconstruction objects. Note it is advised to use this function if more than one object is needed, @@ -96,6 +95,7 @@ def make_tracks(): """ return reconstruction()["Tracks"] + def make_rich_pids(): """Return a DataHandle to the container of RichPIDS @@ -110,7 +110,6 @@ def make_muon_pids(): return reconstruction()['MuonPIDs'] - def make_calo_electrons(): """Return a DataHandle to the container of Calo Electrons @@ -124,12 +123,14 @@ def make_calo_photons(): """ return reconstruction()['CaloPhotons'] + def make_calo_splitphotons(): """Return a DataHandle to the container of Calo SplitPhotons """ return reconstruction()['CaloSplitPhotons'] + def make_calo_mergedPi0s(): """Return a DataHandle to the container of Calo Merged Pi0s @@ -137,7 +138,6 @@ def make_calo_mergedPi0s(): return reconstruction()['CaloMergedPi0ss'] - def get_particles(location): """ Unpacking of particles. This will also unpack the decay vertices associated with these particles implicitely @@ -145,22 +145,22 @@ def get_particles(location): """ p2v_location = location.replace("/Particles", "/Particle2VertexRelations") p2v_unpacker = unpackers_map()["P2VRelations"] - + p2v_relations = p2v_unpacker( InputName=force_location( - "/Event/HltPackedBufferDecoder/OutputBuffers"), + "/Event/HltPackedBufferDecoder/OutputBuffers"), outputs={ - "OutputName": force_location(p2v_location) - }, + "OutputName": force_location(p2v_location) + }, OutputLevel=5).OutputName - + unpacker = unpackers_map()["Particles"] - + particles = unpacker( InputName=force_location( - "/Event/HltPackedBufferDecoder/OutputBuffers"), + "/Event/HltPackedBufferDecoder/OutputBuffers"), outputs={ - "OutputName": force_location(location) + "OutputName": force_location(location) }, OutputLevel=5).OutputName -- GitLab From b8077c43e3ea6f1d09b81c71c0f4c9ae1a1875f1 Mon Sep 17 00:00:00 2001 From: sesen Date: Fri, 23 Sep 2022 19:04:50 +0200 Subject: [PATCH 089/102] remove get_particles for now --- .../python/RecoConf/reconstruction_objects.py | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py b/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py index e516277d34a..77f2632d206 100644 --- a/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py +++ b/Hlt/RecoConf/python/RecoConf/reconstruction_objects.py @@ -136,32 +136,3 @@ def make_calo_mergedPi0s(): """ return reconstruction()['CaloMergedPi0ss'] - - -def get_particles(location): - """ - Unpacking of particles. This will also unpack the decay vertices associated with these particles implicitely - Also unpack P2V relations explicitely as ExtraInputs. - """ - p2v_location = location.replace("/Particles", "/Particle2VertexRelations") - p2v_unpacker = unpackers_map()["P2VRelations"] - - p2v_relations = p2v_unpacker( - InputName=force_location( - "/Event/HltPackedBufferDecoder/OutputBuffers"), - outputs={ - "OutputName": force_location(p2v_location) - }, - OutputLevel=5).OutputName - - unpacker = unpackers_map()["Particles"] - - particles = unpacker( - InputName=force_location( - "/Event/HltPackedBufferDecoder/OutputBuffers"), - outputs={ - "OutputName": force_location(location) - }, - OutputLevel=5).OutputName - - return particles -- GitLab From a97ca7b9768f50de1fc16fbbe694977c8e3101d0 Mon Sep 17 00:00:00 2001 From: sesen Date: Sat, 24 Sep 2022 10:15:02 +0200 Subject: [PATCH 090/102] remove manifest from reconstruction --- Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py index 0dde20d357f..255c0842ae5 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py +++ b/Hlt/Hlt2Conf/tests/options/hlt_filters_test_sprucepass.py @@ -72,7 +72,5 @@ def make_lines(): public_tools = [stateProvider_with_simplified_geom()] -with reconstruction.bind( - from_file=True, spruce=True, - manifest_file=options.input_manifest_file): +with reconstruction.bind(from_file=True, spruce=True): config = run_moore(options, make_lines, public_tools) -- GitLab From 234cfad427acbcffd786f23a99943045fa3428ac Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 27 Sep 2022 10:20:11 +0200 Subject: [PATCH 091/102] use PyConf.packing instead of PersistRecoConf --- Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py b/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py index 1f80c05b0b4..4b1152dd33b 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py +++ b/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py @@ -25,7 +25,7 @@ from .protoparticles import ( ) from PyConf import configurable -from GaudiConf.PersistRecoConf import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import (TrackContainerCopy, RecSummaryMaker, TrackContainersMerger, TracksEmptyProducer, PVsEmptyProducer, RecVertexEmptyProducer, -- GitLab From 8102e33ca1ee2d5204bae906d168304c83dac80f Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Tue, 27 Sep 2022 08:21:04 +0000 Subject: [PATCH 092/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/24800863 --- Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py b/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py index 4b1152dd33b..3ccd7fbb0cc 100644 --- a/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py +++ b/Hlt/RecoConf/python/RecoConf/hlt2_global_reco.py @@ -25,15 +25,13 @@ from .protoparticles import ( ) from PyConf import configurable -from PyConf.packing import persisted_location +from PyConf.packing import persisted_location from PyConf.Algorithms import (TrackContainerCopy, RecSummaryMaker, TrackContainersMerger, TracksEmptyProducer, PVsEmptyProducer, RecVertexEmptyProducer, ProtoParticlesEmptyProducer) - - # TODO make things configurable, if needed @configurable def make_legacy_reconstruction(usePatPVFuture=False): -- GitLab From 8464f642bf5f5a36da01fb389cfb185f73622325 Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 27 Sep 2022 15:42:29 +0200 Subject: [PATCH 093/102] update reading tutorial --- doc/tutorials/hlt2_analysis.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/tutorials/hlt2_analysis.rst b/doc/tutorials/hlt2_analysis.rst index 77e6eca95d7..5002ef29e39 100644 --- a/doc/tutorials/hlt2_analysis.rst +++ b/doc/tutorials/hlt2_analysis.rst @@ -131,8 +131,7 @@ familiar to you:: decoder = reading.decoder() - unpackers = reading.unpackers( - locations, manifest, decoder.OutputBuffers, mc=mc_unpackers) + unpackers = reading.unpackers(locations, manifest, decoder.OutputBuffers) reading_algs += [decoder] reading_algs += mc_unpackers -- GitLab From ff7b591e98adc5c8f03081a5870f3ac867348945 Mon Sep 17 00:00:00 2001 From: sesen Date: Tue, 27 Sep 2022 18:41:58 +0200 Subject: [PATCH 094/102] move DstData unpacking to reco_objects_for_spruce --- Hlt/Moore/python/Moore/config.py | 11 +++++++- .../RecoConf/reco_objects_for_spruce.py | 27 +++---------------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/Hlt/Moore/python/Moore/config.py b/Hlt/Moore/python/Moore/config.py index 4e1c73e74b7..0800b171e34 100644 --- a/Hlt/Moore/python/Moore/config.py +++ b/Hlt/Moore/python/Moore/config.py @@ -509,9 +509,18 @@ def moore_control_flow(options, streams, process, allen_hlt1, analytics=False): bank_types = list(HLT1_REPORT_RAW_BANK_TYPES | HLT2_REPORT_RAW_BANK_TYPES | DETECTOR_RAW_BANK_TYPES) + + if process == "spruce": + # sprucing already unpacked the DstData in reco_objects_for_spruce + bank_types_to_unpack = [ + b for b in bank_types if b != 'DstData' + ] + else: + bank_types_to_unpack = bank_types unpackrawevent = unpack_rawevent( - bank_types=bank_types, configurables=False) + bank_types=bank_types_to_unpack, configurables=False) unpack.append(unpackrawevent) + ## Hack to make `extra_locations_to_persist` objects writable in pass through if options.simulation and options.input_type == 'ROOT' and process == "pass": unpack += mc_unpackers(configurables=False) diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 0048004f1c4..0f0f8ee8ab1 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -10,6 +10,7 @@ ############################################################################### from GaudiConf import reading from PyConf.packing import persisted_location, reco_locations, pp2mcp_locations +from PyConf.reading import upfront_decoder def upfront_reconstruction(simulation=True): @@ -23,9 +24,6 @@ def upfront_reconstruction(simulation=True): stream = '/Event/HLT2' - decoder = reading.decoder( - configurables=False, output_level=4, stream=stream) - inv_map = {v: k for k, v in reading.type_map().items()} reco_loc = reco_locations(stream) @@ -47,14 +45,14 @@ def upfront_reconstruction(simulation=True): unpackers = reading.unpackers( reading.make_locations(m, stream), m, - decoder.OutputBuffers, + upfront_decoder("Hlt2"), configurables=False, output_level=5) ### TODO:FIXME take advantage of the fact that the above have datahandles... # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms # i.e. `upfront_reconstruction` should be a drop-in replacement for `reconstruction()`, with the same return type - return [decoder] + mc_algs + unpackers + return [upfront_decoder("Hlt2").producer] + mc_algs + unpackers def reconstruction(simulation=True): @@ -83,22 +81,3 @@ def reconstruction(simulation=True): "Output": persisted_location('RecSummary') }).Output return data - - -""" -Why are these here? -def make_charged_protoparticles(): - return reconstruction()['ChargedProtos'] - - -def make_neutral_protoparticles(): - return reconstruction()['NeutralProtos'] - - -def make_pvs(): - return reconstruction()['PVs'] - - -def make_tracks(): - return reconstruction()['Tracks'] -""" -- GitLab From 2008deabb50fa296f717c8073ded61647999fc37 Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 28 Sep 2022 15:26:22 +0200 Subject: [PATCH 095/102] add remove explicit OutputLevel for packing, update ref file --- Hlt/Hlt2Conf/tests/qmtest/hlt2_combinations_particle_v2.qmt | 5 ++--- Hlt/Moore/python/Moore/persistence/packing.py | 4 ---- Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py | 5 ++--- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/qmtest/hlt2_combinations_particle_v2.qmt b/Hlt/Hlt2Conf/tests/qmtest/hlt2_combinations_particle_v2.qmt index acdeca4ea86..bb7ae12bfcc 100644 --- a/Hlt/Hlt2Conf/tests/qmtest/hlt2_combinations_particle_v2.qmt +++ b/Hlt/Hlt2Conf/tests/qmtest/hlt2_combinations_particle_v2.qmt @@ -27,9 +27,8 @@ from Moore.qmtest.exclusions import remove_known_warnings countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 0}, stdout=remove_known_warnings(stdout)) -from Moore.qmtest.exclusions import skip_initialize, remove_known_fluctuating_counters, preprocessor as moore_preprocessor -from RecConf.QMTest.exclusions import preprocessor as RecPreprocessor -validateWithReference(preproc = skip_initialize + moore_preprocessor + RecPreprocessor, counter_preproc = remove_known_fluctuating_counters) +from Moore.qmtest.exclusions import ref_preprocessor, remove_known_fluctuating_counters +validateWithReference(preproc=ref_preprocessor, counter_preproc = remove_known_fluctuating_counters) diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 44f06a41c88..68680aa2c62 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -15,8 +15,6 @@ from PyConf.packing import packers_map from PyConf.components import get_output, force_location from PyConf.control_flow import CompositeNode, NodeLogic -from Gaudi.Configuration import WARNING as OUTPUTLEVEL - from PyConf.Algorithms import PackMCParticle, PackMCVertex, HltPackedBufferWriter log = logging.getLogger(__name__) @@ -47,7 +45,6 @@ def pack_stream_objects(stream, if t in inputs.keys(): packer = p( InputName=[force_location(loc) for loc in inputs[t]], - OutputLevel=OUTPUTLEVEL, EnableCheck=enable_check, EncodingKey=encoding_key) @@ -66,7 +63,6 @@ def pack_stream_objects(stream, bank_writer = HltPackedBufferWriter( PackedContainers=packers_output_locations, - OutputLevel=OUTPUTLEVEL, SourceID=source_id) serialisation_cf = CompositeNode( diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index 0f0f8ee8ab1..c21ca33b0fa 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -32,7 +32,7 @@ def upfront_reconstruction(simulation=True): mc_algs = [] if simulation: mc_algs = reading.mc_unpackers( - process='Hlt2', configurables=False, output_level=4) + process='Hlt2', configurables=False) pp2mcp_loc = pp2mcp_locations(stream) dl.update((v[0], inv_map[v[1]]) for v in pp2mcp_loc.values()) @@ -46,8 +46,7 @@ def upfront_reconstruction(simulation=True): reading.make_locations(m, stream), m, upfront_decoder("Hlt2"), - configurables=False, - output_level=5) + configurables=False) ### TODO:FIXME take advantage of the fact that the above have datahandles... # i.e. should _not_ have to return decoder here, and should just return the _output handles_ and not the algorithms -- GitLab From 74376b91a0d586979da2c0e206340a472bcaaffd Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 28 Sep 2022 13:30:04 +0000 Subject: [PATCH 096/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/24839596 --- Hlt/Moore/python/Moore/persistence/packing.py | 3 +-- Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Hlt/Moore/python/Moore/persistence/packing.py b/Hlt/Moore/python/Moore/persistence/packing.py index 68680aa2c62..a8024185d06 100644 --- a/Hlt/Moore/python/Moore/persistence/packing.py +++ b/Hlt/Moore/python/Moore/persistence/packing.py @@ -62,8 +62,7 @@ def pack_stream_objects(stream, ] bank_writer = HltPackedBufferWriter( - PackedContainers=packers_output_locations, - SourceID=source_id) + PackedContainers=packers_output_locations, SourceID=source_id) serialisation_cf = CompositeNode( "serialisation", diff --git a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py index c21ca33b0fa..30918eb1869 100644 --- a/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py +++ b/Hlt/RecoConf/python/RecoConf/reco_objects_for_spruce.py @@ -31,8 +31,7 @@ def upfront_reconstruction(simulation=True): mc_algs = [] if simulation: - mc_algs = reading.mc_unpackers( - process='Hlt2', configurables=False) + mc_algs = reading.mc_unpackers(process='Hlt2', configurables=False) pp2mcp_loc = pp2mcp_locations(stream) dl.update((v[0], inv_map[v[1]]) for v in pp2mcp_loc.values()) -- GitLab From 93d5d2eaebf138a4495d255bfed1bab0d59b3b11 Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 28 Sep 2022 18:09:46 +0200 Subject: [PATCH 097/102] remove output_level from unpacking --- Hlt/Hlt2Conf/options/hlt2_check_output.py | 2 +- Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py | 2 +- .../tests/options/hlt2_persistreco_check_flavourtags.py | 2 +- Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py | 1 - .../tests/options/sprucing/spruce_check_extraoutputs.py | 1 - Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py | 1 - Hlt/Hlt2Conf/tests/options/streaming/stream_check.py | 2 +- 7 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Hlt/Hlt2Conf/options/hlt2_check_output.py b/Hlt/Hlt2Conf/options/hlt2_check_output.py index 6a6ca8d22f6..703bd4b1421 100644 --- a/Hlt/Hlt2Conf/options/hlt2_check_output.py +++ b/Hlt/Hlt2Conf/options/hlt2_check_output.py @@ -46,7 +46,7 @@ CondDB(Upgrade=True) # Disable warning about not being able to navigate ancestors IODataManager(DisablePFNWarning=True) manifest = load_manifest(sys.argv[2]) -algs = do_unpacking(manifest, process='Hlt2', output_level=4) +algs = do_unpacking(manifest, process='Hlt2') appmgr = ApplicationMgr(TopAlg=algs) appmgr.ExtSvc += [configured_ann_svc()] diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py index 1644ab011b8..145202395be 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check.py @@ -72,7 +72,7 @@ LHCbApp( ) CondDB(Upgrade=True) -algs = do_unpacking(cfg, process='Hlt2', output_level=4) +algs = do_unpacking(cfg, process='Hlt2') app = ApplicationMgr(TopAlg=algs) app.ExtSvc += [configured_ann_svc()] diff --git a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check_flavourtags.py b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check_flavourtags.py index 2913e23d6d1..4cac596a8a5 100644 --- a/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check_flavourtags.py +++ b/Hlt/Hlt2Conf/tests/options/hlt2_persistreco_check_flavourtags.py @@ -45,7 +45,7 @@ process = "Hlt2" cfg = load_manifest(args.hlt2_manifest) -algs = do_unpacking(cfg, process=process, output_level=4) +algs = do_unpacking(cfg, process=process) app = ApplicationMgr(TopAlg=algs) app.ExtSvc += [configured_ann_svc()] diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py index fe21b3ea11a..0e3eeae9932 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check.py @@ -74,7 +74,6 @@ algs = do_unpacking( load_manifest(args.t), process=process, stream=stream, - output_level=4, simulation=True, raw_event_format=0.3) diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py index 603f37ada59..95091c2bf94 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py @@ -69,7 +69,6 @@ dec_to_check = "Spruce_Test_line_extraoutputs" algs = do_unpacking( load_manifest(args.t), process=process, - output_level=OUTPUTLEVEL, raw_event_format=0.3) app = ApplicationMgr(TopAlg=algs) diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py index 42fc166ce0d..d488416571b 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py @@ -66,7 +66,6 @@ dec_to_check = "Spruce_Test_line_persistreco" algs = do_unpacking( load_manifest(args.t), process=process, - output_level=4, raw_event_format=0.3) appmgr = ApplicationMgr(TopAlg=algs) diff --git a/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py b/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py index 7cb7c424005..a83a64aa2f2 100644 --- a/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py +++ b/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py @@ -88,7 +88,7 @@ else: print("configuration ERROR process not supported") algs = do_unpacking( - cfg, process=args.process, stream=args.stream, output_level=4) + cfg, process=args.process, stream=args.stream) mgr = ApplicationMgr(TopAlg=algs) mgr.ExtSvc += [configured_ann_svc()] -- GitLab From a1a5b1e906313737279fc5efcad68a8b9d7e0a49 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 28 Sep 2022 16:10:28 +0000 Subject: [PATCH 098/102] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/24845073 --- .../tests/options/sprucing/spruce_check_extraoutputs.py | 4 +--- .../tests/options/sprucing/spruce_check_persistreco.py | 4 +--- Hlt/Hlt2Conf/tests/options/streaming/stream_check.py | 3 +-- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py index 95091c2bf94..b4e8467bae6 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py @@ -67,9 +67,7 @@ loc = "Spruce" dec_to_check = "Spruce_Test_line_extraoutputs" algs = do_unpacking( - load_manifest(args.t), - process=process, - raw_event_format=0.3) + load_manifest(args.t), process=process, raw_event_format=0.3) app = ApplicationMgr(TopAlg=algs) app.ExtSvc += [configured_ann_svc()] diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py index d488416571b..771e6a3e34f 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_persistreco.py @@ -64,9 +64,7 @@ loc = "Spruce" dec_to_check = "Spruce_Test_line_persistreco" algs = do_unpacking( - load_manifest(args.t), - process=process, - raw_event_format=0.3) + load_manifest(args.t), process=process, raw_event_format=0.3) appmgr = ApplicationMgr(TopAlg=algs) appmgr.ExtSvc += [configured_ann_svc()] diff --git a/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py b/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py index a83a64aa2f2..c33e7986d88 100644 --- a/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py +++ b/Hlt/Hlt2Conf/tests/options/streaming/stream_check.py @@ -87,8 +87,7 @@ elif args.process == "Spruce": else: print("configuration ERROR process not supported") -algs = do_unpacking( - cfg, process=args.process, stream=args.stream) +algs = do_unpacking(cfg, process=args.process, stream=args.stream) mgr = ApplicationMgr(TopAlg=algs) mgr.ExtSvc += [configured_ann_svc()] -- GitLab From 438ab623e5d03d52eedd402409cf8b13f9cecccc Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 28 Sep 2022 18:13:01 +0200 Subject: [PATCH 099/102] remove unused import --- .../tests/options/sprucing/spruce_check_extraoutputs.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py index b4e8467bae6..6403d6623ad 100644 --- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py +++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_extraoutputs.py @@ -37,8 +37,6 @@ from GaudiConf.reading import do_unpacking from GaudiConf.reading import load_manifest -from Gaudi.Configuration import WARNING as OUTPUTLEVEL - from Hlt2Conf.check_output import check_persistreco -- GitLab From 14bba94b1c3ab51eb2e5f9c24e6714e126b70f65 Mon Sep 17 00:00:00 2001 From: sesen Date: Wed, 28 Sep 2022 20:54:25 +0200 Subject: [PATCH 100/102] update reference to ensure depending test will run --- ..._thor_selections_fastest.ref.x86_64_v3-opt | 49 +++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref.x86_64_v3-opt index 7d6b79e63e4..6a3ec0e1f0b 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref.x86_64_v3-opt @@ -81,10 +81,14 @@ CaloFutureMergedPi0.EcalSpread INFO Number of counters : 3 | "Corrected Clusters: # cells " | 90 | 530 | 5.8889 | 1.8101 | 3.0000 | 9.0000 | | "Corrected Clusters: ET" | 90 | 92806.98 | 1031.2 | 1224.0 | 33.600 | 9770.2 | | "Corrected Clusters: size ratio" | 90 | 38.31066 | 0.42567 | 0.37491 | 0.028376 | 1.9634 | +CaloHypoPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 60 | 58964 | 982.73 | + | "# PackedData" | 60 | 751 | 12.517 | CaloSelectiveBremMatchAlg_Downst... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 99 | 244 | 2.4646 | 2.6336 | 0.0000 | 14.000 | - | "average chi2" | 244 | 1219.162 | 4.9966 | 7.1592 | 0.015062 | 53.600 | + | "average chi2" | 244 | 1219.163 | 4.9966 | 7.1592 | 0.015062 | 53.600 | | "average energy (track based)" | 768 | 62896.89 | 81.897 | 254.74 | 0.0000 | 3847.2 | CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -115,10 +119,10 @@ CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "average DLL" | 808 | -154.3119 | -0.19098 | 0.73795 | -8.6620 | 4.7885 | - | "average E/p" | 808 | 48.36723 | 0.059860 | 0.075967 | 0.0000 | 0.88830 | + | "average E/p" | 808 | 48.36722 | 0.059860 | 0.075967 | 0.0000 | 0.88830 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 5254 | -330.9174 | -0.062984 | 0.12124 | -4.0428 | 0.91853 | + | "average DLL" | 5254 | -330.9175 | -0.062984 | 0.12124 | -4.0428 | 0.91853 | | "average E/p" | 5254 | 32.85062 | 0.0062525 | 0.010696 | 0.0000 | 0.44431 | CaloTrackToHcalEnergyAlg_Downstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -398,6 +402,9 @@ Hlt2BsToJpsiPhi_JPsi2ee_PhiToKK INFO Number of counters : 6 |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | | "Input1 size" | 99 | 6231 | 62.939 | | "Input2 size" | 99 | 707 | 7.1414 | +HltPackedBufferWriter INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Size of serialized data" | 55 | 793314 | 14424.0 | 52822.0 | 894.00 | 3.3636e+05 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Events without Tracks" | 1 | 0 | 0.0000 | @@ -436,6 +443,10 @@ MuonIDHlt2AlgLong INFO Number of counters : 7 |*"nIsMuon" | 6231 | 453 |( 7.270101 +- 0.3289283)% | |*"nIsMuonTight" | 6231 | 276 |( 4.429466 +- 0.2606506)% | |*"nMomentumCut" | 6231 | 5370 |( 86.18199 +- 0.4371718)% | +MuonPIDPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 7 | 16958 | 2422.6 | + | "# PackedData" | 7 | 279 | 39.857 | MuonPIDV2ToMuonTracks_Downstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of input v2 MuonPIDs" | 99 | 1003 | 10.131 | @@ -446,6 +457,14 @@ Muontopo_unfiltered_twobody_merger INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# input particles" | 396 | 33 | 0.083333 | | "# output particles" | 33 | 0 | 0.0000 | +P2VRelationPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 90 | 12964 | 144.04 | + | "# PackedData" | 90 | 90 | 1.0000 | +ParticlePacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 166 | 87354 | 526.23 | + | "# PackedData" | 166 | 435 | 2.6205 | ParticleRangeFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 7132 | 36 |(0.5047672 +- 0.08391528)% | @@ -604,6 +623,22 @@ PrStoreSciFiHits INFO Number of counters : 25 | "Hits in T3X1" | 400 | 27561 | 68.903 | 34.995 | 6.0000 | 227.00 | | "Hits in T3X2" | 400 | 29919 | 74.797 | 39.134 | 6.0000 | 230.00 | | "Total number of hits" | 100 | 325154 | 3251.5 | 1616.5 | 430.00 | 9578.0 | +ProtoParticlePacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 61 | 190282 | 3119.4 | + | "# PackedData" | 61 | 846 | 13.869 | +RecSummaryPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 55 | 2530 | 46.000 | + | "# PackedData" | 55 | 330 | 6.0000 | +RecVertexPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 55 | 20952 | 380.95 | + | "# PackedData" | 55 | 329 | 5.9818 | +RichPIDPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 7 | 12806 | 1829.4 | + | "# PackedData" | 7 | 263 | 37.571 | TBTCMatch INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"BadInput" | 5927 | 0 |( 0.000000 +- 0.000000)% | @@ -709,6 +744,10 @@ Topo_unfiltered_twobody_merger INFO Number of counters : 2 TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb PVs" | 100 | 504 | 5.0400 | +TrackPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 16 | 373080 | 23318.0 | + | "# PackedData" | 16 | 558 | 34.875 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 179234 | 1792.3 | @@ -716,6 +755,10 @@ VeloClusterTrackingSIMD INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 179234 | 1792.3 | | "Nb of Produced Tracks" | 100 | 23069 | 230.69 | +VertexPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 71 | 17424 | 245.41 | + | "# PackedData" | 71 | 179 | 2.5211 | fromPrSeedingTracksV1Tracks INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of converted Tracks" | 100 | 10331 | 103.31 | -- GitLab From b8ed20d5e523e5a190ecf8471de62e53d881ddd3 Mon Sep 17 00:00:00 2001 From: sesen Date: Thu, 29 Sep 2022 11:57:15 +0200 Subject: [PATCH 101/102] update dbg ref --- ...hlt2_reco_plus_thor_selections_fastest.ref | 633 ++++++++++-------- 1 file changed, 338 insertions(+), 295 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref b/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref index 2da05d6f258..d55888be801 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref @@ -6,7 +6,7 @@ TransportSvc INFO Reset the static pointer to DetDesc: ToolSvc INFO Removing all tools created by ToolSvc Generic_Hyperons_Lambda_DD.LoKi:... SUCCESS #WARNINGS = 2 Message = 'There is no convergency-III' Generic_Hyperons_Lambda_DD.LoKi:... SUCCESS Exceptions/Errors/Warnings/Infos Statistics : 0/0/1/0 -Generic_Phi2KKMaker.LoKi::Distan... SUCCESS #WARNINGS = 32 Message = 'There is no convergency-III' +Generic_Phi2KKMaker.LoKi::Distan... SUCCESS #WARNINGS = 31 Message = 'There is no convergency-III' Generic_Phi2KKMaker.LoKi::Distan... SUCCESS Exceptions/Errors/Warnings/Infos Statistics : 0/0/1/0 Topo_TwoBody_Combiner#3.LoKi::Di... SUCCESS #WARNINGS = 1 Message = 'There is no convergency-III' Topo_TwoBody_Combiner#3.LoKi::Di... SUCCESS Exceptions/Errors/Warnings/Infos Statistics : 0/0/1/0 @@ -14,32 +14,32 @@ ApplicationMgr INFO Application Manager Finalized succes ApplicationMgr INFO Application Manager Terminated successfully CaloAcceptanceBremAlg_Downstream INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 99 | 1005 | 10.152 | 6.4766 | 0.0000 | 29.000 | - | "#tracks in acceptance" | 99 | 770 | 7.7778 | 5.2504 | 0.0000 | 25.000 | + | "#total tracks" | 99 | 1003 | 10.131 | 6.4942 | 0.0000 | 29.000 | + | "#tracks in acceptance" | 99 | 768 | 7.7576 | 5.2630 | 0.0000 | 25.000 | CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 99 | 6226 | 62.889 | 36.913 | 2.0000 | 151.00 | - | "#tracks in acceptance" | 99 | 4438 | 44.828 | 26.674 | 0.0000 | 102.00 | + | "#total tracks" | 99 | 6232 | 62.949 | 36.938 | 2.0000 | 152.00 | + | "#tracks in acceptance" | 99 | 4443 | 44.879 | 26.728 | 0.0000 | 103.00 | CaloAcceptanceEcalAlg_Downstream INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 1005 | 10.050 | 6.5228 | 0.0000 | 29.000 | - | "#tracks in acceptance" | 100 | 809 | 8.0900 | 5.5769 | 0.0000 | 23.000 | + | "#total tracks" | 100 | 1003 | 10.030 | 6.5398 | 0.0000 | 29.000 | + | "#tracks in acceptance" | 100 | 808 | 8.0800 | 5.5780 | 0.0000 | 23.000 | CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6226 | 62.260 | 37.257 | 0.0000 | 151.00 | - | "#tracks in acceptance" | 100 | 5252 | 52.520 | 31.532 | 0.0000 | 127.00 | + | "#total tracks" | 100 | 6232 | 62.320 | 37.283 | 0.0000 | 152.00 | + | "#tracks in acceptance" | 100 | 5256 | 52.560 | 31.544 | 0.0000 | 128.00 | CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 3691 | 36.910 | 37.695 | 0.0000 | 347.00 | - | "#tracks in acceptance" | 100 | 3020 | 30.200 | 32.462 | 0.0000 | 304.00 | + | "#total tracks" | 100 | 3687 | 36.870 | 37.624 | 0.0000 | 346.00 | + | "#tracks in acceptance" | 100 | 3017 | 30.170 | 32.393 | 0.0000 | 303.00 | CaloAcceptanceHcalAlg_Downstream INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 99 | 1005 | 10.152 | 6.4766 | 0.0000 | 29.000 | - | "#tracks in acceptance" | 99 | 739 | 7.4646 | 5.0459 | 0.0000 | 23.000 | + | "#total tracks" | 99 | 1003 | 10.131 | 6.4942 | 0.0000 | 29.000 | + | "#tracks in acceptance" | 99 | 738 | 7.4545 | 5.0458 | 0.0000 | 23.000 | CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 99 | 6226 | 62.889 | 36.913 | 2.0000 | 151.00 | - | "#tracks in acceptance" | 99 | 4968 | 50.182 | 29.541 | 2.0000 | 120.00 | + | "#total tracks" | 99 | 6232 | 62.949 | 36.938 | 2.0000 | 152.00 | + | "#tracks in acceptance" | 99 | 4970 | 50.202 | 29.570 | 2.0000 | 121.00 | CaloFutureClusterCovarianceAlg INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# clusters" | 19746 | @@ -54,15 +54,15 @@ CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 CaloFutureMergedPi0 INFO Number of counters : 12 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cluster without 2nd seed found" | 333 | 0 |( 0.000000 +- 0.000000)% | - | "Corrected energy" | 666 | 6591542 | 9897.2 | 10923.0 | 132.22 | 81078.0 | + | "Corrected energy" | 666 | 6577553 | 9876.2 | 10909.0 | 123.53 | 80960.0 | |*"Fails to set covariance" | 666 | 0 |( 0.000000 +- 0.000000)% | |*"Fails to set spread" | 666 | 0 |( 0.000000 +- 0.000000)% | |*"Fails to tag(E) cluster (1)" | 333 | 0 |( 0.000000 +- 0.000000)% | |*"Fails to tag(E) cluster (2)" | 333 | 0 |( 0.000000 +- 0.000000)% | - | "Photon Delta(E)" | 666 | -263011.9 | -394.91 | 520.50 | -4085.2 | 1899.2 | + | "Photon Delta(E)" | 666 | -277000.8 | -415.92 | 528.59 | -4085.2 | 1781.4 | | "Photon Delta(X)" | 666 | 204.618 | 0.30723 | 13.760 | -47.731 | 22.325 | | "Photon Delta(Y)" | 666 | -115.2654 | -0.17307 | 13.248 | -28.424 | 22.326 | - | "Photon Delta(Z)" | 666 | 51015.18 | 76.599 | 12.200 | 5.3984 | 112.68 | + | "Photon Delta(Z)" | 666 | 50984.77 | 76.554 | 12.222 | 5.3984 | 112.68 | | "clusters => mergedPi0s" | 100 | 333 | 3.3300 | | "clusters => splitClusters" | 100 | 666 | 6.6600 | CaloFutureMergedPi0.CaloFutureEC... INFO Number of counters : 6 @@ -70,9 +70,9 @@ CaloFutureMergedPi0.CaloFutureEC... INFO Number of counters : 6 | " Inner" | 148 | 147.3767 | 0.99579 | 0.024469 | 0.96608 | 1.0696 | | " Middle" | 112 | 112.4963 | 1.0044 | 0.027526 | 0.97689 | 1.1149 | | " Outer" | 406 | 404.8794 | 0.99724 | 0.017642 | 0.97407 | 1.0995 | - | "Pileup offset" | 666 | 220667.4 | 331.33 | 356.63 | 1.7860 | 2523.7 | - | "Pileup scale" | 666 | 4134 | 6.2072 | 1.9519 | 1.0000 | 12.000 | - | "Pileup subtracted ratio" | 666 | 636.8174 | 0.95618 | 0.044457 | 0.37115 | 0.99903 | + | "Pileup offset" | 666 | 234628.3 | 352.29 | 375.13 | 1.7860 | 2523.7 | + | "Pileup scale" | 666 | 4414 | 6.6276 | 2.1726 | 1.0000 | 11.000 | + | "Pileup subtracted ratio" | 666 | 635.0324 | 0.95350 | 0.047841 | 0.29252 | 0.99903 | CaloFutureMergedPi0.EcalCovariance INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "parameter updated" | 2 | @@ -81,89 +81,93 @@ CaloFutureMergedPi0.EcalSpread INFO Number of counters : 3 | "Corrected Clusters: # cells " | 90 | 530 | 5.8889 | 1.8101 | 3.0000 | 9.0000 | | "Corrected Clusters: ET" | 90 | 92806.98 | 1031.2 | 1224.0 | 33.600 | 9770.2 | | "Corrected Clusters: size ratio" | 90 | 38.31051 | 0.42567 | 0.37492 | 0.028376 | 1.9634 | +CaloHypoPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 60 | 58964 | 982.73 | + | "# PackedData" | 60 | 751 | 12.517 | CaloSelectiveBremMatchAlg_Downst... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 99 | 244 | 2.4646 | 2.6716 | 0.0000 | 15.000 | - | "average chi2" | 244 | 1215.715 | 4.9824 | 7.1623 | 0.015062 | 53.600 | - | "average energy (track based)" | 770 | 62039.78 | 80.571 | 253.11 | 0.0000 | 3847.2 | + | "#links in table" | 99 | 245 | 2.4747 | 2.6793 | 0.0000 | 15.000 | + | "average chi2" | 245 | 1219.455 | 4.9774 | 7.1502 | 0.015062 | 53.600 | + | "average energy (track based)" | 768 | 63120.5 | 82.188 | 256.78 | 0.0000 | 3847.2 | CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 99 | 1709 | 17.263 | 15.826 | 0.0000 | 59.000 | - | "average chi2" | 1709 | 1597.701 | 0.93487 | 1.8373 | 2.9626e-06 | 32.043 | - | "average energy (track based)" | 4438 | 71261.21 | 16.057 | 49.097 | 0.0000 | 822.33 | + | "#links in table" | 99 | 1712 | 17.293 | 15.878 | 0.0000 | 59.000 | + | "average chi2" | 1712 | 1598.799 | 0.93388 | 1.8355 | 3.0299e-06 | 32.043 | + | "average energy (track based)" | 4443 | 71100.67 | 16.003 | 49.059 | 0.0000 | 822.33 | CaloSelectiveElectronMatchAlg_Do... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 99 | 730 | 7.3737 | 5.3834 | 0.0000 | 24.000 | - | "average chi2" | 730 | 29643.11 | 40.607 | 126.40 | 0.0035368 | 2282.2 | + | "#links in table" | 99 | 729 | 7.3636 | 5.3719 | 0.0000 | 24.000 | + | "average chi2" | 729 | 29535.37 | 40.515 | 126.41 | 0.0036906 | 2282.2 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 7 | 7 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 99 | 4584 | 46.303 | 30.407 | 1.0000 | 124.00 | - | "average chi2" | 4584 | 49515.64 | 10.802 | 23.525 | 0.0011236 | 718.42 | + | "#links in table" | 99 | 4583 | 46.293 | 30.411 | 1.0000 | 124.00 | + | "average chi2" | 4583 | 49880.08 | 10.884 | 24.375 | 0.0010812 | 718.42 | CaloSelectiveTrackMatchAlg_Downs... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 100 | 793 | 7.9300 | 5.8979 | 0.0000 | 27.000 | - | "average chi2" | 793 | 611.9636 | 0.77171 | 1.3273 | 0.00067599 | 16.972 | + | "average chi2" | 793 | 611.9637 | 0.77171 | 1.3273 | 0.00067599 | 16.972 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 4993 | 49.930 | 33.412 | 0.0000 | 134.00 | - | "average chi2" | 4993 | 785.5185 | 0.15732 | 0.27678 | 3.2931e-06 | 6.3379 | + | "#links in table" | 100 | 4997 | 49.970 | 33.460 | 0.0000 | 135.00 | + | "average chi2" | 4997 | 786.1998 | 0.15733 | 0.27669 | 3.2931e-06 | 6.3379 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 2769 | 27.690 | 29.610 | 0.0000 | 272.00 | - | "average chi2" | 2769 | 497.632 | 0.17972 | 0.36714 | 9.3131e-06 | 8.0981 | + | "#links in table" | 100 | 2766 | 27.660 | 29.521 | 0.0000 | 271.00 | + | "average chi2" | 2766 | 497.2378 | 0.17977 | 0.36736 | 9.3131e-06 | 8.0981 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 809 | -154.3241 | -0.19076 | 0.73747 | -8.6620 | 4.7885 | - | "average E/p" | 809 | 48.37474 | 0.059796 | 0.075932 | 0.0000 | 0.88830 | + | "average DLL" | 808 | -153.7505 | -0.19029 | 0.73831 | -8.6620 | 4.7885 | + | "average E/p" | 808 | 48.42672 | 0.059934 | 0.075993 | 0.0000 | 0.88830 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 5252 | -330.3949 | -0.062908 | 0.12133 | -4.0428 | 0.91852 | - | "average E/p" | 5252 | 32.90648 | 0.0062655 | 0.010706 | 0.0000 | 0.44431 | + | "average DLL" | 5256 | -330.853 | -0.062948 | 0.12120 | -4.0428 | 0.91852 | + | "average E/p" | 5256 | 32.85323 | 0.0062506 | 0.010693 | 0.0000 | 0.44431 | CaloTrackToHcalEnergyAlg_Downstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 739 | 2642625 | 3575.9 | 7980.4 | 0.0000 | 97974.0 | + | "energy (calo) associated to track" | 738 | 2642625 | 3580.8 | 7984.8 | 0.0000 | 97974.0 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 4968 |3.242604e+07 | 6527.0 | 13270.0 | 0.0000 | 3.3987e+05 | + | "energy (calo) associated to track" | 4970 |3.249471e+07 | 6538.2 | 13310.0 | 0.0000 | 3.3987e+05 | ClassifyPhotonElectronAlg INFO Number of counters : 14 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 6281 | -2522645 | -401.63 | 518.98 | -5132.1 | 1339.8 | + | "Electron Delta(E)" | 6281 | -2693991 | -428.91 | 545.73 | -4819.4 | 1104.7 | | "Electron Delta(X)" | 6281 | -1675.706 | -0.26679 | 12.098 | -22.782 | 22.326 | | "Electron Delta(Y)" | 6281 | -1998.812 | -0.31823 | 12.128 | -22.782 | 22.326 | - | "Electron Delta(Z)" | 6281 | 398704.6 | 63.478 | 14.846 | 2.7627 | 126.77 | - | "Electron corrected energy" | 6281 |3.557455e+07 | 5663.8 | 6516.9 | 64.216 | 90970.0 | - | "Electrons pT-rejected after correction" | 102 | - | "Photon Delta(E)" | 11987 | -2979993 | -248.60 | 414.45 | -4820.1 | 2233.3 | + | "Electron Delta(Z)" | 6281 | 397982.1 | 63.363 | 14.903 | 6.7373 | 126.77 | + | "Electron corrected energy" | 6281 |3.54032e+07 | 5636.6 | 6504.4 | 71.071 | 90970.0 | + | "Electrons pT-rejected after correction" | 109 | + | "Photon Delta(E)" | 11987 | -3185330 | -265.73 | 437.24 | -4855.8 | 2164.3 | | "Photon Delta(X)" | 11987 | -3444.692 | -0.28737 | 12.299 | -22.782 | 22.484 | | "Photon Delta(Y)" | 11987 | -226.9208 | -0.018931 | 12.297 | -22.782 | 22.326 | - | "Photon Delta(Z)" | 11987 | 650880.6 | 54.299 | 13.503 | -10.614 | 113.21 | - | "Photon corrected energy" | 11987 |3.997265e+07 | 3334.7 | 5401.2 | 20.160 | 1.1605e+05 | - | "Photons pT-rejected after correction" | 385 | - | "electronHypos" | 100 | 6179 | 61.790 | 36.794 | 0.0000 | 207.00 | - | "photonHypos" | 100 | 11602 | 116.02 | 59.953 | 0.0000 | 253.00 | + | "Photon Delta(Z)" | 11987 | 649481.5 | 54.182 | 13.564 | -10.614 | 113.21 | + | "Photon corrected energy" | 11987 |3.976731e+07 | 3317.5 | 5388.4 | 20.160 | 1.1589e+05 | + | "Photons pT-rejected after correction" | 410 | + | "electronHypos" | 100 | 6172 | 61.720 | 36.723 | 0.0000 | 207.00 | + | "photonHypos" | 100 | 11577 | 115.77 | 59.784 | 0.0000 | 251.00 | ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | " Inner" | 5336 | 5298.77 | 0.99302 | 0.018571 | 0.96447 | 1.0894 | - | " Middle" | 4924 | 4946.3 | 1.0045 | 0.018450 | 0.97672 | 1.1157 | - | " Outer" | 7968 | 7945.773 | 0.99721 | 0.014836 | 0.97375 | 1.0573 | - | "Pileup offset" | 18228 | 6773275 | 371.59 | 437.84 | 2.7007 | 5218.8 | - | "Pileup scale" | 18268 | 103865 | 5.6856 | 2.1429 | 1.0000 | 12.000 | - | "Pileup subtracted ratio" | 18228 | 15844.06 | 0.86922 | 0.13285 | 0.0015383 | 0.99917 | - | "Skip negative energy correction" | 40 | + | " Inner" | 5335 | 5297.691 | 0.99301 | 0.018536 | 0.96447 | 1.0894 | + | " Middle" | 4920 | 4942.198 | 1.0045 | 0.018445 | 0.97672 | 1.1157 | + | " Outer" | 7952 | 7929.843 | 0.99721 | 0.014845 | 0.97375 | 1.0573 | + | "Pileup offset" | 18207 | 7149812 | 392.70 | 463.95 | 2.7007 | 4783.9 | + | "Pileup scale" | 18268 | 110156 | 6.0300 | 2.3313 | 1.0000 | 11.000 | + | "Pileup subtracted ratio" | 18207 | 15709.11 | 0.86281 | 0.13739 | 0.0015383 | 0.99917 | + | "Skip negative energy correction" | 61 | CloneKillerMatch INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 100 | 6696 | 66.960 | - | "nTracksSelected" | 100 | 6696 | 66.960 | + | "nTracksInput" | 100 | 6721 | 67.210 | + | "nTracksSelected" | 100 | 6721 | 67.210 | CopyParticlesWithPVRelations#1.G... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "IP->(DI)GAMMA" | 67 | + | "IP->(DI)GAMMA" | 64 | CopyParticlesWithPVRelations#2.G... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "IP->(DI)GAMMA" | 1211 | + | "IP->(DI)GAMMA" | 1212 | CopyParticlesWithPVRelations.Gen... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "IP->(DI)GAMMA" | 240 | + | "IP->(DI)GAMMA" | 249 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | @@ -196,75 +200,75 @@ DeterministicPrescaler#9 INFO Number of counters : 1 |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | FilteredPIDElectrons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6226 | 713 |( 11.45198 +- 0.4035758)% | + |*"Cut selection efficiency" | 6232 | 708 |( 11.36072 +- 0.4019780)% | FilteredPIDMuons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6226 | 890 |( 14.29489 +- 0.4435977)% | + |*"Cut selection efficiency" | 6232 | 899 |( 14.42555 +- 0.4450661)% | FilteredPIDkaons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6226 | 2296 |( 36.87761 +- 0.6114607)% | + |*"Cut selection efficiency" | 6232 | 2296 |( 36.84211 +- 0.6110438)% | FunctionalChargedProtoParticleMaker INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CreatedProtos" | 7231 | + | "CreatedProtos" | 7235 | FunctionalParticleMaker INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 1005 | 1005 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7231 | 1005 |( 13.89849 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 497 | 5.0202 | 3.3514 | 0.0000 | 17.000 | - | "Nb created particles" | 99 | 508 | 5.1313 | 3.7943 | 0.0000 | 17.000 | + |*"# passed ProtoParticle filter" | 1003 | 1003 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7235 | 1003 |( 13.86317 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 496 | 5.0101 | 3.3590 | 0.0000 | 17.000 | + | "Nb created particles" | 99 | 507 | 5.1212 | 3.7960 | 0.0000 | 17.000 | FunctionalParticleMaker#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 1005 | 913 |( 90.84577 +- 0.9096623)% | - |*"# passed Track filter" | 7231 | 1005 |( 13.89849 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 457 | 4.6162 | 3.1995 | 0.0000 | 17.000 | - | "Nb created particles" | 99 | 456 | 4.6061 | 3.4431 | 0.0000 | 13.000 | + |*"# passed ProtoParticle filter" | 1003 | 911 |( 90.82752 +- 0.9113846)% | + |*"# passed Track filter" | 7235 | 1003 |( 13.86317 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 456 | 4.6061 | 3.2030 | 0.0000 | 17.000 | + | "Nb created particles" | 99 | 455 | 4.5960 | 3.4463 | 0.0000 | 13.000 | FunctionalParticleMaker#2 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6226 | 5937 |( 95.35818 +- 0.2666360)% | - |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 2952 | 29.818 | 17.719 | 0.0000 | 74.000 | - | "Nb created particles" | 99 | 2985 | 30.152 | 17.978 | 0.0000 | 73.000 | + |*"# passed ProtoParticle filter" | 6232 | 5944 |( 95.37869 +- 0.2659466)% | + |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 2957 | 29.869 | 17.700 | 0.0000 | 74.000 | + | "Nb created particles" | 99 | 2987 | 30.172 | 18.015 | 0.0000 | 73.000 | FunctionalParticleMaker#3 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6226 | 6226 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 3092 | 31.232 | 18.655 | 1.0000 | 78.000 | - | "Nb created particles" | 99 | 3134 | 31.657 | 18.982 | 1.0000 | 75.000 | + |*"# passed ProtoParticle filter" | 6232 | 6232 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 3096 | 31.273 | 18.643 | 1.0000 | 78.000 | + | "Nb created particles" | 99 | 3136 | 31.677 | 19.025 | 1.0000 | 75.000 | FunctionalParticleMaker#4 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6226 | 5937 |( 95.35818 +- 0.2666360)% | - |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 2952 | 29.818 | 17.719 | 0.0000 | 74.000 | - | "Nb created particles" | 99 | 2985 | 30.152 | 17.978 | 0.0000 | 73.000 | + |*"# passed ProtoParticle filter" | 6232 | 5944 |( 95.37869 +- 0.2659466)% | + |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 2957 | 29.869 | 17.700 | 0.0000 | 74.000 | + | "Nb created particles" | 99 | 2987 | 30.172 | 18.015 | 0.0000 | 73.000 | FunctionalParticleMaker#5 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 42 | 41 |( 97.61905 +- 2.352437)% | - |*"# passed Track filter" | 50 | 42 |( 84.00000 +- 5.184593)% | - | "Nb created anti-particles" | 1 | 22 | 22.000 | 0.0000 | 22.000 | 22.000 | + |*"# passed ProtoParticle filter" | 43 | 42 |( 97.67442 +- 2.298381)% | + |*"# passed Track filter" | 50 | 43 |( 86.00000 +- 4.907138)% | + | "Nb created anti-particles" | 1 | 23 | 23.000 | 0.0000 | 23.000 | 23.000 | | "Nb created particles" | 1 | 19 | 19.000 | 0.0000 | 19.000 | 19.000 | FunctionalParticleMaker#6 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6226 | 6226 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 3092 | 31.232 | 18.655 | 1.0000 | 78.000 | - | "Nb created particles" | 99 | 3134 | 31.657 | 18.982 | 1.0000 | 75.000 | + |*"# passed ProtoParticle filter" | 6232 | 6232 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 3096 | 31.273 | 18.643 | 1.0000 | 78.000 | + | "Nb created particles" | 99 | 3136 | 31.677 | 19.025 | 1.0000 | 75.000 | FunctionalParticleMaker#7 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6226 | 6226 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 3092 | 31.232 | 18.655 | 1.0000 | 78.000 | - | "Nb created particles" | 99 | 3134 | 31.657 | 18.982 | 1.0000 | 75.000 | + |*"# passed ProtoParticle filter" | 6232 | 6232 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 3096 | 31.273 | 18.643 | 1.0000 | 78.000 | + | "Nb created particles" | 99 | 3136 | 31.677 | 19.025 | 1.0000 | 75.000 | FunctionalParticleMaker#8 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6226 | 6226 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 3092 | 31.232 | 18.655 | 1.0000 | 78.000 | - | "Nb created particles" | 99 | 3134 | 31.657 | 18.982 | 1.0000 | 75.000 | + |*"# passed ProtoParticle filter" | 6232 | 6232 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 3096 | 31.273 | 18.643 | 1.0000 | 78.000 | + | "Nb created particles" | 99 | 3136 | 31.677 | 19.025 | 1.0000 | 75.000 | FunctionalParticleMaker#9 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6226 | 454 |( 7.292001 +- 0.3295167)% | - |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | - | "Nb created anti-particles" | 99 | 230 | 2.3232 | 3.4196 | 0.0000 | 17.000 | + |*"# passed ProtoParticle filter" | 6232 | 453 |( 7.268935 +- 0.3288776)% | + |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | + | "Nb created anti-particles" | 99 | 229 | 2.3131 | 3.4042 | 0.0000 | 17.000 | | "Nb created particles" | 99 | 224 | 2.2626 | 2.6269 | 0.0000 | 14.000 | FutureEcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -274,69 +278,69 @@ FutureHcalZSup INFO Number of counters : 1 |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | FutureNeutralProtoPAlg INFO Number of counters : 28 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CaloClusterCode for Photon" | 11602 | 1011467 | 87.180 | 13.622 | 21.000 | 98.000 | + | "CaloClusterCode for Photon" | 11577 | 1009534 | 87.202 | 13.608 | 21.000 | 98.000 | | "CaloClusterCode for Pi0Merged" | 333 | 30034 | 90.192 | 10.115 | 60.000 | 98.000 | - | "CaloClusterFrac for Photon" | 6741 | 5882.166 | 0.87260 | 0.12929 | 0.34032 | 1.2615 | + | "CaloClusterFrac for Photon" | 6718 | 5865.522 | 0.87311 | 0.12905 | 0.34032 | 1.2615 | | "CaloClusterFrac for Pi0Merged" | 246 | 238.7854 | 0.97067 | 0.043704 | 0.73766 | 1.0001 | - | "CaloNeutralE19 for Photon" | 11602 | 7149.142 | 0.61620 | 0.19139 | 0.17070 | 1.4672 | + | "CaloNeutralE19 for Photon" | 11577 | 7132.022 | 0.61605 | 0.19143 | 0.17070 | 1.4672 | | "CaloNeutralE19 for Pi0Merged" | 333 | 174.3879 | 0.52369 | 0.17412 | 0.21030 | 0.95546 | - | "CaloNeutralE49 for Photon" | 11602 | 10526.2 | 0.90727 | 0.10210 | 0.52796 | 1.4171 | + | "CaloNeutralE49 for Photon" | 11577 | 10503.42 | 0.90727 | 0.10213 | 0.52796 | 1.4171 | | "CaloNeutralE49 for Pi0Merged" | 333 | 289.6499 | 0.86982 | 0.088884 | 0.60920 | 1.0053 | - | "CaloNeutralEcal for Photon" | 11602 |4.26693e+07 | 3677.8 | 5662.8 | 149.80 | 1.1381e+05 | + | "CaloNeutralEcal for Photon" | 11577 |4.264976e+07 | 3684.0 | 5667.3 | 149.80 | 1.1381e+05 | | "CaloNeutralEcal for Pi0Merged" | 333 | 6538368 | 19635.0 | 17804.0 | 4788.6 | 1.1381e+05 | - | "CaloNeutralHcal2Ecal for Photon" | 11602 | 0 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | + | "CaloNeutralHcal2Ecal for Photon" | 11577 | 0 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | | "CaloNeutralHcal2Ecal for Pi0Merged" | 333 | 0 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | - | "CaloNeutralID for Photon" | 11602 |4.440085e+08 | 38270.0 | 3578.0 | 33152.0 | 44151.0 | + | "CaloNeutralID for Photon" | 11577 |4.430716e+08 | 38272.0 | 3580.5 | 33152.0 | 44151.0 | | "CaloNeutralID for Pi0Merged" | 333 |1.243234e+07 | 37334.0 | 3384.2 | 33294.0 | 43862.0 | - | "ClusterAsX for Photon" | 11602 | 22.2909 | 0.0019213 | 0.19759 | -0.74409 | 0.72304 | - | "ClusterAsY for Photon" | 11602 | 46.92702 | 0.0040447 | 0.19778 | -0.73521 | 0.74223 | - | "IsNotH for Photon" | 11602 | 2881.242 | 0.24834 | 0.48657 | -1.0000 | 0.99502 | + | "ClusterAsX for Photon" | 11577 | 19.52105 | 0.0016862 | 0.19772 | -0.74409 | 0.72304 | + | "ClusterAsY for Photon" | 11577 | 50.73926 | 0.0043828 | 0.19779 | -0.73521 | 0.74223 | + | "IsNotH for Photon" | 11577 | 2874.693 | 0.24831 | 0.48636 | -1.0000 | 0.99502 | | "IsNotH for Pi0Merged" | 333 | 93.80865 | 0.28171 | 0.32406 | 0.00041639 | 0.99454 | - | "IsPhoton for Photon" | 11602 | 11587.31 | 0.99873 | 0.031835 | 7.4790e-05 | 1.0000 | - | "IsPhoton for Pi0Merged" | 333 | 247.1585 | 0.74222 | 0.39835 | 1.8754e-06 | 1.0000 | - | "IsPhotonXGB for Photon" | 11602 | 11590.91 | 0.99904 | 0.027092 | 0.00045227 | 1.0000 | - | "IsPhotonXGB for Pi0Merged" | 333 | 279.5708 | 0.83955 | 0.29458 | 5.6350e-05 | 1.0000 | - | "Neutral Protos" | 100 | 12601 | 126.01 | 69.002 | 0.0000 | 295.00 | + | "IsPhoton for Photon" | 11577 | 11562.31 | 0.99873 | 0.031868 | 7.5866e-05 | 1.0000 | + | "IsPhoton for Pi0Merged" | 333 | 248.6659 | 0.74674 | 0.39666 | 1.8754e-06 | 1.0000 | + | "IsPhotonXGB for Photon" | 11577 | 11565.91 | 0.99904 | 0.027121 | 0.00045227 | 1.0000 | + | "IsPhotonXGB for Pi0Merged" | 333 | 281.1372 | 0.84426 | 0.29048 | 5.6350e-05 | 1.0000 | + | "Neutral Protos" | 100 | 12576 | 125.76 | 68.840 | 0.0000 | 292.00 | | "Neutral Protos from MergedPi0s" | 100 | 333 | 3.3300 | 3.7471 | 0.0000 | 16.000 | - | "Neutral Protos from Photons" | 100 | 11602 | 116.02 | 59.953 | 0.0000 | 253.00 | + | "Neutral Protos from Photons" | 100 | 11577 | 115.77 | 59.784 | 0.0000 | 251.00 | | "Neutral Protos from SplitPhotons" | 100 | 666 | 6.6600 | 7.4943 | 0.0000 | 32.000 | - | "ShowerShape for Photon" | 11602 |4.313979e+07 | 3718.3 | 3317.1 | 222.59 | 30414.0 | + | "ShowerShape for Photon" | 11577 |4.305632e+07 | 3719.1 | 3318.8 | 222.59 | 30414.0 | | "ShowerShape for Pi0Merged" | 333 | 2426523 | 7286.9 | 6224.2 | 349.00 | 30288.0 | FutureNeutralProtoPAlg.CaloFutur... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "no cluster" | 666 | 666 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | Generic_Bs2JPsiPhiCombiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 44 | 6 |( 13.63636 +- 5.173547)% | - |*"# passed CombinationCut" | 778 | 172 |( 22.10797 +- 1.487754)% | - |*"# passed CompositeCut" | 172 | 29 |( 16.86047 +- 2.854791)% | - |*"# passed vertex fit" | 172 | 172 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 44 | 155 | 3.5227 | - | "Input2 size" | 44 | 162 | 3.6818 | + |*"# passed" | 45 | 5 |( 11.11111 +- 4.684856)% | + |*"# passed CombinationCut" | 835 | 198 |( 23.71257 +- 1.471881)% | + |*"# passed CompositeCut" | 198 | 30 |( 15.15152 +- 2.548106)% | + |*"# passed vertex fit" | 198 | 198 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 45 | 158 | 3.5111 | + | "Input2 size" | 45 | 173 | 3.8444 | Generic_Bs2JPsiPhiCombiner#1 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 31 | 4 |( 12.90323 +- 6.021010)% | - |*"# passed CombinationCut" | 355 | 66 |( 18.59155 +- 2.064802)% | - |*"# passed CompositeCut" | 66 | 13 |( 19.69697 +- 4.895462)% | - |*"# passed vertex fit" | 66 | 66 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 31 | 78 | 2.5161 | - | "Input2 size" | 31 | 133 | 4.2903 | + |*"# passed" | 30 | 5 |( 16.66667 +- 6.804138)% | + |*"# passed CombinationCut" | 370 | 69 |( 18.64865 +- 2.024908)% | + |*"# passed CompositeCut" | 69 | 15 |( 21.73913 +- 4.965567)% | + |*"# passed vertex fit" | 69 | 69 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 30 | 75 | 2.5000 | + | "Input2 size" | 30 | 137 | 4.5667 | Generic_Hyperons_LambdaFromHyper... INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 5 |( 5.050505 +- 2.200879)% | |*"# passed CombinationCut" | 514 | 6 |( 1.167315 +- 0.4737648)% | |*"# passed CompositeCut" | 6 | 5 |( 83.33333 +- 15.21452)% | |*"# passed vertex fit" | 6 | 6 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 122 | 1.2323 | - | "Input2 size" | 99 | 540 | 5.4545 | + | "Input1 size" | 99 | 123 | 1.2424 | + | "Input2 size" | 99 | 543 | 5.4848 | Generic_Hyperons_Lambda_DD INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 8 |( 8.080808 +- 2.739132)% | - |*"# passed CombinationCut" | 251 | 11 |( 4.382470 +- 1.292086)% | + |*"# passed CombinationCut" | 253 | 11 |( 4.347826 +- 1.282104)% | |*"# passed CompositeCut" | 11 | 8 |( 72.72727 +- 13.42816)% | |*"# passed vertex fit" | 11 | 11 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 49 | 0.49495 | - | "Input2 size" | 99 | 679 | 6.8586 | + | "Input1 size" | 99 | 50 | 0.50505 | + | "Input2 size" | 99 | 677 | 6.8384 | Generic_Hyperons_Oc0ToXimKmPipPi... INFO Number of counters : 5 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 1 | 0 |( 0.000000 +- 0.000000)% | @@ -362,28 +366,28 @@ Generic_Hyperons_Xim_LLL INFO Number of counters : 6 | "Input2 size" | 5 | 58 | 11.600 | Generic_MassConstrJpsi2MuMuMaker INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 44 |( 44.44444 +- 4.994073)% | - |*"# passed CombinationCut" | 37867 | 160 |(0.4225315 +- 0.03333340)% | - |*"# passed CompositeCut" | 160 | 155 |( 96.87500 +- 1.375533)% | - |*"# passed vertex fit" | 160 | 160 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 6226 | 62.889 | - | "Input2 size" | 99 | 890 | 8.9899 | + |*"# passed" | 99 | 45 |( 45.45455 +- 5.004381)% | + |*"# passed CombinationCut" | 38231 | 163 |(0.4263556 +- 0.03332348)% | + |*"# passed CompositeCut" | 163 | 158 |( 96.93252 +- 1.350617)% | + |*"# passed vertex fit" | 163 | 163 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 6232 | 62.949 | + | "Input2 size" | 99 | 899 | 9.0808 | Generic_Phi2KKMaker INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 60 |( 60.60606 +- 4.910833)% | - |*"# passed CombinationCut" | 99126 | 5038 |( 5.082420 +- 0.06976134)% | - |*"# passed CompositeCut" | 5038 | 237 |( 4.704248 +- 0.2982997)% | - |*"# passed vertex fit" | 5038 | 5038 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 6226 | 62.889 | + |*"# passed CombinationCut" | 99490 | 5012 |( 5.037692 +- 0.06934286)% | + |*"# passed CompositeCut" | 5012 | 244 |( 4.868316 +- 0.3039810)% | + |*"# passed vertex fit" | 5012 | 5012 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 6232 | 62.949 | | "Input2 size" | 99 | 2296 | 23.192 | Generic_Pi0ToGammaGamma_Combiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 41 |( 41.00000 +- 4.918333)% | - |*"# passed CombinationCut" | 21564 | 73 |(0.3385272 +- 0.03955449)% | - |*"# passed CompositeCut" | 73 | 73 |( 100.0000 +- 0.000000)% | - |*"# passed vertex fit" | 73 | 73 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 1864 | 18.640 | - | "Input2 size" | 100 | 1864 | 18.640 | + |*"# passed" | 100 | 40 |( 40.00000 +- 4.898979)% | + |*"# passed CombinationCut" | 21251 | 69 |(0.3246906 +- 0.03902465)% | + |*"# passed CompositeCut" | 69 | 69 |( 100.0000 +- 0.000000)% | + |*"# passed vertex fit" | 69 | 69 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 1852 | 18.520 | + | "Input2 size" | 100 | 1852 | 18.520 | GraphClustering INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# clusters" | 100 | 19746 | 197.46 | 104.17 | 0.0000 | 463.00 | @@ -392,129 +396,144 @@ GraphClustering INFO Number of counters : 4 | "Negative energy clusters" | 6 | 7 | 1.1667 | 0.37268 | 1.0000 | 2.0000 | Hlt2BsToJpsiPhi_JPsi2ee_PhiToKK INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 31 |( 31.31313 +- 4.661037)% | - |*"# passed CombinationCut" | 30836 | 81 |(0.2626800 +- 0.02914831)% | - |*"# passed CompositeCut" | 81 | 78 |( 96.29630 +- 2.098362)% | - |*"# passed vertex fit" | 81 | 81 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 6226 | 62.889 | - | "Input2 size" | 99 | 713 | 7.2020 | + |*"# passed" | 99 | 30 |( 30.30303 +- 4.618834)% | + |*"# passed CombinationCut" | 30655 | 80 |(0.2609688 +- 0.02913911)% | + |*"# passed CompositeCut" | 80 | 75 |( 93.75000 +- 2.706329)% | + |*"# passed vertex fit" | 80 | 80 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 6232 | 62.949 | + | "Input2 size" | 99 | 708 | 7.1515 | +HltPackedBufferWriter INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "Size of serialized data" | 55 | 789542 | 14355.0 | 52793.0 | 894.00 | 3.3636e+05 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Events without Tracks" | 1 | 0 | 0.0000 | - | "Nb of Produced Tracks" | 99 | 6226 | 62.889 | + | "Nb of Produced Tracks" | 99 | 6232 | 62.949 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Events without Tracks" | 1 | 0 | 0.0000 | - | "Nb of Produced Tracks" | 99 | 1005 | 10.152 | + | "Nb of Produced Tracks" | 99 | 1003 | 10.131 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Events without Tracks" | 1 | 0 | 0.0000 | - | "Nb of Produced Tracks" | 99 | 3691 | 37.283 | + | "Nb of Produced Tracks" | 99 | 3687 | 37.242 | LHCb__MDF__IOAlg INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#banks in raw event" | 100 | 102500 | 1025.0 | 0.0000 | 1025.0 | 1025.0 | LHCb__Phys__ParticleMakers__Phot... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Confidence Level" | 7180 | 2622.937 | 0.36531 | 0.34319 | 6.8755e-05 | 0.99404 | - | "Created photons" | 11602 | - | "Selected photons" | 100 | 7180 | 71.800 | 40.915 | 0.0000 | 181.00 | + | "Confidence Level" | 7132 | 2613.36 | 0.36643 | 0.34313 | 6.8755e-05 | 0.99404 | + | "Created photons" | 11577 | + | "Selected photons" | 100 | 7132 | 71.320 | 40.387 | 0.0000 | 174.00 | MuonIDHlt2AlgDownstream INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "BgLL" | 75 | -77.31328 | -1.0308 | 1.3023 | -6.5440 | 0.0000 | | "MuLL" | 75 | -564.9871 | -7.5332 | 3.8190 | -11.513 | -0.091876 | | "muonMVAStat" | 75 | -24.75119 | -0.33002 | 1.1585 | -2.3500 | 3.7946 | - |*"nInAcceptance" | 1005 | 656 |( 65.27363 +- 1.501812)% | - |*"nIsMuon" | 1005 | 75 |( 7.462687 +- 0.8289398)% | - |*"nIsMuonTight" | 1005 | 51 |( 5.074627 +- 0.6923253)% | - |*"nMomentumCut" | 1005 | 715 |( 71.14428 +- 1.429233)% | + |*"nInAcceptance" | 1003 | 656 |( 65.40379 +- 1.501984)% | + |*"nIsMuon" | 1003 | 75 |( 7.477567 +- 0.8305260)% | + |*"nIsMuonTight" | 1003 | 51 |( 5.084746 +- 0.6936688)% | + |*"nMomentumCut" | 1003 | 715 |( 71.28614 +- 1.428558)% | MuonIDHlt2AlgLong INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 454 | -404.3524 | -0.89064 | 1.1690 | -7.4449 | 0.0000 | - | "MuLL" | 454 | -3552.636 | -7.8252 | 3.5721 | -11.513 | -0.036424 | - | "muonMVAStat" | 454 | -165.9461 | -0.36552 | 1.2669 | -2.6834 | 4.5537 | - |*"nInAcceptance" | 6226 | 4999 |( 80.29232 +- 0.5041389)% | - |*"nIsMuon" | 6226 | 454 |( 7.292001 +- 0.3295167)% | - |*"nIsMuonTight" | 6226 | 277 |( 4.449084 +- 0.2613053)% | - |*"nMomentumCut" | 6226 | 5373 |( 86.29939 +- 0.4357820)% | + | "BgLL" | 453 | -403.2237 | -0.89012 | 1.1702 | -7.4449 | 0.0000 | + | "MuLL" | 453 | -3547.422 | -7.8310 | 3.5739 | -11.513 | -0.036424 | + | "muonMVAStat" | 453 | -165.6918 | -0.36577 | 1.2683 | -2.6834 | 4.5537 | + |*"nInAcceptance" | 6232 | 4996 |( 80.16688 +- 0.5051022)% | + |*"nIsMuon" | 6232 | 453 |( 7.268935 +- 0.3288776)% | + |*"nIsMuonTight" | 6232 | 276 |( 4.428755 +- 0.2606098)% | + |*"nMomentumCut" | 6232 | 5371 |( 86.18421 +- 0.4371072)% | +MuonPIDPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 7 | 16898 | 2414.0 | + | "# PackedData" | 7 | 278 | 39.714 | MuonPIDV2ToMuonTracks_Downstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 99 | 1005 | 10.152 | + | "Nb of input v2 MuonPIDs" | 99 | 1003 | 10.131 | MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 99 | 6226 | 62.889 | + | "Nb of input v2 MuonPIDs" | 99 | 6232 | 62.949 | Muontopo_unfiltered_twobody_merger INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# input particles" | 396 | 34 | 0.085859 | - | "# output particles" | 34 | 0 | 0.0000 | + | "# input particles" | 396 | 33 | 0.083333 | + | "# output particles" | 33 | 0 | 0.0000 | +P2VRelationPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 90 | 12788 | 142.09 | + | "# PackedData" | 90 | 90 | 1.0000 | +ParticlePacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 166 | 85850 | 517.17 | + | "# PackedData" | 166 | 427 | 2.5723 | ParticleRangeFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 7180 | 38 |(0.5292479 +- 0.08562785)% | + |*"Cut selection efficiency" | 7132 | 36 |(0.5047672 +- 0.08391528)% | ParticleRangeFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 7180 | 12 |(0.1671309 +- 0.04820621)% | + |*"Cut selection efficiency" | 7132 | 11 |(0.1542344 +- 0.04646756)% | ParticleRangeFilter#10 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 41 | 11 |( 26.82927 +- 6.919603)% | + |*"Cut selection efficiency" | 42 | 11 |( 26.19048 +- 6.784272)% | ParticleRangeFilter#11 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 113 | 0 |( 0.000000 +- 0.000000)% | ParticleRangeFilter#12 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 34 | 0 |( 0.000000 +- 0.000000)% | + |*"Cut selection efficiency" | 33 | 0 |( 0.000000 +- 0.000000)% | ParticleRangeFilter#13 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 401 | 12 |( 2.992519 +- 0.8508419)% | + |*"Cut selection efficiency" | 380 | 12 |( 3.157895 +- 0.8970964)% | ParticleRangeFilter#2 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 7180 | 1864 |( 25.96100 +- 0.5174028)% | + |*"Cut selection efficiency" | 7132 | 1852 |( 25.96747 +- 0.5191830)% | ParticleRangeFilter#3 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 1005 | 679 |( 67.56219 +- 1.476708)% | + |*"Cut selection efficiency" | 1003 | 677 |( 67.49751 +- 1.478944)% | ParticleRangeFilter#4 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 913 | 49 |( 5.366922 +- 0.7458453)% | + |*"Cut selection efficiency" | 911 | 50 |( 5.488474 +- 0.7545865)% | ParticleRangeFilter#5 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 561 | 23 |( 4.099822 +- 0.8371644)% | ParticleRangeFilter#6 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6226 | 540 |( 8.673305 +- 0.3566865)% | + |*"Cut selection efficiency" | 6232 | 543 |( 8.713094 +- 0.3572537)% | ParticleRangeFilter#7 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 5937 | 122 |( 2.054910 +- 0.1841214)% | + |*"Cut selection efficiency" | 5944 | 123 |( 2.069314 +- 0.1846431)% | ParticleRangeFilter#8 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 364 | 58 |( 15.93407 +- 1.918327)% | + |*"Cut selection efficiency" | 365 | 58 |( 15.89041 +- 1.913568)% | ParticleRangeFilter#9 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 41 | 1 |( 2.439024 +- 2.409097)% | + |*"Cut selection efficiency" | 42 | 1 |( 2.380952 +- 2.352437)% | ParticleWithBremMaker INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of particles corrected with brem" | 6226 | 0 | 0.0000 | 0.0000 | 4.2950e+09 | 0.0000 | + | "Nb of particles corrected with brem" | 6232 | 0 | 0.0000 | 0.0000 | 4.2950e+09 | 0.0000 | ParticleWithBremMaker.SelectiveB... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Delta(E)" | 412 | 1539209 | 3735.9 | 4839.6 | 8.1463 | 32035.0 | - | "Nb photons added to single electrons" | 6226 | 412 | 0.066174 | 0.24859 | 0.0000 | 1.0000 | + | "Delta(E)" | 412 | 1539515 | 3736.7 | 4829.3 | 8.1463 | 31572.0 | + | "Nb photons added to single electrons" | 6232 | 412 | 0.066110 | 0.24847 | 0.0000 | 1.0000 | PrCloneKillerDown INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 100 | 1539 | 15.390 | - | "nTracksSelected" | 100 | 1478 | 14.780 | + | "nTracksInput" | 100 | 1537 | 15.370 | + | "nTracksSelected" | 100 | 1475 | 14.750 | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Accepted input tracks" | 99 | 7373 | 74.475 | + | "Accepted input tracks" | 99 | 7365 | 74.394 | | "Created long tracks" | 99 | 463 | 4.6768 | - | "Input tracks" | 99 | 7802 | 78.808 | - | "Number of candidate bins per track" | 7373 | 22592 | 3.0642 | 7.3487 | 0.0000 | 67.000 | - | "Number of complete candidates/track 1st Loop" | 4133 | 298 | 0.072103 | 0.26421 | 0.0000 | 2.0000 | - | "Number of complete candidates/track 2nd Loop" | 3952 | 183 | 0.046306 | 0.21135 | 0.0000 | 2.0000 | - | "Number of x candidates per track 1st Loop" | 4133 | 2220 | 0.53714 | 0.92699 | - | "Number of x candidates per track 2nd Loop" | 3952 | 7683 | 1.9441 | 3.2356 | - | "Percentage second loop execution" | 4133 | 3952 | 0.95621 | + | "Input tracks" | 99 | 7811 | 78.899 | + | "Number of candidate bins per track" | 7365 | 22388 | 3.0398 | 7.2740 | 0.0000 | 67.000 | + | "Number of complete candidates/track 1st Loop" | 4123 | 297 | 0.072035 | 0.26411 | 0.0000 | 2.0000 | + | "Number of complete candidates/track 2nd Loop" | 3943 | 184 | 0.046665 | 0.21212 | 0.0000 | 2.0000 | + | "Number of x candidates per track 1st Loop" | 4123 | 2208 | 0.53553 | 0.92550 | + | "Number of x candidates per track 2nd Loop" | 3943 | 7655 | 1.9414 | 3.2304 | + | "Percentage second loop execution" | 4123 | 3943 | 0.95634 | | "Removed duplicates" | 99 | 12 | 0.12121 | PrForwardTrackingVelo.PrAddUTHit... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#UT hits added" | 340 | 1314 | 3.8647 | - | "#tracks with hits added" | 340 | + | "#UT hits added" | 341 | 1318 | 3.8651 | + | "#tracks with hits added" | 341 | PrHybridSeeding INFO Number of counters : 21 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Created T2x1 three-hit combinations in case 0" | 162447 | 101422 | 0.62434 | 0.61615 | 0.0000 | 5.0000 | @@ -541,39 +560,39 @@ PrHybridSeeding INFO Number of counters : 21 PrKalmanFilterForward INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 41 | - | "chi2 cut" | 119 | + | "chi2 cut" | 118 | | "nIterations" | 463 | 1189 | 2.5680 | - | "nOutlierIterations" | 422 | 385 | 0.91232 | + | "nOutlierIterations" | 422 | 384 | 0.90995 | | "nTracksInput" | 100 | 463 | 4.6300 | - | "nTracksOutput" | 100 | 303 | 3.0300 | + | "nTracksOutput" | 100 | 304 | 3.0400 | PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Pre outlier chi2 cut" | 124 | - | "chi2 cut" | 636 | - | "nIterations" | 6696 | 14518 | 2.1682 | - | "nOutlierIterations" | 6572 | 3594 | 0.54687 | - | "nTracksInput" | 100 | 6696 | 66.960 | - | "nTracksOutput" | 100 | 5936 | 59.360 | + | "Pre outlier chi2 cut" | 131 | + | "chi2 cut" | 638 | + | "nIterations" | 6721 | 14592 | 2.1711 | + | "nOutlierIterations" | 6590 | 3614 | 0.54841 | + | "nTracksInput" | 100 | 6721 | 67.210 | + | "nTracksOutput" | 100 | 5952 | 59.520 | PrKalmanFilter_Downstream INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 164 | - | "chi2 cut" | 309 | - | "nIterations" | 1478 | 3778 | 2.5562 | - | "nOutlierIterations" | 1314 | 861 | 0.65525 | - | "nTracksInput" | 100 | 1478 | 14.780 | - | "nTracksOutput" | 100 | 1005 | 10.050 | + | "chi2 cut" | 308 | + | "nIterations" | 1475 | 3771 | 2.5566 | + | "nOutlierIterations" | 1311 | 860 | 0.65599 | + | "nTracksInput" | 100 | 1475 | 14.750 | + | "nTracksOutput" | 100 | 1003 | 10.030 | PrLongLivedTracking INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#Downstream tracks made" | 100 | 1539 | 15.390 | + | "#Downstream tracks made" | 100 | 1537 | 15.370 | PrMatchNN INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#MatchingChi2" | 99 | 108620.6 | 1097.2 | - | "#MatchingMLP" | 6696 | 5669.974 | 0.84677 | - | "#MatchingTracks" | 99 | 6696 | 67.636 | + | "#MatchingChi2" | 99 | 109022.2 | 1101.2 | + | "#MatchingMLP" | 6721 | 5687.136 | 0.84617 | + | "#MatchingTracks" | 99 | 6721 | 67.889 | PrMatchNN.PrAddUTHitsTool INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#UT hits added" | 5839 | 23304 | 3.9911 | - | "#tracks with hits added" | 5839 | + | "#UT hits added" | 5858 | 23375 | 3.9903 | + | "#tracks with hits added" | 5858 | PrStorePrUTHits INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#banks" | 100 | 18000 | 180.00 | @@ -604,21 +623,37 @@ PrStoreSciFiHits INFO Number of counters : 25 | "Hits in T3X1" | 400 | 27561 | 68.903 | 34.995 | 6.0000 | 227.00 | | "Hits in T3X2" | 400 | 29919 | 74.797 | 39.134 | 6.0000 | 230.00 | | "Total number of hits" | 100 | 325154 | 3251.5 | 1616.5 | 430.00 | 9578.0 | +ProtoParticlePacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 61 | 189954 | 3114.0 | + | "# PackedData" | 61 | 845 | 13.852 | +RecSummaryPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 55 | 2530 | 46.000 | + | "# PackedData" | 55 | 330 | 6.0000 | +RecVertexPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 55 | 20952 | 380.95 | + | "# PackedData" | 55 | 329 | 5.9818 | +RichPIDPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 7 | 12758 | 1822.6 | + | "# PackedData" | 7 | 262 | 37.429 | TBTCMatch INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 5923 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 5923 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 5923 | + |*"BadInput" | 5928 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 5928 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 5928 | TBTC_Forward INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 303 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 303 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 303 | + |*"BadInput" | 304 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 304 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 304 | TBTC_down INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 1005 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 1005 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 1005 | + |*"BadInput" | 1003 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 1003 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 1003 | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | ToolSvc.TrackFunctorFactory INFO Number of counters : 1 @@ -626,108 +661,116 @@ ToolSvc.TrackFunctorFactory INFO Number of counters : 1 Topo_ThreeBody_Combiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 22 |( 22.22222 +- 4.178341)% | - |*"# passed CombinationCut" | 1498 | 392 |( 26.16822 +- 1.135672)% | - |*"# passed CompositeCut" | 392 | 202 |( 51.53061 +- 2.524198)% | - |*"# passed vertex fit" | 392 | 392 |( 100.0000 +- 0.000000)% | + |*"# passed CombinationCut" | 1491 | 372 |( 24.94970 +- 1.120650)% | + |*"# passed CompositeCut" | 372 | 191 |( 51.34409 +- 2.591442)% | + |*"# passed vertex fit" | 372 | 372 |( 100.0000 +- 0.000000)% | | "Input1 size" | 99 | 113 | 1.1414 | - | "Input2 size" | 99 | 1458 | 14.727 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_ThreeBody_Combiner#1 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 20 |( 20.20202 +- 4.035299)% | - |*"# passed CombinationCut" | 1457 | 370 |( 25.39465 +- 1.140319)% | - |*"# passed CompositeCut" | 370 | 199 |( 53.78378 +- 2.591922)% | - |*"# passed vertex fit" | 370 | 370 |( 100.0000 +- 0.000000)% | + |*"# passed" | 99 | 19 |( 19.19192 +- 3.957938)% | + |*"# passed CombinationCut" | 1414 | 346 |( 24.46959 +- 1.143272)% | + |*"# passed CompositeCut" | 346 | 189 |( 54.62428 +- 2.676496)% | + |*"# passed vertex fit" | 346 | 346 |( 100.0000 +- 0.000000)% | | "Input1 size" | 99 | 113 | 1.1414 | - | "Input2 size" | 99 | 1458 | 14.727 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_TwoBody_Combiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 25 |( 25.25253 +- 4.366496)% | - |*"# passed CombinationCut" | 7210 | 375 |( 5.201110 +- 0.2615062)% | - |*"# passed CompositeCut" | 375 | 61 |( 16.26667 +- 1.905824)% | - |*"# passed vertex fit" | 375 | 375 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 1458 | 14.727 | - | "Input2 size" | 99 | 1458 | 14.727 | + |*"# passed" | 99 | 22 |( 22.22222 +- 4.178341)% | + |*"# passed CombinationCut" | 6817 | 369 |( 5.412938 +- 0.2740538)% | + |*"# passed CompositeCut" | 369 | 60 |( 16.26016 +- 1.920947)% | + |*"# passed vertex fit" | 369 | 369 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 1430 | 14.444 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_TwoBody_Combiner#1 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 11 |( 11.11111 +- 3.158529)% | - |*"# passed CombinationCut" | 3825 | 180 |( 4.705882 +- 0.3424032)% | - |*"# passed CompositeCut" | 180 | 21 |( 11.66667 +- 2.392762)% | - |*"# passed vertex fit" | 180 | 180 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 1458 | 14.727 | - | "Input2 size" | 99 | 1458 | 14.727 | + |*"# passed" | 99 | 12 |( 12.12121 +- 3.280178)% | + |*"# passed CombinationCut" | 3706 | 190 |( 5.126821 +- 0.3622790)% | + |*"# passed CompositeCut" | 190 | 22 |( 11.57895 +- 2.321323)% | + |*"# passed vertex fit" | 190 | 190 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 1430 | 14.444 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_TwoBody_Combiner#2 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 17 |( 17.17172 +- 3.790344)% | - |*"# passed CombinationCut" | 3374 | 197 |( 5.838767 +- 0.4036678)% | - |*"# passed CompositeCut" | 197 | 31 |( 15.73604 +- 2.594392)% | - |*"# passed vertex fit" | 197 | 197 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 1458 | 14.727 | - | "Input2 size" | 99 | 1458 | 14.727 | + |*"# passed" | 99 | 18 |( 18.18182 +- 3.876377)% | + |*"# passed CombinationCut" | 3143 | 189 |( 6.013363 +- 0.4240524)% | + |*"# passed CompositeCut" | 189 | 31 |( 16.40212 +- 2.693498)% | + |*"# passed vertex fit" | 189 | 189 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 1430 | 14.444 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_TwoBody_Combiner#3 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 5 |( 5.050505 +- 2.200879)% | - |*"# passed CombinationCut" | 2533 | 73 |( 2.881958 +- 0.3324116)% | - |*"# passed CompositeCut" | 73 | 7 |( 9.589041 +- 3.446170)% | - |*"# passed vertex fit" | 73 | 73 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 454 | 4.5859 | - | "Input2 size" | 99 | 1458 | 14.727 | + |*"# passed" | 99 | 4 |( 4.040404 +- 1.978969)% | + |*"# passed CombinationCut" | 2518 | 80 |( 3.177125 +- 0.3495250)% | + |*"# passed CompositeCut" | 80 | 6 |( 7.500000 +- 2.944805)% | + |*"# passed vertex fit" | 80 | 80 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 453 | 4.5758 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_TwoBody_Combiner#4 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 5 |( 5.050505 +- 2.200879)% | - |*"# passed CombinationCut" | 2430 | 94 |( 3.868313 +- 0.3911929)% | - |*"# passed CompositeCut" | 94 | 9 |( 9.574468 +- 3.034862)% | - |*"# passed vertex fit" | 94 | 94 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 454 | 4.5859 | - | "Input2 size" | 99 | 1458 | 14.727 | + |*"# passed CombinationCut" | 2422 | 93 |( 3.839802 +- 0.3904496)% | + |*"# passed CompositeCut" | 93 | 9 |( 9.677419 +- 3.065748)% | + |*"# passed vertex fit" | 93 | 93 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 453 | 4.5758 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_TwoBody_Combiner#5 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 6 |( 6.060606 +- 2.398084)% | - |*"# passed CombinationCut" | 2553 | 98 |( 3.838621 +- 0.3802442)% | - |*"# passed CompositeCut" | 98 | 9 |( 9.183673 +- 2.917273)% | - |*"# passed vertex fit" | 98 | 98 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 454 | 4.5859 | - | "Input2 size" | 99 | 1458 | 14.727 | + |*"# passed CombinationCut" | 2471 | 95 |( 3.844597 +- 0.3867906)% | + |*"# passed CompositeCut" | 95 | 9 |( 9.473684 +- 3.004589)% | + |*"# passed vertex fit" | 95 | 95 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 453 | 4.5758 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_TwoBody_Combiner#6 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 5 |( 5.050505 +- 2.200879)% | - |*"# passed CombinationCut" | 2081 | 60 |( 2.883229 +- 0.3668180)% | - |*"# passed CompositeCut" | 60 | 9 |( 15.00000 +- 4.609772)% | - |*"# passed vertex fit" | 60 | 60 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 454 | 4.5859 | - | "Input2 size" | 99 | 1458 | 14.727 | + |*"# passed CombinationCut" | 2014 | 57 |( 2.830189 +- 0.3695248)% | + |*"# passed CompositeCut" | 57 | 9 |( 15.78947 +- 4.829805)% | + |*"# passed vertex fit" | 57 | 57 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 453 | 4.5758 | + | "Input2 size" | 99 | 1430 | 14.444 | Topo_has_rich_long_pion INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 5937 | 1458 |( 24.55786 +- 0.5586229)% | + |*"Cut selection efficiency" | 5944 | 1430 |( 24.05787 +- 0.5544094)% | Topo_unfiltered_threebody_merger INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# input particles" | 198 | 401 | 2.0253 | - | "# output particles" | 401 | 0 | 0.0000 | + | "# input particles" | 198 | 380 | 1.9192 | + | "# output particles" | 380 | 0 | 0.0000 | Topo_unfiltered_twobody_merger INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# input particles" | 297 | 113 | 0.38047 | | "# output particles" | 113 | 0 | 0.0000 | TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 100 | 479 | 4.7900 | + | "Nb PVs" | 100 | 504 | 5.0400 | +TrackPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 16 | 371752 | 23234.0 | + | "# PackedData" | 16 | 556 | 34.750 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 179234 | 1792.3 | VeloClusterTrackingSIMD INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 179234 | 1792.3 | - | "Nb of Produced Tracks" | 100 | 23012 | 230.12 | + | "Nb of Produced Tracks" | 100 | 23068 | 230.68 | +VertexPacker INFO Number of counters : 2 + | Counter | # | sum | mean/eff^* | rms/err^* | min | max | + | "# BufferData" | 71 | 17096 | 240.79 | + | "# PackedData" | 71 | 175 | 2.4648 | fromPrSeedingTracksV1Tracks INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of converted Tracks" | 100 | 10331 | 103.31 | fromPrVeloTracksV1TracksMerger INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of converted Tracks" | 56 | 16715 | 298.48 | + | "Nb of converted Tracks" | 55 | 16504 | 300.07 | fromV2MuonPIDV1MuonPIDDownstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 99 | 1005 | 10.152 | + | "Nb of Produced MuonPIDs" | 99 | 1003 | 10.131 | fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 99 | 6226 | 62.889 | + | "Nb of Produced MuonPIDs" | 99 | 6232 | 62.949 | require_pvs INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 100 | 99 |( 99.00000 +- 0.9949874)% | -- GitLab From 92b70d4cb6a5076c51be6ab45af53780279d4f2d Mon Sep 17 00:00:00 2001 From: Rosen Matev Date: Fri, 30 Sep 2022 12:24:18 +0200 Subject: [PATCH 102/102] Undo ref changes --- ...hlt2_reco_plus_thor_selections_fastest.ref | 633 ++++++++---------- ..._thor_selections_fastest.ref.x86_64_v3-opt | 49 +- 2 files changed, 298 insertions(+), 384 deletions(-) diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref b/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref index d55888be801..2da05d6f258 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref @@ -6,7 +6,7 @@ TransportSvc INFO Reset the static pointer to DetDesc: ToolSvc INFO Removing all tools created by ToolSvc Generic_Hyperons_Lambda_DD.LoKi:... SUCCESS #WARNINGS = 2 Message = 'There is no convergency-III' Generic_Hyperons_Lambda_DD.LoKi:... SUCCESS Exceptions/Errors/Warnings/Infos Statistics : 0/0/1/0 -Generic_Phi2KKMaker.LoKi::Distan... SUCCESS #WARNINGS = 31 Message = 'There is no convergency-III' +Generic_Phi2KKMaker.LoKi::Distan... SUCCESS #WARNINGS = 32 Message = 'There is no convergency-III' Generic_Phi2KKMaker.LoKi::Distan... SUCCESS Exceptions/Errors/Warnings/Infos Statistics : 0/0/1/0 Topo_TwoBody_Combiner#3.LoKi::Di... SUCCESS #WARNINGS = 1 Message = 'There is no convergency-III' Topo_TwoBody_Combiner#3.LoKi::Di... SUCCESS Exceptions/Errors/Warnings/Infos Statistics : 0/0/1/0 @@ -14,32 +14,32 @@ ApplicationMgr INFO Application Manager Finalized succes ApplicationMgr INFO Application Manager Terminated successfully CaloAcceptanceBremAlg_Downstream INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 99 | 1003 | 10.131 | 6.4942 | 0.0000 | 29.000 | - | "#tracks in acceptance" | 99 | 768 | 7.7576 | 5.2630 | 0.0000 | 25.000 | + | "#total tracks" | 99 | 1005 | 10.152 | 6.4766 | 0.0000 | 29.000 | + | "#tracks in acceptance" | 99 | 770 | 7.7778 | 5.2504 | 0.0000 | 25.000 | CaloAcceptanceBremAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 99 | 6232 | 62.949 | 36.938 | 2.0000 | 152.00 | - | "#tracks in acceptance" | 99 | 4443 | 44.879 | 26.728 | 0.0000 | 103.00 | + | "#total tracks" | 99 | 6226 | 62.889 | 36.913 | 2.0000 | 151.00 | + | "#tracks in acceptance" | 99 | 4438 | 44.828 | 26.674 | 0.0000 | 102.00 | CaloAcceptanceEcalAlg_Downstream INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 1003 | 10.030 | 6.5398 | 0.0000 | 29.000 | - | "#tracks in acceptance" | 100 | 808 | 8.0800 | 5.5780 | 0.0000 | 23.000 | + | "#total tracks" | 100 | 1005 | 10.050 | 6.5228 | 0.0000 | 29.000 | + | "#tracks in acceptance" | 100 | 809 | 8.0900 | 5.5769 | 0.0000 | 23.000 | CaloAcceptanceEcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 6232 | 62.320 | 37.283 | 0.0000 | 152.00 | - | "#tracks in acceptance" | 100 | 5256 | 52.560 | 31.544 | 0.0000 | 128.00 | + | "#total tracks" | 100 | 6226 | 62.260 | 37.257 | 0.0000 | 151.00 | + | "#tracks in acceptance" | 100 | 5252 | 52.520 | 31.532 | 0.0000 | 127.00 | CaloAcceptanceEcalAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 100 | 3687 | 36.870 | 37.624 | 0.0000 | 346.00 | - | "#tracks in acceptance" | 100 | 3017 | 30.170 | 32.393 | 0.0000 | 303.00 | + | "#total tracks" | 100 | 3691 | 36.910 | 37.695 | 0.0000 | 347.00 | + | "#tracks in acceptance" | 100 | 3020 | 30.200 | 32.462 | 0.0000 | 304.00 | CaloAcceptanceHcalAlg_Downstream INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 99 | 1003 | 10.131 | 6.4942 | 0.0000 | 29.000 | - | "#tracks in acceptance" | 99 | 738 | 7.4545 | 5.0458 | 0.0000 | 23.000 | + | "#total tracks" | 99 | 1005 | 10.152 | 6.4766 | 0.0000 | 29.000 | + | "#tracks in acceptance" | 99 | 739 | 7.4646 | 5.0459 | 0.0000 | 23.000 | CaloAcceptanceHcalAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#total tracks" | 99 | 6232 | 62.949 | 36.938 | 2.0000 | 152.00 | - | "#tracks in acceptance" | 99 | 4970 | 50.202 | 29.570 | 2.0000 | 121.00 | + | "#total tracks" | 99 | 6226 | 62.889 | 36.913 | 2.0000 | 151.00 | + | "#tracks in acceptance" | 99 | 4968 | 50.182 | 29.541 | 2.0000 | 120.00 | CaloFutureClusterCovarianceAlg INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# clusters" | 19746 | @@ -54,15 +54,15 @@ CaloFutureClusterCovarianceAlg.E... INFO Number of counters : 3 CaloFutureMergedPi0 INFO Number of counters : 12 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cluster without 2nd seed found" | 333 | 0 |( 0.000000 +- 0.000000)% | - | "Corrected energy" | 666 | 6577553 | 9876.2 | 10909.0 | 123.53 | 80960.0 | + | "Corrected energy" | 666 | 6591542 | 9897.2 | 10923.0 | 132.22 | 81078.0 | |*"Fails to set covariance" | 666 | 0 |( 0.000000 +- 0.000000)% | |*"Fails to set spread" | 666 | 0 |( 0.000000 +- 0.000000)% | |*"Fails to tag(E) cluster (1)" | 333 | 0 |( 0.000000 +- 0.000000)% | |*"Fails to tag(E) cluster (2)" | 333 | 0 |( 0.000000 +- 0.000000)% | - | "Photon Delta(E)" | 666 | -277000.8 | -415.92 | 528.59 | -4085.2 | 1781.4 | + | "Photon Delta(E)" | 666 | -263011.9 | -394.91 | 520.50 | -4085.2 | 1899.2 | | "Photon Delta(X)" | 666 | 204.618 | 0.30723 | 13.760 | -47.731 | 22.325 | | "Photon Delta(Y)" | 666 | -115.2654 | -0.17307 | 13.248 | -28.424 | 22.326 | - | "Photon Delta(Z)" | 666 | 50984.77 | 76.554 | 12.222 | 5.3984 | 112.68 | + | "Photon Delta(Z)" | 666 | 51015.18 | 76.599 | 12.200 | 5.3984 | 112.68 | | "clusters => mergedPi0s" | 100 | 333 | 3.3300 | | "clusters => splitClusters" | 100 | 666 | 6.6600 | CaloFutureMergedPi0.CaloFutureEC... INFO Number of counters : 6 @@ -70,9 +70,9 @@ CaloFutureMergedPi0.CaloFutureEC... INFO Number of counters : 6 | " Inner" | 148 | 147.3767 | 0.99579 | 0.024469 | 0.96608 | 1.0696 | | " Middle" | 112 | 112.4963 | 1.0044 | 0.027526 | 0.97689 | 1.1149 | | " Outer" | 406 | 404.8794 | 0.99724 | 0.017642 | 0.97407 | 1.0995 | - | "Pileup offset" | 666 | 234628.3 | 352.29 | 375.13 | 1.7860 | 2523.7 | - | "Pileup scale" | 666 | 4414 | 6.6276 | 2.1726 | 1.0000 | 11.000 | - | "Pileup subtracted ratio" | 666 | 635.0324 | 0.95350 | 0.047841 | 0.29252 | 0.99903 | + | "Pileup offset" | 666 | 220667.4 | 331.33 | 356.63 | 1.7860 | 2523.7 | + | "Pileup scale" | 666 | 4134 | 6.2072 | 1.9519 | 1.0000 | 12.000 | + | "Pileup subtracted ratio" | 666 | 636.8174 | 0.95618 | 0.044457 | 0.37115 | 0.99903 | CaloFutureMergedPi0.EcalCovariance INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "parameter updated" | 2 | @@ -81,93 +81,89 @@ CaloFutureMergedPi0.EcalSpread INFO Number of counters : 3 | "Corrected Clusters: # cells " | 90 | 530 | 5.8889 | 1.8101 | 3.0000 | 9.0000 | | "Corrected Clusters: ET" | 90 | 92806.98 | 1031.2 | 1224.0 | 33.600 | 9770.2 | | "Corrected Clusters: size ratio" | 90 | 38.31051 | 0.42567 | 0.37492 | 0.028376 | 1.9634 | -CaloHypoPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 60 | 58964 | 982.73 | - | "# PackedData" | 60 | 751 | 12.517 | CaloSelectiveBremMatchAlg_Downst... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 99 | 245 | 2.4747 | 2.6793 | 0.0000 | 15.000 | - | "average chi2" | 245 | 1219.455 | 4.9774 | 7.1502 | 0.015062 | 53.600 | - | "average energy (track based)" | 768 | 63120.5 | 82.188 | 256.78 | 0.0000 | 3847.2 | + | "#links in table" | 99 | 244 | 2.4646 | 2.6716 | 0.0000 | 15.000 | + | "average chi2" | 244 | 1215.715 | 4.9824 | 7.1623 | 0.015062 | 53.600 | + | "average energy (track based)" | 770 | 62039.78 | 80.571 | 253.11 | 0.0000 | 3847.2 | CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 99 | 1712 | 17.293 | 15.878 | 0.0000 | 59.000 | - | "average chi2" | 1712 | 1598.799 | 0.93388 | 1.8355 | 3.0299e-06 | 32.043 | - | "average energy (track based)" | 4443 | 71100.67 | 16.003 | 49.059 | 0.0000 | 822.33 | + | "#links in table" | 99 | 1709 | 17.263 | 15.826 | 0.0000 | 59.000 | + | "average chi2" | 1709 | 1597.701 | 0.93487 | 1.8373 | 2.9626e-06 | 32.043 | + | "average energy (track based)" | 4438 | 71261.21 | 16.057 | 49.097 | 0.0000 | 822.33 | CaloSelectiveElectronMatchAlg_Do... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 99 | 729 | 7.3636 | 5.3719 | 0.0000 | 24.000 | - | "average chi2" | 729 | 29535.37 | 40.515 | 126.41 | 0.0036906 | 2282.2 | + | "#links in table" | 99 | 730 | 7.3737 | 5.3834 | 0.0000 | 24.000 | + | "average chi2" | 730 | 29643.11 | 40.607 | 126.40 | 0.0035368 | 2282.2 | CaloSelectiveElectronMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#above threshold" | 7 | 7 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | - | "#links in table" | 99 | 4583 | 46.293 | 30.411 | 1.0000 | 124.00 | - | "average chi2" | 4583 | 49880.08 | 10.884 | 24.375 | 0.0010812 | 718.42 | + | "#links in table" | 99 | 4584 | 46.303 | 30.407 | 1.0000 | 124.00 | + | "average chi2" | 4584 | 49515.64 | 10.802 | 23.525 | 0.0011236 | 718.42 | CaloSelectiveTrackMatchAlg_Downs... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 100 | 793 | 7.9300 | 5.8979 | 0.0000 | 27.000 | - | "average chi2" | 793 | 611.9637 | 0.77171 | 1.3273 | 0.00067599 | 16.972 | + | "average chi2" | 793 | 611.9636 | 0.77171 | 1.3273 | 0.00067599 | 16.972 | CaloSelectiveTrackMatchAlg_Long INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 4997 | 49.970 | 33.460 | 0.0000 | 135.00 | - | "average chi2" | 4997 | 786.1998 | 0.15733 | 0.27669 | 3.2931e-06 | 6.3379 | + | "#links in table" | 100 | 4993 | 49.930 | 33.412 | 0.0000 | 134.00 | + | "average chi2" | 4993 | 785.5185 | 0.15732 | 0.27678 | 3.2931e-06 | 6.3379 | CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#links in table" | 100 | 2766 | 27.660 | 29.521 | 0.0000 | 271.00 | - | "average chi2" | 2766 | 497.2378 | 0.17977 | 0.36736 | 9.3131e-06 | 8.0981 | + | "#links in table" | 100 | 2769 | 27.690 | 29.610 | 0.0000 | 272.00 | + | "average chi2" | 2769 | 497.632 | 0.17972 | 0.36714 | 9.3131e-06 | 8.0981 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 808 | -153.7505 | -0.19029 | 0.73831 | -8.6620 | 4.7885 | - | "average E/p" | 808 | 48.42672 | 0.059934 | 0.075993 | 0.0000 | 0.88830 | + | "average DLL" | 809 | -154.3241 | -0.19076 | 0.73747 | -8.6620 | 4.7885 | + | "average E/p" | 809 | 48.37474 | 0.059796 | 0.075932 | 0.0000 | 0.88830 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 5256 | -330.853 | -0.062948 | 0.12120 | -4.0428 | 0.91852 | - | "average E/p" | 5256 | 32.85323 | 0.0062506 | 0.010693 | 0.0000 | 0.44431 | + | "average DLL" | 5252 | -330.3949 | -0.062908 | 0.12133 | -4.0428 | 0.91852 | + | "average E/p" | 5252 | 32.90648 | 0.0062655 | 0.010706 | 0.0000 | 0.44431 | CaloTrackToHcalEnergyAlg_Downstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 738 | 2642625 | 3580.8 | 7984.8 | 0.0000 | 97974.0 | + | "energy (calo) associated to track" | 739 | 2642625 | 3575.9 | 7980.4 | 0.0000 | 97974.0 | CaloTrackToHcalEnergyAlg_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "energy (calo) associated to track" | 4970 |3.249471e+07 | 6538.2 | 13310.0 | 0.0000 | 3.3987e+05 | + | "energy (calo) associated to track" | 4968 |3.242604e+07 | 6527.0 | 13270.0 | 0.0000 | 3.3987e+05 | ClassifyPhotonElectronAlg INFO Number of counters : 14 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Electron Delta(E)" | 6281 | -2693991 | -428.91 | 545.73 | -4819.4 | 1104.7 | + | "Electron Delta(E)" | 6281 | -2522645 | -401.63 | 518.98 | -5132.1 | 1339.8 | | "Electron Delta(X)" | 6281 | -1675.706 | -0.26679 | 12.098 | -22.782 | 22.326 | | "Electron Delta(Y)" | 6281 | -1998.812 | -0.31823 | 12.128 | -22.782 | 22.326 | - | "Electron Delta(Z)" | 6281 | 397982.1 | 63.363 | 14.903 | 6.7373 | 126.77 | - | "Electron corrected energy" | 6281 |3.54032e+07 | 5636.6 | 6504.4 | 71.071 | 90970.0 | - | "Electrons pT-rejected after correction" | 109 | - | "Photon Delta(E)" | 11987 | -3185330 | -265.73 | 437.24 | -4855.8 | 2164.3 | + | "Electron Delta(Z)" | 6281 | 398704.6 | 63.478 | 14.846 | 2.7627 | 126.77 | + | "Electron corrected energy" | 6281 |3.557455e+07 | 5663.8 | 6516.9 | 64.216 | 90970.0 | + | "Electrons pT-rejected after correction" | 102 | + | "Photon Delta(E)" | 11987 | -2979993 | -248.60 | 414.45 | -4820.1 | 2233.3 | | "Photon Delta(X)" | 11987 | -3444.692 | -0.28737 | 12.299 | -22.782 | 22.484 | | "Photon Delta(Y)" | 11987 | -226.9208 | -0.018931 | 12.297 | -22.782 | 22.326 | - | "Photon Delta(Z)" | 11987 | 649481.5 | 54.182 | 13.564 | -10.614 | 113.21 | - | "Photon corrected energy" | 11987 |3.976731e+07 | 3317.5 | 5388.4 | 20.160 | 1.1589e+05 | - | "Photons pT-rejected after correction" | 410 | - | "electronHypos" | 100 | 6172 | 61.720 | 36.723 | 0.0000 | 207.00 | - | "photonHypos" | 100 | 11577 | 115.77 | 59.784 | 0.0000 | 251.00 | + | "Photon Delta(Z)" | 11987 | 650880.6 | 54.299 | 13.503 | -10.614 | 113.21 | + | "Photon corrected energy" | 11987 |3.997265e+07 | 3334.7 | 5401.2 | 20.160 | 1.1605e+05 | + | "Photons pT-rejected after correction" | 385 | + | "electronHypos" | 100 | 6179 | 61.790 | 36.794 | 0.0000 | 207.00 | + | "photonHypos" | 100 | 11602 | 116.02 | 59.953 | 0.0000 | 253.00 | ClassifyPhotonElectronAlg.CaloFu... INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | " Inner" | 5335 | 5297.691 | 0.99301 | 0.018536 | 0.96447 | 1.0894 | - | " Middle" | 4920 | 4942.198 | 1.0045 | 0.018445 | 0.97672 | 1.1157 | - | " Outer" | 7952 | 7929.843 | 0.99721 | 0.014845 | 0.97375 | 1.0573 | - | "Pileup offset" | 18207 | 7149812 | 392.70 | 463.95 | 2.7007 | 4783.9 | - | "Pileup scale" | 18268 | 110156 | 6.0300 | 2.3313 | 1.0000 | 11.000 | - | "Pileup subtracted ratio" | 18207 | 15709.11 | 0.86281 | 0.13739 | 0.0015383 | 0.99917 | - | "Skip negative energy correction" | 61 | + | " Inner" | 5336 | 5298.77 | 0.99302 | 0.018571 | 0.96447 | 1.0894 | + | " Middle" | 4924 | 4946.3 | 1.0045 | 0.018450 | 0.97672 | 1.1157 | + | " Outer" | 7968 | 7945.773 | 0.99721 | 0.014836 | 0.97375 | 1.0573 | + | "Pileup offset" | 18228 | 6773275 | 371.59 | 437.84 | 2.7007 | 5218.8 | + | "Pileup scale" | 18268 | 103865 | 5.6856 | 2.1429 | 1.0000 | 12.000 | + | "Pileup subtracted ratio" | 18228 | 15844.06 | 0.86922 | 0.13285 | 0.0015383 | 0.99917 | + | "Skip negative energy correction" | 40 | CloneKillerMatch INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 100 | 6721 | 67.210 | - | "nTracksSelected" | 100 | 6721 | 67.210 | + | "nTracksInput" | 100 | 6696 | 66.960 | + | "nTracksSelected" | 100 | 6696 | 66.960 | CopyParticlesWithPVRelations#1.G... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "IP->(DI)GAMMA" | 64 | + | "IP->(DI)GAMMA" | 67 | CopyParticlesWithPVRelations#2.G... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "IP->(DI)GAMMA" | 1212 | + | "IP->(DI)GAMMA" | 1211 | CopyParticlesWithPVRelations.Gen... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "IP->(DI)GAMMA" | 249 | + | "IP->(DI)GAMMA" | 240 | DeterministicPrescaler INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | @@ -200,75 +196,75 @@ DeterministicPrescaler#9 INFO Number of counters : 1 |*"#accept" | 100 | 100 |( 100.0000 +- 0.000000)% | FilteredPIDElectrons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6232 | 708 |( 11.36072 +- 0.4019780)% | + |*"Cut selection efficiency" | 6226 | 713 |( 11.45198 +- 0.4035758)% | FilteredPIDMuons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6232 | 899 |( 14.42555 +- 0.4450661)% | + |*"Cut selection efficiency" | 6226 | 890 |( 14.29489 +- 0.4435977)% | FilteredPIDkaons INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6232 | 2296 |( 36.84211 +- 0.6110438)% | + |*"Cut selection efficiency" | 6226 | 2296 |( 36.87761 +- 0.6114607)% | FunctionalChargedProtoParticleMaker INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CreatedProtos" | 7235 | + | "CreatedProtos" | 7231 | FunctionalParticleMaker INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 1003 | 1003 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7235 | 1003 |( 13.86317 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 496 | 5.0101 | 3.3590 | 0.0000 | 17.000 | - | "Nb created particles" | 99 | 507 | 5.1212 | 3.7960 | 0.0000 | 17.000 | + |*"# passed ProtoParticle filter" | 1005 | 1005 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7231 | 1005 |( 13.89849 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 497 | 5.0202 | 3.3514 | 0.0000 | 17.000 | + | "Nb created particles" | 99 | 508 | 5.1313 | 3.7943 | 0.0000 | 17.000 | FunctionalParticleMaker#1 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 1003 | 911 |( 90.82752 +- 0.9113846)% | - |*"# passed Track filter" | 7235 | 1003 |( 13.86317 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 456 | 4.6061 | 3.2030 | 0.0000 | 17.000 | - | "Nb created particles" | 99 | 455 | 4.5960 | 3.4463 | 0.0000 | 13.000 | + |*"# passed ProtoParticle filter" | 1005 | 913 |( 90.84577 +- 0.9096623)% | + |*"# passed Track filter" | 7231 | 1005 |( 13.89849 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 457 | 4.6162 | 3.1995 | 0.0000 | 17.000 | + | "Nb created particles" | 99 | 456 | 4.6061 | 3.4431 | 0.0000 | 13.000 | FunctionalParticleMaker#2 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6232 | 5944 |( 95.37869 +- 0.2659466)% | - |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 2957 | 29.869 | 17.700 | 0.0000 | 74.000 | - | "Nb created particles" | 99 | 2987 | 30.172 | 18.015 | 0.0000 | 73.000 | + |*"# passed ProtoParticle filter" | 6226 | 5937 |( 95.35818 +- 0.2666360)% | + |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 2952 | 29.818 | 17.719 | 0.0000 | 74.000 | + | "Nb created particles" | 99 | 2985 | 30.152 | 17.978 | 0.0000 | 73.000 | FunctionalParticleMaker#3 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6232 | 6232 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 3096 | 31.273 | 18.643 | 1.0000 | 78.000 | - | "Nb created particles" | 99 | 3136 | 31.677 | 19.025 | 1.0000 | 75.000 | + |*"# passed ProtoParticle filter" | 6226 | 6226 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 3092 | 31.232 | 18.655 | 1.0000 | 78.000 | + | "Nb created particles" | 99 | 3134 | 31.657 | 18.982 | 1.0000 | 75.000 | FunctionalParticleMaker#4 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6232 | 5944 |( 95.37869 +- 0.2659466)% | - |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 2957 | 29.869 | 17.700 | 0.0000 | 74.000 | - | "Nb created particles" | 99 | 2987 | 30.172 | 18.015 | 0.0000 | 73.000 | + |*"# passed ProtoParticle filter" | 6226 | 5937 |( 95.35818 +- 0.2666360)% | + |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 2952 | 29.818 | 17.719 | 0.0000 | 74.000 | + | "Nb created particles" | 99 | 2985 | 30.152 | 17.978 | 0.0000 | 73.000 | FunctionalParticleMaker#5 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 43 | 42 |( 97.67442 +- 2.298381)% | - |*"# passed Track filter" | 50 | 43 |( 86.00000 +- 4.907138)% | - | "Nb created anti-particles" | 1 | 23 | 23.000 | 0.0000 | 23.000 | 23.000 | + |*"# passed ProtoParticle filter" | 42 | 41 |( 97.61905 +- 2.352437)% | + |*"# passed Track filter" | 50 | 42 |( 84.00000 +- 5.184593)% | + | "Nb created anti-particles" | 1 | 22 | 22.000 | 0.0000 | 22.000 | 22.000 | | "Nb created particles" | 1 | 19 | 19.000 | 0.0000 | 19.000 | 19.000 | FunctionalParticleMaker#6 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6232 | 6232 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 3096 | 31.273 | 18.643 | 1.0000 | 78.000 | - | "Nb created particles" | 99 | 3136 | 31.677 | 19.025 | 1.0000 | 75.000 | + |*"# passed ProtoParticle filter" | 6226 | 6226 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 3092 | 31.232 | 18.655 | 1.0000 | 78.000 | + | "Nb created particles" | 99 | 3134 | 31.657 | 18.982 | 1.0000 | 75.000 | FunctionalParticleMaker#7 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6232 | 6232 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 3096 | 31.273 | 18.643 | 1.0000 | 78.000 | - | "Nb created particles" | 99 | 3136 | 31.677 | 19.025 | 1.0000 | 75.000 | + |*"# passed ProtoParticle filter" | 6226 | 6226 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 3092 | 31.232 | 18.655 | 1.0000 | 78.000 | + | "Nb created particles" | 99 | 3134 | 31.657 | 18.982 | 1.0000 | 75.000 | FunctionalParticleMaker#8 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6232 | 6232 |( 100.0000 +- 0.000000)% | - |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 3096 | 31.273 | 18.643 | 1.0000 | 78.000 | - | "Nb created particles" | 99 | 3136 | 31.677 | 19.025 | 1.0000 | 75.000 | + |*"# passed ProtoParticle filter" | 6226 | 6226 |( 100.0000 +- 0.000000)% | + |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 3092 | 31.232 | 18.655 | 1.0000 | 78.000 | + | "Nb created particles" | 99 | 3134 | 31.657 | 18.982 | 1.0000 | 75.000 | FunctionalParticleMaker#9 INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed ProtoParticle filter" | 6232 | 453 |( 7.268935 +- 0.3288776)% | - |*"# passed Track filter" | 7235 | 6232 |( 86.13683 +- 0.4062622)% | - | "Nb created anti-particles" | 99 | 229 | 2.3131 | 3.4042 | 0.0000 | 17.000 | + |*"# passed ProtoParticle filter" | 6226 | 454 |( 7.292001 +- 0.3295167)% | + |*"# passed Track filter" | 7231 | 6226 |( 86.10151 +- 0.4068085)% | + | "Nb created anti-particles" | 99 | 230 | 2.3232 | 3.4196 | 0.0000 | 17.000 | | "Nb created particles" | 99 | 224 | 2.2626 | 2.6269 | 0.0000 | 14.000 | FutureEcalZSup INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -278,69 +274,69 @@ FutureHcalZSup INFO Number of counters : 1 |*"No bank found" | 100 | 0 |( 0.000000 +- 0.000000)% | FutureNeutralProtoPAlg INFO Number of counters : 28 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "CaloClusterCode for Photon" | 11577 | 1009534 | 87.202 | 13.608 | 21.000 | 98.000 | + | "CaloClusterCode for Photon" | 11602 | 1011467 | 87.180 | 13.622 | 21.000 | 98.000 | | "CaloClusterCode for Pi0Merged" | 333 | 30034 | 90.192 | 10.115 | 60.000 | 98.000 | - | "CaloClusterFrac for Photon" | 6718 | 5865.522 | 0.87311 | 0.12905 | 0.34032 | 1.2615 | + | "CaloClusterFrac for Photon" | 6741 | 5882.166 | 0.87260 | 0.12929 | 0.34032 | 1.2615 | | "CaloClusterFrac for Pi0Merged" | 246 | 238.7854 | 0.97067 | 0.043704 | 0.73766 | 1.0001 | - | "CaloNeutralE19 for Photon" | 11577 | 7132.022 | 0.61605 | 0.19143 | 0.17070 | 1.4672 | + | "CaloNeutralE19 for Photon" | 11602 | 7149.142 | 0.61620 | 0.19139 | 0.17070 | 1.4672 | | "CaloNeutralE19 for Pi0Merged" | 333 | 174.3879 | 0.52369 | 0.17412 | 0.21030 | 0.95546 | - | "CaloNeutralE49 for Photon" | 11577 | 10503.42 | 0.90727 | 0.10213 | 0.52796 | 1.4171 | + | "CaloNeutralE49 for Photon" | 11602 | 10526.2 | 0.90727 | 0.10210 | 0.52796 | 1.4171 | | "CaloNeutralE49 for Pi0Merged" | 333 | 289.6499 | 0.86982 | 0.088884 | 0.60920 | 1.0053 | - | "CaloNeutralEcal for Photon" | 11577 |4.264976e+07 | 3684.0 | 5667.3 | 149.80 | 1.1381e+05 | + | "CaloNeutralEcal for Photon" | 11602 |4.26693e+07 | 3677.8 | 5662.8 | 149.80 | 1.1381e+05 | | "CaloNeutralEcal for Pi0Merged" | 333 | 6538368 | 19635.0 | 17804.0 | 4788.6 | 1.1381e+05 | - | "CaloNeutralHcal2Ecal for Photon" | 11577 | 0 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | + | "CaloNeutralHcal2Ecal for Photon" | 11602 | 0 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | | "CaloNeutralHcal2Ecal for Pi0Merged" | 333 | 0 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | - | "CaloNeutralID for Photon" | 11577 |4.430716e+08 | 38272.0 | 3580.5 | 33152.0 | 44151.0 | + | "CaloNeutralID for Photon" | 11602 |4.440085e+08 | 38270.0 | 3578.0 | 33152.0 | 44151.0 | | "CaloNeutralID for Pi0Merged" | 333 |1.243234e+07 | 37334.0 | 3384.2 | 33294.0 | 43862.0 | - | "ClusterAsX for Photon" | 11577 | 19.52105 | 0.0016862 | 0.19772 | -0.74409 | 0.72304 | - | "ClusterAsY for Photon" | 11577 | 50.73926 | 0.0043828 | 0.19779 | -0.73521 | 0.74223 | - | "IsNotH for Photon" | 11577 | 2874.693 | 0.24831 | 0.48636 | -1.0000 | 0.99502 | + | "ClusterAsX for Photon" | 11602 | 22.2909 | 0.0019213 | 0.19759 | -0.74409 | 0.72304 | + | "ClusterAsY for Photon" | 11602 | 46.92702 | 0.0040447 | 0.19778 | -0.73521 | 0.74223 | + | "IsNotH for Photon" | 11602 | 2881.242 | 0.24834 | 0.48657 | -1.0000 | 0.99502 | | "IsNotH for Pi0Merged" | 333 | 93.80865 | 0.28171 | 0.32406 | 0.00041639 | 0.99454 | - | "IsPhoton for Photon" | 11577 | 11562.31 | 0.99873 | 0.031868 | 7.5866e-05 | 1.0000 | - | "IsPhoton for Pi0Merged" | 333 | 248.6659 | 0.74674 | 0.39666 | 1.8754e-06 | 1.0000 | - | "IsPhotonXGB for Photon" | 11577 | 11565.91 | 0.99904 | 0.027121 | 0.00045227 | 1.0000 | - | "IsPhotonXGB for Pi0Merged" | 333 | 281.1372 | 0.84426 | 0.29048 | 5.6350e-05 | 1.0000 | - | "Neutral Protos" | 100 | 12576 | 125.76 | 68.840 | 0.0000 | 292.00 | + | "IsPhoton for Photon" | 11602 | 11587.31 | 0.99873 | 0.031835 | 7.4790e-05 | 1.0000 | + | "IsPhoton for Pi0Merged" | 333 | 247.1585 | 0.74222 | 0.39835 | 1.8754e-06 | 1.0000 | + | "IsPhotonXGB for Photon" | 11602 | 11590.91 | 0.99904 | 0.027092 | 0.00045227 | 1.0000 | + | "IsPhotonXGB for Pi0Merged" | 333 | 279.5708 | 0.83955 | 0.29458 | 5.6350e-05 | 1.0000 | + | "Neutral Protos" | 100 | 12601 | 126.01 | 69.002 | 0.0000 | 295.00 | | "Neutral Protos from MergedPi0s" | 100 | 333 | 3.3300 | 3.7471 | 0.0000 | 16.000 | - | "Neutral Protos from Photons" | 100 | 11577 | 115.77 | 59.784 | 0.0000 | 251.00 | + | "Neutral Protos from Photons" | 100 | 11602 | 116.02 | 59.953 | 0.0000 | 253.00 | | "Neutral Protos from SplitPhotons" | 100 | 666 | 6.6600 | 7.4943 | 0.0000 | 32.000 | - | "ShowerShape for Photon" | 11577 |4.305632e+07 | 3719.1 | 3318.8 | 222.59 | 30414.0 | + | "ShowerShape for Photon" | 11602 |4.313979e+07 | 3718.3 | 3317.1 | 222.59 | 30414.0 | | "ShowerShape for Pi0Merged" | 333 | 2426523 | 7286.9 | 6224.2 | 349.00 | 30288.0 | FutureNeutralProtoPAlg.CaloFutur... INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "no cluster" | 666 | 666 | 1.0000 | 0.0000 | 1.0000 | 1.0000 | Generic_Bs2JPsiPhiCombiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 45 | 5 |( 11.11111 +- 4.684856)% | - |*"# passed CombinationCut" | 835 | 198 |( 23.71257 +- 1.471881)% | - |*"# passed CompositeCut" | 198 | 30 |( 15.15152 +- 2.548106)% | - |*"# passed vertex fit" | 198 | 198 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 45 | 158 | 3.5111 | - | "Input2 size" | 45 | 173 | 3.8444 | + |*"# passed" | 44 | 6 |( 13.63636 +- 5.173547)% | + |*"# passed CombinationCut" | 778 | 172 |( 22.10797 +- 1.487754)% | + |*"# passed CompositeCut" | 172 | 29 |( 16.86047 +- 2.854791)% | + |*"# passed vertex fit" | 172 | 172 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 44 | 155 | 3.5227 | + | "Input2 size" | 44 | 162 | 3.6818 | Generic_Bs2JPsiPhiCombiner#1 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 30 | 5 |( 16.66667 +- 6.804138)% | - |*"# passed CombinationCut" | 370 | 69 |( 18.64865 +- 2.024908)% | - |*"# passed CompositeCut" | 69 | 15 |( 21.73913 +- 4.965567)% | - |*"# passed vertex fit" | 69 | 69 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 30 | 75 | 2.5000 | - | "Input2 size" | 30 | 137 | 4.5667 | + |*"# passed" | 31 | 4 |( 12.90323 +- 6.021010)% | + |*"# passed CombinationCut" | 355 | 66 |( 18.59155 +- 2.064802)% | + |*"# passed CompositeCut" | 66 | 13 |( 19.69697 +- 4.895462)% | + |*"# passed vertex fit" | 66 | 66 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 31 | 78 | 2.5161 | + | "Input2 size" | 31 | 133 | 4.2903 | Generic_Hyperons_LambdaFromHyper... INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 5 |( 5.050505 +- 2.200879)% | |*"# passed CombinationCut" | 514 | 6 |( 1.167315 +- 0.4737648)% | |*"# passed CompositeCut" | 6 | 5 |( 83.33333 +- 15.21452)% | |*"# passed vertex fit" | 6 | 6 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 123 | 1.2424 | - | "Input2 size" | 99 | 543 | 5.4848 | + | "Input1 size" | 99 | 122 | 1.2323 | + | "Input2 size" | 99 | 540 | 5.4545 | Generic_Hyperons_Lambda_DD INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 8 |( 8.080808 +- 2.739132)% | - |*"# passed CombinationCut" | 253 | 11 |( 4.347826 +- 1.282104)% | + |*"# passed CombinationCut" | 251 | 11 |( 4.382470 +- 1.292086)% | |*"# passed CompositeCut" | 11 | 8 |( 72.72727 +- 13.42816)% | |*"# passed vertex fit" | 11 | 11 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 50 | 0.50505 | - | "Input2 size" | 99 | 677 | 6.8384 | + | "Input1 size" | 99 | 49 | 0.49495 | + | "Input2 size" | 99 | 679 | 6.8586 | Generic_Hyperons_Oc0ToXimKmPipPi... INFO Number of counters : 5 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 1 | 0 |( 0.000000 +- 0.000000)% | @@ -366,28 +362,28 @@ Generic_Hyperons_Xim_LLL INFO Number of counters : 6 | "Input2 size" | 5 | 58 | 11.600 | Generic_MassConstrJpsi2MuMuMaker INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 45 |( 45.45455 +- 5.004381)% | - |*"# passed CombinationCut" | 38231 | 163 |(0.4263556 +- 0.03332348)% | - |*"# passed CompositeCut" | 163 | 158 |( 96.93252 +- 1.350617)% | - |*"# passed vertex fit" | 163 | 163 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 6232 | 62.949 | - | "Input2 size" | 99 | 899 | 9.0808 | + |*"# passed" | 99 | 44 |( 44.44444 +- 4.994073)% | + |*"# passed CombinationCut" | 37867 | 160 |(0.4225315 +- 0.03333340)% | + |*"# passed CompositeCut" | 160 | 155 |( 96.87500 +- 1.375533)% | + |*"# passed vertex fit" | 160 | 160 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 6226 | 62.889 | + | "Input2 size" | 99 | 890 | 8.9899 | Generic_Phi2KKMaker INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 60 |( 60.60606 +- 4.910833)% | - |*"# passed CombinationCut" | 99490 | 5012 |( 5.037692 +- 0.06934286)% | - |*"# passed CompositeCut" | 5012 | 244 |( 4.868316 +- 0.3039810)% | - |*"# passed vertex fit" | 5012 | 5012 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 6232 | 62.949 | + |*"# passed CombinationCut" | 99126 | 5038 |( 5.082420 +- 0.06976134)% | + |*"# passed CompositeCut" | 5038 | 237 |( 4.704248 +- 0.2982997)% | + |*"# passed vertex fit" | 5038 | 5038 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 6226 | 62.889 | | "Input2 size" | 99 | 2296 | 23.192 | Generic_Pi0ToGammaGamma_Combiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 100 | 40 |( 40.00000 +- 4.898979)% | - |*"# passed CombinationCut" | 21251 | 69 |(0.3246906 +- 0.03902465)% | - |*"# passed CompositeCut" | 69 | 69 |( 100.0000 +- 0.000000)% | - |*"# passed vertex fit" | 69 | 69 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 100 | 1852 | 18.520 | - | "Input2 size" | 100 | 1852 | 18.520 | + |*"# passed" | 100 | 41 |( 41.00000 +- 4.918333)% | + |*"# passed CombinationCut" | 21564 | 73 |(0.3385272 +- 0.03955449)% | + |*"# passed CompositeCut" | 73 | 73 |( 100.0000 +- 0.000000)% | + |*"# passed vertex fit" | 73 | 73 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 100 | 1864 | 18.640 | + | "Input2 size" | 100 | 1864 | 18.640 | GraphClustering INFO Number of counters : 4 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# clusters" | 100 | 19746 | 197.46 | 104.17 | 0.0000 | 463.00 | @@ -396,144 +392,129 @@ GraphClustering INFO Number of counters : 4 | "Negative energy clusters" | 6 | 7 | 1.1667 | 0.37268 | 1.0000 | 2.0000 | Hlt2BsToJpsiPhi_JPsi2ee_PhiToKK INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 30 |( 30.30303 +- 4.618834)% | - |*"# passed CombinationCut" | 30655 | 80 |(0.2609688 +- 0.02913911)% | - |*"# passed CompositeCut" | 80 | 75 |( 93.75000 +- 2.706329)% | - |*"# passed vertex fit" | 80 | 80 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 6232 | 62.949 | - | "Input2 size" | 99 | 708 | 7.1515 | -HltPackedBufferWriter INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Size of serialized data" | 55 | 789542 | 14355.0 | 52793.0 | 894.00 | 3.3636e+05 | + |*"# passed" | 99 | 31 |( 31.31313 +- 4.661037)% | + |*"# passed CombinationCut" | 30836 | 81 |(0.2626800 +- 0.02914831)% | + |*"# passed CompositeCut" | 81 | 78 |( 96.29630 +- 2.098362)% | + |*"# passed vertex fit" | 81 | 81 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 6226 | 62.889 | + | "Input2 size" | 99 | 713 | 7.2020 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Events without Tracks" | 1 | 0 | 0.0000 | - | "Nb of Produced Tracks" | 99 | 6232 | 62.949 | + | "Nb of Produced Tracks" | 99 | 6226 | 62.889 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Events without Tracks" | 1 | 0 | 0.0000 | - | "Nb of Produced Tracks" | 99 | 1003 | 10.131 | + | "Nb of Produced Tracks" | 99 | 1005 | 10.152 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Events without Tracks" | 1 | 0 | 0.0000 | - | "Nb of Produced Tracks" | 99 | 3687 | 37.242 | + | "Nb of Produced Tracks" | 99 | 3691 | 37.283 | LHCb__MDF__IOAlg INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#banks in raw event" | 100 | 102500 | 1025.0 | 0.0000 | 1025.0 | 1025.0 | LHCb__Phys__ParticleMakers__Phot... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Confidence Level" | 7132 | 2613.36 | 0.36643 | 0.34313 | 6.8755e-05 | 0.99404 | - | "Created photons" | 11577 | - | "Selected photons" | 100 | 7132 | 71.320 | 40.387 | 0.0000 | 174.00 | + | "Confidence Level" | 7180 | 2622.937 | 0.36531 | 0.34319 | 6.8755e-05 | 0.99404 | + | "Created photons" | 11602 | + | "Selected photons" | 100 | 7180 | 71.800 | 40.915 | 0.0000 | 181.00 | MuonIDHlt2AlgDownstream INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "BgLL" | 75 | -77.31328 | -1.0308 | 1.3023 | -6.5440 | 0.0000 | | "MuLL" | 75 | -564.9871 | -7.5332 | 3.8190 | -11.513 | -0.091876 | | "muonMVAStat" | 75 | -24.75119 | -0.33002 | 1.1585 | -2.3500 | 3.7946 | - |*"nInAcceptance" | 1003 | 656 |( 65.40379 +- 1.501984)% | - |*"nIsMuon" | 1003 | 75 |( 7.477567 +- 0.8305260)% | - |*"nIsMuonTight" | 1003 | 51 |( 5.084746 +- 0.6936688)% | - |*"nMomentumCut" | 1003 | 715 |( 71.28614 +- 1.428558)% | + |*"nInAcceptance" | 1005 | 656 |( 65.27363 +- 1.501812)% | + |*"nIsMuon" | 1005 | 75 |( 7.462687 +- 0.8289398)% | + |*"nIsMuonTight" | 1005 | 51 |( 5.074627 +- 0.6923253)% | + |*"nMomentumCut" | 1005 | 715 |( 71.14428 +- 1.429233)% | MuonIDHlt2AlgLong INFO Number of counters : 7 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "BgLL" | 453 | -403.2237 | -0.89012 | 1.1702 | -7.4449 | 0.0000 | - | "MuLL" | 453 | -3547.422 | -7.8310 | 3.5739 | -11.513 | -0.036424 | - | "muonMVAStat" | 453 | -165.6918 | -0.36577 | 1.2683 | -2.6834 | 4.5537 | - |*"nInAcceptance" | 6232 | 4996 |( 80.16688 +- 0.5051022)% | - |*"nIsMuon" | 6232 | 453 |( 7.268935 +- 0.3288776)% | - |*"nIsMuonTight" | 6232 | 276 |( 4.428755 +- 0.2606098)% | - |*"nMomentumCut" | 6232 | 5371 |( 86.18421 +- 0.4371072)% | -MuonPIDPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 7 | 16898 | 2414.0 | - | "# PackedData" | 7 | 278 | 39.714 | + | "BgLL" | 454 | -404.3524 | -0.89064 | 1.1690 | -7.4449 | 0.0000 | + | "MuLL" | 454 | -3552.636 | -7.8252 | 3.5721 | -11.513 | -0.036424 | + | "muonMVAStat" | 454 | -165.9461 | -0.36552 | 1.2669 | -2.6834 | 4.5537 | + |*"nInAcceptance" | 6226 | 4999 |( 80.29232 +- 0.5041389)% | + |*"nIsMuon" | 6226 | 454 |( 7.292001 +- 0.3295167)% | + |*"nIsMuonTight" | 6226 | 277 |( 4.449084 +- 0.2613053)% | + |*"nMomentumCut" | 6226 | 5373 |( 86.29939 +- 0.4357820)% | MuonPIDV2ToMuonTracks_Downstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 99 | 1003 | 10.131 | + | "Nb of input v2 MuonPIDs" | 99 | 1005 | 10.152 | MuonPIDV2ToMuonTracks_Long INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of input v2 MuonPIDs" | 99 | 6232 | 62.949 | + | "Nb of input v2 MuonPIDs" | 99 | 6226 | 62.889 | Muontopo_unfiltered_twobody_merger INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# input particles" | 396 | 33 | 0.083333 | - | "# output particles" | 33 | 0 | 0.0000 | -P2VRelationPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 90 | 12788 | 142.09 | - | "# PackedData" | 90 | 90 | 1.0000 | -ParticlePacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 166 | 85850 | 517.17 | - | "# PackedData" | 166 | 427 | 2.5723 | + | "# input particles" | 396 | 34 | 0.085859 | + | "# output particles" | 34 | 0 | 0.0000 | ParticleRangeFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 7132 | 36 |(0.5047672 +- 0.08391528)% | + |*"Cut selection efficiency" | 7180 | 38 |(0.5292479 +- 0.08562785)% | ParticleRangeFilter#1 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 7132 | 11 |(0.1542344 +- 0.04646756)% | + |*"Cut selection efficiency" | 7180 | 12 |(0.1671309 +- 0.04820621)% | ParticleRangeFilter#10 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 42 | 11 |( 26.19048 +- 6.784272)% | + |*"Cut selection efficiency" | 41 | 11 |( 26.82927 +- 6.919603)% | ParticleRangeFilter#11 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 113 | 0 |( 0.000000 +- 0.000000)% | ParticleRangeFilter#12 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 33 | 0 |( 0.000000 +- 0.000000)% | + |*"Cut selection efficiency" | 34 | 0 |( 0.000000 +- 0.000000)% | ParticleRangeFilter#13 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 380 | 12 |( 3.157895 +- 0.8970964)% | + |*"Cut selection efficiency" | 401 | 12 |( 2.992519 +- 0.8508419)% | ParticleRangeFilter#2 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 7132 | 1852 |( 25.96747 +- 0.5191830)% | + |*"Cut selection efficiency" | 7180 | 1864 |( 25.96100 +- 0.5174028)% | ParticleRangeFilter#3 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 1003 | 677 |( 67.49751 +- 1.478944)% | + |*"Cut selection efficiency" | 1005 | 679 |( 67.56219 +- 1.476708)% | ParticleRangeFilter#4 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 911 | 50 |( 5.488474 +- 0.7545865)% | + |*"Cut selection efficiency" | 913 | 49 |( 5.366922 +- 0.7458453)% | ParticleRangeFilter#5 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 561 | 23 |( 4.099822 +- 0.8371644)% | ParticleRangeFilter#6 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 6232 | 543 |( 8.713094 +- 0.3572537)% | + |*"Cut selection efficiency" | 6226 | 540 |( 8.673305 +- 0.3566865)% | ParticleRangeFilter#7 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 5944 | 123 |( 2.069314 +- 0.1846431)% | + |*"Cut selection efficiency" | 5937 | 122 |( 2.054910 +- 0.1841214)% | ParticleRangeFilter#8 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 365 | 58 |( 15.89041 +- 1.913568)% | + |*"Cut selection efficiency" | 364 | 58 |( 15.93407 +- 1.918327)% | ParticleRangeFilter#9 INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 42 | 1 |( 2.380952 +- 2.352437)% | + |*"Cut selection efficiency" | 41 | 1 |( 2.439024 +- 2.409097)% | ParticleWithBremMaker INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of particles corrected with brem" | 6232 | 0 | 0.0000 | 0.0000 | 4.2950e+09 | 0.0000 | + | "Nb of particles corrected with brem" | 6226 | 0 | 0.0000 | 0.0000 | 4.2950e+09 | 0.0000 | ParticleWithBremMaker.SelectiveB... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Delta(E)" | 412 | 1539515 | 3736.7 | 4829.3 | 8.1463 | 31572.0 | - | "Nb photons added to single electrons" | 6232 | 412 | 0.066110 | 0.24847 | 0.0000 | 1.0000 | + | "Delta(E)" | 412 | 1539209 | 3735.9 | 4839.6 | 8.1463 | 32035.0 | + | "Nb photons added to single electrons" | 6226 | 412 | 0.066174 | 0.24859 | 0.0000 | 1.0000 | PrCloneKillerDown INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "nTracksInput" | 100 | 1537 | 15.370 | - | "nTracksSelected" | 100 | 1475 | 14.750 | + | "nTracksInput" | 100 | 1539 | 15.390 | + | "nTracksSelected" | 100 | 1478 | 14.780 | PrForwardTrackingVelo INFO Number of counters : 10 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Accepted input tracks" | 99 | 7365 | 74.394 | + | "Accepted input tracks" | 99 | 7373 | 74.475 | | "Created long tracks" | 99 | 463 | 4.6768 | - | "Input tracks" | 99 | 7811 | 78.899 | - | "Number of candidate bins per track" | 7365 | 22388 | 3.0398 | 7.2740 | 0.0000 | 67.000 | - | "Number of complete candidates/track 1st Loop" | 4123 | 297 | 0.072035 | 0.26411 | 0.0000 | 2.0000 | - | "Number of complete candidates/track 2nd Loop" | 3943 | 184 | 0.046665 | 0.21212 | 0.0000 | 2.0000 | - | "Number of x candidates per track 1st Loop" | 4123 | 2208 | 0.53553 | 0.92550 | - | "Number of x candidates per track 2nd Loop" | 3943 | 7655 | 1.9414 | 3.2304 | - | "Percentage second loop execution" | 4123 | 3943 | 0.95634 | + | "Input tracks" | 99 | 7802 | 78.808 | + | "Number of candidate bins per track" | 7373 | 22592 | 3.0642 | 7.3487 | 0.0000 | 67.000 | + | "Number of complete candidates/track 1st Loop" | 4133 | 298 | 0.072103 | 0.26421 | 0.0000 | 2.0000 | + | "Number of complete candidates/track 2nd Loop" | 3952 | 183 | 0.046306 | 0.21135 | 0.0000 | 2.0000 | + | "Number of x candidates per track 1st Loop" | 4133 | 2220 | 0.53714 | 0.92699 | + | "Number of x candidates per track 2nd Loop" | 3952 | 7683 | 1.9441 | 3.2356 | + | "Percentage second loop execution" | 4133 | 3952 | 0.95621 | | "Removed duplicates" | 99 | 12 | 0.12121 | PrForwardTrackingVelo.PrAddUTHit... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#UT hits added" | 341 | 1318 | 3.8651 | - | "#tracks with hits added" | 341 | + | "#UT hits added" | 340 | 1314 | 3.8647 | + | "#tracks with hits added" | 340 | PrHybridSeeding INFO Number of counters : 21 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Created T2x1 three-hit combinations in case 0" | 162447 | 101422 | 0.62434 | 0.61615 | 0.0000 | 5.0000 | @@ -560,39 +541,39 @@ PrHybridSeeding INFO Number of counters : 21 PrKalmanFilterForward INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 41 | - | "chi2 cut" | 118 | + | "chi2 cut" | 119 | | "nIterations" | 463 | 1189 | 2.5680 | - | "nOutlierIterations" | 422 | 384 | 0.90995 | + | "nOutlierIterations" | 422 | 385 | 0.91232 | | "nTracksInput" | 100 | 463 | 4.6300 | - | "nTracksOutput" | 100 | 304 | 3.0400 | + | "nTracksOutput" | 100 | 303 | 3.0300 | PrKalmanFilterMatch INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Pre outlier chi2 cut" | 131 | - | "chi2 cut" | 638 | - | "nIterations" | 6721 | 14592 | 2.1711 | - | "nOutlierIterations" | 6590 | 3614 | 0.54841 | - | "nTracksInput" | 100 | 6721 | 67.210 | - | "nTracksOutput" | 100 | 5952 | 59.520 | + | "Pre outlier chi2 cut" | 124 | + | "chi2 cut" | 636 | + | "nIterations" | 6696 | 14518 | 2.1682 | + | "nOutlierIterations" | 6572 | 3594 | 0.54687 | + | "nTracksInput" | 100 | 6696 | 66.960 | + | "nTracksOutput" | 100 | 5936 | 59.360 | PrKalmanFilter_Downstream INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Pre outlier chi2 cut" | 164 | - | "chi2 cut" | 308 | - | "nIterations" | 1475 | 3771 | 2.5566 | - | "nOutlierIterations" | 1311 | 860 | 0.65599 | - | "nTracksInput" | 100 | 1475 | 14.750 | - | "nTracksOutput" | 100 | 1003 | 10.030 | + | "chi2 cut" | 309 | + | "nIterations" | 1478 | 3778 | 2.5562 | + | "nOutlierIterations" | 1314 | 861 | 0.65525 | + | "nTracksInput" | 100 | 1478 | 14.780 | + | "nTracksOutput" | 100 | 1005 | 10.050 | PrLongLivedTracking INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#Downstream tracks made" | 100 | 1537 | 15.370 | + | "#Downstream tracks made" | 100 | 1539 | 15.390 | PrMatchNN INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#MatchingChi2" | 99 | 109022.2 | 1101.2 | - | "#MatchingMLP" | 6721 | 5687.136 | 0.84617 | - | "#MatchingTracks" | 99 | 6721 | 67.889 | + | "#MatchingChi2" | 99 | 108620.6 | 1097.2 | + | "#MatchingMLP" | 6696 | 5669.974 | 0.84677 | + | "#MatchingTracks" | 99 | 6696 | 67.636 | PrMatchNN.PrAddUTHitsTool INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "#UT hits added" | 5858 | 23375 | 3.9903 | - | "#tracks with hits added" | 5858 | + | "#UT hits added" | 5839 | 23304 | 3.9911 | + | "#tracks with hits added" | 5839 | PrStorePrUTHits INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#banks" | 100 | 18000 | 180.00 | @@ -623,37 +604,21 @@ PrStoreSciFiHits INFO Number of counters : 25 | "Hits in T3X1" | 400 | 27561 | 68.903 | 34.995 | 6.0000 | 227.00 | | "Hits in T3X2" | 400 | 29919 | 74.797 | 39.134 | 6.0000 | 230.00 | | "Total number of hits" | 100 | 325154 | 3251.5 | 1616.5 | 430.00 | 9578.0 | -ProtoParticlePacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 61 | 189954 | 3114.0 | - | "# PackedData" | 61 | 845 | 13.852 | -RecSummaryPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 55 | 2530 | 46.000 | - | "# PackedData" | 55 | 330 | 6.0000 | -RecVertexPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 55 | 20952 | 380.95 | - | "# PackedData" | 55 | 329 | 5.9818 | -RichPIDPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 7 | 12758 | 1822.6 | - | "# PackedData" | 7 | 262 | 37.429 | TBTCMatch INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 5928 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 5928 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 5928 | + |*"BadInput" | 5923 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 5923 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 5923 | TBTC_Forward INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 304 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 304 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 304 | + |*"BadInput" | 303 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 303 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 303 | TBTC_down INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"BadInput" | 1003 | 0 |( 0.000000 +- 0.000000)% | - |*"FitFailed" | 1003 | 0 |( 0.000000 +- 0.000000)% | - | "FittedBefore" | 1003 | + |*"BadInput" | 1005 | 0 |( 0.000000 +- 0.000000)% | + |*"FitFailed" | 1005 | 0 |( 0.000000 +- 0.000000)% | + | "FittedBefore" | 1005 | ToolSvc.PPFactoryHybridFactory INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | ToolSvc.TrackFunctorFactory INFO Number of counters : 1 @@ -661,116 +626,108 @@ ToolSvc.TrackFunctorFactory INFO Number of counters : 1 Topo_ThreeBody_Combiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 22 |( 22.22222 +- 4.178341)% | - |*"# passed CombinationCut" | 1491 | 372 |( 24.94970 +- 1.120650)% | - |*"# passed CompositeCut" | 372 | 191 |( 51.34409 +- 2.591442)% | - |*"# passed vertex fit" | 372 | 372 |( 100.0000 +- 0.000000)% | + |*"# passed CombinationCut" | 1498 | 392 |( 26.16822 +- 1.135672)% | + |*"# passed CompositeCut" | 392 | 202 |( 51.53061 +- 2.524198)% | + |*"# passed vertex fit" | 392 | 392 |( 100.0000 +- 0.000000)% | | "Input1 size" | 99 | 113 | 1.1414 | - | "Input2 size" | 99 | 1430 | 14.444 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_ThreeBody_Combiner#1 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 19 |( 19.19192 +- 3.957938)% | - |*"# passed CombinationCut" | 1414 | 346 |( 24.46959 +- 1.143272)% | - |*"# passed CompositeCut" | 346 | 189 |( 54.62428 +- 2.676496)% | - |*"# passed vertex fit" | 346 | 346 |( 100.0000 +- 0.000000)% | + |*"# passed" | 99 | 20 |( 20.20202 +- 4.035299)% | + |*"# passed CombinationCut" | 1457 | 370 |( 25.39465 +- 1.140319)% | + |*"# passed CompositeCut" | 370 | 199 |( 53.78378 +- 2.591922)% | + |*"# passed vertex fit" | 370 | 370 |( 100.0000 +- 0.000000)% | | "Input1 size" | 99 | 113 | 1.1414 | - | "Input2 size" | 99 | 1430 | 14.444 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_TwoBody_Combiner INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 22 |( 22.22222 +- 4.178341)% | - |*"# passed CombinationCut" | 6817 | 369 |( 5.412938 +- 0.2740538)% | - |*"# passed CompositeCut" | 369 | 60 |( 16.26016 +- 1.920947)% | - |*"# passed vertex fit" | 369 | 369 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 1430 | 14.444 | - | "Input2 size" | 99 | 1430 | 14.444 | + |*"# passed" | 99 | 25 |( 25.25253 +- 4.366496)% | + |*"# passed CombinationCut" | 7210 | 375 |( 5.201110 +- 0.2615062)% | + |*"# passed CompositeCut" | 375 | 61 |( 16.26667 +- 1.905824)% | + |*"# passed vertex fit" | 375 | 375 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 1458 | 14.727 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_TwoBody_Combiner#1 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 12 |( 12.12121 +- 3.280178)% | - |*"# passed CombinationCut" | 3706 | 190 |( 5.126821 +- 0.3622790)% | - |*"# passed CompositeCut" | 190 | 22 |( 11.57895 +- 2.321323)% | - |*"# passed vertex fit" | 190 | 190 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 1430 | 14.444 | - | "Input2 size" | 99 | 1430 | 14.444 | + |*"# passed" | 99 | 11 |( 11.11111 +- 3.158529)% | + |*"# passed CombinationCut" | 3825 | 180 |( 4.705882 +- 0.3424032)% | + |*"# passed CompositeCut" | 180 | 21 |( 11.66667 +- 2.392762)% | + |*"# passed vertex fit" | 180 | 180 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 1458 | 14.727 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_TwoBody_Combiner#2 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 18 |( 18.18182 +- 3.876377)% | - |*"# passed CombinationCut" | 3143 | 189 |( 6.013363 +- 0.4240524)% | - |*"# passed CompositeCut" | 189 | 31 |( 16.40212 +- 2.693498)% | - |*"# passed vertex fit" | 189 | 189 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 1430 | 14.444 | - | "Input2 size" | 99 | 1430 | 14.444 | + |*"# passed" | 99 | 17 |( 17.17172 +- 3.790344)% | + |*"# passed CombinationCut" | 3374 | 197 |( 5.838767 +- 0.4036678)% | + |*"# passed CompositeCut" | 197 | 31 |( 15.73604 +- 2.594392)% | + |*"# passed vertex fit" | 197 | 197 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 1458 | 14.727 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_TwoBody_Combiner#3 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"# passed" | 99 | 4 |( 4.040404 +- 1.978969)% | - |*"# passed CombinationCut" | 2518 | 80 |( 3.177125 +- 0.3495250)% | - |*"# passed CompositeCut" | 80 | 6 |( 7.500000 +- 2.944805)% | - |*"# passed vertex fit" | 80 | 80 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 453 | 4.5758 | - | "Input2 size" | 99 | 1430 | 14.444 | + |*"# passed" | 99 | 5 |( 5.050505 +- 2.200879)% | + |*"# passed CombinationCut" | 2533 | 73 |( 2.881958 +- 0.3324116)% | + |*"# passed CompositeCut" | 73 | 7 |( 9.589041 +- 3.446170)% | + |*"# passed vertex fit" | 73 | 73 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 454 | 4.5859 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_TwoBody_Combiner#4 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 5 |( 5.050505 +- 2.200879)% | - |*"# passed CombinationCut" | 2422 | 93 |( 3.839802 +- 0.3904496)% | - |*"# passed CompositeCut" | 93 | 9 |( 9.677419 +- 3.065748)% | - |*"# passed vertex fit" | 93 | 93 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 453 | 4.5758 | - | "Input2 size" | 99 | 1430 | 14.444 | + |*"# passed CombinationCut" | 2430 | 94 |( 3.868313 +- 0.3911929)% | + |*"# passed CompositeCut" | 94 | 9 |( 9.574468 +- 3.034862)% | + |*"# passed vertex fit" | 94 | 94 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 454 | 4.5859 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_TwoBody_Combiner#5 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 6 |( 6.060606 +- 2.398084)% | - |*"# passed CombinationCut" | 2471 | 95 |( 3.844597 +- 0.3867906)% | - |*"# passed CompositeCut" | 95 | 9 |( 9.473684 +- 3.004589)% | - |*"# passed vertex fit" | 95 | 95 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 453 | 4.5758 | - | "Input2 size" | 99 | 1430 | 14.444 | + |*"# passed CombinationCut" | 2553 | 98 |( 3.838621 +- 0.3802442)% | + |*"# passed CompositeCut" | 98 | 9 |( 9.183673 +- 2.917273)% | + |*"# passed vertex fit" | 98 | 98 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 454 | 4.5859 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_TwoBody_Combiner#6 INFO Number of counters : 6 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"# passed" | 99 | 5 |( 5.050505 +- 2.200879)% | - |*"# passed CombinationCut" | 2014 | 57 |( 2.830189 +- 0.3695248)% | - |*"# passed CompositeCut" | 57 | 9 |( 15.78947 +- 4.829805)% | - |*"# passed vertex fit" | 57 | 57 |( 100.0000 +- 0.000000)% | - | "Input1 size" | 99 | 453 | 4.5758 | - | "Input2 size" | 99 | 1430 | 14.444 | + |*"# passed CombinationCut" | 2081 | 60 |( 2.883229 +- 0.3668180)% | + |*"# passed CompositeCut" | 60 | 9 |( 15.00000 +- 4.609772)% | + |*"# passed vertex fit" | 60 | 60 |( 100.0000 +- 0.000000)% | + | "Input1 size" | 99 | 454 | 4.5859 | + | "Input2 size" | 99 | 1458 | 14.727 | Topo_has_rich_long_pion INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - |*"Cut selection efficiency" | 5944 | 1430 |( 24.05787 +- 0.5544094)% | + |*"Cut selection efficiency" | 5937 | 1458 |( 24.55786 +- 0.5586229)% | Topo_unfiltered_threebody_merger INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# input particles" | 198 | 380 | 1.9192 | - | "# output particles" | 380 | 0 | 0.0000 | + | "# input particles" | 198 | 401 | 2.0253 | + | "# output particles" | 401 | 0 | 0.0000 | Topo_unfiltered_twobody_merger INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# input particles" | 297 | 113 | 0.38047 | | "# output particles" | 113 | 0 | 0.0000 | TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb PVs" | 100 | 504 | 5.0400 | -TrackPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 16 | 371752 | 23234.0 | - | "# PackedData" | 16 | 556 | 34.750 | + | "Nb PVs" | 100 | 479 | 4.7900 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 179234 | 1792.3 | VeloClusterTrackingSIMD INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 179234 | 1792.3 | - | "Nb of Produced Tracks" | 100 | 23068 | 230.68 | -VertexPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 71 | 17096 | 240.79 | - | "# PackedData" | 71 | 175 | 2.4648 | + | "Nb of Produced Tracks" | 100 | 23012 | 230.12 | fromPrSeedingTracksV1Tracks INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of converted Tracks" | 100 | 10331 | 103.31 | fromPrVeloTracksV1TracksMerger INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of converted Tracks" | 55 | 16504 | 300.07 | + | "Nb of converted Tracks" | 56 | 16715 | 298.48 | fromV2MuonPIDV1MuonPIDDownstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 99 | 1003 | 10.131 | + | "Nb of Produced MuonPIDs" | 99 | 1005 | 10.152 | fromV2MuonPIDV1MuonPIDLong INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Nb of Produced MuonPIDs" | 99 | 6232 | 62.949 | + | "Nb of Produced MuonPIDs" | 99 | 6226 | 62.889 | require_pvs INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 100 | 99 |( 99.00000 +- 0.9949874)% | diff --git a/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref.x86_64_v3-opt b/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref.x86_64_v3-opt index 6a3ec0e1f0b..7d6b79e63e4 100644 --- a/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref.x86_64_v3-opt +++ b/Hlt/Hlt2Conf/tests/refs/hlt2_reco_plus_thor_selections_fastest.ref.x86_64_v3-opt @@ -81,14 +81,10 @@ CaloFutureMergedPi0.EcalSpread INFO Number of counters : 3 | "Corrected Clusters: # cells " | 90 | 530 | 5.8889 | 1.8101 | 3.0000 | 9.0000 | | "Corrected Clusters: ET" | 90 | 92806.98 | 1031.2 | 1224.0 | 33.600 | 9770.2 | | "Corrected Clusters: size ratio" | 90 | 38.31066 | 0.42567 | 0.37491 | 0.028376 | 1.9634 | -CaloHypoPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 60 | 58964 | 982.73 | - | "# PackedData" | 60 | 751 | 12.517 | CaloSelectiveBremMatchAlg_Downst... INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "#links in table" | 99 | 244 | 2.4646 | 2.6336 | 0.0000 | 14.000 | - | "average chi2" | 244 | 1219.163 | 4.9966 | 7.1592 | 0.015062 | 53.600 | + | "average chi2" | 244 | 1219.162 | 4.9966 | 7.1592 | 0.015062 | 53.600 | | "average energy (track based)" | 768 | 62896.89 | 81.897 | 254.74 | 0.0000 | 3847.2 | CaloSelectiveBremMatchAlg_Long INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -119,10 +115,10 @@ CaloSelectiveTrackMatchAlg_Ttrack INFO Number of counters : 2 CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "average DLL" | 808 | -154.3119 | -0.19098 | 0.73795 | -8.6620 | 4.7885 | - | "average E/p" | 808 | 48.36722 | 0.059860 | 0.075967 | 0.0000 | 0.88830 | + | "average E/p" | 808 | 48.36723 | 0.059860 | 0.075967 | 0.0000 | 0.88830 | CaloTrackBasedElectronShowerAlg_... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "average DLL" | 5254 | -330.9175 | -0.062984 | 0.12124 | -4.0428 | 0.91853 | + | "average DLL" | 5254 | -330.9174 | -0.062984 | 0.12124 | -4.0428 | 0.91853 | | "average E/p" | 5254 | 32.85062 | 0.0062525 | 0.010696 | 0.0000 | 0.44431 | CaloTrackToHcalEnergyAlg_Downstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | @@ -402,9 +398,6 @@ Hlt2BsToJpsiPhi_JPsi2ee_PhiToKK INFO Number of counters : 6 |*"# passed vertex fit" | 83 | 83 |( 100.0000 +- 0.000000)% | | "Input1 size" | 99 | 6231 | 62.939 | | "Input2 size" | 99 | 707 | 7.1414 | -HltPackedBufferWriter INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "Size of serialized data" | 55 | 793314 | 14424.0 | 52822.0 | 894.00 | 3.3636e+05 | LHCb__Converters__Track__SOA__fr... INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Events without Tracks" | 1 | 0 | 0.0000 | @@ -443,10 +436,6 @@ MuonIDHlt2AlgLong INFO Number of counters : 7 |*"nIsMuon" | 6231 | 453 |( 7.270101 +- 0.3289283)% | |*"nIsMuonTight" | 6231 | 276 |( 4.429466 +- 0.2606506)% | |*"nMomentumCut" | 6231 | 5370 |( 86.18199 +- 0.4371718)% | -MuonPIDPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 7 | 16958 | 2422.6 | - | "# PackedData" | 7 | 279 | 39.857 | MuonPIDV2ToMuonTracks_Downstream INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of input v2 MuonPIDs" | 99 | 1003 | 10.131 | @@ -457,14 +446,6 @@ Muontopo_unfiltered_twobody_merger INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "# input particles" | 396 | 33 | 0.083333 | | "# output particles" | 33 | 0 | 0.0000 | -P2VRelationPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 90 | 12964 | 144.04 | - | "# PackedData" | 90 | 90 | 1.0000 | -ParticlePacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 166 | 87354 | 526.23 | - | "# PackedData" | 166 | 435 | 2.6205 | ParticleRangeFilter INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"Cut selection efficiency" | 7132 | 36 |(0.5047672 +- 0.08391528)% | @@ -623,22 +604,6 @@ PrStoreSciFiHits INFO Number of counters : 25 | "Hits in T3X1" | 400 | 27561 | 68.903 | 34.995 | 6.0000 | 227.00 | | "Hits in T3X2" | 400 | 29919 | 74.797 | 39.134 | 6.0000 | 230.00 | | "Total number of hits" | 100 | 325154 | 3251.5 | 1616.5 | 430.00 | 9578.0 | -ProtoParticlePacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 61 | 190282 | 3119.4 | - | "# PackedData" | 61 | 846 | 13.869 | -RecSummaryPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 55 | 2530 | 46.000 | - | "# PackedData" | 55 | 330 | 6.0000 | -RecVertexPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 55 | 20952 | 380.95 | - | "# PackedData" | 55 | 329 | 5.9818 | -RichPIDPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 7 | 12806 | 1829.4 | - | "# PackedData" | 7 | 263 | 37.571 | TBTCMatch INFO Number of counters : 3 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | |*"BadInput" | 5927 | 0 |( 0.000000 +- 0.000000)% | @@ -744,10 +709,6 @@ Topo_unfiltered_twobody_merger INFO Number of counters : 2 TrackBeamLineVertexFinderSoA INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb PVs" | 100 | 504 | 5.0400 | -TrackPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 16 | 373080 | 23318.0 | - | "# PackedData" | 16 | 558 | 34.875 | VPClus INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 179234 | 1792.3 | @@ -755,10 +716,6 @@ VeloClusterTrackingSIMD INFO Number of counters : 2 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of Produced Clusters" | 100 | 179234 | 1792.3 | | "Nb of Produced Tracks" | 100 | 23069 | 230.69 | -VertexPacker INFO Number of counters : 2 - | Counter | # | sum | mean/eff^* | rms/err^* | min | max | - | "# BufferData" | 71 | 17424 | 245.41 | - | "# PackedData" | 71 | 179 | 2.5211 | fromPrSeedingTracksV1Tracks INFO Number of counters : 1 | Counter | # | sum | mean/eff^* | rms/err^* | min | max | | "Nb of converted Tracks" | 100 | 10331 | 103.31 | -- GitLab