Source code for CaloRingsBuilder.CaloRingsBuilder

__all__ = ["CaloRingsBuilderCfg"]

from CaloRingsBuilder import CaloRingsMaker, CaloRingsMerge
from CaloCell.CaloDefs import CaloSampling
import numpy as np

pi = np.pi

DELTA_ETA_RINGS = [0.025, 0.00325, 0.025, 0.050, 0.1, 0.1, 0.2]
DELTA_PHI_RINGS = [
    pi / 32,
    pi / 32,
    pi / 128,
    pi / 128,
    pi / 128,
    pi / 32,
    pi / 32,
    pi / 32,
]
N_RINGS = [8, 64, 8, 8, 4, 4, 4]
ETA_RANGE = [0.0, 2.5]
LAYERS_RINGS = [
    [CaloSampling.PSB, CaloSampling.PSE],
    [CaloSampling.EMB1, CaloSampling.EMEC1],
    [CaloSampling.EMB2, CaloSampling.EMEC2],
    [CaloSampling.EMB3, CaloSampling.EMEC3],
    [CaloSampling.HEC1, CaloSampling.TileCal1, CaloSampling.TileExt1],
    [CaloSampling.HEC2, CaloSampling.TileCal2, CaloSampling.TileExt2],
    [CaloSampling.HEC3, CaloSampling.TileCal3, CaloSampling.TileExt3],
]

DELTA_ETA_RINGS_FWD = [0.1, 0.1, 0.1, 0.2, 0.2, 0.2]
DELTA_PHI_RINGS_FWD = [
    pi / 32,
    pi / 32,
    pi / 32,
    pi / 16,
    pi / 16,
    pi / 16,
]
N_RINGS_FWD = [4, 4, 4, 2, 2, 2]
ETA_RANGE_FWD = [2.5, 4.9]
LAYERS_RINGS_FWD = [
    [CaloSampling.EMEC1],
    [CaloSampling.EMEC2],
    [CaloSampling.EMEC3],
    [CaloSampling.HEC1],
    [CaloSampling.HEC2],
    [CaloSampling.HEC3],
]

caloRingsArgs = {
    "DeltaEtaRings": DELTA_ETA_RINGS,
    "DeltaPhiRings": DELTA_PHI_RINGS,
    "NRings": N_RINGS,
    "LayerRings": LAYERS_RINGS,
    "EtaRange": ETA_RANGE,
}

caloRingerTopologies = {
    "std": caloRingsArgs,
    "asym": caloRingsArgs | {"NRings": [(n - 1) * 4 + 1 for n in N_RINGS]},
    "strips": caloRingsArgs | {"NRings": [28, 252, 28, 14, 8, 8, 4], "Axis": 0},
    "corner": caloRingsArgs | {"CornerShift": 3, "NRings": [n * 4 for n in N_RINGS]},
    "cross": caloRingsArgs | {"CrossShift": 3, "NRings": [n * 4 for n in N_RINGS]},
    "custom": caloRingsArgs | {"RingsShiftEta": [0], "RingsShiftPhi": [0]},
}

caloRingsFwdArgs = {
    "DeltaEtaRings": DELTA_ETA_RINGS_FWD,
    "DeltaPhiRings": DELTA_PHI_RINGS_FWD,
    "NRings": N_RINGS_FWD,
    "LayerRings": LAYERS_RINGS_FWD,
    "EtaRange": ETA_RANGE_FWD,
}


[docs] def CaloRingsBuilderCfg( name: str, InputClusterKey: str, OutputRingerKey: str, OutputLevel: int = 0, HistogramPath: str = "Expert/Rings", DoSigmaCut: bool = False, SigmaCut: float = 2.0, RingerTopology: str = "std", CornerShift: int = None, CrossShift: int = None, RingsShiftEta: list = None, RingsShiftPhi: list = None, Axis: int = None, ): topology_args = dict(caloRingerTopologies[RingerTopology]) if CornerShift is not None: topology_args["CornerShift"] = CornerShift if CrossShift is not None: topology_args["CrossShift"] = CrossShift if Axis is not None: topology_args["Axis"] = Axis if RingsShiftEta is not None: topology_args["RingsShiftEta"] = RingsShiftEta if RingsShiftPhi is not None: topology_args["RingsShiftPhi"] = RingsShiftPhi print(topology_args) rings = CaloRingsMaker( name, InputClusterKey=InputClusterKey, OutputRingerKey=OutputRingerKey + "_Aux", HistogramPath=HistogramPath, OutputLevel=OutputLevel, DoSigmaCut=DoSigmaCut, SigmaCut=SigmaCut, RingerTopology=RingerTopology, **topology_args, ) fwd_rings = CaloRingsMaker( name + "_Fwd", InputClusterKey=InputClusterKey, OutputRingerKey=OutputRingerKey + "_Fwd_Aux", HistogramPath=HistogramPath + "_Fwd", OutputLevel=OutputLevel, **caloRingsFwdArgs, ) merge_rings = CaloRingsMerge( name + "_Merge", CollectionKeys=[rings.OutputRingerKey, fwd_rings.OutputRingerKey], OutputRingerKey=OutputRingerKey, OutputLevel=OutputLevel, ) return [rings, fwd_rings, merge_rings]