From fab6d3bba32e4c4750f91f437b50eb4fbda634b9 Mon Sep 17 00:00:00 2001 From: jmcarcell <jmcarcell@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:23:12 +0100 Subject: [PATCH] Add a test that uses a Writer with a plain Gaudi Functional algorithm --- test/k4FWCoreTest/CMakeLists.txt | 1 + .../options/ExampleGaudiFunctional.py | 41 +++++++++++++++++++ .../ExampleGaudiFunctionalProducer.cpp | 38 +++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 test/k4FWCoreTest/options/ExampleGaudiFunctional.py create mode 100644 test/k4FWCoreTest/src/components/ExampleGaudiFunctionalProducer.cpp diff --git a/test/k4FWCoreTest/CMakeLists.txt b/test/k4FWCoreTest/CMakeLists.txt index 9340b296..3c66fec6 100644 --- a/test/k4FWCoreTest/CMakeLists.txt +++ b/test/k4FWCoreTest/CMakeLists.txt @@ -188,6 +188,7 @@ set_tests_properties(FunctionalWrongImport PROPERTIES PASS_REGULAR_EXPRESSION "I add_test_with_env(FunctionalReadNthEvent options/ExampleFunctionalReadNthEvent.py PROPERTIES DEPENDS FunctionalProducer ADD_TO_CHECK_FILES) add_test_with_env(FunctionalProducerRNTuple options/ExampleFunctionalProducerRNTuple.py ADD_TO_CHECK_FILES) add_test_with_env(FunctionalTTreeToRNTuple options/ExampleFunctionalTTreeToRNTuple.py PROPERTIES DEPENDS FunctionalProducer ADD_TO_CHECK_FILES) +add_test_with_env(GaudiFunctional options/ExampleGaudiFunctional.py) # The following is done to make the tests work without installing the files in diff --git a/test/k4FWCoreTest/options/ExampleGaudiFunctional.py b/test/k4FWCoreTest/options/ExampleGaudiFunctional.py new file mode 100644 index 00000000..0162f80d --- /dev/null +++ b/test/k4FWCoreTest/options/ExampleGaudiFunctional.py @@ -0,0 +1,41 @@ +# +# Copyright (c) 2014-2024 Key4hep-Project. +# +# This file is part of Key4hep. +# See https://key4hep.github.io/key4hep-doc/ for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# This is an example reading from a file and using a producer to create new +# data + +from Gaudi.Configuration import INFO +from Configurables import ExampleGaudiFunctionalProducer +from Configurables import EventDataSvc +from k4FWCore import ApplicationMgr, IOSvc + +svc = IOSvc("IOSvc") +svc.Output = "functional_transformer.root" + +producer = ExampleGaudiFunctionalProducer( + "Producer", OutputCollectionName="Output" +) + +mgr = ApplicationMgr( + TopAlg=[producer], + EvtSel="NONE", + EvtMax=3, + ExtSvc=[EventDataSvc("EventDataSvc")], + OutputLevel=INFO, +) diff --git a/test/k4FWCoreTest/src/components/ExampleGaudiFunctionalProducer.cpp b/test/k4FWCoreTest/src/components/ExampleGaudiFunctionalProducer.cpp new file mode 100644 index 00000000..171036d4 --- /dev/null +++ b/test/k4FWCoreTest/src/components/ExampleGaudiFunctionalProducer.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014-2024 Key4hep-Project. + * + * This file is part of Key4hep. + * See https://key4hep.github.io/key4hep-doc/ for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "Gaudi/Functional/Producer.h" + +#include <string> + +using BaseClass_t = Gaudi::Functional::Traits::BaseClass_t<Gaudi::Algorithm>; + +struct ExampleGaudiFunctionalProducer final : Gaudi::Functional::Producer<int(), BaseClass_t> { + // The pair in KeyValues can be changed from python and it corresponds + // to the name of the output collection + ExampleGaudiFunctionalProducer(const std::string& name, ISvcLocator* svcLoc) + : Producer(name, svcLoc, KeyValue{"OutputCollectionName", "OutputCollection"}) {} + + // This is the function that will be called to produce the data + int operator()() const override { + return 3; + } +}; + +DECLARE_COMPONENT(ExampleGaudiFunctionalProducer)