LATEST WORKING VERSION (More bugfixes)

This commit is contained in:
Karthik 2025-08-30 15:20:09 +02:00
parent 51fe2331bc
commit 2091ad85f0
12 changed files with 126 additions and 136 deletions

View File

@ -48,12 +48,10 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
end
% --- General path to full od image folders ---
if isfield(options, 'FullODImagesFolder') && ...
~isempty(options.FullODImagesFolder) && ...
isfolder(options.FullODImagesFolder)
full_od_image_parent_folder = dir(fullfile(options.FullODImagesFolder, 'FullODImages_*'));
elseif isfield(options, 'saveDirectory') && isfolder(options.saveDirectory)
full_od_image_parent_folder = dir(fullfile(options.saveDirectory, 'FullODImages_*'));
if isfield(options, 'FullODImagesFolder')
full_od_image_parent_folder = options.FullODImagesFolder;
elseif isfield(options, 'saveDirectory')
full_od_image_parent_folder = options.saveDirectory;
else
full_od_image_parent_folder = '';
end
@ -100,7 +98,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
selIsFullOD = true;
else
% exact match to any discovered fullodimage_folders entry
if ~isempty(full_od_image_parent_folder)
if isfolder(full_od_image_parent_folder) && ~isempty(full_od_image_parent_folder)
for r = 1:numel(full_od_image_parent_folder)
cand = fullfile(full_od_image_parent_folder(r).folder, full_od_image_parent_folder(r).name);
if strcmp(cand, selPath)
@ -127,8 +125,8 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
if ~options.SAVE_TO_WORKSPACE
% --- Determine parent folder for FullODImages ---
if isfield(options, 'FullODImagesFolder') && ...
~isempty(options.FullODImagesFolder) && ...
isfolder(options.FullODImagesFolder)
isfolder(options.FullODImagesFolder) && ...
~isempty(options.FullODImagesFolder)
parentFolder = dir(fullfile(options.FullODImagesFolder, 'FullODImages_*'));
elseif isfield(options, 'saveDirectory') && isfolder(options.saveDirectory)
parentFolder = dir(fullfile(options.saveDirectory, 'FullODImages_*'));
@ -143,7 +141,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
else
% Try to find an existing full-OD folder whose metadata references this raw path
found = false;
if ~isempty(full_od_image_parent_folder) && useFullODFolders
if isfolder(full_od_image_parent_folder) && ~isempty(full_od_image_parent_folder) && useFullODFolders
for r = 1:numel(full_od_image_parent_folder)
metaPath = fullfile(full_od_image_parent_folder(r).folder, full_od_image_parent_folder(r).name, 'metadata.mat');
if ~isfile(metaPath), continue; end
@ -165,12 +163,13 @@ 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 for selected raw path: %s\n', full_od_image_parent_folder(r).name);
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list] = recomputeODImages(options, selPath);
if ~options.SAVE_TO_WORKSPACE
% --- Determine parent folder for FullODImages ---
if isfield(options, 'FullODImagesFolder') && ...
~isempty(options.FullODImagesFolder) && ...
isfolder(options.FullODImagesFolder)
isfolder(options.FullODImagesFolder) && ...
~isempty(options.FullODImagesFolder)
parentFolder = dir(fullfile(options.FullODImagesFolder, 'FullODImages_*'));
elseif isfield(options, 'saveDirectory') && isfolder(options.saveDirectory)
parentFolder = dir(fullfile(options.saveDirectory, 'FullODImages_*'));
@ -187,15 +186,14 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
end
else
% --- No selectedPath provided: either force recompute or search among fullodimage_folders ---
% --- No selected path: either force recompute or search among fullodimage_folders ---
if isfield(options,'skipFullODImagesFolderUse') && options.skipFullODImagesFolderUse
% forced recompute
[full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list] = recomputeODImages(options, options.baseDataFolder);
if ~options.SAVE_TO_WORKSPACE
% --- Determine parent folder for FullODImages ---
if isfield(options, 'FullODImagesFolder') && ...
~isempty(options.FullODImagesFolder) && ...
isfolder(options.FullODImagesFolder)
isfolder(options.FullODImagesFolder) && ...
~isempty(options.FullODImagesFolder)
parentFolder = dir(fullfile(options.FullODImagesFolder, 'FullODImages_*'));
elseif isfield(options, 'saveDirectory') && isfolder(options.saveDirectory)
parentFolder = dir(fullfile(options.saveDirectory, 'FullODImages_*'));
@ -209,7 +207,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
matched = true;
else
% Search for existing matching full-OD folder based on options.folderPath
if ~isempty(full_od_image_parent_folder) && useFullODFolders
if isfolder(full_od_image_parent_folder) && ~isempty(full_od_image_parent_folder) && useFullODFolders
for r = 1:numel(full_od_image_parent_folder)
metaPath = fullfile(full_od_image_parent_folder(r).folder, full_od_image_parent_folder(r).name,'metadata.mat');
if ~isfile(metaPath), continue; end
@ -233,17 +231,17 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
% --- If still not matched, recompute from raw (fallback) ---
if ~matched
if isempty(full_od_image_parent_folder) && ~useFullODFolders
fprintf('\n[INFO] No full OD images found in workspace or on disk. Computing from raw data...\n');
else
fprintf('\n[INFO] No matching full OD images subfolder found. Recomputing from raw data...\n');
if ~isfolder(full_od_image_parent_folder) && useFullODFolders
fprintf('\n[INFO] No full OD images found in workspace or on disk. Will recompute from raw data.\n');
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] = recomputeODImages(options, options.baseDataFolder);
if ~options.SAVE_TO_WORKSPACE
% --- Determine parent folder for FullODImages ---
if isfield(options, 'FullODImagesFolder') && ...
~isempty(options.FullODImagesFolder) && ...
isfolder(options.FullODImagesFolder)
isfolder(options.FullODImagesFolder) && ...
~isempty(options.FullODImagesFolder)
parentFolder = dir(fullfile(options.FullODImagesFolder, 'FullODImages_*'));
elseif isfield(options, 'saveDirectory') && isfolder(options.saveDirectory)
parentFolder = dir(fullfile(options.saveDirectory, 'FullODImages_*'));
@ -257,7 +255,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
end
% --- If a folder was determined, load its contents (listing) ---
if ~isempty(full_od_image_subfolder) && useFullODFolders
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);
fprintf('\n[INFO] Cropping and subtracting background from images in full OD images folder on disk...\n');
end
@ -316,7 +314,7 @@ function [od_imgs, scan_parameter_values, file_list] = collectODImages(options)
end
% --- Optional fringe removal ---
if isfield(options, 'skipFringeRemoval') && options.skipFringeRemoval
if isfield(options, 'skipFringeRemoval') && ~options.skipFringeRemoval
fprintf('\n[INFO] Applying fringe removal to processed images...\n');
optrefimages = Helper.removeFringesInImage(absimages, refimages);
absimages_fringe_removed = absimages - optrefimages;
@ -415,7 +413,7 @@ function saveProcessedOD(od_imgs, options)
dataSource{1}.runs);
% --- Determine parent folder ---
if isfield(options, 'FullODImagesFolder') && ~isempty(options.FullODImagesFolder) && isfolder(options.FullODImagesFolder)
if isfield(options, 'FullODImagesFolder') && isfolder(options.FullODImagesFolder) && ~isempty(options.FullODImagesFolder)
parentFolder = options.FullODImagesFolder;
elseif isfield(options, 'saveDirectory') && isfolder(options.saveDirectory)
parentFolder = options.saveDirectory;
@ -462,7 +460,7 @@ function saveProcessedOD(od_imgs, options)
save(matFilePath, 'OD','Scan','File','-v7.3');
end
fprintf('[INFO] Processed OD .mat files and metadata saved successfully.\n');
fprintf('\n[INFO] Processed OD .mat files and metadata saved successfully.\n');
end
function dataSource = makeDataSourceStruct(folderPath)

