CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
RntDumper.cc
Go to the documentation of this file.
1 #include "RntDumper.h"
2 
3 #include <ROOT/RNTuple.hxx>
4 #include <ROOT/RNTupleModel.hxx>
5 #if ROOT_VERSION_CODE >= ROOT_VERSION(6, 32, 0)
6 #include <ROOT/RNTupleWriter.hxx>
7 #endif
8 
9 #include "TFile.h"
10 #include "TTree.h"
11 
12 #include <vector>
13 
14 namespace REX = ROOT::Experimental;
15 
16 std::vector<RntDumper *> RntDumper::s_instances;
17 
18 RntDumper::RntDumper(const char *fname) : m_file(TFile::Open(fname, "recreate")) {
19  if (!m_file || !m_file->IsOpen()) {
20  printf("RntDumper::RntDumper() failed creeating file '%s'.\n", fname);
21  throw std::runtime_error("Failed creating file");
22  }
23  printf("RntDumper::RntDumper() succesfully opened file '%s'.\n", fname);
24 }
25 
27  printf("RntDumper::~RntDumper() destroying writers and closing file '%s'.\n", m_file->GetName());
28  // Finish up trees first, ntuple-writers seem to write everything reulting
29  // in two cycles of trees.
30  for (auto &tp : m_trees) {
31  tp->Write();
32  delete tp;
33  }
34  m_trees.clear();
35  m_writers.clear();
36  if (m_file) {
37  m_file->Close();
38  }
39 }
40 
41 std::unique_ptr<REX::RNTupleModel> RntDumper::CreateModel() { return RNTupleModel::Create(); }
42 
43 REX::RNTupleWriter *RntDumper::WritifyModel(std::unique_ptr<REX::RNTupleModel> &model, std::string_view mname) {
44  auto wup = RNTupleWriter::Append(std::move(model), mname, *m_file);
45  REX::RNTupleWriter *w = wup.get();
46  m_writers.insert({std::string(mname), std::move(wup)});
47  return w;
48 }
49 
50 void RntDumper::RegisterTree(TTree *t) { m_trees.push_back(t); }
51 
52 // === static ===
53 
55  // Should check fnames ?
56  RntDumper *d = new RntDumper(fname);
57  s_instances.push_back(d);
58  return d;
59 }
60 
62  printf("RntDumper::FinalizeAll() shutting down %d instances.\n", (int)s_instances.size());
63  for (auto &d : s_instances)
64  delete d;
65 }
~RntDumper()
Definition: RntDumper.cc:26
std::unique_ptr< TFile > m_file
Definition: RntDumper.h:36
std::unordered_map< std::string, std::unique_ptr< RNTupleWriter > > m_writers
Definition: RntDumper.h:37
T w() const
RntDumper(const char *fname)
Definition: RntDumper.cc:18
static std::vector< RntDumper * > s_instances
Definition: RntDumper.h:40
RNTupleWriter * WritifyModel(std::unique_ptr< RNTupleModel > &model, std::string_view mname)
Definition: RntDumper.cc:43
static void FinalizeAll()
Definition: RntDumper.cc:61
d
Definition: ztail.py:151
std::unique_ptr< RNTupleModel > CreateModel()
Definition: RntDumper.cc:41
std::vector< TTree * > m_trees
Definition: RntDumper.h:38
string fname
main script
static RntDumper * Create(const char *fname)
Definition: RntDumper.cc:54
void RegisterTree(TTree *t)
Definition: RntDumper.cc:50
def move(src, dest)
Definition: eostools.py:511