Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 {
26 #if ROOT_VERSION_CODE >= ROOT_VERSION( 6, 35, 0 )
28 #else
30 #endif
31 
33  public:
35  RNTupleWriterHelper(TFile* file, const std::string& ntupleName,
36  bool enableBufferedWrite, bool enableMetrics);
37 
39  ~RNTupleWriterHelper() = default;
40 
42  void makeNewEntry();
43 
45  // The convention for the tuple is <name, type, data>
46  typedef std::tuple<std::string, std::string, void*> attrDataTuple;
47  void addAttribute(const attrDataTuple& in);
48 
50  void addField(const std::string& field_name, const std::string& attr_type);
51 
53  void addFieldValue(const std::string& field_name, void* attr_data);
54 
56  int commit();
57 
59  const std::string& getName() const { return m_ntupleName; }
60 
62  size_t size() const { return m_rowN; }
63 
65  bool needsCommit() const { return m_needsCommit; }
66 
68  bool isGrouped() const { return m_clients > 1; }
69 
72 
74  void close();
75 
76  private:
78  std::map<std::string, void*> m_attrDataMap;
79 
84  std::unique_ptr<RNTupleModel> m_model;
85 
87  std::unique_ptr<REntry> m_entry;
88 
90  std::unique_ptr<RNTupleWriter> m_ntupleWriter;
91 
92  std::string m_ntupleName;
93  TFile* m_tfile;
95  int m_rowN = 0;
96 
99  int m_clients = 0;
100  bool m_needsCommit = false;
101 
104 };
105 
106 } // namespace RootStorageSvc
107 #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:92
RootStorageSvc::RNTupleWriterHelper::isGrouped
bool isGrouped() const
Is this RNTuple used by more than one APR container?
Definition: RNTupleWriterHelper.h:68
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:84
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:65
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:78
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:46
RootStorageSvc::RNTupleWriteOptions
ROOT::RNTupleWriteOptions RNTupleWriteOptions
Definition: RNTupleWriterHelper.h:27
RootStorageSvc::RNTupleWriterHelper::m_needsCommit
bool m_needsCommit
Definition: RNTupleWriterHelper.h:100
RootStorageSvc::RNTupleWriterHelper::m_entry
std::unique_ptr< REntry > m_entry
Internal cache for the RNEntry.
Definition: RNTupleWriterHelper.h:87
RootStorageSvc::RFieldBase
ROOT::Experimental::RFieldBase RFieldBase
Definition: RNTupleWriterHelper.h:22
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:71
RootStorageSvc::RNTupleWriterHelper::getName
const std::string & getName() const
Name of the RNTuple.
Definition: RNTupleWriterHelper.h:59
RootStorageSvc::RNTupleWriterHelper::m_rowN
int m_rowN
Definition: RNTupleWriterHelper.h:95
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:103
RootStorageSvc::RNTupleWriterHelper
Definition: RNTupleWriterHelper.h:32
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:99
RootStorageSvc::RNTupleWriterHelper::m_opts
RNTupleWriteOptions m_opts
Definition: RNTupleWriterHelper.h:94
ROOT::Experimental
Definition: RNTCollection.h:26
RootStorageSvc::RNTupleWriterHelper::m_ntupleWriter
std::unique_ptr< RNTupleWriter > m_ntupleWriter
Internal cache for the native RNTupleWriter.
Definition: RNTupleWriterHelper.h:90
RootStorageSvc::RNTupleWriterHelper::size
size_t size() const
Size of the RNTuple.
Definition: RNTupleWriterHelper.h:62
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:93
RootStorageSvc::RNTupleWriterHelper::makeNewEntry
void makeNewEntry()
Create a new empty RNTuple row with the current model (fields)