Skip to content
Snippets Groups Projects

reading.py changes to allow MC object reading for sprucing

Merged Nicole Skidmore requested to merge MC_Sprucing into master
###############################################################################
# (c) Copyright 2020 CERN for the benefit of the LHCb Collaboration #
# (c) Copyright 2020-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". #
@@ -13,9 +13,8 @@ from __future__ import absolute_import
import os, json, XRootD.client
from .PersistRecoConf import PersistRecoPacking
from PyConf.application import (default_raw_event,
make_data_with_FetchDataFromFile,
ComponentConfig)
from PyConf.application import (
default_raw_event, make_data_with_FetchDataFromFile, ComponentConfig)
from PyConf.components import force_location, setup_component
__all__ = [
@@ -24,7 +23,10 @@ __all__ = [
]
def mc_unpackers(process='Hlt2', filtered_mc=True, configurables=True):
def mc_unpackers(process='Hlt2',
filtered_mc=True,
configurables=True,
output_level=4):
"""Return a list of unpackers for reading Monte Carlo truth objects
This must run BEFORE unpackers!!!.
Args:
process (str): 'Hlt2' (or, in the future, 'Spruce').
filtered_mc (bool): If True, assume Moore saved only a filtered
subset of the input MC objects.
"""
assert process == "Hlt2" or process == "Turbo" or process == "Spruce", 'MC unpacker helper only accepts Turbo, Spruce or Hlt2 processes'
mc_prefix = '/Event/HLT2' if filtered_mc else "/Event"
if process == "Spruce":
mc_prefix = '/Event/Spruce/HLT2'
if configurables:
from Configurables import UnpackMCParticle, UnpackMCVertex
unpack_mcp = UnpackMCParticle(
InputName=os.path.join(mc_prefix, "pSim/MCParticles"),
OutputName=os.path.join(mc_prefix, "MC/Particles"),
)
OutputLevel=output_level)
unpack_mcv = UnpackMCVertex(
InputName=os.path.join(mc_prefix, "pSim/MCVertices"),
OutputName=os.path.join(mc_prefix, "MC/Vertices"),
)
OutputLevel=output_level)
else:
from PyConf.application import make_data_with_FetchDataFromFile
from PyConf.Algorithms import UnpackMCParticle, UnpackMCVertex
@@ -56,7 +61,8 @@ def mc_unpackers(process='Hlt2', filtered_mc=True, configurables=True):
outputs={
"OutputName":
force_location(os.path.join(mc_prefix, "MC/Particles"))
})
},
OutputLevel=output_level)
unpack_mcv = UnpackMCVertex(
InputName=make_data_with_FetchDataFromFile(
@@ -64,7 +70,8 @@ def mc_unpackers(process='Hlt2', filtered_mc=True, configurables=True):
outputs={
"OutputName":
force_location(os.path.join(mc_prefix, "MC/Vertices"))
})
},
OutputLevel=output_level)
return [unpack_mcp, unpack_mcv]
@@ -74,7 +81,7 @@ def unpack_rawevent(bank_types=["DstData", "HltDecReports"],
stream="default",
raw_event_format=0.3,
configurables=True,
OutputLevel=4):
output_level=4):
"""Return RawBank:Views of banks in RawEvent.
Args:
@@ -101,14 +108,14 @@ def unpack_rawevent(bank_types=["DstData", "HltDecReports"],
'/Event/DAQ/RawBanks/%s' % (rb) for rb in bank_types
],
RawEventLocation=bank_location,
OutputLevel=OutputLevel)
OutputLevel=output_level)
return unpackrawevent
def unpackers(process='Hlt2',
data_type='Upgrade',
configurables=True,
OutputLevel=4):
output_level=4):
"""Return a list of unpackers for reading reconstructed objects.
This must run AFTER mc_unpackers if MC data!!!.
@@ -130,9 +137,9 @@ def unpackers(process='Hlt2',
RECO_ROOT = PANDV_ROOT
prpacking = PersistRecoPacking(stream=RECO_ROOT, data_type=data_type)
unpack_persistreco = prpacking.unpackers(
configurables=configurables, output_level=OutputLevel)
configurables=configurables, output_level=output_level)
unpack_psandvs = UnpackParticlesAndVertices(
InputStream=PANDV_ROOT, OutputLevel=OutputLevel)
InputStream=PANDV_ROOT, OutputLevel=output_level)
return unpack_persistreco + [unpack_psandvs]
@@ -140,8 +147,9 @@ def decoder(process='Hlt2',
stream="default",
raw_event_format=0.3,
data_type='Upgrade',
annsvc_name='HltANNSvc',
configurables=True,
OutputLevel=4):
output_level=4):
"""Return a DstData raw bank decoder.
Args:
@@ -150,6 +158,7 @@ def decoder(process='Hlt2',
- drives `RawEventLocation` only.
raw_event_format (float):
data_type (str): The data type to configure PersistRecoPacking.
annsvc_name (str): Name of ANNSvc to read data
"""
assert process == "Spruce" or process == "Turbo" or process == "Hlt2", 'Unpacking helper only accepts Turbo, Spruce or Hlt2 processes'
if process == "Spruce":
@@ -174,7 +183,8 @@ def decoder(process='Hlt2',
decode_packeddata = HltPackedDataDecoder(
RawEventLocations=[bank_location],
ContainerMap=container_map,
OutputLevel=OutputLevel)
ANNSvc=annsvc_name,
OutputLevel=output_level)
return decode_packeddata
@@ -183,7 +193,7 @@ def hlt2_decisions(process='Hlt2',
output_loc="/Event/Hlt/DecReports",
raw_event_format=0.3,
configurables=True,
OutputLevel=4):
output_level=4):
"""Return a HltDecReportsDecoder instance for HLT2 decisions.
Args:
@@ -207,7 +217,7 @@ def hlt2_decisions(process='Hlt2',
SourceID='Hlt2',
RawEventLocations=bank_location.location,
OutputHltDecReportsLocation=output_loc,
OutputLevel=OutputLevel)
OutputLevel=output_level)
else:
from PyConf.Algorithms import HltDecReportsDecoder
@@ -218,7 +228,7 @@ def hlt2_decisions(process='Hlt2',
outputs={
'OutputHltDecReportsLocation': force_location(output_loc)
},
OutputLevel=OutputLevel)
OutputLevel=output_level)
return decode_hlt2
@@ -226,7 +236,7 @@ def hlt2_decisions(process='Hlt2',
def spruce_decisions(process="Spruce",
stream="default",
configurables=True,
OutputLevel=4):
output_level=4):
"""Return a HltDecReportsDecoder instance for Sprucing decisions.
Args:
@@ -245,7 +255,7 @@ def spruce_decisions(process="Spruce",
SourceID='Spruce',
RawEventLocations=bank_location.location,
OutputHltDecReportsLocation=output_loc,
OutputLevel=OutputLevel)
OutputLevel=output_level)
else:
from PyConf.Algorithms import HltDecReportsDecoder
@@ -257,7 +267,7 @@ def spruce_decisions(process="Spruce",
outputs={
'OutputHltDecReportsLocation': force_location(output_loc)
},
OutputLevel=OutputLevel)
OutputLevel=output_level)
return decode_spruce
@@ -298,7 +308,7 @@ def set_hltAnn_svc(annsvc_json_config):
"""
Configures the Hlt ANN service to read correctly the spruced locations using the HltAnnSvc
configuration of the HLT2 application.
Args:
annsvc_json_config (str): path to the .json file containing the HltAnnSvc configuration.
Examples:
@@ -322,7 +332,7 @@ def set_hltAnn_svc(annsvc_json_config):
str(k): v
for k, v in ann_config["PackedObjectLocations"].items()
}
config.add(
setup_component(
"HltANNSvc",
Loading