ATLAS Offline Software
RNTupleWriterHelper.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef RNTUPLEWRITERHELPER_H
6 #define RNTUPLEWRITERHELPER_H
7 
9 #include "ROOT/REntry.hxx"
10 #include "ROOT/RField.hxx"
11 #include "ROOT/RNTuple.hxx"
12 #include "ROOT/RNTupleWriteOptions.hxx"
13 #include "ROOT/RNTupleWriter.hxx"
14 
15 #include <tuple>
16 
17 namespace ROOT::Experimental {
18 class RNTupleModel;
19 }
20 
21 namespace RootStorageSvc {
27 
29  public:
31  RNTupleWriterHelper(TFile* file, const std::string& ntupleName,
32  bool enableBufferedWrite, bool enableMetrics);
33 
35  ~RNTupleWriterHelper() = default;
36 
38  void makeNewEntry();
39 
41  // The convention for the tuple is <name, type, data>
42  typedef std::tuple<std::string, std::string, void*> attrDataTuple;
43  void addAttribute(const attrDataTuple& in);
44 
46  void addField(const std::string& field_name, const std::string& attr_type);
47 
49  void addFieldValue(const std::string& field_name, void* attr_data);
50 
52  int commit();
53 
55  const std::string& getName() const { return m_ntupleName; }
56 
58  size_t size() const { return m_rowN; }
59 
61  bool needsCommit() const { return m_needsCommit; }
62 
64  bool isGrouped() const { return m_clients > 1; }
65 
68 
70  void close();
71 
72  private:
74  std::map<std::string, void*> m_attrDataMap;
75 
80  std::unique_ptr<RNTupleModel> m_model;
81 
83  std::unique_ptr<REntry> m_entry;
84 
86  std::unique_ptr<RNTupleWriter> m_ntupleWriter;
87 
88  std::string m_ntupleName;
89  TFile* m_tfile;
91  int m_rowN = 0;
92 
95  int m_clients = 0;
96  bool m_needsCommit = false;
97 
100 };
101 
102 } // namespace RootStorageSvc
103 #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:88
RootStorageSvc::RNTupleWriterHelper::isGrouped
bool isGrouped() const
Is this RNTuple used by more than one APR container?
Definition: RNTupleWriterHelper.h:64
RootStorageSvc::RNTupleWriterHelper::m_model
std::unique_ptr< 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:80
RootStorageSvc::RNTupleWriterHelper::addField
void addField(const std::string &field_name, const std::string &attr_type)
Add a new field to the RNTuple.
RootStorageSvc::RNTupleModel
ROOT::Experimental::RNTupleModel RNTupleModel
Definition: RNTupleWriterHelper.h:24
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:61
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:74
RootStorageSvc::RNTupleWriter
ROOT::Experimental::RNTupleWriter RNTupleWriter
Definition: RNTupleWriterHelper.h:23
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:42
RootStorageSvc::RNTupleWriterHelper::m_needsCommit
bool m_needsCommit
Definition: RNTupleWriterHelper.h:96
RootStorageSvc::RNTupleWriterHelper::m_entry
std::unique_ptr< REntry > m_entry
Internal cache for the RNEntry.
Definition: RNTupleWriterHelper.h:83
RootStorageSvc::RFieldBase
ROOT::Experimental::RFieldBase RFieldBase
Definition: RNTupleWriterHelper.h:22
RootStorageSvc::RNTupleWriteOptions
ROOT::Experimental::RNTupleWriteOptions RNTupleWriteOptions
Definition: RNTupleWriterHelper.h:26
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:67
RootStorageSvc::RNTupleWriterHelper::getName
const std::string & getName() const
Name of the RNTuple.
Definition: RNTupleWriterHelper.h:55
RootStorageSvc::RNTupleWriterHelper::m_rowN
int m_rowN
Definition: RNTupleWriterHelper.h:91
RootStorageSvc::RNTupleWriterHelper::addAttribute
void addAttribute(const attrDataTuple &in)
file
TFile * file
Definition: tile_monitor.h:29
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
RootStorageSvc::RNTupleWriterHelper::m_collectMetrics
bool m_collectMetrics
Enable/Disable Metric Collection.
Definition: RNTupleWriterHelper.h:99
RootStorageSvc::RNTupleWriterHelper
Definition: RNTupleWriterHelper.h:28
AthMessaging.h
RootStorageSvc::REntry
ROOT::Experimental::REntry REntry
Definition: RNTupleWriterHelper.h:25
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:95
RootStorageSvc::RNTupleWriterHelper::m_opts
RNTupleWriteOptions m_opts
Definition: RNTupleWriterHelper.h:90
ROOT::Experimental
Definition: RNTCollection.h:28
RootStorageSvc::RNTupleWriterHelper::m_ntupleWriter
std::unique_ptr< RNTupleWriter > m_ntupleWriter
Internal cache for the native RNTupleWriter.
Definition: RNTupleWriterHelper.h:86
RootStorageSvc::RNTupleWriterHelper::size
size_t size() const
Size of the RNTuple.
Definition: RNTupleWriterHelper.h:58
RootStorageSvc
Definition: RNTupleContainer.h:27
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:89
RootStorageSvc::RNTupleWriterHelper::makeNewEntry
void makeNewEntry()
Create a new empty RNTuple row with the current model (fields)