TreeReader.hh
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 #include <map>
5 #include <iostream>
6 
7 #include "TChain.h"
8 #include "TTreeReader.h"
9 
11 #include "boca/io/Source.hh"
12 #include "boca/event/Delphes.hh"
13 #include "boca/event/ExRoot.hh"
14 
15 namespace boca
16 {
17 
18 enum class Branch
19 {
20  particle,
21  photon,
22  electron,
23  muon,
24  jet,
25  missing_et,
26  track,
27  tower,
32  gen_jet,
33  scalar_ht,
34  tau
35 };
36 
37 std::string Name(Branch branch);
38 
40 {
41 
42 public:
43 
44  TreeReader(std::vector<std::string> const& paths, std::string const& tree_name, Source source = Source::delphes);
45 
46  TreeReader(std::string const& path, std::string const& tree_name, Source source = Source::delphes);
47 
48  TreeReader(TreeReader const& tree_reader);
49 
50  long GetEntries() const;
51 
52  bool Next();
53 
54  bool ReadEntry(long number);
55 
56  template<typename Object_>
57  TTreeReaderArray<Object_>& Array(Branch branch) const {
58  if (!Has(branch)) std::cout << Name(branch) << " does not exist " << generator_arrays_.size() << '\n';
59  return const_cast<TTreeReaderArray<Object_> &>(*std::dynamic_pointer_cast<TTreeReaderArray<Object_>>(generator_arrays_.at(branch)).get());
60  }
61 
62  template<typename Object_>
63  TTreeReaderArray<Object_>& Array(std::string const& name) {
64  if (!Has(name)) tagger_arrays_.emplace(name, std::make_shared<TTreeReaderArray<Object_>>(tree_reader_, name.c_str()));
65  return const_cast<TTreeReaderArray<Object_> &>(*std::dynamic_pointer_cast<TTreeReaderArray<Object_>>(tagger_arrays_.at(name)).get());
66  }
67 
68  TreeReaderArray& Array(std::string const& name, TClass & cl);
69 
70  bool Has(Branch branch) const;
71 
72  bool Has(std::string const& name) const;
73 
74  TChain & Chain();
75 
77  return {*this};
78  }
79 
81  return {*this};
82  }
83 
84 private:
85 
86  void NewBase(std::string name, TClass & cl);
87 
88  TreeReaderArray& Array(std::string const& name) const;
89 
90  template<typename Object_>
91  void NewElement(std::string const& name) {
92  if (Has(name)) std::cout << name << " exists already, will be overwritten" << tagger_arrays_.size() << '\n';
93  tagger_arrays_.emplace(name, std::make_shared<TTreeReaderArray<Object_>>(tree_reader_, name.c_str()));
94  }
95 
96  void Initialize();
97 
98  template<typename Object_>
99  void NewElement(Branch branch) {
100  if (Has(branch)) std::cout << Name(branch) << " exists already will be overwritten " << generator_arrays_.size() << '\n';
101  generator_arrays_.emplace(branch, std::make_shared<TTreeReaderArray<Object_>>(tree_reader_, Name(branch).c_str()));
102  }
103 
104  void NewElements();
105 
106  std::map<Branch, std::shared_ptr<ROOT::Internal::TTreeReaderArrayBase>> generator_arrays_;
107 
108  std::map<std::string, std::shared_ptr<ROOT::Internal::TTreeReaderArrayBase>> tagger_arrays_;
109 
110  TChain chain_;
111 
112  TTreeReader tree_reader_;
113 
114  Source source_;
115 
116  std::string tree_name_;
117 
118  std::vector<std::string> paths_;
119 
120 // std::unique_ptr<boca::Event> event_;
121 
122 };
123 
124 }
TTreeReaderArray< Object_ > & Array(Branch branch) const
Definition: TreeReader.hh:57
boca::delphes::Event DelphesEvent() const
Definition: TreeReader.hh:76
Delphes events.
Definition: Delphes.hh:23
Definition: TreeReader.hh:39
Definition: TreeReaderArray.hh:14
boca::exroot::Event ExRootEvent() const
Definition: TreeReader.hh:80
TTreeReaderArray< Object_ > & Array(std::string const &name)
Definition: TreeReader.hh:63
Boosted Collider Analysis.
Definition: Analysis.hh:15
Branch
Definition: TreeReader.hh:18
pgs and parton events
Definition: ExRoot.hh:22
Dim3 Next(Dim3 dim)
Definition: Vector3.cpp:40
std::string Name(Output output)
Definition: Base.cpp:23
Source
Definition: Source.hh:11