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