#ifndef root_value_hpp #define root_value_hpp #include "filval/value.hpp" #include "TLorentzVector.h" namespace fv::root{ class LorentzVectors : public DerivedValue>{ protected: Value> *pt_val; Value> *eta_val; Value> *phi_val; Value> *mass_val; void update_value(){ auto pt = pt_val->get_value(); auto eta = eta_val->get_value(); auto phi = phi_val->get_value(); auto mass = mass_val->get_value(); std::vector sizes = {pt.size(), eta.size(), phi.size(), mass.size()}; int size = *std::min_element(sizes.begin(), sizes.end()); this->value.clear(); TLorentzVector lv; for (int i =0; ivalue.push_back(lv); } } public: LorentzVectors(Value>* pt, Value>* eta, Value>* phi, Value>* mass, const std::string& alias) :DerivedValue>("lorentz_vectors("+pt->get_name()+"," +eta->get_name()+"," +phi->get_name()+"," +mass->get_name()+")", alias), pt_val(pt), eta_val(eta), phi_val(phi), mass_val(mass) { } }; class Energies : public DerivedValue>{ protected: Value> *vectors; void update_value(){ std::vector& vecs = vectors->get_value(); this->value.clear(); for (auto v : vecs){ this->value.push_back(v.Energy()); } } public: Energies(Value> *vectors, const std::string& alias) :DerivedValue>("energies("+vectors->get_name()+")", alias), vectors(vectors) { } }; } #endif // root_value_hpp