View File

@ -18,7 +18,7 @@ function [SAVE_TO_WORKSPACE, runMemoryGB] = estimateDatasetMemory(dataSources, o
SAVE_TO_WORKSPACE = true; % default, may change per run
runMemoryGB = []; % store per-run memory
% --- Case 1: selectedPath exists ---
% --- Case 1: selected path exists ---
if isfield(options, 'selectedPath') && isfolder(options.selectedPath)
runFolder = options.selectedPath;
files = dir(fullfile(runFolder, '*.h5'));
@ -30,7 +30,7 @@ function [SAVE_TO_WORKSPACE, runMemoryGB] = estimateDatasetMemory(dataSources, o
if runBytes > 0.75 * availableRAM
SAVE_TO_WORKSPACE = false;
fprintf('\n[INFO] Selected run %s estimated size %.2f GB exceeds 75%% of available RAM. Saving to disk.\n', ...
fprintf('\n[INFO] Selected run %s estimated size %.2f GB exceeds 75%% of available RAM. Will save images to disk if not already available.\n', ...
runFolder, runBytes/1e9);
else
fprintf('\n[INFO] Selected run %s estimated size %.2f GB fits in memory.\n', ...
@ -65,7 +65,7 @@ function [SAVE_TO_WORKSPACE, runMemoryGB] = estimateDatasetMemory(dataSources, o
if runBytes > 0.75 * availableRAM
SAVE_TO_WORKSPACE = false;
fprintf('\n[INFO] Run %s/%s estimated size %.2f GB exceeds 75%% of available RAM. Saving to disk.\n', ...
fprintf('\n[INFO] Run %s/%s estimated size %.2f GB exceeds 75%% of available RAM. Will save images to disk if not already available.\n', ...
ds.sequence, runID, runBytes/1e9);
else
fprintf('\n[INFO] Run %s/%s estimated size %.2f GB fits in memory.\n', ...

View File

@ -3,8 +3,7 @@ function [full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list]
fprintf('\n[INFO] Processing raw data files at %s ...\n', options.folderPath);
groupList = ["/images/MOT_3D_Camera/in_situ_absorption", ...
"/images/ODT_1_Axis_Camera/in_situ_absorption", ...
groupList = ["/images/ODT_1_Axis_Camera/in_situ_absorption", ...
"/images/ODT_2_Axis_Camera/in_situ_absorption", ...
"/images/Horizontal_Axis_Camera/in_situ_absorption", ...
"/images/Vertical_Axis_Camera/in_situ_absorption"];

View File

@ -49,13 +49,13 @@ function [selectedPath, folderPath] = selectDataSourcePath(dataSources, options)
if isfolder(rawPath)
allPaths{end+1} = rawPath;
else
fprintf('[INFO] Raw data folder does not exist: %s\n', rawPath);
fprintf('\n[INFO] Raw data folder does not exist: %s\n', rawPath);
end
% Build matching FullOD path
expectedName = sprintf('FullODImages_%s_%s_Run%s', ...
targetSequence, strrep(targetDate,'/','-'), runID);
if isfield(options,'FullODImagesFolder') && ~isempty(options.FullODImagesFolder)
if isfield(options,'FullODImagesFolder') && isfolder(options.FullODImagesFolder) && ~isempty(options.FullODImagesFolder)
fullODPath = fullfile(options.FullODImagesFolder, expectedName);
else
fullODPath = '';
@ -69,12 +69,10 @@ function [selectedPath, folderPath] = selectDataSourcePath(dataSources, options)
end
end
% --- Resolve FullODImagesFolder parent location ---
if isfield(options, 'FullODImagesFolder') && ...
~isempty(options.FullODImagesFolder) && ...
isfolder(options.FullODImagesFolder)
% --- General path to full od image folders ---
if isfield(options, 'FullODImagesFolder')
full_od_image_parent_folder = options.FullODImagesFolder;
elseif isfield(options, 'saveDirectory') && isfolder(options.saveDirectory)
elseif isfield(options, 'saveDirectory')
full_od_image_parent_folder = options.saveDirectory;
else
full_od_image_parent_folder = '';
@ -83,7 +81,7 @@ function [selectedPath, folderPath] = selectDataSourcePath(dataSources, options)
% --- Determine whether FullODImagesFolder should be used ---
useFullOD = false;
if ~isempty(allPaths)
if ~isempty(full_od_image_parent_folder)
if isfolder(full_od_image_parent_folder) && ~isempty(full_od_image_parent_folder)
if ~isfield(options,'skipFullODImagesFolderUse') || ~options.skipFullODImagesFolderUse
fprintf('\n[INFO] Both raw data folder (%s) and full OD Images folder (%s) found.\n', ...
options.baseDataFolder, full_od_image_parent_folder);
@ -95,9 +93,9 @@ function [selectedPath, folderPath] = selectDataSourcePath(dataSources, options)
fprintf('\n[INFO] Prioritizing raw data folder (set skipFullODImagesFolderUse=false to override).\n');
end
else
fprintf('[INFO] Using raw data folder(s) since full OD images not found or not specified.\n');
fprintf('\n[INFO] Using raw data folder(s) since full OD images not found or not specified.\n');
end
elseif ~isempty(full_od_image_parent_folder)
elseif isfolder(full_od_image_parent_folder) && ~isempty(full_od_image_parent_folder)
if ~isfield(options,'skipFullODImagesFolderUse') || ~options.skipFullODImagesFolderUse
useFullOD = true;
fprintf('\n[INFO] Raw data folder(s) not found but found full OD Images folder which will be used.\n');

View File

@ -17,14 +17,13 @@ scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% Camera / imaging settings
options.cam = 5;
options.angle = 0;
options.cam = 4; % 1 - ODT_1_Axis_Camera; 2 - ODT_2_Axis_Camera; 3 - Horizontal_Axis_Camera;, 4 - Vertical_Axis_Camera;
options.angle = 0; % angle by which image will be rotated
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 23.94;
options.removeFringes = false;
options.magnification = 24.6;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
@ -33,10 +32,10 @@ options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.Radial_WindowSize = 5; % odd number
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.N_angular_bins = 180;
options.Angular_Threshold = 75;
options.Angular_Sigma = 2;

View File

@ -9,22 +9,21 @@ dataSources = {
options = struct();
% File / paths
% File paths
options.baseDataFolder = '//DyLabNAS/Data';
options.FullODImagesFolder = 'E:/Data - Experiment/FullODImages/202508';
options.FullODImagesFolder = 'D:/Data - Experiment/FullODImages/202508';
options.measurementName = 'BECToDroplets';
scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% Camera / imaging
options.cam = 5;
options.angle = 0;
% Camera / imaging settings
options.cam = 4; % 1 - ODT_1_Axis_Camera; 2 - ODT_2_Axis_Camera; 3 - Horizontal_Axis_Camera;, 4 - Vertical_Axis_Camera;
options.angle = 0; % angle by which image will be rotated
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 24.6;
options.removeFringes = false;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
@ -33,10 +32,10 @@ options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.Radial_WindowSize = 5; % odd number
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.N_angular_bins = 180;
options.Angular_Threshold = 75;
options.Angular_Sigma = 2;

View File

@ -17,14 +17,13 @@ scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% Camera / imaging settings
options.cam = 5;
options.angle = 0;
options.cam = 4; % 1 - ODT_1_Axis_Camera; 2 - ODT_2_Axis_Camera; 3 - Horizontal_Axis_Camera;, 4 - Vertical_Axis_Camera;
options.angle = 0; % angle by which image will be rotated
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 23.94;
options.removeFringes = false;
options.magnification = 24.6;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
@ -33,10 +32,10 @@ options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.Radial_WindowSize = 5; % odd number
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.N_angular_bins = 180;
options.Angular_Threshold = 75;
options.Angular_Sigma = 2;

View File

@ -3,40 +3,39 @@
% Specify data location to run analysis on
dataSources = {
struct('sequence', 'StructuralPhaseTransition', ...
'date', '2025/08/16', ...
'runs', [8, 9, 10, 11, 12, 13]) % specify run numbers as a string in "" or just as a numeric value
'date', '2025/08/26', ...
'runs', [6, 7, 8, 9, 10, 11]) % specify run numbers as a string in "" or just as a numeric value
};
options = struct();
% File / paths
% File paths
options.baseDataFolder = '//DyLabNAS/Data';
options.FullODImagesFolder = 'E:/Data - Experiment/FullODImages/202508';
options.FullODImagesFolder = 'D:/Data - Experiment/FullODImages/202508';
options.measurementName = 'DropletsToStripes';
scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% Camera / imaging
options.cam = 5;
options.angle = 0;
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 24.6;
options.removeFringes = false;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
% Camera / imaging settings
options.cam = 4; % 1 - ODT_1_Axis_Camera; 2 - ODT_2_Axis_Camera; 3 - Horizontal_Axis_Camera;, 4 - Vertical_Axis_Camera;
options.angle = 0; % angle by which image will be rotated
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 24.6;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
% Fourier analysis settings
options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.N_angular_bins = 180;
options.Angular_Threshold = 75;
options.Angular_Sigma = 2;
@ -54,10 +53,10 @@ switch options.measurementName
options.scan_reference_values = [2.45, 2.44, 2.43, 2.42, 2.4, 2.39, 2.38, 2.37, 2.36, 2.35, 2.34, 2.32, 2.3, 2.28, 2.25, 2.2, 2.15, 2.10, 2.0, 1.90, 1.8];
options.titleString = 'BEC to Stripes';
case 'DropletsToStripes'
options.scan_reference_values = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45];
options.scan_reference_values = [0, 5, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40];
options.titleString = 'Droplets to Stripes';
case 'StripesToDroplets'
options.scan_reference_values = fliplr([0, 5, 10, 15, 20, 25, 30, 35, 40, 45]);
options.scan_reference_values = fliplr([0, 5, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]);
options.titleString = 'Stripes to Droplets';
end
@ -65,6 +64,7 @@ end
options.skipUnshuffling = false;
options.skipNormalization = false;
options.skipFringeRemoval = true;
options.skipPreprocessing = true;
options.skipMasking = true;
options.skipIntensityThresholding = true;

View File

@ -17,14 +17,13 @@ scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% Camera / imaging settings
options.cam = 5;
options.angle = 0;
options.cam = 4; % 1 - ODT_1_Axis_Camera; 2 - ODT_2_Axis_Camera; 3 - Horizontal_Axis_Camera;, 4 - Vertical_Axis_Camera;
options.angle = 0; % angle by which image will be rotated
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 23.94;
options.removeFringes = false;
options.magnification = 24.6;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
@ -33,10 +32,10 @@ options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.Radial_WindowSize = 5; % odd number
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.N_angular_bins = 180;
options.Angular_Threshold = 75;
options.Angular_Sigma = 2;

View File

@ -9,22 +9,21 @@ dataSources = {
options = struct();
% File / paths
% File paths
options.baseDataFolder = '//DyLabNAS/Data';
options.FullODImagesFolder = 'E:/Data - Experiment/FullODImages/202508';
options.FullODImagesFolder = 'D:/Data - Experiment/FullODImages/202508';
options.measurementName = 'BECToStripes';
scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% Camera / imaging
options.cam = 5;
options.angle = 0;
% Camera / imaging settings
options.cam = 4; % 1 - ODT_1_Axis_Camera; 2 - ODT_2_Axis_Camera; 3 - Horizontal_Axis_Camera;, 4 - Vertical_Axis_Camera;
options.angle = 0; % angle by which image will be rotated
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 24.6;
options.removeFringes = false;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
@ -33,10 +32,10 @@ options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.Radial_WindowSize = 5; % odd number
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.N_angular_bins = 180;
options.Angular_Threshold = 75;
options.Angular_Sigma = 2;

View File

@ -17,14 +17,13 @@ scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% Camera / imaging settings
options.cam = 5;
options.angle = 0;
options.cam = 4; % 1 - ODT_1_Axis_Camera; 2 - ODT_2_Axis_Camera; 3 - Horizontal_Axis_Camera;, 4 - Vertical_Axis_Camera;
options.angle = 0; % angle by which image will be rotated
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 23.94;
options.removeFringes = false;
options.magnification = 24.6;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
@ -33,10 +32,10 @@ options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.Radial_WindowSize = 5; % odd number
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.N_angular_bins = 180;
options.Angular_Threshold = 75;
options.Angular_Sigma = 2;

View File

@ -9,34 +9,33 @@ dataSources = {
options = struct();
% File / paths
options.baseDataFolder = '//DyLabNAS/Data';
options.FullODImagesFolder = 'E:/Data - Experiment/FullODImages/202508';
options.measurementName = 'StripesToDroplets';
scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% File paths
options.baseDataFolder = '//DyLabNAS/Data';
options.FullODImagesFolder = 'D:/Data - Experiment/FullODImages/202508';
options.measurementName = 'StripesToDroplets';
scriptFullPath = mfilename('fullpath');
options.saveDirectory = fileparts(scriptFullPath);
% Camera / imaging
options.cam = 5;
options.angle = 0;
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 24.6;
options.removeFringes = false;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
% Camera / imaging settings
options.cam = 4; % 1 - ODT_1_Axis_Camera; 2 - ODT_2_Axis_Camera; 3 - Horizontal_Axis_Camera;, 4 - Vertical_Axis_Camera;
options.angle = 0; % angle by which image will be rotated
options.center = [1420, 2050];
options.span = [200, 200];
options.fraction = [0.1, 0.1];
options.pixel_size = 5.86e-6; % in meters
options.magnification = 24.6;
options.ImagingMode = 'HighIntensity';
options.PulseDuration = 5e-6; % in s
% Fourier analysis settings
options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.theta_min = deg2rad(0);
options.theta_max = deg2rad(180);
options.N_radial_bins = 500;
options.Radial_Sigma = 2;
options.Radial_WindowSize = 5; % odd number
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.k_min = 1.2771; % μm¹
options.k_max = 2.5541; % μm¹
options.N_angular_bins = 180;
options.Angular_Threshold = 75;
options.Angular_Sigma = 2;
@ -83,3 +82,5 @@ options.font = 'Bahnschrift';
%% ===== Run Batch Analysis =====
results_all = Helper.batchAnalyze(dataSources, options);