Skip to content

Commit

Permalink
Merge PodioDataSvc into k4DataSvc
Browse files Browse the repository at this point in the history
- Move k4DataSvc to core library
- Make PodioDataSvc an alias for now
- Remove FCCDataSvc
  • Loading branch information
tmadlener committed Nov 17, 2023
1 parent 54324c3 commit 6edf66a
Show file tree
Hide file tree
Showing 10 changed files with 158 additions and 249 deletions.
8 changes: 4 additions & 4 deletions k4FWCore/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ gaudi_install(PYTHON)


gaudi_add_library(k4FWCore
SOURCES src/PodioDataSvc.cpp
src/PodioLegacyDataSvc.cpp
src/KeepDropSwitch.cpp
LINK Gaudi::GaudiAlgLib Gaudi::GaudiKernel podio::podioRootIO ROOT::Core ROOT::RIO ROOT::Tree
SOURCES src/k4DataSvc.cpp
src/PodioLegacyDataSvc.cpp
src/KeepDropSwitch.cpp
LINK Gaudi::GaudiAlgLib Gaudi::GaudiKernel podio::podioRootIO ROOT::Core ROOT::RIO ROOT::Tree
)
target_include_directories(k4FWCore PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
Expand Down
33 changes: 0 additions & 33 deletions k4FWCore/components/FCCDataSvc.cpp

This file was deleted.

34 changes: 0 additions & 34 deletions k4FWCore/components/FCCDataSvc.h

This file was deleted.

4 changes: 2 additions & 2 deletions k4FWCore/components/PodioInput.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#include <string>
#include <vector>

class PodioDataSvc;
class k4DataSvc;

/** @class PodioInput
*
Expand All @@ -49,7 +49,7 @@ class PodioInput final : public Gaudi::Functional::Consumer<void(), BaseClass_t>
Gaudi::Property<std::vector<std::string>> m_collectionNames{
this, "collections", {}, "Collections that should be read (default all)"};
// Data service: needed to register objects and get collection IDs. Just an observing pointer.
PodioDataSvc* m_podioDataSvc;
k4DataSvc* m_podioDataSvc;
mutable std::map<std::string_view, std::function<void(std::string_view)>> m_readers;
};

Expand Down
4 changes: 2 additions & 2 deletions k4FWCore/components/PodioOutput.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#include <vector>

// forward declarations
class PodioDataSvc;
class k4DataSvc;

class PodioOutput : public GaudiAlgorithm {
public:
Expand All @@ -54,7 +54,7 @@ class PodioOutput : public GaudiAlgorithm {
"An optional file path to copy the outputfile to."};
/// Switch for keeping or dropping outputs
KeepDropSwitch m_switch;
PodioDataSvc* m_podioDataSvc;
k4DataSvc* m_podioDataSvc;
/// The actual ROOT frame writer
std::unique_ptr<podio::ROOTFrameWriter> m_framewriter;
/// The stored collections
Expand Down
13 changes: 1 addition & 12 deletions k4FWCore/components/k4DataSvc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "k4DataSvc.h"
#include "k4FWCore/k4DataSvc.h"

// Instantiation of a static factory class used by clients to create
// instances of this service
DECLARE_COMPONENT(k4DataSvc)

/// Standard Constructor
k4DataSvc::k4DataSvc(const std::string& name, ISvcLocator* svc) : PodioDataSvc(name, svc) {
declareProperty("inputs", m_filenames = {}, "Names of the files to read");
declareProperty("input", m_filename = "", "Name of the file to read");
declareProperty("FirstEventEntry", m_1stEvtEntry = 0, "First event to read");
}

/// Standard Destructor
k4DataSvc::~k4DataSvc() {}
33 changes: 0 additions & 33 deletions k4FWCore/components/k4DataSvc.h

This file was deleted.

111 changes: 5 additions & 106 deletions k4FWCore/include/k4FWCore/PodioDataSvc.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,112 +16,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef FWCORE_PODIODATASVC_H
#define FWCORE_PODIODATASVC_H
#ifndef K4FWCORE_PODIODATASVC_H
#define K4FWCORE_PODIODATASVC_H

#include "GaudiKernel/DataSvc.h"
#include "GaudiKernel/IConversionSvc.h"
// PODIO
#include <utility>
#include "podio/CollectionBase.h"
#include "podio/CollectionIDTable.h"
#include "podio/Frame.h"
#include "podio/ROOTFrameReader.h"
// Forward declarations
#include "k4FWCore/DataWrapper.h"
class DataWrapperBase;
class PodioOutput;
template <typename T> class MetaDataHandle;
#include "k4FWCore/k4DataSvc.h"

/** @class PodioEvtSvc EvtDataSvc.h
*
* An EvtDataSvc for PODIO classes
*
* @author B. Hegner
*/
class PodioDataSvc : public DataSvc {
template <typename T> friend class MetaDataHandle;
friend class PodioOutput;

public:
typedef std::vector<std::pair<std::string, podio::CollectionBase*>> CollRegistry;

StatusCode initialize() final;
StatusCode reinitialize() final;
StatusCode finalize() final;
StatusCode clearStore() final;
StatusCode i_setRoot(std::string root_path, IOpaqueAddress* pRootAddr) final;
StatusCode i_setRoot(std::string root_path, DataObject* pRootObj) final;

/// Standard Constructor
PodioDataSvc(const std::string& name, ISvcLocator* svc);

/// Standard Destructor
virtual ~PodioDataSvc();

// Use DataSvc functionality except where we override
using DataSvc::registerObject;
/// Overriding standard behaviour of evt service
/// Register object with the data store.
virtual StatusCode registerObject(std::string_view parentPath, std::string_view fullPath,
DataObject* pObject) override final;

const std::string_view getCollectionType(const std::string& collName);

template <typename T> StatusCode readCollection(const std::string& collName) {
DataObject* objectPtr = nullptr;
if (DataSvc::findObject("/Event", "/" + collName, objectPtr)) {
debug() << "Collection " << collName << " already read, not reading it again" << endmsg;
return StatusCode::SUCCESS;
}
const T* collection(nullptr);
collection = static_cast<const T*>(m_eventframe.get(collName));
if (collection == nullptr) {
error() << "Collection " << collName << " does not exist." << endmsg;
}
auto wrapper = new DataWrapper<T>;
wrapper->setData(collection);
m_podio_datawrappers.push_back(wrapper);
return DataSvc::registerObject("/Event", "/" + collName, wrapper);
}

const podio::Frame& getEventFrame() const { return m_eventframe; }

/// Resets caches of reader and event store, increases event counter
void endOfRead();

/// TODO: Make this private again after conversions have been properly solved
podio::Frame& getMetaDataFrame() { return m_metadataframe; }

bool hasCollection(const std::string& name) const { return m_eventframe.get(name); }

private:
/// PODIO reader for ROOT files
podio::ROOTFrameReader m_reader;
/// PODIO Frame, used to initialise collections
podio::Frame m_eventframe;
/// PODIO Frame, used to store metadata
podio::Frame m_metadataframe;
/// Counter of the event number
int m_eventNum{0};
/// Number of events in the file / to process
int m_numAvailableEvents{-1};
int m_requestedEventMax{-1};
/// Whether reading from file at all
bool m_reading_from_file{false};

SmartIF<IConversionSvc> m_cnvSvc;

// Registry of data wrappers; needed for memory management
std::vector<DataWrapperBase*> m_podio_datawrappers;
using PodioDataSvc = k4DataSvc;

protected:
/// ROOT file name the input is read from. Set by option filename
std::vector<std::string> m_filenames;
std::string m_filename;
/// Jump to nth events at the beginning. Set by option FirstEventEntry
/// This option is helpful when we want to debug an event in the middle of a file
unsigned m_1stEvtEntry{0};
bool m_bounds_check_needed{true};
};
#endif // CORE_PODIODATASVC_H
#endif
Loading

0 comments on commit 6edf66a

Please sign in to comment.