53 phlex::concurrency max_concurrency,
55 using namespace phlex::experimental;
56 using namespace phlex::detail;
58 provider_bundles bundles;
59 std::string
const layer =
"event";
60 std::string
const stage =
"CURRENT";
62 product_specification particles_spec{
63 algorithm_name::create(
"mc_particles"), identifier{
"particles"},
64 make_type_id<std::vector<SHiP::MCParticle>>()};
66 if (selector.match(particles_spec, identifier{layer}, identifier{stage})) {
67 bundles.push_back(provider_bundle{
69 [generate = std::move(generate)](phlex::data_cell_index
const& id)
70 -> product_ptr {
return product_for(generate(
id)); },
71 .max_concurrency = max_concurrency,
72 .spec = std::move(particles_spec),
77 product_specification header_spec{algorithm_name::create(
"event_header"),
79 make_type_id<SHiP::EventHeader>()};
81 if (selector.match(header_spec, identifier{layer}, identifier{stage})) {
82 bundles.push_back(provider_bundle{
84 [generate_header = std::move(generate_header)](
85 phlex::data_cell_index
const& id) -> product_ptr {
87 if (!generate_header)
return product_for(SHiP::EventHeader{});
88 return product_for(generate_header(
id));
90 .max_concurrency = max_concurrency,
91 .spec = std::move(header_spec),
phlex::detail::provider_bundles mc_particle_provider_bundles(phlex::product_selector const &selector, mc_particle_generator generate, phlex::concurrency max_concurrency, event_header_generator generate_header={})
Definition mc_particle_source.hpp:51