00001 #ifndef HZZ2L2NU_INCLUDE_WEIGHTCOLLECTOR_H_ 00002 #define HZZ2L2NU_INCLUDE_WEIGHTCOLLECTOR_H_ 00003 00004 #include <initializer_list> 00005 #include <string_view> 00006 #include <tuple> 00007 #include <vector> 00008 00009 #include <WeightBase.h> 00010 00020 class WeightCollector { 00021 public: 00028 WeightCollector(std::initializer_list<WeightBase const *> computers = {}); 00029 00035 void Add(WeightBase const *computer); 00036 00043 double NominalWeight() const; 00044 00051 double operator()() const; 00052 00054 int NumVariations() const; 00055 00063 double RelWeight(int variation) const; 00064 00070 std::string_view VariationName(int variation) const; 00071 00072 private: 00078 std::tuple<int, int> TranslateIndex(int variation) const; 00079 00081 std::vector<WeightBase const *> computers_; 00082 }; 00083 00084 #endif // HZZ2L2NU_INCLUDE_WEIGHTCOLLECTOR_H_ 00085