5 #include <TDirectory.h>
9 #include "Math/VectorUtil.h"
13 #include <boost/exception/all.hpp>
14 #include <boost/iterator/counting_iterator.hpp>
34 std::pair<T, T>
range,
42 BOOST_THROW_EXCEPTION(invalid_argument(
"Invalid binning range"));
44 BOOST_THROW_EXCEPTION(invalid_argument(
"Invalid binning parameter"));
46 BOOST_THROW_EXCEPTION(invalid_argument(
"Logarithmic binning requires range.first > 0"));
48 BOOST_THROW_EXCEPTION(invalid_argument(
"Log-step binning requires param > 1"));
58 using boost::counting_iterator;
59 vector<T> edges(counting_iterator<T>(
range.first /w),
60 counting_iterator<T>(
range.second/w+1));
61 ranges::for_each(edges, [w](T& edge) { edge *= w; });
63 ranges::for_each(edges, [](T& edge) { edge = pow(10,edge); });
72 template<
typename TTreePtr>
73 [[ deprecated(
"Use Darwin::Tools::Flow()") ]]
76 auto brList = tree->GetListOfBranches();
78 for (
auto it = brList->begin(); it != brList->end(); ++it) {
79 TString
name = (*it)->GetName();
80 if (
name == brName) brFound =
true;
87 template<
typename T> std::vector<T*>
GetObjects (TDirectory * dir)
90 BOOST_THROW_EXCEPTION( std::runtime_error(
"Trying to access inexistent `TDirectory`") );
91 std::vector<T*> objects;
92 for (
const auto&& element: *(dir->GetListOfKeys())) {
93 auto key =
dynamic_cast<TKey*
>(element);
94 if (
auto obj =
dynamic_cast<T*
>(
key->ReadObj()); obj)
95 objects.push_back(obj);
102 inline TDirectory *
GetDirectory (TDirectory * dir,
const std::vector<const char *>& names)
104 for (
const char *
name: names) {
105 TDirectory * subdir = dir->GetDirectory(
name);
107 BOOST_THROW_EXCEPTION( std::invalid_argument(
108 Form(
"`%s` could not be found in `%s`",
name, dir->GetName())) );
114 using ROOT::Math::VectorUtil::DeltaPhi;
115 using ROOT::Math::VectorUtil::DeltaR;