88 overlapInputNames = None, overlapOutputNames = None, **kwargs):
89 cfg = ComponentAccumulator()
90
91 kwargs.setdefault("OutputLabel", "passesOR")
92 kwargs.setdefault("affectingSystematicsFilter", ".*")
93
94 for obj in overlapInputNames:
95 kwargs.setdefault(obj, overlapInputNames[obj])
96 kwargs.setdefault(obj+"Decoration", kwargs["OutputLabel"] + ",as_char")
97
98 extraInputs =
set(kwargs.get(
"ExtraInputs",
set()))
99 for inputContainer in overlapInputNames.values():
100 extraInputs.add(("xAOD::IParticleContainer", f"StoreGateSvc+{inputContainer}.selectPtEta"))
101 kwargs["ExtraInputs"] = list(extraInputs)
102
103 overlap_outputs = [
104 ("SG::AuxVectorBase", f"StoreGateSvc+{overlapInputNames['jets']}.passesOR"),
105 ("xAOD::IParticleContainer", f"StoreGateSvc+{overlapInputNames['jets']}.passesOR"),
106 ("SG::AuxVectorBase", f"StoreGateSvc+{overlapInputNames['electrons']}.passesOR"),
107 ("xAOD::IParticleContainer", f"StoreGateSvc+{overlapInputNames['electrons']}.passesOR"),
108 ("SG::AuxVectorBase", f"StoreGateSvc+{overlapInputNames['muons']}.passesOR"),
109 ("xAOD::IParticleContainer", f"StoreGateSvc+{overlapInputNames['muons']}.passesOR"),
110 ("SG::AuxVectorBase", f"StoreGateSvc+{overlapInputNames['photons']}.passesOR"),
111 ("xAOD::IParticleContainer", f"StoreGateSvc+{overlapInputNames['photons']}.passesOR"),
112 ]
113
114 kwargs.setdefault("overlapTool", cfg.popToolsAndMerge(GNNHSOverlapRemovalToolCfg(flags)))
115
116 cfg.addEventAlgo(CompFactory.CP.OverlapRemovalAlg(name, ExtraOutputs=overlap_outputs, **kwargs))
117
118 or_container_types = {
119 "jets": ["xAOD::JetContainer", "xAOD::IParticleContainer"],
120 "electrons": ["xAOD::ElectronContainer", "xAOD::IParticleContainer"],
121 "muons": ["xAOD::MuonContainer", "xAOD::IParticleContainer"],
122 "photons": ["xAOD::PhotonContainer", "xAOD::EgammaContainer", "xAOD::IParticleContainer"],
123 }
124
125 for obj in overlapInputNames:
126 output_name = overlapOutputNames[obj]
127 view_outputs = [("xAOD::AuxContainerBase", f"StoreGateSvc+{output_name}Aux.")]
128 for out_type in or_container_types[obj]:
129 view_outputs.append((out_type, f"StoreGateSvc+{output_name}"))
130 view_outputs.extend([
131 ("SG::AuxVectorBase", f"StoreGateSvc+{output_name}.passesOR"),
132 ("xAOD::IParticleContainer", f"StoreGateSvc+{output_name}.passesOR"),
133 ("SG::AuxVectorBase", f"StoreGateSvc+{output_name}.selectPtEta"),
134 ("xAOD::IParticleContainer", f"StoreGateSvc+{output_name}.selectPtEta"),
135 ])
136
137 cfg.addEventAlgo(CompFactory.CP.AsgViewFromSelectionAlg(
138 name = "GNNHS_"+obj+"_ORSelectionAlg",
139 input = overlapInputNames[obj],
140 output = output_name,
141 selection = [kwargs["OutputLabel"]+",as_char"],
142 deepCopy = True,
143 ExtraOutputs = view_outputs))
144
145 return cfg
146
147
148
149