Files.hh
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <mutex>
7 
8 #include "boca/io/FileWriter.hh"
10 #include "boca/branch/Info.hh"
11 #include "boca/io/FileInfo.hh"
12 #include "boca/generic/Debug.hh"
13 
14 namespace boca
15 {
16 
17 namespace analysis
18 {
19 
20 template<typename Tagger_>
21 class Files
22 {
23 
24 public:
25 
26  Files(boca::Phase& phase, boca::FileInfo & file, boca::FileWriter& file_writer, Tagger_& tagger) :
27  tagger_(tagger),
28  reader_(phase.Stage()),
29  import_file_(file),
30  phase_(phase),
31  object_sum_(0),
32  event_sum_(0) {
33  tree_writer_ = &file_writer.NewTree(Import().TaggerTreeName());
34  switch (Phase().Stage()) {
35  case Stage::trainer : tagger_.NewBranch(TreeWriter(), Phase().Stage());
36  break;
37  case Stage::reader : reader_.NewBranch(TreeWriter(), Phase().Stage());
38  break;
39  }
40  tree_branch_ = &(tree_writer_->NewBranch<branch::Info>(tagger_.WeightBranchName()));
41  }
42 
43  ~Files() {
44  Debug("PreCut ratio", RoundToDigits(static_cast<double>(object_sum_.load()) / event_sum_.load()));
45  if (object_sum_.load()) TreeWriter().Write();
46  }
47 
48  void SafeEntry() {
49  auto info_branch = branch::Info{Import()};
50  info_branch.SetEventNumber(event_sum_.load());
51  std::lock_guard<std::mutex> lock(write_mutex);
52  TreeBranch().AddEntry(info_branch);
53  TreeWriter().Fill();
54  }
55  void Increment(int number) {
56  object_sum_ += number;
57  ++event_sum_;
58  if (debug_) Debug("event: ", event_sum_.load(), "object: ", object_sum_.load());
59  }
60 
62  return reader_;
63  }
64 
65  Tagger_ Tagger() const {
66  return tagger_;
67  }
68 
69  bool KeepGoing(std::function<long(Stage)> const& event_number_max) const {
70  return object_sum_.load() < event_number_max(Phase().Stage());
71  }
72 
73  boca::Phase Phase() const {
74  return phase_;
75  }
76 
78  return import_file_;
79  }
80 
81 private:
82 
84  return *tree_branch_;
85  }
86 
88  return *tree_writer_;
89  }
90 
91  Tagger_& tagger_;
92 
93  boca::Reader<Tagger_> reader_;
94 
95  boca::TreeBranch* tree_branch_;
96 
97  boca::TreeWriter* tree_writer_;
98 
99  FileInfo & import_file_;
100 
101  boca::Phase phase_;
102 
103  std::mutex write_mutex;
104 
105  std::atomic<long> object_sum_;
106 
107  std::atomic<long> event_sum_;
108 
109  bool debug_ = false;
110 
111 };
112 
113 }
114 
115 }
Training stage.
Files(boca::Phase &phase, boca::FileInfo &file, boca::FileWriter &file_writer, Tagger_ &tagger)
Definition: Files.hh:26
Stage
The stage of the multivariant tagging process.
Definition: Stage.hh:15
TreeWriter & NewTree(std::string const &tree_name)
Definition: FileWriter.cpp:9
void SafeEntry()
Definition: Files.hh:48
void Debug(bool final=true)
Definition: Debug.cpp:60
read results of multivariant analysis wrapper for TMVA::Reader
Definition: Reader.hh:26
void Fill()
Definition: TreeWriter.cpp:34
void Write()
Definition: TreeWriter.cpp:41
Definition: TreeBranch.hh:12
Definition: FileWriter.hh:10
TreeBranch & NewBranch(std::string const &name, TClass &cl)
Definition: TreeWriter.cpp:27
boca::Phase Phase() const
Definition: Files.hh:73
Definition: Files.hh:21
double RoundToDigits(double value, int digits=3)
Round value to digits.
Definition: Math.cpp:38
Definition: TreeWriter.hh:14
Boosted Collider Analysis.
Definition: Analysis.hh:15
Branch_ & AddEntry()
Definition: TreeBranch.hh:26
bool KeepGoing(std::function< long(Stage)> const &event_number_max) const
Definition: Files.hh:69
boca::Reader< Tagger_ > Reader() const
Definition: Files.hh:61
Input file infos.
Definition: FileInfo.hh:22
Tagger_ Tagger() const
Definition: Files.hh:65
Reading stage.
~Files()
Definition: Files.hh:43
Info tree branch
Definition: Info.hh:23
The phases of the multivariant tagging process.
Definition: Phase.hh:16
boca::FileInfo Import() const
Definition: Files.hh:77
void Increment(int number)
Definition: Files.hh:55