This commit is contained in:
Karthik 2025-09-01 14:45:30 +02:00
parent 3f33787237
commit b7f38c16a0
2 changed files with 46 additions and 15 deletions

View File

@ -119,7 +119,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
% If user forces recompute -> recompute from selected raw path
if isfield(options,'skipFullODImagesFolderUse') && options.skipFullODImagesFolderUse
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list, options.scan_parameter_names, options.scan_reference_values] = recomputeODImages(options, selPath);
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list, raw_scan_parameter_names, options.scan_reference_values] = recomputeODImages(options, selPath);
if ~options.SAVE_TO_WORKSPACE
% --- Determine parent folder for FullODImages ---
if isfield(options, 'FullODImagesFolder') && ...
@ -162,7 +162,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
% If no matching full-OD folder found, recompute from the selected raw path
if ~found
fprintf('\n[INFO] Forcing recompute from raw data as no matching full OD images subfolder found (Use skipFullODImagesFolderUse=true to skip directly to computing from raw data).\n');
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list, options.scan_parameter_names, options.scan_reference_values] = recomputeODImages(options, selPath);
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list, raw_scan_parameter_names, options.scan_reference_values] = recomputeODImages(options, selPath);
if ~options.SAVE_TO_WORKSPACE
% --- Determine parent folder for FullODImages ---
if isfield(options, 'FullODImagesFolder') && ...
@ -186,7 +186,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
else
% --- No selected path: either force recompute or search among fullodimage_folders ---
if isfield(options,'skipFullODImagesFolderUse') && options.skipFullODImagesFolderUse
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list, options.scan_parameter_names, options.scan_reference_values] = recomputeODImages(options, options.baseDataFolder);
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list, raw_scan_parameter_names, options.scan_reference_values] = recomputeODImages(options, options.baseDataFolder);
if ~options.SAVE_TO_WORKSPACE
% --- Determine parent folder for FullODImages ---
if isfield(options, 'FullODImagesFolder') && ...
@ -234,7 +234,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
elseif isfolder(full_od_image_parent_folder) && useFullODFolders
fprintf('\n[INFO] No matching full OD images subfolder found. Will recompute from raw data.\n');
end
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list, options.scan_parameter_names, options.scan_reference_values] = recomputeODImages(options, options.baseDataFolder);
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list, raw_scan_parameter_names, options.scan_reference_values] = recomputeODImages(options, options.baseDataFolder);
if ~options.SAVE_TO_WORKSPACE
% --- Determine parent folder for FullODImages ---
if isfield(options, 'FullODImagesFolder') && ...
@ -254,7 +254,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
% --- If a folder was determined, load its contents (listing) ---
if isfolder(full_od_image_subfolder) && ~isempty(full_od_image_subfolder) && useFullODFolders
[mat_files, raw_scan_parameter_values, raw_file_list, nFiles] = prepareFromOnDiskData(full_od_image_subfolder);
[mat_files, raw_scan_parameter_names, raw_scan_parameter_values, raw_file_list, nFiles] = prepareFromOnDiskData(full_od_image_subfolder);
fprintf('\n[INFO] Cropping and subtracting background from images in full OD images folder on disk...\n');
end
end
@ -278,7 +278,8 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
data = load(fullfile(full_od_image_subfolder, mat_files(k).name));
od_mat = data.OD;
bkg_mat = data.BKG;
raw_scan_parameter_values(k) = data.Scan;
raw_scan_parameter_names{k} = data.Scan_Param;
raw_scan_parameter_values(k) = data.Scan_Val;
raw_file_list(k) = data.File;
end
else
@ -406,8 +407,36 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
file_list = raw_file_list;
end
% --- Determine scan parameter(s) ---
if ~isfield(options,'scan_parameter') || isempty(options.scan_parameter)
% Flatten all names into a single cell array
all_names = {};
for k = 1:numel(raw_scan_parameter_names)
x = raw_scan_parameter_names{k};
if iscell(x)
all_names = [all_names, x(:).']; % flatten row
else
all_names{end+1} = x; % single char array
end
end
% Find unique names (stable order)
unique_names = unique(all_names, 'stable');
% Decide single vs multiple parameter output
if numel(unique_names) == 1
options.scan_parameter = unique_names{1}; % single char array
scan_parameter_names = options.scan_parameter;
else
options.scan_parameter = unique_names; % cell array of char arrays
scan_parameter_names = options.scan_parameter;
end
end
% --- Save processed dataset and options to workspace ---
assignin('base', 'od_imgs', od_imgs);
assignin('base', 'scan_parameter_names', scan_parameter_names);
assignin('base', 'scan_parameter_values', scan_parameter_values);
assignin('base', 'file_list', file_list);
assignin('base', 'prior_options', options);
@ -572,10 +601,11 @@ function fullodimagesFolder = createFullODImagesFolderPath(parentFolder, dataSou
fullodimagesFolder = fullfile(parentFolder, ['FullODImages_' runID]);
end
function [mat_files, raw_scan_parameter_values, raw_file_list, nFiles] = prepareFromOnDiskData(folder)
function [mat_files, raw_scan_parameter_names, raw_scan_parameter_values, raw_file_list, nFiles] = prepareFromOnDiskData(folder)
mat_files = dir(fullfile(folder,'*.mat'));
mat_files = mat_files(~strcmp({mat_files.name},'metadata.mat')); % exclude metadata
nFiles = numel(mat_files);
raw_scan_parameter_names = cell(1,nFiles);
raw_scan_parameter_values = zeros(1,nFiles);
raw_file_list = strings(1,nFiles);
end

View File

@ -116,7 +116,7 @@ function [full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list,
full_od_imgs(:,:,k) = single(od_img);
full_bkg_imgs(:,:,k) = single(bkg_img);
else
writeFullODImagesToDisk(fullODImageFolder, od_img, bkg_img, val, fullFileNames(k), k);
writeFullODImagesToDisk(fullODImageFolder, od_img, bkg_img, scan_parameter_names, val, fullFileNames(k), k);
end
end
else
@ -134,7 +134,7 @@ function [full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list,
full_od_imgs(:,:,k) = single(od_img);
full_bkg_imgs(:,:,k) = single(bkg_img);
else
writeFullODImagesToDisk(fullODImageFolder, od_img, bkg_img, val, fullFileNames(k), k);
writeFullODImagesToDisk(fullODImageFolder, od_img, bkg_img, scan_parameter_names, val, fullFileNames(k), k);
end
raw_file_list(k) = fullFileNames(k);
@ -293,14 +293,15 @@ function [scanParamNames, nParams] = detectScanParametersFromFiles(fileNames, mi
end
end
function writeFullODImagesToDisk(fullODImageFolder, od_img, bkg_img, scan_vals, file_name, idx)
function writeFullODImagesToDisk(fullODImageFolder, od_img, bkg_img, param, val, file_name, idx)
% Writes OD/BKG image + scan parameter(s) to a MAT file
matFilePath = fullfile(fullODImageFolder, sprintf('Image_%04d.mat', idx));
OD = single(od_img);
BKG = single(bkg_img);
File = string(file_name);
Scan = single(scan_vals);
save(matFilePath, 'OD','BKG','Scan','File','-v7.3');
OD = single(od_img);
BKG = single(bkg_img);
File = string(file_name);
Scan_Param = param;
Scan_Val = single(val);
save(matFilePath, 'OD','BKG', 'Scan_Param', 'Scan_Val','File','-v7.3');
end
function dataSource = makeDataSourceStruct(folderPath)