Data.hh
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include "boca/io/TreeReader.hh"
7 #include "boca/analysis/Files.hh"
8 #include "boca/Settings.hh"
9 
10 namespace boca
11 {
12 
13 namespace analysis
14 {
15 
16 template<typename Tagger_>
17 class Data
18 {
19 public:
20 
21  Data(boca::analysis::Files<Tagger_>& files, long object_sum_max, int core_sum, int core_number) :
22  files_(files),
23  reader_(files.Reader()),
24  tagger_(files.Tagger()),
25  tree_reader_(Files().Import().Paths(), Files().Import().GeneratorTreeName()) {
26  event_number_ = FirstEntry(object_sum_max, core_number);
27  core_sum_ = core_sum;
28  }
29 
30  void ReadEvents(PreCuts const& pre_cuts, std::function<long(Stage)> const& event_number_max, std::function<bool(boca::Event const&)> const& pass_pre_cut) {
31  while (KeepGoing(event_number_max)) ReadEvent(pre_cuts, pass_pre_cut);
32  }
33 
34 private:
35 
36  long FirstEntry(long object_sum_max, long core_number) {
37  auto entry = core_number;
38  if (Files().Phase().Stage() == Stage::reader) entry = std::min(GetEntries(), object_sum_max + core_number); // TODO fix corner cases
39  return entry;
40  }
41 
42  void ReadEvent(PreCuts const& pre_cuts, std::function<bool(boca::Event const&)> const& pass_pre_cut) {
43  std::lock_guard<std::mutex> lock(mutex_);
44  if (!ReadEntry()) return;
45  switch (Settings::Source()) {
46  case Source::snowmass :
47  case Source::delphes : return ReadDelphesEvent(pre_cuts, pass_pre_cut);
48  case Source::pgs : ;
49  case Source::parton : return ReadExRootEvent(pre_cuts, pass_pre_cut);
50  case Source::tagger : return;
51  }
52  }
53 
54  void ReadDelphesEvent(PreCuts const& pre_cuts, std::function<bool(boca::Event const&)> const& pass_pre_cut) {
55  auto event = TreeReader().DelphesEvent();
56  if (pass_pre_cut(event)) return SaveEntry(Switch(event, pre_cuts));
57  Increment(0);
58  }
59 
60  void ReadExRootEvent(PreCuts const& pre_cuts, std::function<bool(boca::Event const&)> const& pass_pre_cut) {
61  auto event = TreeReader().ExRootEvent();
62  if (pass_pre_cut(event)) return SaveEntry(Switch(event, pre_cuts));
63  Increment(0);
64  }
65 
66  void SaveEntry(int number) {
67  Increment(number);
68  if (number == 0) return;
69  Files().SafeEntry();
70  }
71 
72  int Switch(boca::Event const& event, PreCuts const& pre_cuts) {
73  switch (Files().Phase().Stage()) {
74  case Stage::trainer : return Tagger().Train(event, pre_cuts, Files().Phase().Tag());
75  case Stage::reader : return Reader().Bdt(event, pre_cuts);
76  default : return 0;
77  }
78  }
79 
80  bool ReadEntry() {
81  return TreeReader().ReadEntry(EventNumber());
82  }
83 
84  long GetEntries() const {
85  return TreeReader().GetEntries();
86  }
87 
88  void Increment(int number) {
89  EventNumber() += core_sum_;
90  Files().Increment(number);
91  }
92 
93  bool KeepGoing(std::function<long(Stage)> const& event_number_max) const {
94  return EventNumber() < GetEntries() && Files().KeepGoing(event_number_max);
95  }
96 
98  return files_;
99  }
100 
102  return tree_reader_;
103  }
104 
105  boca::TreeReader const& TreeReader() const {
106  return tree_reader_;
107  }
108 
109  long& EventNumber() {
110  return event_number_;
111  }
112 
113  long EventNumber() const {
114  return event_number_;
115  }
116 
117  Tagger_& Tagger() {
118  return tagger_;
119  }
120 
121  boca::analysis::Files<Tagger_> const& Files() const {
122  return files_;
123  }
124 
126  return reader_;
127  }
128 
130 
131  boca::Reader<Tagger_> reader_;
132 
133  Tagger_ tagger_;
134 
135  boca::TreeReader tree_reader_;
136 
137  long event_number_;
138 
139  int core_sum_;
140 
141  std::mutex mutex_;
142 
143 };
144 
145 }
146 
147 }
Training stage.
Stage
The stage of the multivariant tagging process.
Definition: Stage.hh:15
boca::delphes::Event DelphesEvent() const
Definition: TreeReader.hh:76
void SafeEntry()
Definition: Files.hh:48
Data(boca::analysis::Files< Tagger_ > &files, long object_sum_max, int core_sum, int core_number)
Definition: Data.hh:21
read results of multivariant analysis wrapper for TMVA::Reader
Definition: Reader.hh:26
Definition: PreCuts.hh:14
Definition: TreeReader.hh:39
Tag
The Tag distinguishes between signal and background events.
Definition: Tag.hh:14
Base class for the event Topology.
Definition: Event.hh:53
int Bdt(Event const &event, PreCuts const &pre_cuts)
Definition: Reader.hh:64
boca::exroot::Event ExRootEvent() const
Definition: TreeReader.hh:80
Definition: Files.hh:21
Boosted Collider Analysis.
Definition: Analysis.hh:15
long GetEntries() const
Definition: TreeReader.cpp:94
bool ReadEntry(long number)
Definition: TreeReader.cpp:100
bool KeepGoing(std::function< long(Stage)> const &event_number_max) const
Definition: Files.hh:69
virtual int Train(Event const &, PreCuts const &, Tag)=0
Definition: Data.hh:17
Tagger base class using Branch template
Definition: Tagger.hh:23
Reading stage.
static boca::Source Source()
Definition: Settings.cpp:199
The phases of the multivariant tagging process.
Definition: Phase.hh:16
void ReadEvents(PreCuts const &pre_cuts, std::function< long(Stage)> const &event_number_max, std::function< bool(boca::Event const &)> const &pass_pre_cut)
Definition: Data.hh:30
void Increment(int number)
Definition: Files.hh:55