573{
574 if (input.data.regions.empty())
575 return input;
576
577 std::shared_ptr<Kakshya::SignalSourceContainer> container;
578
579 if (input.container && *input.container) {
580 container = *input.container;
581 } else {
583 if (param.has_value()) {
584 container = safe_any_cast_or_default<std::shared_ptr<Kakshya::SignalSourceContainer>>(
585 param, nullptr);
586 }
587 }
588
589 if (!container) {
590 error<std::runtime_error>(
592 std::source_location::current(),
593 "AttributeOp: no container available via Datum or parameters");
594 }
595
596 const auto channel = this->
template get_parameter_or_default<uint32_t>(
"channel", 0U);
597 const auto feature_key = this->template get_parameter_or_default<std::string>("feature_key", std::string("feature"));
598
599 ExecutionContext ctx;
601 ctx.execution_metadata[k] = v;
602
603 Datum<Kakshya::RegionGroup> out { input.data, container };
604
605 for (auto& grain : out.data.regions) {
607 grain.set_attribute(feature_key, value);
608 }
609
610 return out;
611}
double compute_grain_attribute(const Kakshya::Region &grain, const std::shared_ptr< Kakshya::SignalSourceContainer > &container, uint32_t channel, const ExecutionContext &ctx) const
Resolve and execute attribution for a single grain.
std::any get_parameter(const std::string &name) const override
Retrieves a parameter's current value.
virtual std::map< std::string, std::any > get_all_analysis_parameters() const
@ ComputeMatrix
Compute operations (Yantra - algorithms, matrices, DSP)
@ Yantra
DSP algorithms, computational units, matrix operations, Grammar.