100 lines
2.8 KiB
Matlab
100 lines
2.8 KiB
Matlab
function [summary, rows] = appendMpiReductionDspOutput(db, run_id, occurrence_idx, dspOutput, dsp_options, options)
|
|
%appendMpiReductionDspOutput Store one DSP occurrence in MpiReductionResults.
|
|
|
|
arguments
|
|
db
|
|
run_id
|
|
occurrence_idx
|
|
dspOutput struct
|
|
dsp_options struct = struct()
|
|
options.study_name string = "mpi_reduction_v1"
|
|
options.dry_run (1,1) logical = false
|
|
options.verbose (1,1) logical = false
|
|
end
|
|
|
|
summary = emptySummary();
|
|
rows = {};
|
|
|
|
packageNames = fieldnames(dspOutput);
|
|
if isempty(packageNames)
|
|
return
|
|
end
|
|
|
|
block_update = resolveBlockUpdate(dspOutput, dsp_options);
|
|
wh = DataStorage(struct( ...
|
|
"run_id", double(run_id), ...
|
|
"block_update", double(block_update)));
|
|
|
|
hasPackages = false;
|
|
for packageIdx = 1:numel(packageNames)
|
|
packageName = packageNames{packageIdx};
|
|
package = dspOutput.(packageName);
|
|
if isempty(package)
|
|
continue
|
|
end
|
|
|
|
if iscell(package)
|
|
packageCell = package;
|
|
else
|
|
packageCell = {package};
|
|
end
|
|
|
|
wh.addStorage(packageName);
|
|
wh.addValueToStorageByLinIdx(packageCell, packageName, 1);
|
|
hasPackages = true;
|
|
end
|
|
|
|
if ~hasPackages
|
|
return
|
|
end
|
|
|
|
dsp_options_local = dsp_options;
|
|
dsp_options_local.start_occurence = occurrence_idx;
|
|
dsp_options_local.userParameters.block_update = block_update;
|
|
|
|
[summary, rows] = appendMpiReductionWarehouse(db, wh, run_id, dsp_options_local, ...
|
|
"study_name", options.study_name, ...
|
|
"dry_run", options.dry_run, ...
|
|
"verbose", options.verbose);
|
|
|
|
end
|
|
|
|
function summary = emptySummary()
|
|
summary = struct( ...
|
|
"rows_considered", 0, ...
|
|
"rows_inserted", 0, ...
|
|
"rows_skipped_duplicate", 0, ...
|
|
"rows_skipped_existing_key", 0, ...
|
|
"rows_skipped_empty", 0);
|
|
end
|
|
|
|
function block_update = resolveBlockUpdate(dspOutput, dsp_options)
|
|
if isfield(dsp_options, "userParameters") && ...
|
|
isfield(dsp_options.userParameters, "block_update") && ...
|
|
isscalar(dsp_options.userParameters.block_update)
|
|
block_update = dsp_options.userParameters.block_update;
|
|
return
|
|
end
|
|
|
|
packageNames = fieldnames(dspOutput);
|
|
for packageIdx = 1:numel(packageNames)
|
|
package = dspOutput.(packageNames{packageIdx});
|
|
if isempty(package)
|
|
continue
|
|
end
|
|
if iscell(package)
|
|
package = package{1};
|
|
end
|
|
if isstruct(package) && ...
|
|
isfield(package, "mpi_reduction_config") && ...
|
|
isfield(package.mpi_reduction_config, "params") && ...
|
|
isfield(package.mpi_reduction_config.params, "block_update")
|
|
block_update = package.mpi_reduction_config.params.block_update;
|
|
return
|
|
end
|
|
end
|
|
|
|
error("appendMpiReductionDspOutput:MissingBlockUpdate", ...
|
|
"Could not resolve scalar block_update from dsp_options or package metadata.");
|
|
end
|