BmnRoot
Loading...
Searching...
No Matches
BmnDataReader.h
Go to the documentation of this file.
1/*
2 BM@N alignment routine
3 BM@N experiment at NICA complex, JINR, 2025
4
5 Department: Math & Soft Group of HEP lab
6 Author: Igor Polev, polev@jinr.ru
7
8 BmnDataReader class header-only implementation
9 Stadard interface for reading data from set of ROOT files
10*/
11
12#ifndef BMNDATAREADER_H
13#define BMNDATAREADER_H
14
15#include "TChain.h"
16#include "TString.h"
17#include "TTreeReader.h"
18
19#include <fstream>
20#include <string>
21
22#define BMN_TREE_NAME_DEFAULT "bmndata"
23
25{
26 public:
27 BmnDataReader() = delete;
28 BmnDataReader(const char* filesListPath, const char* treeName = nullptr);
29 BmnDataReader(const std::string& filesListPath, const char* treeName = nullptr)
30 : BmnDataReader(filesListPath.c_str(), treeName) {};
31 BmnDataReader(const TString& filesListPath, const char* treeName = nullptr)
32 : BmnDataReader(filesListPath.Data(), treeName) {};
34 {
35 if (fpDataChain)
36 delete fpDataChain;
37 if (fpReader)
38 delete fpReader;
39 }
40
41 TChain& Chain() { return *fpDataChain; }
42 TTreeReader& Reader() { return *fpReader; }
43
44 private:
45 TChain* fpDataChain{nullptr};
46 TTreeReader* fpReader{nullptr};
47};
48
49inline BmnDataReader::BmnDataReader(const char* filePathList, const char* treeName)
50{
51 const char* treeNameFinal{treeName ? treeName : BMN_TREE_NAME_DEFAULT};
52
53 // collect .root files into chain
54 std::ifstream file(filePathList);
55 if (!file.is_open())
56 throw std::runtime_error(std::string("BmnDataReader: failed to open ROOT list file ") + filePathList);
57 fpDataChain = new TChain(treeNameFinal);
58 std::string filePath;
59 while (getline(file, filePath))
60 if (!fpDataChain->Add(filePath.c_str(), 0)) {
61 delete fpDataChain;
62 throw std::runtime_error(std::string("BmnDataReader: failed to access file ") + filePath + " or tree "
63 + treeNameFinal + " not found");
64 }
65 file.close();
66
67 // init reader
68 fpReader = new TTreeReader{fpDataChain};
69 if (-1 == fpReader->GetEntries()) {
70 delete fpReader;
71 delete fpDataChain;
72 throw std::runtime_error(std::string("BmnDataReader: failed to init reader for ") + treeNameFinal);
73 }
74}
75
76#endif // BMNDATAREADER_H
#define BMN_TREE_NAME_DEFAULT
TTreeReader & Reader()
BmnDataReader(const std::string &filesListPath, const char *treeName=nullptr)
BmnDataReader(const TString &filesListPath, const char *treeName=nullptr)
TChain & Chain()
BmnDataReader()=delete