72 phlex::product_selector
const& selector, std::string
const& stage,
75 using namespace phlex::experimental;
77 phlex::provider_bundles bundles;
78 std::string
const layer =
"event";
80 product_specification particles_spec{
81 algorithm_name::create(
"mc_particles"), identifier{
"particles"},
82 make_type_id<std::vector<SHiP::MCParticle>>()};
84 if (selector.match(particles_spec, identifier{layer}, identifier{stage})) {
85 bundles.push_back(phlex::provider_bundle{
87 [generate = std::move(generate)](phlex::data_cell_index
const& id)
88 -> product_ptr {
return product_for(generate(
id)); },
89 .max_concurrency = max_concurrency,
90 .spec = std::move(particles_spec),
95 product_specification header_spec{algorithm_name::create(
"event_header"),
97 make_type_id<SHiP::EventHeader>()};
99 if (selector.match(header_spec, identifier{layer}, identifier{stage})) {
100 bundles.push_back(phlex::provider_bundle{
102 [generate_header = std::move(generate_header)](
103 phlex::data_cell_index
const& id) -> product_ptr {
105 if (!generate_header) {
106 return product_for(SHiP::EventHeader{});
108 return product_for(generate_header(
id));
110 .max_concurrency = max_concurrency,
111 .spec = std::move(header_spec),
phlex::provider_bundles mc_particle_provider_bundles(phlex::product_selector const &selector, std::string const &stage, mc_particle_generator generate, phlex::concurrency max_concurrency, event_header_generator generate_header={})
Definition mc_particle_source.hpp:71