ATLAS Offline Software
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 
18 namespace RootStorageSvc {
19 
21  public:
23  RNTupleWriterHelper(TFile* file, const std::string& ntupleName,
24  bool enableBufferedWrite, bool enableMetrics);
25 
27  ~RNTupleWriterHelper() = default;
28 
30  void makeNewEntry();
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
RootStorageSvc::RNTupleWriterHelper::close
void close()
Close the writer.
RootStorageSvc::RNTupleWriterHelper::~RNTupleWriterHelper
~RNTupleWriterHelper()=default
Default Destructor.
RootStorageSvc::RNTupleWriterHelper::m_ntupleName
std::string m_ntupleName
Definition: RNTupleWriterHelper.h:80
RootStorageSvc::RNTupleWriterHelper::isGrouped
bool isGrouped() const
Is this RNTuple used by more than one APR container?
Definition: RNTupleWriterHelper.h:56
RootStorageSvc::RNTupleWriterHelper::addField
void addField(const std::string &field_name, const std::string &attr_type)
Add a new field to the RNTuple.
RootStorageSvc::RNTupleWriterHelper::addFieldValue
void addFieldValue(const std::string &field_name, void *attr_data)
Supply data address for a given field.
RootStorageSvc::RNTupleWriterHelper::needsCommit
bool needsCommit() const
Check if any data needs to be committed.
Definition: RNTupleWriterHelper.h:53
RootStorageSvc::RNTupleWriterHelper::m_attrDataMap
std::map< std::string, void * > m_attrDataMap
Store data ptr for the first row, when only creating the model.
Definition: RNTupleWriterHelper.h:66
RootStorageSvc::RNTupleWriterHelper::attrDataTuple
std::tuple< std::string, std::string, void * > attrDataTuple
Add a new field to the RNTuple, collect the data pointer for the commit.
Definition: RNTupleWriterHelper.h:34
RootStorageSvc::RNTupleWriterHelper::m_needsCommit
bool m_needsCommit
Definition: RNTupleWriterHelper.h:88
pool::APRMessaging
AthMessaging wrapper to set the output level in APR components.
Definition: DbPrint.h:51
DbPrint.h
RootStorageSvc::RNTupleWriterHelper::commit
int commit()
Commit the data.
RootStorageSvc::RNTupleWriterHelper::increaseClientCount
void increaseClientCount()
Keep track of how many APR containers are writing to this RNTuple.
Definition: RNTupleWriterHelper.h:59
RootStorageSvc::RNTupleWriterHelper::getName
const std::string & getName() const
Name of the RNTuple.
Definition: RNTupleWriterHelper.h:47
RootStorageSvc::RNTupleWriterHelper::m_rowN
int m_rowN
Definition: RNTupleWriterHelper.h:83
RootStorageSvc::RNTupleWriterHelper::addAttribute
void addAttribute(const attrDataTuple &in)
file
TFile * file
Definition: tile_monitor.h:29
RootStorageSvc::RNTupleWriterHelper::m_ntupleWriter
std::unique_ptr< ROOT::RNTupleWriter > m_ntupleWriter
Internal cache for the native RNTupleWriter.
Definition: RNTupleWriterHelper.h:78
RootStorageSvc::RNTupleWriterHelper::m_collectMetrics
bool m_collectMetrics
Enable/Disable Metric Collection.
Definition: RNTupleWriterHelper.h:91
RootStorageSvc::RNTupleWriterHelper::m_entry
std::unique_ptr< ROOT::REntry > m_entry
Internal cache for the RNEntry.
Definition: RNTupleWriterHelper.h:75
RootStorageSvc::RNTupleWriterHelper
Definition: RNTupleWriterHelper.h:20
RootStorageSvc::RNTupleWriterHelper::m_clients
int m_clients
Count how many APR Containers are writing to this RNTuple (more than one makes a Group)
Definition: RNTupleWriterHelper.h:87
RootStorageSvc::RNTupleWriterHelper::m_model
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...
Definition: RNTupleWriterHelper.h:72
RootStorageSvc::RNTupleWriterHelper::m_opts
ROOT::RNTupleWriteOptions m_opts
Definition: RNTupleWriterHelper.h:82
RootStorageSvc::RNTupleWriterHelper::size
size_t size() const
Size of the RNTuple.
Definition: RNTupleWriterHelper.h:50
RootStorageSvc
Definition: RNTupleContainer.h:29
RootStorageSvc::RNTupleWriterHelper::RNTupleWriterHelper
RNTupleWriterHelper(TFile *file, const std::string &ntupleName, bool enableBufferedWrite, bool enableMetrics)
Constructor.
RootStorageSvc::RNTupleWriterHelper::m_tfile
TFile * m_tfile
Definition: RNTupleWriterHelper.h:81
RootStorageSvc::RNTupleWriterHelper::makeNewEntry
void makeNewEntry()
Create a new empty RNTuple row with the current model (fields)