#include "hep/mc.hpp"
#include <array>
#include <cmath>
#include <cstddef>
#include <iostream>
#include <vector>
int main()
{
    constexpr std::array<double, 3> s = { -10.0, +10.0, 0.0 };
        double t = x.coordinates()[0];
        double const tms0 = t - s[0];
        double const tms1 = t - s[1];
        double const tms2 = t - s[2];
        double const value0 = 2.0 * std::exp(-tms0 * tms0);
        double const value1 = 1.0 * std::exp(-tms1 * tms1);
        double const value2 = 0.1 * std::exp(-tms2 * tms2);
        return (value0 + value1 + value2) / std::sqrt(std::acos(-1.0)) / 3.1;
    };
    auto const densities = [&](
        std::size_t channel,
        std::vector<double> const& random_numbers,
        std::vector<double>& coordinates,
        std::vector<std::size_t> const& enabled_channels,
        std::vector<double>& densities,
    ) {
        {
            
            return 1.0;
        }
        double t = std::tan(std::acos(-1.0) * (random_numbers[0] - 0.5));
        t += s.at(channel);
        coordinates[0] = t;
        std::array<double, 3> const tms = { t - s[0], t - s[1], t - s[2] };
        
        for (auto const i : enabled_channels)
        {
            densities[i] = 1.0 / (1.0 + tms.at(i) * tms.at(i)) / std::acos(-1.0);
        }
        
        return 1.0;
    };
        hep::make_multi_channel_integrand<double>(function, 1, densities, 1, 3),
        std::vector<std::size_t>(10, 1000000)
    ).results();
    std::cout << ">>> Disabling channel #2\n";
    auto adjustment_data = results.back().adjustment_data();
    adjustment_data.at(2) = 0.0;
        results.back().channel_weights(),
        adjustment_data,
        0.0,
        0.25
    );
    std::cout << ">>> Starting new run without channel #2\n\n";
        hep::make_multi_channel_integrand<double>(function, 1, densities, 1, 3),
        std::vector<std::size_t>(10, 1000000),
        hep::make_multi_channel_chkpt<double>(weights)
    ).results();
    return 0;
}