ATLAS Offline Software
Loading...
Searching...
No Matches
RNTupleWriterHelper.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef RNTUPLEWRITERHELPER_H
6#define RNTUPLEWRITERHELPER_H
7
8#include "POOLCore/DbPrint.h"
9
10#include "ROOT/REntry.hxx"
11#include "ROOT/RField.hxx"
12#include "ROOT/RNTuple.hxx"
13#include "ROOT/RNTupleWriteOptions.hxx"
14#include "ROOT/RNTupleWriter.hxx"
15
16#include <tuple>
17
18namespace RootStorageSvc {
19
21 public:
23 RNTupleWriterHelper(TFile* file, const std::string& ntupleName,
24 bool enableBufferedWrite, bool enableMetrics);
25
28
31
33 // The convention for the tuple is <name, type, data>
34 typedef std::tuple<std::string, std::string, void*> attrDataTuple;
35 void addAttribute(const attrDataTuple& in);
36
38 void addField(const std::string& field_name, const std::string& attr_type);
39
41 void addFieldValue(const std::string& field_name, void* attr_data);
42
44 int commit();
45
47 const std::string& getName() const { return m_ntupleName; }
48
50 size_t size() const { return m_rowN; }
51
53 bool needsCommit() const { return m_needsCommit; }
54
56 bool isGrouped() const { return m_clients > 1; }
57
60
62 void close();
63
64 private:
66 std::map<std::string, void*> m_attrDataMap;
67
72 std::unique_ptr<ROOT::RNTupleModel> m_model;
73
75 std::unique_ptr<ROOT::REntry> m_entry;
76
78 std::unique_ptr<ROOT::RNTupleWriter> m_ntupleWriter;
79
80 std::string m_ntupleName;
81 TFile* m_tfile;
82 ROOT::RNTupleWriteOptions m_opts;
83 int m_rowN = 0;
84
87 int m_clients = 0;
88 bool m_needsCommit = false;
89
92};
93
94} // namespace RootStorageSvc
95#endif
const std::string & getName() const
Name of the RNTuple.
void increaseClientCount()
Keep track of how many APR containers are writing to this RNTuple.
void addAttribute(const attrDataTuple &in)
std::unique_ptr< ROOT::RNTupleModel > m_model
Internal cache for the RNTuple model Before first commit the fields are added to the model At the fir...
bool m_collectMetrics
Enable/Disable Metric Collection.
void close()
Close the writer.
int m_clients
Count how many APR Containers are writing to this RNTuple (more than one makes a Group)
bool isGrouped() const
Is this RNTuple used by more than one APR container?
~RNTupleWriterHelper()=default
Default Destructor.
void makeNewEntry()
Create a new empty RNTuple row with the current model (fields)
size_t size() const
Size of the RNTuple.
std::tuple< std::string, std::string, void * > attrDataTuple
Add a new field to the RNTuple, collect the data pointer for the commit.
RNTupleWriterHelper(TFile *file, const std::string &ntupleName, bool enableBufferedWrite, bool enableMetrics)
Constructor.
void addFieldValue(const std::string &field_name, void *attr_data)
Supply data address for a given field.
std::unique_ptr< ROOT::RNTupleWriter > m_ntupleWriter
Internal cache for the native RNTupleWriter.
void addField(const std::string &field_name, const std::string &attr_type)
Add a new field to the RNTuple.
std::unique_ptr< ROOT::REntry > m_entry
Internal cache for the RNEntry.
bool needsCommit() const
Check if any data needs to be committed.
std::map< std::string, void * > m_attrDataMap
Store data ptr for the first row, when only creating the model.
AthMessaging wrapper to set the output level in APR components.
Definition DbPrint.h:35
TFile * file