TTTT Analysis  0.1
value.hpp
1 #ifndef root_value_hpp
2 #define root_value_hpp
3 #include "filval/value.hpp"
4 #include "TLorentzVector.h"
5 
6 namespace fv::root{
7 
8 class LorentzVectors : public DerivedValue<std::vector<TLorentzVector>>{
9  protected:
10  Value<std::vector<float>> *pt_val;
11  Value<std::vector<float>> *eta_val;
12  Value<std::vector<float>> *phi_val;
13  Value<std::vector<float>> *mass_val;
14 
15  void update_value(){
16  auto pt = pt_val->get_value();
17  auto eta = eta_val->get_value();
18  auto phi = phi_val->get_value();
19  auto mass = mass_val->get_value();
20  std::vector<int> sizes = {pt.size(), eta.size(), phi.size(), mass.size()};
21  int size = *std::min_element(sizes.begin(), sizes.end());
22  this->value.clear();
23  TLorentzVector lv;
24  for (int i =0; i<size; i++){
25  lv.SetPtEtaPhiM(pt[i], eta[i], phi[i], mass[i]);
26  this->value.push_back(lv);
27  }
28  }
29 
30  public:
31  LorentzVectors(Value<std::vector<float>>* pt,
32  Value<std::vector<float>>* eta,
33  Value<std::vector<float>>* phi,
34  Value<std::vector<float>>* mass,
35  const std::string& alias)
36  :DerivedValue<std::vector<TLorentzVector>>("lorentz_vectors("+pt->get_name()+","
37  +eta->get_name()+","
38  +phi->get_name()+","
39  +mass->get_name()+")",
40  alias),
41  pt_val(pt), eta_val(eta), phi_val(phi), mass_val(mass) { }
42 };
43 
44 class Energies : public DerivedValue<std::vector<float>>{
45  protected:
46  Value<std::vector<TLorentzVector>> *vectors;
47  void update_value(){
48  std::vector<TLorentzVector>& vecs = vectors->get_value();
49  this->value.clear();
50  for (auto v : vecs){
51  this->value.push_back(v.Energy());
52  }
53  }
54 
55  public:
56  Energies(Value<std::vector<TLorentzVector>> *vectors,
57  const std::string& alias)
58  :DerivedValue<std::vector<float>>("energies("+vectors->get_name()+")", alias),
59  vectors(vectors) { }
60 };
61 
62 }
63 #endif // root_value_hpp
Definition: api.hpp:8