Create pipeline output from input and energy values.
514 {
515 std::vector<std::vector<double>> channel_energies;
516 channel_energies.reserve(analysis_result.channels.size());
517
518 for (const auto& ch : analysis_result.channels) {
519 channel_energies.push_back(ch.energy_values);
520 }
521
523
524 output.metadata = input.metadata;
525
526 output.metadata["source_analyzer"] = "EnergyAnalyzer";
527 output.metadata[
"energy_method"] =
method_to_string(analysis_result.method_used);
528 output.metadata["window_size"] = analysis_result.window_size;
529 output.metadata["hop_size"] = analysis_result.hop_size;
530 output.metadata["num_channels"] = analysis_result.channels.size();
531
532 if (!analysis_result.channels.empty()) {
533 std::vector<double> channel_means, channel_maxs, channel_mins, channel_variances;
534 std::vector<size_t> channel_window_counts;
535
536 for (const auto& ch : analysis_result.channels) {
537 channel_means.push_back(ch.mean_energy);
538 channel_maxs.push_back(ch.max_energy);
539 channel_mins.push_back(ch.min_energy);
540 channel_variances.push_back(ch.variance);
541 channel_window_counts.push_back(ch.energy_values.size());
542 }
543
544 output.metadata["mean_energy_per_channel"] = channel_means;
545 output.metadata["max_energy_per_channel"] = channel_maxs;
546 output.metadata["min_energy_per_channel"] = channel_mins;
547 output.metadata["variance_per_channel"] = channel_variances;
548 output.metadata["window_count_per_channel"] = channel_window_counts;
549 }
550
551 return output;
552 }
output_type convert_result(std::vector< std::vector< double > > &result_data, DataStructureInfo &metadata)
Convert processed double data back to OutputType using metadata and optional callback.
Datum< OutputType > output_type
static std::string method_to_string(EnergyMethod method)
Convert energy method enum to string.