api.hpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef ROOT_API_HPP
  2. #define ROOT_API_HPP
  3. #include <string>
  4. #include <vector>
  5. #include <tuple>
  6. #include "filval/api.hpp"
  7. #include "filval_root/value.hpp"
  8. namespace fv::root{
  9. decltype(auto)
  10. lorentz_vectors(Value<std::vector<float>>* pt, Value<std::vector<float>>* eta,
  11. Value<std::vector<float>>* phi, Value<std::vector<float>>* mass,
  12. const std::string& alias=""){
  13. typedef std::vector<TLorentzVector> type;
  14. const std::string& name = root::LorentzVectors::fmt_name(pt, eta, phi, mass);
  15. if (check_exists<type>(name))
  16. return lookup<type>(name);
  17. else
  18. return (Value<type>*)new root::LorentzVectors(pt, eta, phi, mass, alias);
  19. }
  20. decltype(auto)
  21. lorentz_vectors(const std::string& pt_name, const std::string& eta_name,
  22. const std::string& phi_name, const std::string& mass_name,
  23. const std::string& alias=""){
  24. return lorentz_vectors(lookup<std::vector<float>>(pt_name), lookup<std::vector<float>>(eta_name),
  25. lookup<std::vector<float>>(phi_name), lookup<std::vector<float>>(mass_name),
  26. alias);
  27. }
  28. decltype(auto)
  29. energies(Value<std::vector<TLorentzVector>>* vectors, const std::string& alias=""){
  30. typedef std::vector<float> type;
  31. const std::string& name = root::Energies::fmt_name(vectors);
  32. if (check_exists<type>(name))
  33. return lookup<type>(name);
  34. else
  35. return (Value<type>*)new root::Energies(vectors, alias);
  36. }
  37. decltype(auto)
  38. energies(const std::string& vectors_name, const std::string& alias=""){
  39. return energies(lookup<std::vector<TLorentzVector>>(vectors_name), alias);
  40. }
  41. }
  42. #endif // ROOT_API_HPP