#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: static std::string fmt_name(Value>* pt, Value>* eta, Value>* phi, Value>* mass){ return "lorentz_vectors("+pt->get_name()+"," +eta->get_name()+","+ phi->get_name()+"," +mass->get_name()+")"; } LorentzVectors(Value>* pt, Value>* eta, Value>* phi, Value>* mass, const std::string& alias) :DerivedValue>(fmt_name(pt,eta,phi,mass), 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: static std::string fmt_name(Value> *vectors){ return "energies("+vectors->get_name()+")"; } Energies(Value> *vectors, const std::string& alias) :DerivedValue>(fmt_name(vectors), alias), vectors(vectors) { } }; template class MVAData : public DerivedValue, bool, bool, double>>{ private: Value>* data; Value* is_training; Value* is_signal; Value* weight; public: static std::string fmt_name(Value>* data, Value* is_training, Value* is_signal, Value* weight){ return "mva_data("+data->get_name()+"," +is_training->get_name()+"," +is_signal->get_name()+"," +weight->get_name()+")"; } MVAData(Value>* data, Value* is_training, Value* is_signal, Value* weight, const std::string& alias="") :DerivedValue, bool, double>>(fmt_name(data, is_training, is_signal, weight), alias), data(data), is_training(is_training), is_signal(is_signal), weight(weight) { } }; } #endif // root_value_hpp