79 lines
3.0 KiB
Matlab
79 lines
3.0 KiB
Matlab
function [SAVE_TO_WORKSPACE, runMemoryGB] = estimateDatasetMemory(dataSources, options)
|
|
% Estimate per-run memory and decide whether to save dataset to workspace
|
|
%
|
|
% Supports both raw data folders and a preselected run folder.
|
|
|
|
% --- Measured memory per image (bytes) ---
|
|
bytesPerFullImage = 37.75 * 1e6; % full OD image
|
|
bytesPerCroppedImage = 0.16 * 1e6; % cropped OD image
|
|
|
|
% --- Check available RAM on Windows ---
|
|
if ispc
|
|
[~, sys] = memory;
|
|
availableRAM = sys.PhysicalMemory.Available;
|
|
else
|
|
availableRAM = 8e9; % fallback: 8 GB if not Windows
|
|
end
|
|
|
|
SAVE_TO_WORKSPACE = true; % default, may change per run
|
|
runMemoryGB = []; % store per-run memory
|
|
|
|
% --- Case 1: selectedPath exists ---
|
|
if isfield(options, 'selectedPath') && isfolder(options.selectedPath)
|
|
runFolder = options.selectedPath;
|
|
files = dir(fullfile(runFolder, '*.h5'));
|
|
nFiles = numel(files);
|
|
|
|
if nFiles > 0
|
|
runBytes = nFiles * (bytesPerFullImage + bytesPerCroppedImage);
|
|
runMemoryGB(end+1,1) = runBytes/1e9;
|
|
|
|
if runBytes > 0.75 * availableRAM
|
|
SAVE_TO_WORKSPACE = false;
|
|
fprintf('[INFO] Selected run %s estimated size %.2f GB exceeds 75%% of available RAM. Saving to disk.\n', ...
|
|
runFolder, runBytes/1e9);
|
|
else
|
|
fprintf('[INFO] Selected run %s estimated size %.2f GB fits in memory.\n', ...
|
|
runFolder, runBytes/1e9);
|
|
end
|
|
end
|
|
|
|
% --- Case 2: fallback to raw data folders ---
|
|
else
|
|
for i_ds = 1:numel(dataSources)
|
|
ds = dataSources{i_ds};
|
|
if isfield(ds, 'baseFolder') && ~isempty(ds.baseFolder)
|
|
baseFolder = fullfile(ds.baseFolder, ds.sequence, ds.date);
|
|
else
|
|
baseFolder = fullfile(options.baseDataFolder, ds.sequence, ds.date);
|
|
end
|
|
|
|
for j_run = 1:numel(ds.runs)
|
|
runItem = ds.runs(j_run);
|
|
runID = sprintf('%04d', runItem);
|
|
runFolder = fullfile(baseFolder, runID);
|
|
|
|
if isfolder(runFolder)
|
|
files = dir(fullfile(runFolder, '*.h5'));
|
|
nFiles = numel(files);
|
|
if nFiles == 0
|
|
continue;
|
|
end
|
|
|
|
runBytes = nFiles * (bytesPerFullImage + bytesPerCroppedImage);
|
|
runMemoryGB(end+1,1) = runBytes/1e9;
|
|
|
|
if runBytes > 0.75 * availableRAM
|
|
SAVE_TO_WORKSPACE = false;
|
|
fprintf('[INFO] Run %s/%s estimated size %.2f GB exceeds 75%% of available RAM. Saving to disk.\n', ...
|
|
ds.sequence, runID, runBytes/1e9);
|
|
else
|
|
fprintf('[INFO] Run %s/%s estimated size %.2f GB fits in memory.\n', ...
|
|
ds.sequence, runID, runBytes/1e9);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|