MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ compute_grain_attribute()

double MayaFlux::Yantra::Granular::AttributeOp::compute_grain_attribute ( const Kakshya::Region grain,
const std::shared_ptr< Kakshya::SignalSourceContainer > &  container,
uint32_t  channel,
const ExecutionContext ctx 
) const
private

Resolve and execute attribution for a single grain.

Parameters
grainSource region defining the grain boundaries.
containerSignal data source.
channelChannel index to extract samples from.
ctxCurrent execution context carrying parameters.
Returns
Scalar attribute value for this grain.

Definition at line 480 of file GranularWorkflow.cpp.

485{
487
488 if (ctx.execution_metadata.contains("attribute_executor")) {
489 exec = safe_any_cast_or_default<AttributeExecutor>(
490 ctx.execution_metadata.at("attribute_executor"), nullptr);
491 }
492
493 if (!exec) {
494 if (auto p = this->get_parameter("attribute_executor"); p.has_value())
495 exec = safe_any_cast_or_default<AttributeExecutor>(p, nullptr);
496 }
497
498 if (exec) {
499 const auto samples = Kakshya::extract_region_channel(grain, container, channel);
500 return exec(std::span<const double>(samples.data(), samples.size()), ctx);
501 }
502
503 const auto grain_variants = container->get_region_data(grain);
504
505 const std::string qualifier = [&]() -> std::string {
506 if (ctx.execution_metadata.contains("analyzer_qualifier")) {
507 return safe_any_cast_or_default<std::string>(
508 ctx.execution_metadata.at("analyzer_qualifier"), {});
509 }
510 auto p = this->get_parameter("analyzer_qualifier");
511 return p.has_value() ? safe_any_cast_or_default<std::string>(p, {}) : std::string {};
512 }();
513
514 const AnalysisType type = [&]() {
515 if (ctx.execution_metadata.contains("analysis_type")) {
516 return safe_any_cast_or_default<AnalysisType>(
517 ctx.execution_metadata.at("analysis_type"), AnalysisType::FEATURE);
518 }
519
520 auto p = this->get_parameter("analysis_type");
521 return p.has_value()
522 ? safe_any_cast_or_default<AnalysisType>(p, AnalysisType::FEATURE)
524 }();
525
526 std::shared_ptr<void> raw_analyzer;
527 if (ctx.execution_metadata.contains("analyzer")) {
528 raw_analyzer = safe_any_cast_or_default<std::shared_ptr<void>>(
529 ctx.execution_metadata.at("analyzer"), nullptr);
530 }
531
532 if (!raw_analyzer) {
533 if (auto p = this->get_parameter("analyzer"); p.has_value())
534 raw_analyzer = safe_any_cast_or_default<std::shared_ptr<void>>(p, nullptr);
535 }
536
537 if (raw_analyzer) {
538 if (type == AnalysisType::FEATURE) {
540 std::static_pointer_cast<VariantEnergyAnalyzer<>>(raw_analyzer)
541 ->analyze_energy(grain_variants),
542 qualifier);
543 }
544
545 if (type == AnalysisType::STATISTICAL) {
547 std::static_pointer_cast<VariantStatisticalAnalyzer<>>(raw_analyzer)
548 ->analyze_statistics(grain_variants),
549 qualifier);
550 }
551 return 0.0;
552 }
553
554 if (type == AnalysisType::FEATURE) {
556 m_energy_analyzer.analyze_energy(grain_variants), qualifier);
557 }
558
559 if (type == AnalysisType::STATISTICAL) {
561 m_stat_analyzer.analyze_statistics(grain_variants), qualifier);
562 }
563
564 return 0.0;
565}
uint32_t channel
EnergyAnalysis analyze_energy(const input_type &data)
Type-safe energy analysis method.
StatisticalAnalysis analyze_statistics(const input_type &data)
Type-safe statistical analysis method.
std::any get_parameter(const std::string &name) const override
Retrieves a parameter's current value.
std::vector< double > extract_region_channel(const Region &region, const std::shared_ptr< SignalSourceContainer > &container, uint32_t channel)
Extract samples for a single channel within a Region from a container.
std::function< double(std::span< const double >, const ExecutionContext &)> AttributeExecutor
Span-level escape hatch for fully custom per-grain feature computation.
AnalysisType
Categories of analysis operations for discovery and organization.
@ FEATURE
Feature extraction and characterization.
@ STATISTICAL
Mean, variance, distribution analysis.
MAYAFLUX_API double extract_scalar_energy(const EnergyAnalysis &analysis, const std::string &qualifier)
Extract a named scalar from an EnergyAnalysis result.
MAYAFLUX_API double extract_scalar_statistics(const StatisticalAnalysis &analysis, const std::string &qualifier)
Extract a named scalar from a StatisticalAnalysis result.

References MayaFlux::Yantra::EnergyAnalyzer< InputType, OutputType >::analyze_energy(), MayaFlux::Yantra::StatisticalAnalyzer< InputType, OutputType >::analyze_statistics(), channel, MayaFlux::Yantra::ExecutionContext::execution_metadata, MayaFlux::Kakshya::extract_region_channel(), MayaFlux::Yantra::extract_scalar_energy(), MayaFlux::Yantra::extract_scalar_statistics(), MayaFlux::Yantra::FEATURE, MayaFlux::Yantra::UniversalAnalyzer< InputType, OutputType >::get_parameter(), m_energy_analyzer, m_stat_analyzer, and MayaFlux::Yantra::STATISTICAL.

Referenced by analyze_implementation().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: