26 inline void renounceInputs([[maybe_unused]]
const std::unordered_set<std::string> &outputs, std::vector< const DataObjID *> &output_ids, AlgTool *a_tool) {
31 inline void collectOutputs(std::unordered_set<std::string> &outputs, std::vector< const DataObjID *> &output_ids,
const AlgTool *a_tool) {
53 ATH_MSG_INFO(
"Initializing the derivation framework kernel " << name());
57 ATH_MSG_INFO(
"The following skimming tools will be applied....");
62 ATH_MSG_INFO(
"The following thinning tools will be applied");
67 ATH_MSG_INFO(
"The following augmentation tools will be applied....");
80 ATH_MSG_INFO(
"Skimming will be run before augmentation. Make sure your skimming does not depend on variables calculated in the augmentation step!");
83 std::unordered_set<std::string> outputs;
84 std::vector<const DataObjID *> output_ids;
85 auto output_collector = [&outputs, &output_ids](IAlgTool *a_tool_interface) {
86 const AlgTool *alg_tool =
dynamic_cast<AlgTool *
>(a_tool_interface);
88 collectOutputs(outputs,output_ids, alg_tool);
91 auto renounce_and_collect_outputs = [&outputs, &output_ids](IAlgTool *a_tool_interface) {
92 AlgTool *alg_tool =
dynamic_cast<AlgTool *
>(a_tool_interface);
94 renounceInputs(outputs,output_ids, alg_tool);
95 collectOutputs(outputs,output_ids, alg_tool);
98 auto renouncer = [&outputs, &output_ids](IAlgTool *a_tool_interface) {
99 AlgTool *alg_tool =
dynamic_cast<AlgTool *
>(a_tool_interface);
101 renounceInputs(outputs,output_ids, alg_tool);
109 visitTools(*a_tool_handle, output_collector);
112 visitTools(*a_tool_handle, renounce_and_collect_outputs);
117 visitTools(*a_tool_handle, output_collector);
120 visitTools(*a_tool_handle, renounce_and_collect_outputs);
124 visitTools(*a_tool_handle, renouncer);
127 return StatusCode::SUCCESS;
137 Chrono chrono( cSvc , name() );
151 if ( augmentationTool->addBranches(ctx).isFailure() ) {
153 return StatusCode::FAILURE;
163 bool acceptEvent(
true);
170 if (!(skimmingTool->eventPassesFilter(ctx))) {
172 ATH_MSG_DEBUG(
"This event failed the " << skimmingTool->name() <<
" filter. Therefore it will not be recorded.");
181 filter.setPassed (acceptEvent);
184 if (!acceptEvent)
return StatusCode::SUCCESS;
190 if ( augmentationTool->addBranches(ctx).isFailure() ) {
192 return StatusCode::FAILURE;
203 if ( thinningTool->doThinning(ctx).isFailure() ) {
205 return StatusCode::FAILURE;
209 return StatusCode::SUCCESS;