22                return "left_leading";
 
   24                return "right_leading";
 
   26                return "left_trailing";
 
   28                return "right_trailing";
 
 
   40        InitAllDistributions(initHist.get());
 
 
   56        InitAllDistributions(initHist.get());
 
 
   62        constexpr int uniform_err_divider = 12;
 
   63        constexpr auto uniform_err_divider_sqrt = 
SQRT_12;
 
   64        const auto sqrt_3 = std::sqrt(3);
 
   73        auto calculate_meanerror_exact(
const InputInfo& input) -> ValueError<double>
 
   75            const auto base_vairance = input.bin_entry * input.bin_entry / uniform_err_divider;
 
   76            const auto sum_term = input.previous_sum + (input.bin_entry / 3);
 
   77            const auto bin_prob = input.bin_entry / input.total_entry;
 
   78            const auto pre_prob = input.previous_sum / input.total_entry;
 
   79            const auto residual = ((1 - bin_prob) * sum_term) - (input.previous_sum * pre_prob);
 
   81            const auto mean = input.previous_sum + (input.bin_entry / 2);
 
   82            return ValueError<double>{ mean, std::sqrt(base_vairance + residual) };
 
   85        auto calculate_meanerror_approx(
const InputInfo& input) -> ValueError<double>
 
   87            const auto mean = input.previous_sum + (input.bin_entry / 2);
 
   89            const auto base_error = input.bin_entry / uniform_err_divider_sqrt;
 
   90            const auto bin_prob = input.bin_entry / input.total_entry;
 
   91            const auto pre_prob = input.previous_sum / input.total_entry;
 
   92            const auto residual_main = (-(pre_prob - 0.5) * (pre_prob - 0.5)) + 0.25;
 
   93            const auto residual_factor = (bin_prob == 0.) ? 0. : sqrt_3 / bin_prob;
 
   95            return ValueError<double>{ mean, base_error + (residual_main * residual_factor) };
 
   98        auto calculate_meanerror_uniform_only(
const InputInfo& input) -> ValueError<double>
 
  100            const auto mean = input.previous_sum + (input.bin_entry / 2);
 
  101            const auto base_error = input.bin_entry / uniform_err_divider_sqrt;
 
  102            return ValueError<double>{ mean, base_error };
 
  105        auto calculate_meanerror_none(
const InputInfo& input) -> ValueError<double>
 
  107            const auto mean = input.previous_sum + (input.bin_entry / 2);
 
  108            return ValueError<double>{ mean, 0. };
 
  116                    return +[](
const InputInfo& input) { 
return calculate_meanerror_exact(input); };
 
  118                    return +[](
const InputInfo& input) { 
return calculate_meanerror_approx(input); };
 
  120                    return +[](
const InputInfo& input) { 
return calculate_meanerror_uniform_only(input); };
 
  122                    return +[](
const InputInfo& input) { 
return calculate_meanerror_none(input); };
 
  124                    throw R3B::logic_error(
"undefined enumerator for method type!");
 
  128        auto extract_bin_data(TH1* hist, 
int max_bin) -> ValueErrors
 
  130            auto output = ValueErrors{};
 
  131            output.reserve(max_bin);
 
  133            for (
size_t index{ 1 }; index < max_bin + 1; ++index)
 
  135                output.emplace_back(hist->GetBinContent(
static_cast<int>(index)), 0.);
 
  140        void scale_to_real_ns(ValueErrors& value_errors, 
double period, 
double total_entry)
 
  142            ranges::for_each(value_errors,
 
  143                             [&](ValueError<double>& value_error)
 
  145                                 value_error.value = value_error.value / total_entry * period;
 
  146                                 value_error.error = value_error.error / total_entry * period;
 
  150        auto calculate_value_errors(TH1* hist,
 
  155            auto output = extract_bin_data(hist, max_bin);
 
  157            auto method = use_method(methodtype);
 
  158            auto previous_sum = 0.;
 
  159            for (
auto& value_error : output)
 
  161                auto& value = value_error.value;
 
  162                auto& error = value_error.error;
 
  163                const auto inputInfo =
 
  164                    InputInfo{ .previous_sum = previous_sum, .bin_entry = value, .total_entry = total_entry };
 
  165                previous_sum += value;
 
  166                auto new_value_error = method(inputInfo);
 
  167                value = new_value_error.value;
 
  168                error = new_value_error.error;
 
  170            const auto overflow = total_entry - previous_sum;
 
  171            return std::make_pair(output, overflow);
 
  177        const auto total_entry = hist->GetEntries();
 
  179        auto bin_num = hist->GetNbinsX();
 
  181        max_bin = (bin_num > max_bin) ? max_bin : bin_num;
 
  183        auto [value_errors, overflow] = calculate_value_errors(hist, max_bin, total_entry, 
error_method_);
 
  189        calRelation.hist_overflow = overflow;