Final MPI Calculations here
This commit is contained in:
99
projects/Diss/MPI_revisit/db/appendMpiReductionDspOutput.m
Normal file
99
projects/Diss/MPI_revisit/db/appendMpiReductionDspOutput.m
Normal file
@@ -0,0 +1,99 @@
|
||||
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
|
||||
Reference in New Issue
Block a user