Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-17 07:47:50

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #include <boost/test/unit_test.hpp>
0010 
0011 #include "Acts/Utilities/Logger.hpp"
0012 #include "ActsExamples/Framework/DataHandle.hpp"
0013 #include "ActsExamples/Framework/Sequencer.hpp"
0014 #include "ActsExamples/Framework/WhiteBoard.hpp"
0015 #include "ActsExamples/Io/Podio/PodioCollectionDataHandle.hpp"
0016 #include "ActsTests/CommonHelpers/WhiteBoardUtilities.hpp"
0017 
0018 #include <memory>
0019 
0020 #include <edm4hep/MCParticleCollection.h>
0021 #include <edm4hep/TrackCollection.h>
0022 #include <podio/CollectionBase.h>
0023 
0024 using namespace ActsExamples;
0025 using Acts::Logging::ScopedFailureThreshold;
0026 
0027 namespace ActsTests {
0028 
0029 namespace {
0030 static const auto logger =
0031     Acts::getDefaultLogger("PodioHandleTest", Acts::Logging::VERBOSE);
0032 }  // namespace
0033 
0034 BOOST_AUTO_TEST_SUITE(PodioCollectionDataHandleSuite)
0035 
0036 BOOST_AUTO_TEST_CASE(EmulationCompatibility) {
0037   ScopedFailureThreshold st(Acts::Logging::Level::FATAL);
0038 
0039   DummySequenceElement dummyElement;
0040 
0041   DataHandleBase::StateMapType state;
0042   WhiteBoard::AliasMapType aliases;
0043 
0044   PodioCollectionWriteHandle<edm4hep::TrackCollection> writeHandle{
0045       &dummyElement, "OutputTracks"};
0046   PodioCollectionReadHandle<edm4hep::TrackCollection> typedReadHandle{
0047       &dummyElement, "InputTracks"};
0048   ConsumeDataHandle<std::unique_ptr<podio::CollectionBase>> baseConsumeHandle{
0049       &dummyElement, "InputPodioWriter"};
0050   PodioCollectionReadHandle<edm4hep::MCParticleCollection> wrongTypedReadHandle{
0051       &dummyElement, "InputParticles"};
0052 
0053   writeHandle.initialize("tracks");
0054   typedReadHandle.initialize("tracks");
0055   baseConsumeHandle.initialize("tracks");
0056   wrongTypedReadHandle.initialize("tracks");
0057 
0058   writeHandle.emulate(state, aliases, *logger);
0059 
0060   BOOST_CHECK_NO_THROW(typedReadHandle.emulate(state, aliases, *logger));
0061   BOOST_CHECK_THROW(wrongTypedReadHandle.emulate(state, aliases, *logger),
0062                     SequenceConfigurationException);
0063   BOOST_CHECK_NO_THROW(baseConsumeHandle.emulate(state, aliases, *logger));
0064 }
0065 
0066 BOOST_AUTO_TEST_CASE(RuntimeTypedReadAndBaseConsume) {
0067   DummySequenceElement dummyElement;
0068   WhiteBoard wb;
0069 
0070   PodioCollectionWriteHandle<edm4hep::TrackCollection> writeHandle{
0071       &dummyElement, "OutputTracks"};
0072   PodioCollectionReadHandle<edm4hep::TrackCollection> typedReadHandle{
0073       &dummyElement, "InputTracks"};
0074   ConsumeDataHandle<std::unique_ptr<podio::CollectionBase>> baseConsumeHandle{
0075       &dummyElement, "InputPodioWriter"};
0076 
0077   writeHandle.initialize("tracks");
0078   typedReadHandle.initialize("tracks");
0079   baseConsumeHandle.initialize("tracks");
0080 
0081   edm4hep::TrackCollection tracks;
0082   writeHandle(wb, std::move(tracks));
0083 
0084   const auto& readTracks = typedReadHandle(wb);
0085   BOOST_CHECK_EQUAL(readTracks.size(), 0u);
0086 
0087   auto baseCollection = baseConsumeHandle(wb);
0088   BOOST_REQUIRE(baseCollection != nullptr);
0089   BOOST_CHECK(dynamic_cast<edm4hep::TrackCollection*>(baseCollection.get()) !=
0090               nullptr);
0091 }
0092 
0093 BOOST_AUTO_TEST_CASE(RuntimeTypeMismatchOnRead) {
0094   DummySequenceElement dummyElement;
0095   WhiteBoard wb;
0096 
0097   WriteDataHandle<std::unique_ptr<podio::CollectionBase>> baseWriteHandle{
0098       &dummyElement, "BaseWrite"};
0099   PodioCollectionReadHandle<edm4hep::TrackCollection> typedReadHandle{
0100       &dummyElement, "InputTracks"};
0101 
0102   baseWriteHandle.initialize("collections");
0103   typedReadHandle.initialize("collections");
0104 
0105   baseWriteHandle(wb, std::make_unique<edm4hep::MCParticleCollection>());
0106 
0107   BOOST_CHECK_THROW(typedReadHandle(wb), std::out_of_range);
0108 }
0109 
0110 BOOST_AUTO_TEST_SUITE_END()
0111 
0112 }  // namespace ActsTests