diff --git a/Data-Analyzer/+Analyzer/conductPCA.m b/Data-Analyzer/+Analyzer/conductPCA.m deleted file mode 100644 index cb6dd2f..0000000 --- a/Data-Analyzer/+Analyzer/conductPCA.m +++ /dev/null @@ -1,111 +0,0 @@ -function conductPCA(od_imgs, scan_reference_values, scan_parameter_values, doPlot, doSave, saveDir) - -%% Performs PCA on optical density images, visualizes and optionally saves results. -% -% Inputs: -% od_imgs - cell array of OD images -% scan_reference_values - array of unique control parameter values -% scan_parameter_values - array mapping each image to a control parameter -% doPlot - logical, true to plot figures -% doSave - logical, true to save figures -% saveDir - directory to save figures if doSave is true -% -% Requires: -% +Calculator/computeCumulants.m - - if nargin < 4, doPlot = true; end - if nargin < 5, doSave = false; end - if nargin < 6, saveDir = pwd; end - - %% PCA computation - allImgs3D = cat(3, od_imgs{:}); - [Nx, Ny] = size(allImgs3D(:,:,1)); - Xall = reshape(allImgs3D, [], numel(od_imgs))'; - [coeff, score, ~, ~, explained] = pca(Xall); - - figCount = 1; - - %% --- Figure 1: PC1 Image --- - if doPlot - pc1_vector = coeff(:,1); - pc1_image = reshape(pc1_vector, Nx, Ny); - figure(figCount); clf; set(gcf, 'Color', 'w', 'Position', [100 100 950 750]); - imagesc(pc1_image); axis image off; colormap(Colormaps.coolwarm()); colorbar; - title(sprintf('First Principal Component (PC1) Image - Explains %.2f%% Variance', explained(1))); - if doSave, saveas(gcf, fullfile(saveDir, 'PC1_Image.png')); end - figCount = figCount + 1; - end - - %% --- Figure 2: PC1 Scores Scatter --- - if doPlot - numGroups = numel(scan_reference_values); - colors = lines(numGroups); - figure(figCount); clf; set(gcf, 'Color', 'w', 'Position', [100 100 950 750]); hold on; - for g = 1:numGroups - idx = scan_parameter_values == scan_reference_values(g); - scatter(repmat(scan_reference_values(g), sum(idx),1), score(idx,1), 36, colors(g,:), 'filled'); - end - xlabel('Control Parameter'); ylabel('PC1 Score'); - title('Evolution of PC1 Scores'); grid on; - if doSave, saveas(gcf, fullfile(saveDir, 'PC1_Scatter.png')); end - figCount = figCount + 1; - end - - %% --- Figure 3: PC1 Distributions --- - if doPlot - figure(figCount); clf; set(gcf, 'Color', 'w', 'Position', [100 100 950 750]); - hold on; - for g = 1:numGroups - idx = scan_parameter_values == scan_reference_values(g); - data = score(idx,1); - histogram(data, 'Normalization', 'pdf', 'FaceColor', colors(g,:), 'FaceAlpha', 0.3); - [f, xi] = ksdensity(data); - plot(xi, f, 'Color', colors(g,:), 'LineWidth', 2); - end - xlabel('PC1 Score'); ylabel('Probability Density'); - title('PC1 Score Distributions by Group'); - legend(arrayfun(@num2str, scan_reference_values, 'UniformOutput', false), 'Location', 'Best'); - grid on; - if doSave, saveas(gcf, fullfile(saveDir, 'PC1_Distributions.png')); end - figCount = figCount + 1; - end - - %% --- Figure 4: Boxplot of PC1 Scores --- - if doPlot - figure(figCount); clf; set(gcf, 'Color', 'w', 'Position', [100 100 950 750]); - boxplot(score(:,1), scan_parameter_values); - xlabel('Control Parameter'); ylabel('PC1 Score'); - title('PC1 Score Boxplots by Group'); grid on; - if doSave, saveas(gcf, fullfile(saveDir, 'PC1_Boxplot.png')); end - figCount = figCount + 1; - end - - %% --- Figure 5: Mean ± SEM of PC1 Scores --- - if doPlot - meanScores = arrayfun(@(g) mean(score(scan_parameter_values == g,1)), scan_reference_values); - semScores = arrayfun(@(g) std(score(scan_parameter_values == g,1))/sqrt(sum(scan_parameter_values == g)), scan_reference_values); - figure(figCount); clf; set(gcf, 'Color', 'w', 'Position', [100 100 950 750]); - errorbar(scan_reference_values, meanScores, semScores, '-o', 'LineWidth', 2); - xlabel('Control Parameter'); ylabel('Mean PC1 Score ± SEM'); - title('Mean ± SEM of PC1 Scores'); grid on; - if doSave, saveas(gcf, fullfile(saveDir, 'PC1_MeanSEM.png')); end - figCount = figCount + 1; - end - - %% --- Figure 6: Binder Cumulant --- - if doPlot - binderVals = arrayfun(@(g) ... - Calculator.computeCumulants(score(scan_parameter_values == g,1)), ... - scan_reference_values); - figure(figCount); clf; set(gcf, 'Color', 'w', 'Position', [100 100 950 750]); - plot(scan_reference_values, binderVals, '-o', 'LineWidth', 2); - xlabel('Control Parameter'); ylabel('Binder Cumulant (PC1)'); - title('Binder Cumulant of PC1 Scores'); grid on; - if doSave, saveas(gcf, fullfile(saveDir, 'PC1_BinderCumulant.png')); end - end - - %% --- ANOVA Test --- - p = anova1(score(:,1), arrayfun(@num2str, scan_parameter_values, 'UniformOutput', false), 'off'); - fprintf('ANOVA p-value for PC1 score differences between groups: %.4e\n', p); - -end diff --git a/Data-Analyzer/+Analyzer/conductSpectralAnalysis.m b/Data-Analyzer/+Analyzer/conductSpectralAnalysis.m deleted file mode 100644 index 6c55b1d..0000000 --- a/Data-Analyzer/+Analyzer/conductSpectralAnalysis.m +++ /dev/null @@ -1,296 +0,0 @@ -function results = conductSpectralAnalysis(od_imgs, scan_parameter_values, options) - -%% Performs Fourier analysis on a set of optical density (OD) images. -% Computes radial and angular spectral distributions, optionally plots -% results, saves figures, and can render a video of the analysis. -% -% Inputs: -% od_imgs - cell array of OD images -% scan_parameter_values - array of scan parameter values corresponding to each image -% OPTIONS - -% saveDirectory - directory to save files -% savefileName - base filename for saved figures/video -% skipMovieRender - skip creating the video of analysis -% skipSaveFigures - skip saving plots -% skipSaveOD - skip saving OD images as .mat -% skipPreprocessing - skip preprocessing of images before FFT -% skipMasking - skip masking of OD images -% skipIntensityThresholding- skip thresholding of intensity -% skipBinarization - skip binarization of OD images -% skipNormalization - skip normalization when plotting angular spectrum -% skipLivePlot = skip live plotting of figures -% pixel_size - physical pixel size of camera sensor (m) -% magnification - imaging magnification -% zoom_size - number of pixels to crop around FFT center -% k_min, k_max - min/max wavenumber for spectral contrast -% N_angular_bins - number of angular bins for S(θ) -% Angular_Threshold - threshold parameter for angular spectrum -% Angular_Sigma - Gaussian smoothing width for angular spectrum -% theta_min, theta_max - angular range for radial spectrum integration -% N_radial_bins - number of radial bins for S(k) -% Radial_WindowSize - window size for smoothing radial spectrum -% scan_parameter - string, type of scan parameter (used in plot text) -% font - font name for plots - - %% Unpack struct arguments - pixel_size = options.pixel_size; - magnification = options.magnification; - zoom_size = options.zoom_size; - k_min = options.k_min; - k_max = options.k_max; - N_angular_bins = options.N_angular_bins; - Angular_Threshold = options.Angular_Threshold; - Angular_Sigma = options.Angular_Sigma; - theta_min = options.theta_min; - theta_max = options.theta_max; - N_radial_bins = options.N_radial_bins; - Radial_WindowSize = options.Radial_WindowSize; - skipNormalization = options.skipNormalization; - skipPreprocessing = options.skipPreprocessing; - skipMasking = options.skipMasking; - skipIntensityThresholding = options.skipIntensityThresholding; - skipBinarization = options.skipBinarization; - skipLivePlot = options.skipLivePlot; - skipMovieRender = options.skipMovieRender; - skipSaveFigures = options.skipSaveFigures; - skipSaveOD = options.skipSaveOD; - savefileName = options.savefileName; - saveDirectory = options.saveDirectory; - scan_parameter = options.scan_parameter; - font = options.font; - - %% ===== Initialization ===== - N_shots = length(od_imgs); % total number of images - fft_imgs = cell(1, N_shots); % FFT of each image - angular_spectral_distribution = cell(1, N_shots); % S(θ) angular spectrum - radial_spectral_contrast = zeros(1, N_shots); % radial contrast metric - angular_spectral_weight = zeros(1, N_shots); % integrated angular weight - - S_theta_all = cell(1, N_shots); - S_k_all = cell(1, N_shots); - S_k_smoothed_all = cell(1, N_shots); - S_theta_norm_all = cell(1, N_shots); - - - % Optional save directory override - if ~isempty(saveDirectory) - savefileName = fullfile(saveDirectory, savefileName); - end - - % Prepare video if enabled - if ~skipMovieRender - videoFile = VideoWriter([savefileName '.mp4'], 'MPEG-4'); - videoFile.Quality = 100; - videoFile.FrameRate = 2; - open(videoFile); - end - - % Prepare folder to save figures - if ~skipSaveFigures - saveFolder = [savefileName '_SavedFigures']; - if ~exist(saveFolder, 'dir') - mkdir(saveFolder); - end - end - - % Initialize lists for power spectra and radial spectra - PS_all = cell(1, N_shots); % 2D FFT power spectrum |F(kx,ky)|^2 - - - %% ===== Main loop over images ===== - for k = 1:N_shots - IMG = od_imgs{k}; - - % Skip FFT if image is empty or has low intensity - if ~(max(IMG(:)) > 1) - IMGFFT = NaN(size(IMG)); - else - % Compute FFT with optional preprocessing - [IMGFFT, ~] = Calculator.computeFourierTransform(IMG, skipPreprocessing, skipMasking, skipIntensityThresholding, skipBinarization); - end - - % Image size - [Ny, Nx] = size(IMG); - - % Real-space pixel size (meters) - dx = pixel_size / magnification; - dy = dx; % assume square pixels - - % Real-space axes in µm - x = ((1:Nx) - ceil(Nx/2)) * dx * 1E6; - y = ((1:Ny) - ceil(Ny/2)) * dy * 1E6; - - % Reciprocal space increments - dvx = 1 / (Nx * dx); - dvy = 1 / (Ny * dy); - - % Frequency axes - vx = (-floor(Nx/2):ceil(Nx/2)-1) * dvx; - vy = (-floor(Ny/2):ceil(Ny/2)-1) * dvy; - - % Wavenumber axes (µm⁻¹) - kx_full = 2 * pi * vx * 1E-6; - ky_full = 2 * pi * vy * 1E-6; - - % Crop FFT image around center - mid_x = floor(Nx/2); - mid_y = floor(Ny/2); - fft_imgs{k} = IMGFFT(mid_y-zoom_size:mid_y+zoom_size, mid_x-zoom_size:mid_x+zoom_size); - - % Crop wavenumber axes to match cropped FFT - kx = kx_full(mid_x - zoom_size : mid_x + zoom_size); - ky = ky_full(mid_y - zoom_size : mid_y + zoom_size); - - %% ===== Spectral analysis ===== - % Angular spectrum - [theta_vals, S_theta] = Calculator.computeAngularSpectralDistribution(fft_imgs{k}, kx, ky, k_min, k_max, N_angular_bins, Angular_Threshold, Angular_Sigma, []); - - % Radial spectrum - [k_rho_vals, S_k] = Calculator.computeRadialSpectralDistribution(fft_imgs{k}, kx, ky, theta_min, theta_max, N_radial_bins); - - % Smooth radial spectrum - S_k_smoothed = movmean(S_k, Radial_WindowSize); - - % Store results - angular_spectral_distribution{k} = S_theta; - radial_spectral_contrast(k) = Calculator.computeRadialSpectralContrast(k_rho_vals, S_k_smoothed, k_min, k_max); - - % Normalize angular spectrum and compute weight - S_theta_norm = S_theta / max(S_theta); - angular_spectral_weight(k) = trapz(theta_vals, S_theta_norm); - - % Store results - S_theta_all{k} = S_theta; - S_k_all{k} = S_k; - S_k_smoothed_all{k} = S_k_smoothed; - S_theta_norm_all{k} = S_theta_norm; - PS_all{k} = abs(fft_imgs{k}).^2; - - %% ===== Plotting ===== - if ~skipLivePlot - figure(1); clf - set(gcf,'Position',[500 100 1000 800]) - tiledlayout(2, 2, 'TileSpacing', 'compact', 'Padding', 'compact'); - - % OD image - ax1 = nexttile; - imagesc(x, y, IMG) - hold on; - Helper.drawODOverlays(x(1), y(1), x(end), y(end)); - Helper.drawODOverlays(x(end), y(1), x(1), y(end)); - hold off; - axis equal tight; - set(gca, 'FontSize', 14, 'YDir', 'normal') - colormap(ax1, Colormaps.inferno()); - hcb = colorbar; - ylabel(hcb, 'Optical Density', 'Rotation', -90, 'FontSize', 14, 'FontName', font); - xlabel('x (\mum)', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', font); - ylabel('y (\mum)', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', font); - title('OD Image', 'FontSize', 16, 'FontWeight', 'bold', 'Interpreter', 'tex', 'FontName', font); - - % Annotate scan parameter - if strcmp(scan_parameter, 'ps_rot_mag_fin_pol_angle') - text(0.975, 0.975, sprintf('%.1f^\\circ', scan_parameter_values(k)), ... - 'Color', 'white', 'FontWeight', 'bold', 'FontSize', 14, ... - 'Interpreter', 'tex', 'Units', 'normalized', ... - 'HorizontalAlignment', 'right', 'VerticalAlignment', 'top'); - else - text(0.975, 0.975, sprintf('%.2f G', scan_parameter_values(k)), ... - 'Color', 'white', 'FontWeight', 'bold', 'FontSize', 14, ... - 'Interpreter', 'tex', 'Units', 'normalized', ... - 'HorizontalAlignment', 'right', 'VerticalAlignment', 'top'); - end - - % FFT power spectrum - ax2 = nexttile; - imagesc(kx, ky, log(1 + PS_all{k})); - hold on; - Helper.drawPSOverlays(kx, ky, k_min, k_max) - - % Restrict axes strictly to image limits - xlim([min(kx), max(kx)]); - ylim([min(ky), max(ky)]); - axis image; % preserves aspect ratio - - set(gca, 'FontSize', 14, 'YDir', 'normal') - xlabel('k_x [\mum^{-1}]', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', font); - ylabel('k_y [\mum^{-1}]', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', font); - title('Power Spectrum - S(k_x,k_y)', 'Interpreter', 'tex', ... - 'FontSize', 16, 'FontWeight', 'bold', 'FontName', font); - colorbar; - colormap(ax2, Colormaps.coolwarm()); - - - % Radial distribution - nexttile; - plot(k_rho_vals, S_k_smoothed, 'LineWidth', 2); - set(gca, 'FontSize', 14, 'YScale', 'log', 'XLim', [min(k_rho_vals), max(k_rho_vals)]); - xlabel('k_\rho [\mum^{-1}]', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', font); - ylabel('Magnitude (a.u.)', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', font); - title('Radial Spectral Distribution - S(k_\rho)', 'Interpreter', 'tex', ... - 'FontSize', 16, 'FontWeight', 'bold', 'FontName', font); - grid on; - - % Angular distribution - nexttile; - if ~skipNormalization - plot(theta_vals/pi, S_theta_norm, 'LineWidth', 2); - set(gca, 'FontSize', 14, 'YLim', [0, 1]); - else - plot(theta_vals/pi, S_theta, 'LineWidth', 2); - set(gca, 'FontSize', 14, 'YScale', 'log', 'YLim', [1E4, 1E7]); - end - xlabel('\theta/\pi [rad]', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', font); - ylabel('Magnitude (a.u.)', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', font); - title('Angular Spectral Distribution - S(\theta)', 'Interpreter', 'tex', ... - 'FontSize', 16, 'FontWeight', 'bold', 'FontName', font); - grid on; - ax = gca; - ax.MinorGridLineStyle = ':'; - ax.MinorGridColor = [0.7 0.7 0.7]; - ax.MinorGridAlpha = 0.5; - ax.XMinorGrid = 'on'; - ax.YMinorGrid = 'on'; - end - - %% ===== Save outputs ===== - if ~skipMovieRender - frame = getframe(gcf); - writeVideo(videoFile, frame); - end - if ~skipSaveFigures - fileNamePNG = fullfile(saveFolder, sprintf('fft_analysis_img_%03d.png', k)); - print(gcf, fileNamePNG, '-dpng', '-r100'); - end - if ~skipSaveOD - odDataStruct = struct(); - odDataStruct.IMG = IMG; - odDataStruct.x = x; - odDataStruct.y = y; - odDataStruct.scan_parameter_value = scan_parameter_values(k); - save(fullfile(saveFolder, sprintf('od_image_%03d.mat', k)), '-struct', 'odDataStruct'); - end - if skipMovieRender && skipSaveFigures - pause(0.5); - end - end - - % Package results into struct - results = struct(); - results.kx = kx; - results.ky = ky; - results.PS_all = PS_all; - results.theta_vals = theta_vals; - results.S_theta_all = S_theta_all; - results.k_rho_vals = k_rho_vals; - results.S_k_all = S_k_all; - results.angular_spectral_distribution = angular_spectral_distribution; - results.S_k_smoothed_all = S_k_smoothed_all; - results.radial_spectral_contrast = radial_spectral_contrast; - results.S_theta_norm_all = S_theta_norm_all; - results.angular_spectral_weight = angular_spectral_weight; - - if ~skipMovieRender - close(videoFile); - end -end diff --git a/Data-Analyzer/+Analyzer/extractAutocorrelation.m b/Data-Analyzer/+Analyzer/extractAutocorrelation.m deleted file mode 100644 index 3218732..0000000 --- a/Data-Analyzer/+Analyzer/extractAutocorrelation.m +++ /dev/null @@ -1,49 +0,0 @@ -function results = extractAutocorrelation(theta_values, angular_spectral_distribution, scan_parameter_values, N_shots, N_angular_bins) - %% Extract g² (autocorrelation) from experimental images - % Computes angular autocorrelation g² for a set of experimental images. - % Uses conductSpectralAnalysis to compute S(θ) and θ-values, then groups - % images by scan parameter and computes normalized autocorrelations. - - % ===== Convert spectral distributions to matrix ===== - delta_nkr_all = zeros(N_shots, N_angular_bins); - for k = 1:N_shots - delta_nkr_all(k, :) = angular_spectral_distribution{k}; - end - - % ===== Group images by scan parameter values ===== - [unique_scan_parameter_values, ~, idx] = unique(scan_parameter_values); - N_params = length(unique_scan_parameter_values); - - % ===== Preallocate output arrays ===== - g2_all = zeros(N_params, N_angular_bins); - g2_error_all = zeros(N_params, N_angular_bins); - - % ===== Compute g²(θ) for each scan parameter group ===== - for i = 1:N_params - group_idx = find(idx == i); - group_data = delta_nkr_all(group_idx, :); - - for dtheta = 0:N_angular_bins-1 - temp = zeros(length(group_idx), 1); - - for j = 1:length(group_idx) - profile = group_data(j, :); - profile_shifted = circshift(profile, -dtheta, 2); - - num = mean(profile .* profile_shifted); - denom = mean(profile.^2); - - temp(j) = num / denom; - end - - g2_all(i, dtheta+1) = mean(temp, 'omitnan'); - g2_error_all(i, dtheta+1) = std(temp, 'omitnan') / sqrt(length(group_idx)); - end - end - - % ===== Package results ===== - results = struct(); - results.g2_all = g2_all; - results.g2_error_all = g2_error_all; - results.theta_values = theta_values; -end diff --git a/Data-Analyzer/+Analyzer/extractCustomCorrelation.m b/Data-Analyzer/+Analyzer/extractCustomCorrelation.m deleted file mode 100644 index 9ef9ff5..0000000 --- a/Data-Analyzer/+Analyzer/extractCustomCorrelation.m +++ /dev/null @@ -1,107 +0,0 @@ -function results = extractCustomCorrelation(angular_spectral_distribution, scan_parameter_values, N_shots, N_angular_bins) -%% Extracts correlation of a single (highest) peak with possible secondary peak (50-70°) -% -% Inputs: -% od_imgs - Cell array of images -% scan_parameter_values - Vector of scan parameters corresponding to images -% pixel_size - Camera pixel size in meters -% magnification - Imaging magnification -% zoom_size - Half-size of FFT crop around center -% r_min, r_max - Radial bounds for angular spectral distribution -% N_angular_bins - Number of angular bins -% Angular_Threshold, Angular_Sigma - Parameters for angular weighting -% skipPreprocessing, skipMasking, skipIntensityThresholding, skipBinarization - flags for FFT preprocessing -% -% Output: -% results - Struct containing g2 correlation and cumulant statistics per scan parameter - - % ===== Convert spectral distributions to matrix (N_shots x N_angular_bins) ===== - delta_nkr_all = zeros(N_shots, N_angular_bins); - for k = 1:N_shots - delta_nkr_all(k, :) = angular_spectral_distribution{k}; - end - - % ===== Group images by scan parameter values ===== - [unique_scan_parameter_values, ~, idx] = unique(scan_parameter_values); - N_params = length(unique_scan_parameter_values); - - % ===== Angular settings ===== - angle_range = 180; - angle_per_bin = angle_range / N_angular_bins; - max_peak_bin = round(180 / angle_per_bin); - window_size = 10; - angle_threshold = 100; - - % ===== Preallocate result arrays ===== - mean_max_g2_values = zeros(1, N_params); - skew_max_g2_angle_values = zeros(1, N_params); - var_max_g2_values = zeros(1, N_params); - fourth_order_cumulant_max_g2_angle_values = zeros(1, N_params); - max_g2_all_per_scan_parameter_value = cell(1, N_params); - std_error_g2_values = zeros(1, N_params); - - % ===== Compute correlations and cumulants per group ===== - for i = 1:N_params - group_idx = find(idx == i); - group_data = delta_nkr_all(group_idx, :); - N_reps = size(group_data, 1); - - g2_values = zeros(1, N_reps); - - for j = 1:N_reps - profile = group_data(j, :); - - % Find highest peak in 0–180° range - restricted_profile = profile(1:max_peak_bin); - [~, peak_idx_rel] = max(restricted_profile); - peak_idx = peak_idx_rel; - peak_angle = (peak_idx - 1) * angle_per_bin; - - % Determine offsets for secondary peak correlation - if peak_angle < angle_threshold - offsets = round(50 / angle_per_bin) : round(70 / angle_per_bin); - else - offsets = -round(70 / angle_per_bin) : -round(50 / angle_per_bin); - end - - ref_window = mod((peak_idx - window_size):(peak_idx + window_size) - 1, N_angular_bins) + 1; - ref = profile(ref_window); - - correlations = zeros(size(offsets)); - for k_off = 1:length(offsets) - shifted_idx = mod(peak_idx + offsets(k_off) - 1, N_angular_bins) + 1; - sec_window = mod((shifted_idx - window_size):(shifted_idx + window_size) - 1, N_angular_bins) + 1; - sec = profile(sec_window); - - correlations(k_off) = mean(ref .* sec) / mean(ref.^2); - end - - [max_corr, ~] = max(correlations); - g2_values(j) = max_corr; - end - - % Store raw values - max_g2_all_per_scan_parameter_value{i} = g2_values; - - % Compute cumulants - kappa = Calculator.computeCumulants(g2_values(:), 4); - - mean_max_g2_values(i) = kappa(1); - var_max_g2_values(i) = kappa(2); - skew_max_g2_angle_values(i) = kappa(3); - fourth_order_cumulant_max_g2_angle_values(i) = kappa(4); - - N_eff = sum(~isnan(g2_values)); - std_error_g2_values(i) = sqrt(kappa(2)) / sqrt(N_eff); - end - - % ===== Package results into struct ===== - results = struct(); - results.mean_max_g2 = mean_max_g2_values; - results.var_max_g2 = var_max_g2_values; - results.skew_max_g2_angle = skew_max_g2_angle_values; - results.fourth_order_cumulant_max_g2 = fourth_order_cumulant_max_g2_angle_values; - results.std_error_g2 = std_error_g2_values; - results.max_g2_all_per_scan_parameter_value = max_g2_all_per_scan_parameter_value; - -end diff --git a/Data-Analyzer/+Analyzer/performAnalysis.m b/Data-Analyzer/+Analyzer/performAnalysis.m deleted file mode 100644 index 555a4fb..0000000 --- a/Data-Analyzer/+Analyzer/performAnalysis.m +++ /dev/null @@ -1,77 +0,0 @@ -function results = performAnalysis(options) - arguments - options.scan_parameter (1,:) char - options.scan_reference_values (1,:) double - options.cam (1,1) double - options.angle (1,1) double - options.center (1,2) double - options.span (1,2) double - options.fraction (1,2) double - options.ImagingMode (1,:) char - options.PulseDuration (1,1) double - options.removeFringes (1,1) logical - options.skipUnshuffling (1,1) logical - options.pixel_size (1,1) double - options.magnification (1,1) double - options.zoom_size (1,1) double - options.N_angular_bins (1,1) double - options.Angular_Threshold (1,1) double - options.Angular_Sigma (1,1) double - options.Angular_WindowSize (1,1) double - options.theta_min (1,1) double - options.theta_max (1,1) double - options.N_radial_bins (1,1) double - options.Radial_Sigma (1,1) double - options.Radial_WindowSize (1,1) double - options.k_min (1,1) double - options.k_max (1,1) double - options.skipPreprocessing (1,1) logical - options.skipMasking (1,1) logical - options.skipIntensityThresholding (1,1) logical - options.skipBinarization (1,1) logical - options.skipNormalization (1,1) logical - options.skipLivePlot (1,1) logical - options.skipMovieRender (1,1) logical - options.skipSaveFigures (1,1) logical - options.skipSaveOD (1,1) logical - options.showProgressBar (1,1) logical - options.savefileName (1,:) char - options.folderPath (1,:) char - options.saveDirectory (1,:) char - options.titleString (1,:) char - options.font (1,:) char - - end - - % Collect OD images - [od_imgs, scan_parameter_values, ~] = Helper.collectODImages(options); - - % Conduct spectral analysis - fprintf('\nInitiating spectral analysis...\n'); - - spectral_analysis_results = Analyzer.conductSpectralAnalysis(od_imgs, scan_parameter_values, options); - - N_shots = length(od_imgs); - - % Extract angular correlations - full_g2_results = Analyzer.extractAutocorrelation(... - spectral_analysis_results.theta_vals, ... - spectral_analysis_results.angular_spectral_distribution, ... - scan_parameter_values, N_shots, options.N_angular_bins); - - custom_g_results = Analyzer.extractCustomCorrelation(... - spectral_analysis_results.angular_spectral_distribution, ... - scan_parameter_values, N_shots, options.N_angular_bins); - - fprintf('\nSpectral analysis complete!\n'); - - % PCA - - % Lattice Reconstruction - - % Package results into struct - results = struct(); - results.spectral_analysis_results = spectral_analysis_results; - results.full_g2_results = full_g2_results; - results.custom_g_results = custom_g_results; -end \ No newline at end of file diff --git a/Data-Analyzer/+Analyzer/runInteractiveODImageViewer.m b/Data-Analyzer/+Analyzer/runInteractiveODImageViewer.m deleted file mode 100644 index 4b91093..0000000 --- a/Data-Analyzer/+Analyzer/runInteractiveODImageViewer.m +++ /dev/null @@ -1,96 +0,0 @@ -function runInteractiveODImageViewer(od_imgs, scan_parameter_values, file_list, options) -%% Interactive OD Image Viewer -% od_imgs : cell array of 2D OD images -% scan_parameter_values : array of corresponding scan parameter values -% file_list : cell array of corresponding filenames -% options : struct with fields -% .pixel_size, .magnification, .center, .font, .zoom_size, .scan_parameter - - % Figure - hFig = figure('Name', 'OD Image Viewer', 'NumberTitle', 'off', 'Position', [50 50 1000 800]); - - % Get image size - [Ny, Nx] = size(od_imgs{1}); - - % Pixel size and axes in μm - dx = options.pixel_size / options.magnification; - dy = dx; % square pixels - x = ((1:Nx) - (Nx+1)/2) * dx * 1e6; - y = ((1:Ny) - (Ny+1)/2) * dy * 1e6; - - % Display first image - hAx = axes('Parent', hFig); - hImg = imagesc(hAx, x, y, od_imgs{1}); - axis(hAx, 'equal', 'tight') - colormap(hAx, Colormaps.inferno()); - set(hAx, 'FontSize', 14, 'YDir', 'normal'); - xlabel(hAx, 'x (\mum)', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', options.font); - ylabel(hAx, 'y (\mum)', 'Interpreter', 'tex', 'FontSize', 14, 'FontName', options.font); - title(hAx, ['Measurement: ', options.titleString], 'FontSize', 16, ... - 'FontWeight', 'bold', 'Interpreter', 'tex', 'FontName', options.font); - colorbarHandle = colorbar(hAx); - ylabel(colorbarHandle, 'Optical Density', 'Rotation', -90, 'FontSize', 14, 'FontName', options.font); - - hold(hAx, 'on') - % Draw diagonal overlays once - Helper.drawODOverlays(x(1), y(1), x(end), y(end)); - Helper.drawODOverlays(x(end), y(1), x(1), y(end)); - hold(hAx, 'off') - - txtHandle = text(hAx, 0.975, 0.975, '', ... - 'Color', 'white', 'FontWeight', 'bold', ... - 'FontSize', 24, 'Interpreter', 'tex', ... - 'Units', 'normalized', ... - 'HorizontalAlignment', 'right', ... - 'VerticalAlignment', 'top'); - - % Slider - sliderHandle = uicontrol('Style', 'slider', ... - 'Min', 1, 'Max', length(od_imgs), 'Value', 1, ... - 'SliderStep', [1/(length(od_imgs)-1), 10/(length(od_imgs)-1)], ... - 'Position', [150 5 700 20], ... - 'Callback', @(src, ~) updateImage(round(src.Value))); - - % Initialize - currentIdx = 1; - updateImage(currentIdx); - - % Arrow key callback - set(hFig, 'KeyPressFcn', @(src, event) keyPressCallback(event)); - - %% --- Nested Functions --- - function updateImage(idx) - currentIdx = idx; - hImg.CData = od_imgs{idx}; - - % Extract only filename (without path) - [~, fname, ext] = fileparts(file_list{idx}); - shortName = [fname, ext]; - - % Update figure title with shot + filename - if strcmp(options.scan_parameter, 'rot_mag_fin_pol_angle') - hFig.Name = sprintf('Shot %d | %s', idx, shortName); - txtHandle.String = sprintf('%.1f^\\circ', scan_parameter_values(idx)); - else - hFig.Name = sprintf('Shot %d | %s', idx, shortName); - txtHandle.String = sprintf('%.2f G', scan_parameter_values(idx)); - end - - sliderHandle.Value = idx; - drawnow; - end - - function keyPressCallback(event) - switch event.Key - case 'rightarrow' - if currentIdx < length(od_imgs) - updateImage(currentIdx + 1); - end - case 'leftarrow' - if currentIdx > 1 - updateImage(currentIdx - 1); - end - end - end - -end \ No newline at end of file diff --git a/Data-Analyzer/+Calculator/computeAngularSpectralDistribution.m b/Data-Analyzer/+Calculator/computeAngularSpectralDistribution.m deleted file mode 100644 index caf244f..0000000 --- a/Data-Analyzer/+Calculator/computeAngularSpectralDistribution.m +++ /dev/null @@ -1,46 +0,0 @@ -function [theta_vals, S_theta] = computeAngularSpectralDistribution(IMGFFT, kx, ky, k_min, k_max, num_bins, threshold, sigma, windowSize) - % Apply threshold to isolate strong peaks - IMGFFT(IMGFFT < threshold) = 0; - - % Create wavenumber meshgrid - [KX, KY] = meshgrid(kx, ky); - Kmag = sqrt(KX.^2 + KY.^2); % radial wavenumber magnitude - Theta = atan2(KY, KX); % range [-pi, pi] - - % Restrict to radial band in wavenumber space - radial_mask = (Kmag >= k_min) & (Kmag <= k_max); - - % Initialize angular structure factor - S_theta = zeros(1, num_bins); - theta_vals = linspace(0, pi, num_bins); % only 0 to pi due to symmetry - - % Loop over angular bins - for i = 1:num_bins - angle_start = (i - 1) * pi / num_bins; - angle_end = i * pi / num_bins; - angle_mask = (Theta >= angle_start) & (Theta < angle_end); - bin_mask = radial_mask & angle_mask; - fft_angle = IMGFFT .* bin_mask; - S_theta(i) = sum(sum(abs(fft_angle).^2)); - end - - % Optional smoothing - if exist('sigma', 'var') && ~isempty(sigma) - % Gaussian smoothing - half_width = ceil(3 * sigma); - x = -half_width:half_width; - gauss_kernel = exp(-x.^2 / (2 * sigma^2)); - gauss_kernel = gauss_kernel / sum(gauss_kernel); - - % Circular convolution - S_theta = conv([S_theta(end - half_width + 1:end), S_theta, S_theta(1:half_width)], ... - gauss_kernel, 'same'); - S_theta = S_theta(half_width + 1:end - half_width); - elseif exist('windowSize', 'var') && ~isempty(windowSize) - % Moving average smoothing - pad = floor(windowSize / 2); - kernel = ones(1, windowSize) / windowSize; - S_theta = conv([S_theta(end - pad + 1:end), S_theta, S_theta(1:pad)], kernel, 'same'); - S_theta = S_theta(pad + 1:end - pad); - end -end \ No newline at end of file diff --git a/Data-Analyzer/+Calculator/computeCumulants.m b/Data-Analyzer/+Calculator/computeCumulants.m deleted file mode 100644 index 52ed552..0000000 --- a/Data-Analyzer/+Calculator/computeCumulants.m +++ /dev/null @@ -1,52 +0,0 @@ -function cumulants = computeCumulants(x, maxOrder) -% computeCumulants - compute cumulants up to specified order from data vector x -% -% Syntax: cumulants = computeCumulants(x, maxOrder) -% -% Inputs: -% x - 1D numeric vector (may contain NaNs) -% maxOrder - maximum order of cumulants to compute (default: 6) -% -% Output: -% cumulants - vector [kappa_1, ..., kappa_maxOrder] - - if nargin < 2 - maxOrder = 6; - end - - x = x(:); - x = x(~isnan(x)); % Remove NaNs - - if isempty(x) - cumulants = NaN(1, maxOrder); - return; - end - - mu1 = mean(x, 'omitnan'); - x_centered = x - mu1; - - cumulants = zeros(1, maxOrder); - cumulants(1) = mu1; - - mu = zeros(1, maxOrder); - for k = 2:maxOrder - mu(k) = mean(x_centered.^k, 'omitnan'); - end - - if maxOrder >= 2 - cumulants(2) = mu(2); - end - if maxOrder >= 3 - cumulants(3) = mu(3); - end - if maxOrder >= 4 - cumulants(4) = mu(4) - 3 * mu(2)^2; - end - if maxOrder >= 5 - cumulants(5) = mu(5) - 10 * mu(3) * mu(2); - end - if maxOrder >= 6 - cumulants(6) = mu(6) - 15 * mu(4) * mu(2) - 10 * mu(3)^2 + 30 * mu(2)^3; - end - -end diff --git a/Data-Analyzer/+Calculator/computeFourierTransform.m b/Data-Analyzer/+Calculator/computeFourierTransform.m deleted file mode 100644 index f3ac156..0000000 --- a/Data-Analyzer/+Calculator/computeFourierTransform.m +++ /dev/null @@ -1,70 +0,0 @@ -function [IMGFFT, IMGPR] = computeFourierTransform(I, skipPreprocessing, skipMasking, skipIntensityThresholding, skipBinarization) - % computeFourierSpectrum - Computes the 2D Fourier power spectrum - % of binarized and enhanced lattice image features, with optional central mask. - % - % Inputs: - % I - Grayscale or RGB image matrix - % - % Output: - % F_mag - 2D Fourier power spectrum (shifted) - - if ~skipPreprocessing - % Preprocessing: Denoise - filtered = imgaussfilt(I, 10); - IMGPR = I - filtered; % adjust sigma as needed - else - IMGPR = I; - end - - if ~skipMasking - [rows, cols] = size(IMGPR); - [X, Y] = meshgrid(1:cols, 1:rows); - % Elliptical mask parameters - cx = cols / 2; - cy = rows / 2; - - % Shifted coordinates - x = X - cx; - y = Y - cy; - - % Ellipse semi-axes - rx = 0.4 * cols; - ry = 0.2 * rows; - - % Rotation angle in degrees -> radians - theta_deg = 30; % Adjust as needed - theta = deg2rad(theta_deg); - - % Rotated ellipse equation - cos_t = cos(theta); - sin_t = sin(theta); - - x_rot = (x * cos_t + y * sin_t); - y_rot = (-x * sin_t + y * cos_t); - - ellipseMask = (x_rot.^2) / rx^2 + (y_rot.^2) / ry^2 <= 1; - - % Apply cutout mask - IMGPR = IMGPR .* ellipseMask; - end - - if ~skipIntensityThresholding - % Apply global intensity threshold mask - intensity_thresh = 0.20; - intensity_mask = IMGPR > intensity_thresh; - IMGPR = IMGPR .* intensity_mask; - end - - if ~skipBinarization - % Adaptive binarization and cleanup - IMGPR = imbinarize(IMGPR, 'adaptive', 'Sensitivity', 0.0); - IMGPR = imdilate(IMGPR, strel('disk', 2)); - IMGPR = imerode(IMGPR, strel('disk', 1)); - IMGPR = imfill(IMGPR, 'holes'); - F = fft2(double(IMGPR)); % Compute 2D Fourier Transform - IMGFFT = abs(fftshift(F))'; % Shift zero frequency to center - else - F = fft2(double(IMGPR)); % Compute 2D Fourier Transform - IMGFFT = abs(fftshift(F))'; % Shift zero frequency to center - end -end \ No newline at end of file diff --git a/Data-Analyzer/+Calculator/computeRadialSpectralContrast.m b/Data-Analyzer/+Calculator/computeRadialSpectralContrast.m deleted file mode 100644 index 9082bfb..0000000 --- a/Data-Analyzer/+Calculator/computeRadialSpectralContrast.m +++ /dev/null @@ -1,28 +0,0 @@ -function contrast = computeRadialSpectralContrast(k_rho_vals, S_k_smoothed, k_min, k_max) -% Computes the ratio of the peak in S_k_smoothed within [k_min, k_max] -% to the value at (or near) k = 0. - - % Ensure inputs are column vectors - k_rho_vals = k_rho_vals(:); - S_k_smoothed = S_k_smoothed(:); - - % Step 1: Find index of k ≈ 0 - [~, idx_k0] = min(abs(k_rho_vals)); % Closest to zero - S_k0 = S_k_smoothed(idx_k0); - - % Step 2: Find indices in specified k-range - in_range = (k_rho_vals >= k_min) & (k_rho_vals <= k_max); - - if ~any(in_range) - warning('No values found in the specified k-range. Returning NaN.'); - contrast = NaN; - return; - end - - % Step 3: Find peak value in the specified k-range - S_k_peak = max(S_k_smoothed(in_range)); - - % Step 4: Compute contrast - contrast = S_k_peak / S_k0; - -end \ No newline at end of file diff --git a/Data-Analyzer/+Calculator/computeRadialSpectralDistribution.m b/Data-Analyzer/+Calculator/computeRadialSpectralDistribution.m deleted file mode 100644 index c516a5a..0000000 --- a/Data-Analyzer/+Calculator/computeRadialSpectralDistribution.m +++ /dev/null @@ -1,33 +0,0 @@ -function [k_rho_vals, S_radial] = computeRadialSpectralDistribution(IMGFFT, kx, ky, thetamin, thetamax, num_bins) - % IMGFFT : 2D FFT image (fftshifted and cropped) - % kx, ky : 1D physical wavenumber axes [μm⁻¹] matching FFT size - % thetamin : Minimum angle (in radians) - % thetamax : Maximum angle (in radians) - % num_bins : Number of radial bins - - [KX, KY] = meshgrid(kx, ky); - K_rho = sqrt(KX.^2 + KY.^2); - Theta = atan2(KY, KX); - - if thetamin < thetamax - angle_mask = (Theta >= thetamin) & (Theta <= thetamax); - else - angle_mask = (Theta >= thetamin) | (Theta <= thetamax); - end - - power_spectrum = abs(IMGFFT).^2; - - r_min = min(K_rho(angle_mask)); - r_max = max(K_rho(angle_mask)); - r_edges = linspace(r_min, r_max, num_bins + 1); - k_rho_vals = 0.5 * (r_edges(1:end-1) + r_edges(2:end)); - S_radial = zeros(1, num_bins); - - for i = 1:num_bins - r_low = r_edges(i); - r_high = r_edges(i + 1); - radial_mask = (K_rho >= r_low) & (K_rho < r_high); - full_mask = radial_mask & angle_mask; - S_radial(i) = sum(power_spectrum(full_mask)); - end -end \ No newline at end of file diff --git a/Data-Analyzer/+Colormaps/coolwarm.m b/Data-Analyzer/+Colormaps/coolwarm.m deleted file mode 100644 index ef9338b..0000000 --- a/Data-Analyzer/+Colormaps/coolwarm.m +++ /dev/null @@ -1,302 +0,0 @@ -function map = coolwarm(m) - %COOLWARM cool-warm color map - % COOLWARM(M) returns an M-by-3 matrix containing a colormap with cool-to-warm - % colors, as commonly used in Paraview. - % COOLWARM, by itself, is the same length as the current colormap. - % - % For example, to reset the colormap of the current figure: - % - % colormap(coolwarm) - % - % Colormap is based on the colors used by the freeware program Paraview. - % The color table used here is CoolWarmUChar33.csv, from - % http://www.sandia.gov/~kmorel/documents/ColorMaps/ - % Reference: Moreland, Kenneth, 2009, Diverging Color Maps for Scientific - % Visualization, in Proceedings of the 5th International Symposium on - % Visual Computing. - % The Matlab code is after haxby.m by Kelsey Jordahl, Marymount Manhattan - % College. - % - % See also HSV, GRAY, PINK, COOL, BONE, COPPER, FLAG, HOT - % COLORMAP, RGBPLOT, HAXBY. - - % Mark Brandon - % Yale University - % Time-stamp: - - %% Check inputs - narginchk(0,1); - - if nargin == 1 - validateattributes(m,{'numeric'},{'numel',1}); - end - - %% Begin Function - if nargin < 1, m = size(get(gcf,'colormap'),1); end - c=[59 76 192; - 60 78 194; - 61 80 195; - 62 81 197; - 63 83 198; - 64 85 200; - 66 87 201; - 67 88 203; - 68 90 204; - 69 92 206; - 70 93 207; - 71 95 209; - 73 97 210; - 74 99 211; - 75 100 213; - 76 102 214; - 77 104 215; - 79 105 217; - 80 107 218; - 81 109 219; - 82 110 221; - 84 112 222; - 85 114 223; - 86 115 224; - 87 117 225; - 89 119 226; - 90 120 228; - 91 122 229; - 93 123 230; - 94 125 231; - 95 127 232; - 96 128 233; - 98 130 234; - 99 131 235; - 100 133 236; - 102 135 237; - 103 136 238; - 104 138 239; - 106 139 239; - 107 141 240; - 108 142 241; - 110 144 242; - 111 145 243; - 112 147 243; - 114 148 244; - 115 150 245; - 116 151 246; - 118 153 246; - 119 154 247; - 120 156 247; - 122 157 248; - 123 158 249; - 124 160 249; - 126 161 250; - 127 163 250; - 129 164 251; - 130 165 251; - 131 167 252; - 133 168 252; - 134 169 252; - 135 171 253; - 137 172 253; - 138 173 253; - 140 174 254; - 141 176 254; - 142 177 254; - 144 178 254; - 145 179 254; - 147 181 255; - 148 182 255; - 149 183 255; - 151 184 255; - 152 185 255; - 153 186 255; - 155 187 255; - 156 188 255; - 158 190 255; - 159 191 255; - 160 192 255; - 162 193 255; - 163 194 255; - 164 195 254; - 166 196 254; - 167 197 254; - 168 198 254; - 170 199 253; - 171 199 253; - 172 200 253; - 174 201 253; - 175 202 252; - 176 203 252; - 178 204 251; - 179 205 251; - 180 205 251; - 182 206 250; - 183 207 250; - 184 208 249; - 185 208 248; - 187 209 248; - 188 210 247; - 189 210 247; - 190 211 246; - 192 212 245; - 193 212 245; - 194 213 244; - 195 213 243; - 197 214 243; - 198 214 242; - 199 215 241; - 200 215 240; - 201 216 239; - 203 216 238; - 204 217 238; - 205 217 237; - 206 217 236; - 207 218 235; - 208 218 234; - 209 219 233; - 210 219 232; - 211 219 231; - 213 219 230; - 214 220 229; - 215 220 228; - 216 220 227; - 217 220 225; - 218 220 224; - 219 220 223; - 220 221 222; - 221 221 221; - 222 220 219; - 223 220 218; - 224 219 216; - 225 219 215; - 226 218 214; - 227 218 212; - 228 217 211; - 229 216 209; - 230 216 208; - 231 215 206; - 232 215 205; - 232 214 203; - 233 213 202; - 234 212 200; - 235 212 199; - 236 211 197; - 236 210 196; - 237 209 194; - 238 209 193; - 238 208 191; - 239 207 190; - 240 206 188; - 240 205 187; - 241 204 185; - 241 203 184; - 242 202 182; - 242 201 181; - 243 200 179; - 243 199 178; - 244 198 176; - 244 197 174; - 245 196 173; - 245 195 171; - 245 194 170; - 245 193 168; - 246 192 167; - 246 191 165; - 246 190 163; - 246 188 162; - 247 187 160; - 247 186 159; - 247 185 157; - 247 184 156; - 247 182 154; - 247 181 152; - 247 180 151; - 247 178 149; - 247 177 148; - 247 176 146; - 247 174 145; - 247 173 143; - 247 172 141; - 247 170 140; - 247 169 138; - 247 167 137; - 247 166 135; - 246 164 134; - 246 163 132; - 246 161 131; - 246 160 129; - 245 158 127; - 245 157 126; - 245 155 124; - 244 154 123; - 244 152 121; - 244 151 120; - 243 149 118; - 243 147 117; - 242 146 115; - 242 144 114; - 241 142 112; - 241 141 111; - 240 139 109; - 240 137 108; - 239 136 106; - 238 134 105; - 238 132 103; - 237 130 102; - 236 129 100; - 236 127 99; - 235 125 97; - 234 123 96; - 233 121 95; - 233 120 93; - 232 118 92; - 231 116 90; - 230 114 89; - 229 112 88; - 228 110 86; - 227 108 85; - 227 106 83; - 226 104 82; - 225 102 81; - 224 100 79; - 223 98 78; - 222 96 77; - 221 94 75; - 220 92 74; - 218 90 73; - 217 88 71; - 216 86 70; - 215 84 69; - 214 82 67; - 213 80 66; - 212 78 65; - 210 75 64; - 209 73 62; - 208 71 61; - 207 69 60; - 205 66 59; - 204 64 57; - 203 62 56; - 202 59 55; - 200 57 54; - 199 54 53; - 198 51 52; - 196 49 50; - 195 46 49; - 193 43 48; - 192 40 47; - 190 37 46; - 189 34 45; - 188 30 44; - 186 26 43; - 185 22 41; - 183 17 40; - 181 11 39; - 180 4 38]; - %... Interpolate get requested size for color table - pp=1:(m-1)/(size(c,1)-1):m; - r=interp1(pp,c(:,1),1:m); - g=interp1(pp,c(:,2),1:m); - b=interp1(pp,c(:,3),1:m); - %... Normalize to range [0,1], and divide again by maximum value - % to correct for round-off errors associated with the interpolation. - map=[r' g' b']/255; - map = map/max(map(:)); -end \ No newline at end of file diff --git a/Data-Analyzer/+Colormaps/fake_parula.m b/Data-Analyzer/+Colormaps/fake_parula.m deleted file mode 100644 index dcd4ce4..0000000 --- a/Data-Analyzer/+Colormaps/fake_parula.m +++ /dev/null @@ -1,76 +0,0 @@ -function cm_data=fake_parula(m) - -cm = [[0.2081, 0.1663, 0.5292], - [0.2116238095, 0.1897809524, 0.5776761905], - [0.212252381, 0.2137714286, 0.6269714286], - [0.2081, 0.2386, 0.6770857143], - [0.1959047619, 0.2644571429, 0.7279], - [0.1707285714, 0.2919380952, 0.779247619], - [0.1252714286, 0.3242428571, 0.8302714286], - [0.0591333333, 0.3598333333, 0.8683333333], - [0.0116952381, 0.3875095238, 0.8819571429], - [0.0059571429, 0.4086142857, 0.8828428571], - [0.0165142857, 0.4266, 0.8786333333], - [0.032852381, 0.4430428571, 0.8719571429], - [0.0498142857, 0.4585714286, 0.8640571429], - [0.0629333333, 0.4736904762, 0.8554380952], - [0.0722666667, 0.4886666667, 0.8467], - [0.0779428571, 0.5039857143, 0.8383714286], - [0.079347619, 0.5200238095, 0.8311809524], - [0.0749428571, 0.5375428571, 0.8262714286], - [0.0640571429, 0.5569857143, 0.8239571429], - [0.0487714286, 0.5772238095, 0.8228285714], - [0.0343428571, 0.5965809524, 0.819852381], - [0.0265, 0.6137, 0.8135], - [0.0238904762, 0.6286619048, 0.8037619048], - [0.0230904762, 0.6417857143, 0.7912666667], - [0.0227714286, 0.6534857143, 0.7767571429], - [0.0266619048, 0.6641952381, 0.7607190476], - [0.0383714286, 0.6742714286, 0.743552381], - [0.0589714286, 0.6837571429, 0.7253857143], - [0.0843, 0.6928333333, 0.7061666667], - [0.1132952381, 0.7015, 0.6858571429], - [0.1452714286, 0.7097571429, 0.6646285714], - [0.1801333333, 0.7176571429, 0.6424333333], - [0.2178285714, 0.7250428571, 0.6192619048], - [0.2586428571, 0.7317142857, 0.5954285714], - [0.3021714286, 0.7376047619, 0.5711857143], - [0.3481666667, 0.7424333333, 0.5472666667], - [0.3952571429, 0.7459, 0.5244428571], - [0.4420095238, 0.7480809524, 0.5033142857], - [0.4871238095, 0.7490619048, 0.4839761905], - [0.5300285714, 0.7491142857, 0.4661142857], - [0.5708571429, 0.7485190476, 0.4493904762], - [0.609852381, 0.7473142857, 0.4336857143], - [0.6473, 0.7456, 0.4188], - [0.6834190476, 0.7434761905, 0.4044333333], - [0.7184095238, 0.7411333333, 0.3904761905], - [0.7524857143, 0.7384, 0.3768142857], - [0.7858428571, 0.7355666667, 0.3632714286], - [0.8185047619, 0.7327333333, 0.3497904762], - [0.8506571429, 0.7299, 0.3360285714], - [0.8824333333, 0.7274333333, 0.3217], - [0.9139333333, 0.7257857143, 0.3062761905], - [0.9449571429, 0.7261142857, 0.2886428571], - [0.9738952381, 0.7313952381, 0.266647619], - [0.9937714286, 0.7454571429, 0.240347619], - [0.9990428571, 0.7653142857, 0.2164142857], - [0.9955333333, 0.7860571429, 0.196652381], - [0.988, 0.8066, 0.1793666667], - [0.9788571429, 0.8271428571, 0.1633142857], - [0.9697, 0.8481380952, 0.147452381], - [0.9625857143, 0.8705142857, 0.1309], - [0.9588714286, 0.8949, 0.1132428571], - [0.9598238095, 0.9218333333, 0.0948380952], - [0.9661, 0.9514428571, 0.0755333333], - [0.9763, 0.9831, 0.0538]]; - -if nargin < 1 - cm_data = cm; -else - hsv=rgb2hsv(cm); - cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); - cm_data=hsv2rgb(cm_data); - -end -end \ No newline at end of file diff --git a/Data-Analyzer/+Colormaps/inferno.m b/Data-Analyzer/+Colormaps/inferno.m deleted file mode 100644 index bdef08d..0000000 --- a/Data-Analyzer/+Colormaps/inferno.m +++ /dev/null @@ -1,269 +0,0 @@ -function [cm_data]=inferno(m) - -cm = [[ 1.46159096e-03, 4.66127766e-04, 1.38655200e-02], - [ 2.26726368e-03, 1.26992553e-03, 1.85703520e-02], - [ 3.29899092e-03, 2.24934863e-03, 2.42390508e-02], - [ 4.54690615e-03, 3.39180156e-03, 3.09092475e-02], - [ 6.00552565e-03, 4.69194561e-03, 3.85578980e-02], - [ 7.67578856e-03, 6.13611626e-03, 4.68360336e-02], - [ 9.56051094e-03, 7.71344131e-03, 5.51430756e-02], - [ 1.16634769e-02, 9.41675403e-03, 6.34598080e-02], - [ 1.39950388e-02, 1.12247138e-02, 7.18616890e-02], - [ 1.65605595e-02, 1.31362262e-02, 8.02817951e-02], - [ 1.93732295e-02, 1.51325789e-02, 8.87668094e-02], - [ 2.24468865e-02, 1.71991484e-02, 9.73274383e-02], - [ 2.57927373e-02, 1.93306298e-02, 1.05929835e-01], - [ 2.94324251e-02, 2.15030771e-02, 1.14621328e-01], - [ 3.33852235e-02, 2.37024271e-02, 1.23397286e-01], - [ 3.76684211e-02, 2.59207864e-02, 1.32232108e-01], - [ 4.22525554e-02, 2.81385015e-02, 1.41140519e-01], - [ 4.69146287e-02, 3.03236129e-02, 1.50163867e-01], - [ 5.16437624e-02, 3.24736172e-02, 1.59254277e-01], - [ 5.64491009e-02, 3.45691867e-02, 1.68413539e-01], - [ 6.13397200e-02, 3.65900213e-02, 1.77642172e-01], - [ 6.63312620e-02, 3.85036268e-02, 1.86961588e-01], - [ 7.14289181e-02, 4.02939095e-02, 1.96353558e-01], - [ 7.66367560e-02, 4.19053329e-02, 2.05798788e-01], - [ 8.19620773e-02, 4.33278666e-02, 2.15289113e-01], - [ 8.74113897e-02, 4.45561662e-02, 2.24813479e-01], - [ 9.29901526e-02, 4.55829503e-02, 2.34357604e-01], - [ 9.87024972e-02, 4.64018731e-02, 2.43903700e-01], - [ 1.04550936e-01, 4.70080541e-02, 2.53430300e-01], - [ 1.10536084e-01, 4.73986708e-02, 2.62912235e-01], - [ 1.16656423e-01, 4.75735920e-02, 2.72320803e-01], - [ 1.22908126e-01, 4.75360183e-02, 2.81624170e-01], - [ 1.29284984e-01, 4.72930838e-02, 2.90788012e-01], - [ 1.35778450e-01, 4.68563678e-02, 2.99776404e-01], - [ 1.42377819e-01, 4.62422566e-02, 3.08552910e-01], - [ 1.49072957e-01, 4.54676444e-02, 3.17085139e-01], - [ 1.55849711e-01, 4.45588056e-02, 3.25338414e-01], - [ 1.62688939e-01, 4.35542881e-02, 3.33276678e-01], - [ 1.69575148e-01, 4.24893149e-02, 3.40874188e-01], - [ 1.76493202e-01, 4.14017089e-02, 3.48110606e-01], - [ 1.83428775e-01, 4.03288858e-02, 3.54971391e-01], - [ 1.90367453e-01, 3.93088888e-02, 3.61446945e-01], - [ 1.97297425e-01, 3.84001825e-02, 3.67534629e-01], - [ 2.04209298e-01, 3.76322609e-02, 3.73237557e-01], - [ 2.11095463e-01, 3.70296488e-02, 3.78563264e-01], - [ 2.17948648e-01, 3.66146049e-02, 3.83522415e-01], - [ 2.24762908e-01, 3.64049901e-02, 3.88128944e-01], - [ 2.31538148e-01, 3.64052511e-02, 3.92400150e-01], - [ 2.38272961e-01, 3.66209949e-02, 3.96353388e-01], - [ 2.44966911e-01, 3.70545017e-02, 4.00006615e-01], - [ 2.51620354e-01, 3.77052832e-02, 4.03377897e-01], - [ 2.58234265e-01, 3.85706153e-02, 4.06485031e-01], - [ 2.64809649e-01, 3.96468666e-02, 4.09345373e-01], - [ 2.71346664e-01, 4.09215821e-02, 4.11976086e-01], - [ 2.77849829e-01, 4.23528741e-02, 4.14392106e-01], - [ 2.84321318e-01, 4.39325787e-02, 4.16607861e-01], - [ 2.90763373e-01, 4.56437598e-02, 4.18636756e-01], - [ 2.97178251e-01, 4.74700293e-02, 4.20491164e-01], - [ 3.03568182e-01, 4.93958927e-02, 4.22182449e-01], - [ 3.09935342e-01, 5.14069729e-02, 4.23720999e-01], - [ 3.16281835e-01, 5.34901321e-02, 4.25116277e-01], - [ 3.22609671e-01, 5.56335178e-02, 4.26376869e-01], - [ 3.28920763e-01, 5.78265505e-02, 4.27510546e-01], - [ 3.35216916e-01, 6.00598734e-02, 4.28524320e-01], - [ 3.41499828e-01, 6.23252772e-02, 4.29424503e-01], - [ 3.47771086e-01, 6.46156100e-02, 4.30216765e-01], - [ 3.54032169e-01, 6.69246832e-02, 4.30906186e-01], - [ 3.60284449e-01, 6.92471753e-02, 4.31497309e-01], - [ 3.66529195e-01, 7.15785403e-02, 4.31994185e-01], - [ 3.72767575e-01, 7.39149211e-02, 4.32400419e-01], - [ 3.79000659e-01, 7.62530701e-02, 4.32719214e-01], - [ 3.85228383e-01, 7.85914864e-02, 4.32954973e-01], - [ 3.91452659e-01, 8.09267058e-02, 4.33108763e-01], - [ 3.97674379e-01, 8.32568129e-02, 4.33182647e-01], - [ 4.03894278e-01, 8.55803445e-02, 4.33178526e-01], - [ 4.10113015e-01, 8.78961593e-02, 4.33098056e-01], - [ 4.16331169e-01, 9.02033992e-02, 4.32942678e-01], - [ 4.22549249e-01, 9.25014543e-02, 4.32713635e-01], - [ 4.28767696e-01, 9.47899342e-02, 4.32411996e-01], - [ 4.34986885e-01, 9.70686417e-02, 4.32038673e-01], - [ 4.41207124e-01, 9.93375510e-02, 4.31594438e-01], - [ 4.47428382e-01, 1.01597079e-01, 4.31080497e-01], - [ 4.53650614e-01, 1.03847716e-01, 4.30497898e-01], - [ 4.59874623e-01, 1.06089165e-01, 4.29845789e-01], - [ 4.66100494e-01, 1.08321923e-01, 4.29124507e-01], - [ 4.72328255e-01, 1.10546584e-01, 4.28334320e-01], - [ 4.78557889e-01, 1.12763831e-01, 4.27475431e-01], - [ 4.84789325e-01, 1.14974430e-01, 4.26547991e-01], - [ 4.91022448e-01, 1.17179219e-01, 4.25552106e-01], - [ 4.97257069e-01, 1.19379132e-01, 4.24487908e-01], - [ 5.03492698e-01, 1.21575414e-01, 4.23356110e-01], - [ 5.09729541e-01, 1.23768654e-01, 4.22155676e-01], - [ 5.15967304e-01, 1.25959947e-01, 4.20886594e-01], - [ 5.22205646e-01, 1.28150439e-01, 4.19548848e-01], - [ 5.28444192e-01, 1.30341324e-01, 4.18142411e-01], - [ 5.34682523e-01, 1.32533845e-01, 4.16667258e-01], - [ 5.40920186e-01, 1.34729286e-01, 4.15123366e-01], - [ 5.47156706e-01, 1.36928959e-01, 4.13510662e-01], - [ 5.53391649e-01, 1.39134147e-01, 4.11828882e-01], - [ 5.59624442e-01, 1.41346265e-01, 4.10078028e-01], - [ 5.65854477e-01, 1.43566769e-01, 4.08258132e-01], - [ 5.72081108e-01, 1.45797150e-01, 4.06369246e-01], - [ 5.78303656e-01, 1.48038934e-01, 4.04411444e-01], - [ 5.84521407e-01, 1.50293679e-01, 4.02384829e-01], - [ 5.90733615e-01, 1.52562977e-01, 4.00289528e-01], - [ 5.96939751e-01, 1.54848232e-01, 3.98124897e-01], - [ 6.03138930e-01, 1.57151161e-01, 3.95891308e-01], - [ 6.09330184e-01, 1.59473549e-01, 3.93589349e-01], - [ 6.15512627e-01, 1.61817111e-01, 3.91219295e-01], - [ 6.21685340e-01, 1.64183582e-01, 3.88781456e-01], - [ 6.27847374e-01, 1.66574724e-01, 3.86276180e-01], - [ 6.33997746e-01, 1.68992314e-01, 3.83703854e-01], - [ 6.40135447e-01, 1.71438150e-01, 3.81064906e-01], - [ 6.46259648e-01, 1.73913876e-01, 3.78358969e-01], - [ 6.52369348e-01, 1.76421271e-01, 3.75586209e-01], - [ 6.58463166e-01, 1.78962399e-01, 3.72748214e-01], - [ 6.64539964e-01, 1.81539111e-01, 3.69845599e-01], - [ 6.70598572e-01, 1.84153268e-01, 3.66879025e-01], - [ 6.76637795e-01, 1.86806728e-01, 3.63849195e-01], - [ 6.82656407e-01, 1.89501352e-01, 3.60756856e-01], - [ 6.88653158e-01, 1.92238994e-01, 3.57602797e-01], - [ 6.94626769e-01, 1.95021500e-01, 3.54387853e-01], - [ 7.00575937e-01, 1.97850703e-01, 3.51112900e-01], - [ 7.06499709e-01, 2.00728196e-01, 3.47776863e-01], - [ 7.12396345e-01, 2.03656029e-01, 3.44382594e-01], - [ 7.18264447e-01, 2.06635993e-01, 3.40931208e-01], - [ 7.24102613e-01, 2.09669834e-01, 3.37423766e-01], - [ 7.29909422e-01, 2.12759270e-01, 3.33861367e-01], - [ 7.35683432e-01, 2.15905976e-01, 3.30245147e-01], - [ 7.41423185e-01, 2.19111589e-01, 3.26576275e-01], - [ 7.47127207e-01, 2.22377697e-01, 3.22855952e-01], - [ 7.52794009e-01, 2.25705837e-01, 3.19085410e-01], - [ 7.58422090e-01, 2.29097492e-01, 3.15265910e-01], - [ 7.64009940e-01, 2.32554083e-01, 3.11398734e-01], - [ 7.69556038e-01, 2.36076967e-01, 3.07485188e-01], - [ 7.75058888e-01, 2.39667435e-01, 3.03526312e-01], - [ 7.80517023e-01, 2.43326720e-01, 2.99522665e-01], - [ 7.85928794e-01, 2.47055968e-01, 2.95476756e-01], - [ 7.91292674e-01, 2.50856232e-01, 2.91389943e-01], - [ 7.96607144e-01, 2.54728485e-01, 2.87263585e-01], - [ 8.01870689e-01, 2.58673610e-01, 2.83099033e-01], - [ 8.07081807e-01, 2.62692401e-01, 2.78897629e-01], - [ 8.12239008e-01, 2.66785558e-01, 2.74660698e-01], - [ 8.17340818e-01, 2.70953688e-01, 2.70389545e-01], - [ 8.22385784e-01, 2.75197300e-01, 2.66085445e-01], - [ 8.27372474e-01, 2.79516805e-01, 2.61749643e-01], - [ 8.32299481e-01, 2.83912516e-01, 2.57383341e-01], - [ 8.37165425e-01, 2.88384647e-01, 2.52987700e-01], - [ 8.41968959e-01, 2.92933312e-01, 2.48563825e-01], - [ 8.46708768e-01, 2.97558528e-01, 2.44112767e-01], - [ 8.51383572e-01, 3.02260213e-01, 2.39635512e-01], - [ 8.55992130e-01, 3.07038188e-01, 2.35132978e-01], - [ 8.60533241e-01, 3.11892183e-01, 2.30606009e-01], - [ 8.65005747e-01, 3.16821833e-01, 2.26055368e-01], - [ 8.69408534e-01, 3.21826685e-01, 2.21481734e-01], - [ 8.73740530e-01, 3.26906201e-01, 2.16885699e-01], - [ 8.78000715e-01, 3.32059760e-01, 2.12267762e-01], - [ 8.82188112e-01, 3.37286663e-01, 2.07628326e-01], - [ 8.86301795e-01, 3.42586137e-01, 2.02967696e-01], - [ 8.90340885e-01, 3.47957340e-01, 1.98286080e-01], - [ 8.94304553e-01, 3.53399363e-01, 1.93583583e-01], - [ 8.98192017e-01, 3.58911240e-01, 1.88860212e-01], - [ 9.02002544e-01, 3.64491949e-01, 1.84115876e-01], - [ 9.05735448e-01, 3.70140419e-01, 1.79350388e-01], - [ 9.09390090e-01, 3.75855533e-01, 1.74563472e-01], - [ 9.12965874e-01, 3.81636138e-01, 1.69754764e-01], - [ 9.16462251e-01, 3.87481044e-01, 1.64923826e-01], - [ 9.19878710e-01, 3.93389034e-01, 1.60070152e-01], - [ 9.23214783e-01, 3.99358867e-01, 1.55193185e-01], - [ 9.26470039e-01, 4.05389282e-01, 1.50292329e-01], - [ 9.29644083e-01, 4.11479007e-01, 1.45366973e-01], - [ 9.32736555e-01, 4.17626756e-01, 1.40416519e-01], - [ 9.35747126e-01, 4.23831237e-01, 1.35440416e-01], - [ 9.38675494e-01, 4.30091162e-01, 1.30438175e-01], - [ 9.41521384e-01, 4.36405243e-01, 1.25409440e-01], - [ 9.44284543e-01, 4.42772199e-01, 1.20354038e-01], - [ 9.46964741e-01, 4.49190757e-01, 1.15272059e-01], - [ 9.49561766e-01, 4.55659658e-01, 1.10163947e-01], - [ 9.52075421e-01, 4.62177656e-01, 1.05030614e-01], - [ 9.54505523e-01, 4.68743522e-01, 9.98735931e-02], - [ 9.56851903e-01, 4.75356048e-01, 9.46952268e-02], - [ 9.59114397e-01, 4.82014044e-01, 8.94989073e-02], - [ 9.61292850e-01, 4.88716345e-01, 8.42893891e-02], - [ 9.63387110e-01, 4.95461806e-01, 7.90731907e-02], - [ 9.65397031e-01, 5.02249309e-01, 7.38591143e-02], - [ 9.67322465e-01, 5.09077761e-01, 6.86589199e-02], - [ 9.69163264e-01, 5.15946092e-01, 6.34881971e-02], - [ 9.70919277e-01, 5.22853259e-01, 5.83674890e-02], - [ 9.72590351e-01, 5.29798246e-01, 5.33237243e-02], - [ 9.74176327e-01, 5.36780059e-01, 4.83920090e-02], - [ 9.75677038e-01, 5.43797733e-01, 4.36177922e-02], - [ 9.77092313e-01, 5.50850323e-01, 3.90500131e-02], - [ 9.78421971e-01, 5.57936911e-01, 3.49306227e-02], - [ 9.79665824e-01, 5.65056600e-01, 3.14091591e-02], - [ 9.80823673e-01, 5.72208516e-01, 2.85075931e-02], - [ 9.81895311e-01, 5.79391803e-01, 2.62497353e-02], - [ 9.82880522e-01, 5.86605627e-01, 2.46613416e-02], - [ 9.83779081e-01, 5.93849168e-01, 2.37702263e-02], - [ 9.84590755e-01, 6.01121626e-01, 2.36063833e-02], - [ 9.85315301e-01, 6.08422211e-01, 2.42021174e-02], - [ 9.85952471e-01, 6.15750147e-01, 2.55921853e-02], - [ 9.86502013e-01, 6.23104667e-01, 2.78139496e-02], - [ 9.86963670e-01, 6.30485011e-01, 3.09075459e-02], - [ 9.87337182e-01, 6.37890424e-01, 3.49160639e-02], - [ 9.87622296e-01, 6.45320152e-01, 3.98857472e-02], - [ 9.87818759e-01, 6.52773439e-01, 4.55808037e-02], - [ 9.87926330e-01, 6.60249526e-01, 5.17503867e-02], - [ 9.87944783e-01, 6.67747641e-01, 5.83286889e-02], - [ 9.87873910e-01, 6.75267000e-01, 6.52570167e-02], - [ 9.87713535e-01, 6.82806802e-01, 7.24892330e-02], - [ 9.87463516e-01, 6.90366218e-01, 7.99897176e-02], - [ 9.87123759e-01, 6.97944391e-01, 8.77314215e-02], - [ 9.86694229e-01, 7.05540424e-01, 9.56941797e-02], - [ 9.86174970e-01, 7.13153375e-01, 1.03863324e-01], - [ 9.85565739e-01, 7.20782460e-01, 1.12228756e-01], - [ 9.84865203e-01, 7.28427497e-01, 1.20784651e-01], - [ 9.84075129e-01, 7.36086521e-01, 1.29526579e-01], - [ 9.83195992e-01, 7.43758326e-01, 1.38453063e-01], - [ 9.82228463e-01, 7.51441596e-01, 1.47564573e-01], - [ 9.81173457e-01, 7.59134892e-01, 1.56863224e-01], - [ 9.80032178e-01, 7.66836624e-01, 1.66352544e-01], - [ 9.78806183e-01, 7.74545028e-01, 1.76037298e-01], - [ 9.77497453e-01, 7.82258138e-01, 1.85923357e-01], - [ 9.76108474e-01, 7.89973753e-01, 1.96017589e-01], - [ 9.74637842e-01, 7.97691563e-01, 2.06331925e-01], - [ 9.73087939e-01, 8.05409333e-01, 2.16876839e-01], - [ 9.71467822e-01, 8.13121725e-01, 2.27658046e-01], - [ 9.69783146e-01, 8.20825143e-01, 2.38685942e-01], - [ 9.68040817e-01, 8.28515491e-01, 2.49971582e-01], - [ 9.66242589e-01, 8.36190976e-01, 2.61533898e-01], - [ 9.64393924e-01, 8.43848069e-01, 2.73391112e-01], - [ 9.62516656e-01, 8.51476340e-01, 2.85545675e-01], - [ 9.60625545e-01, 8.59068716e-01, 2.98010219e-01], - [ 9.58720088e-01, 8.66624355e-01, 3.10820466e-01], - [ 9.56834075e-01, 8.74128569e-01, 3.23973947e-01], - [ 9.54997177e-01, 8.81568926e-01, 3.37475479e-01], - [ 9.53215092e-01, 8.88942277e-01, 3.51368713e-01], - [ 9.51546225e-01, 8.96225909e-01, 3.65627005e-01], - [ 9.50018481e-01, 9.03409063e-01, 3.80271225e-01], - [ 9.48683391e-01, 9.10472964e-01, 3.95289169e-01], - [ 9.47594362e-01, 9.17399053e-01, 4.10665194e-01], - [ 9.46809163e-01, 9.24168246e-01, 4.26373236e-01], - [ 9.46391536e-01, 9.30760752e-01, 4.42367495e-01], - [ 9.46402951e-01, 9.37158971e-01, 4.58591507e-01], - [ 9.46902568e-01, 9.43347775e-01, 4.74969778e-01], - [ 9.47936825e-01, 9.49317522e-01, 4.91426053e-01], - [ 9.49544830e-01, 9.55062900e-01, 5.07859649e-01], - [ 9.51740304e-01, 9.60586693e-01, 5.24203026e-01], - [ 9.54529281e-01, 9.65895868e-01, 5.40360752e-01], - [ 9.57896053e-01, 9.71003330e-01, 5.56275090e-01], - [ 9.61812020e-01, 9.75924241e-01, 5.71925382e-01], - [ 9.66248822e-01, 9.80678193e-01, 5.87205773e-01], - [ 9.71161622e-01, 9.85282161e-01, 6.02154330e-01], - [ 9.76510983e-01, 9.89753437e-01, 6.16760413e-01], - [ 9.82257307e-01, 9.94108844e-01, 6.31017009e-01], - [ 9.88362068e-01, 9.98364143e-01, 6.44924005e-01]]; -if nargin < 1 - cm_data = cm; -else - hsv=rgb2hsv(cm); - hsv(144:end,1)=hsv(144:end,1)+1; % hardcoded - cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); - cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; - cm_data=hsv2rgb(cm_data); - -end -end \ No newline at end of file diff --git a/Data-Analyzer/+Colormaps/magma.m b/Data-Analyzer/+Colormaps/magma.m deleted file mode 100644 index a8c3516..0000000 --- a/Data-Analyzer/+Colormaps/magma.m +++ /dev/null @@ -1,271 +0,0 @@ -function [cm_data]=magma(m) - -cm = [[ 1.46159096e-03, 4.66127766e-04, 1.38655200e-02], - [ 2.25764007e-03, 1.29495431e-03, 1.83311461e-02], - [ 3.27943222e-03, 2.30452991e-03, 2.37083291e-02], - [ 4.51230222e-03, 3.49037666e-03, 2.99647059e-02], - [ 5.94976987e-03, 4.84285000e-03, 3.71296695e-02], - [ 7.58798550e-03, 6.35613622e-03, 4.49730774e-02], - [ 9.42604390e-03, 8.02185006e-03, 5.28443561e-02], - [ 1.14654337e-02, 9.82831486e-03, 6.07496380e-02], - [ 1.37075706e-02, 1.17705913e-02, 6.86665843e-02], - [ 1.61557566e-02, 1.38404966e-02, 7.66026660e-02], - [ 1.88153670e-02, 1.60262753e-02, 8.45844897e-02], - [ 2.16919340e-02, 1.83201254e-02, 9.26101050e-02], - [ 2.47917814e-02, 2.07147875e-02, 1.00675555e-01], - [ 2.81228154e-02, 2.32009284e-02, 1.08786954e-01], - [ 3.16955304e-02, 2.57651161e-02, 1.16964722e-01], - [ 3.55204468e-02, 2.83974570e-02, 1.25209396e-01], - [ 3.96084872e-02, 3.10895652e-02, 1.33515085e-01], - [ 4.38295350e-02, 3.38299885e-02, 1.41886249e-01], - [ 4.80616391e-02, 3.66066101e-02, 1.50326989e-01], - [ 5.23204388e-02, 3.94066020e-02, 1.58841025e-01], - [ 5.66148978e-02, 4.21598925e-02, 1.67445592e-01], - [ 6.09493930e-02, 4.47944924e-02, 1.76128834e-01], - [ 6.53301801e-02, 4.73177796e-02, 1.84891506e-01], - [ 6.97637296e-02, 4.97264666e-02, 1.93735088e-01], - [ 7.42565152e-02, 5.20167766e-02, 2.02660374e-01], - [ 7.88150034e-02, 5.41844801e-02, 2.11667355e-01], - [ 8.34456313e-02, 5.62249365e-02, 2.20755099e-01], - [ 8.81547730e-02, 5.81331465e-02, 2.29921611e-01], - [ 9.29486914e-02, 5.99038167e-02, 2.39163669e-01], - [ 9.78334770e-02, 6.15314414e-02, 2.48476662e-01], - [ 1.02814972e-01, 6.30104053e-02, 2.57854400e-01], - [ 1.07898679e-01, 6.43351102e-02, 2.67288933e-01], - [ 1.13094451e-01, 6.54920358e-02, 2.76783978e-01], - [ 1.18405035e-01, 6.64791593e-02, 2.86320656e-01], - [ 1.23832651e-01, 6.72946449e-02, 2.95879431e-01], - [ 1.29380192e-01, 6.79349264e-02, 3.05442931e-01], - [ 1.35053322e-01, 6.83912798e-02, 3.14999890e-01], - [ 1.40857952e-01, 6.86540710e-02, 3.24537640e-01], - [ 1.46785234e-01, 6.87382323e-02, 3.34011109e-01], - [ 1.52839217e-01, 6.86368599e-02, 3.43404450e-01], - [ 1.59017511e-01, 6.83540225e-02, 3.52688028e-01], - [ 1.65308131e-01, 6.79108689e-02, 3.61816426e-01], - [ 1.71713033e-01, 6.73053260e-02, 3.70770827e-01], - [ 1.78211730e-01, 6.65758073e-02, 3.79497161e-01], - [ 1.84800877e-01, 6.57324381e-02, 3.87972507e-01], - [ 1.91459745e-01, 6.48183312e-02, 3.96151969e-01], - [ 1.98176877e-01, 6.38624166e-02, 4.04008953e-01], - [ 2.04934882e-01, 6.29066192e-02, 4.11514273e-01], - [ 2.11718061e-01, 6.19917876e-02, 4.18646741e-01], - [ 2.18511590e-01, 6.11584918e-02, 4.25391816e-01], - [ 2.25302032e-01, 6.04451843e-02, 4.31741767e-01], - [ 2.32076515e-01, 5.98886855e-02, 4.37694665e-01], - [ 2.38825991e-01, 5.95170384e-02, 4.43255999e-01], - [ 2.45543175e-01, 5.93524384e-02, 4.48435938e-01], - [ 2.52220252e-01, 5.94147119e-02, 4.53247729e-01], - [ 2.58857304e-01, 5.97055998e-02, 4.57709924e-01], - [ 2.65446744e-01, 6.02368754e-02, 4.61840297e-01], - [ 2.71994089e-01, 6.09935552e-02, 4.65660375e-01], - [ 2.78493300e-01, 6.19778136e-02, 4.69190328e-01], - [ 2.84951097e-01, 6.31676261e-02, 4.72450879e-01], - [ 2.91365817e-01, 6.45534486e-02, 4.75462193e-01], - [ 2.97740413e-01, 6.61170432e-02, 4.78243482e-01], - [ 3.04080941e-01, 6.78353452e-02, 4.80811572e-01], - [ 3.10382027e-01, 6.97024767e-02, 4.83186340e-01], - [ 3.16654235e-01, 7.16895272e-02, 4.85380429e-01], - [ 3.22899126e-01, 7.37819504e-02, 4.87408399e-01], - [ 3.29114038e-01, 7.59715081e-02, 4.89286796e-01], - [ 3.35307503e-01, 7.82361045e-02, 4.91024144e-01], - [ 3.41481725e-01, 8.05635079e-02, 4.92631321e-01], - [ 3.47635742e-01, 8.29463512e-02, 4.94120923e-01], - [ 3.53773161e-01, 8.53726329e-02, 4.95501096e-01], - [ 3.59897941e-01, 8.78311772e-02, 4.96778331e-01], - [ 3.66011928e-01, 9.03143031e-02, 4.97959963e-01], - [ 3.72116205e-01, 9.28159917e-02, 4.99053326e-01], - [ 3.78210547e-01, 9.53322947e-02, 5.00066568e-01], - [ 3.84299445e-01, 9.78549106e-02, 5.01001964e-01], - [ 3.90384361e-01, 1.00379466e-01, 5.01864236e-01], - [ 3.96466670e-01, 1.02902194e-01, 5.02657590e-01], - [ 4.02547663e-01, 1.05419865e-01, 5.03385761e-01], - [ 4.08628505e-01, 1.07929771e-01, 5.04052118e-01], - [ 4.14708664e-01, 1.10431177e-01, 5.04661843e-01], - [ 4.20791157e-01, 1.12920210e-01, 5.05214935e-01], - [ 4.26876965e-01, 1.15395258e-01, 5.05713602e-01], - [ 4.32967001e-01, 1.17854987e-01, 5.06159754e-01], - [ 4.39062114e-01, 1.20298314e-01, 5.06555026e-01], - [ 4.45163096e-01, 1.22724371e-01, 5.06900806e-01], - [ 4.51270678e-01, 1.25132484e-01, 5.07198258e-01], - [ 4.57385535e-01, 1.27522145e-01, 5.07448336e-01], - [ 4.63508291e-01, 1.29892998e-01, 5.07651812e-01], - [ 4.69639514e-01, 1.32244819e-01, 5.07809282e-01], - [ 4.75779723e-01, 1.34577500e-01, 5.07921193e-01], - [ 4.81928997e-01, 1.36891390e-01, 5.07988509e-01], - [ 4.88088169e-01, 1.39186217e-01, 5.08010737e-01], - [ 4.94257673e-01, 1.41462106e-01, 5.07987836e-01], - [ 5.00437834e-01, 1.43719323e-01, 5.07919772e-01], - [ 5.06628929e-01, 1.45958202e-01, 5.07806420e-01], - [ 5.12831195e-01, 1.48179144e-01, 5.07647570e-01], - [ 5.19044825e-01, 1.50382611e-01, 5.07442938e-01], - [ 5.25269968e-01, 1.52569121e-01, 5.07192172e-01], - [ 5.31506735e-01, 1.54739247e-01, 5.06894860e-01], - [ 5.37755194e-01, 1.56893613e-01, 5.06550538e-01], - [ 5.44015371e-01, 1.59032895e-01, 5.06158696e-01], - [ 5.50287252e-01, 1.61157816e-01, 5.05718782e-01], - [ 5.56570783e-01, 1.63269149e-01, 5.05230210e-01], - [ 5.62865867e-01, 1.65367714e-01, 5.04692365e-01], - [ 5.69172368e-01, 1.67454379e-01, 5.04104606e-01], - [ 5.75490107e-01, 1.69530062e-01, 5.03466273e-01], - [ 5.81818864e-01, 1.71595728e-01, 5.02776690e-01], - [ 5.88158375e-01, 1.73652392e-01, 5.02035167e-01], - [ 5.94508337e-01, 1.75701122e-01, 5.01241011e-01], - [ 6.00868399e-01, 1.77743036e-01, 5.00393522e-01], - [ 6.07238169e-01, 1.79779309e-01, 4.99491999e-01], - [ 6.13617209e-01, 1.81811170e-01, 4.98535746e-01], - [ 6.20005032e-01, 1.83839907e-01, 4.97524075e-01], - [ 6.26401108e-01, 1.85866869e-01, 4.96456304e-01], - [ 6.32804854e-01, 1.87893468e-01, 4.95331769e-01], - [ 6.39215638e-01, 1.89921182e-01, 4.94149821e-01], - [ 6.45632778e-01, 1.91951556e-01, 4.92909832e-01], - [ 6.52055535e-01, 1.93986210e-01, 4.91611196e-01], - [ 6.58483116e-01, 1.96026835e-01, 4.90253338e-01], - [ 6.64914668e-01, 1.98075202e-01, 4.88835712e-01], - [ 6.71349279e-01, 2.00133166e-01, 4.87357807e-01], - [ 6.77785975e-01, 2.02202663e-01, 4.85819154e-01], - [ 6.84223712e-01, 2.04285721e-01, 4.84219325e-01], - [ 6.90661380e-01, 2.06384461e-01, 4.82557941e-01], - [ 6.97097796e-01, 2.08501100e-01, 4.80834678e-01], - [ 7.03531700e-01, 2.10637956e-01, 4.79049270e-01], - [ 7.09961888e-01, 2.12797337e-01, 4.77201121e-01], - [ 7.16387038e-01, 2.14981693e-01, 4.75289780e-01], - [ 7.22805451e-01, 2.17193831e-01, 4.73315708e-01], - [ 7.29215521e-01, 2.19436516e-01, 4.71278924e-01], - [ 7.35615545e-01, 2.21712634e-01, 4.69179541e-01], - [ 7.42003713e-01, 2.24025196e-01, 4.67017774e-01], - [ 7.48378107e-01, 2.26377345e-01, 4.64793954e-01], - [ 7.54736692e-01, 2.28772352e-01, 4.62508534e-01], - [ 7.61077312e-01, 2.31213625e-01, 4.60162106e-01], - [ 7.67397681e-01, 2.33704708e-01, 4.57755411e-01], - [ 7.73695380e-01, 2.36249283e-01, 4.55289354e-01], - [ 7.79967847e-01, 2.38851170e-01, 4.52765022e-01], - [ 7.86212372e-01, 2.41514325e-01, 4.50183695e-01], - [ 7.92426972e-01, 2.44242250e-01, 4.47543155e-01], - [ 7.98607760e-01, 2.47039798e-01, 4.44848441e-01], - [ 8.04751511e-01, 2.49911350e-01, 4.42101615e-01], - [ 8.10854841e-01, 2.52861399e-01, 4.39304963e-01], - [ 8.16914186e-01, 2.55894550e-01, 4.36461074e-01], - [ 8.22925797e-01, 2.59015505e-01, 4.33572874e-01], - [ 8.28885740e-01, 2.62229049e-01, 4.30643647e-01], - [ 8.34790818e-01, 2.65539703e-01, 4.27671352e-01], - [ 8.40635680e-01, 2.68952874e-01, 4.24665620e-01], - [ 8.46415804e-01, 2.72473491e-01, 4.21631064e-01], - [ 8.52126490e-01, 2.76106469e-01, 4.18572767e-01], - [ 8.57762870e-01, 2.79856666e-01, 4.15496319e-01], - [ 8.63320397e-01, 2.83729003e-01, 4.12402889e-01], - [ 8.68793368e-01, 2.87728205e-01, 4.09303002e-01], - [ 8.74176342e-01, 2.91858679e-01, 4.06205397e-01], - [ 8.79463944e-01, 2.96124596e-01, 4.03118034e-01], - [ 8.84650824e-01, 3.00530090e-01, 4.00047060e-01], - [ 8.89731418e-01, 3.05078817e-01, 3.97001559e-01], - [ 8.94700194e-01, 3.09773445e-01, 3.93994634e-01], - [ 8.99551884e-01, 3.14616425e-01, 3.91036674e-01], - [ 9.04281297e-01, 3.19609981e-01, 3.88136889e-01], - [ 9.08883524e-01, 3.24755126e-01, 3.85308008e-01], - [ 9.13354091e-01, 3.30051947e-01, 3.82563414e-01], - [ 9.17688852e-01, 3.35500068e-01, 3.79915138e-01], - [ 9.21884187e-01, 3.41098112e-01, 3.77375977e-01], - [ 9.25937102e-01, 3.46843685e-01, 3.74959077e-01], - [ 9.29845090e-01, 3.52733817e-01, 3.72676513e-01], - [ 9.33606454e-01, 3.58764377e-01, 3.70540883e-01], - [ 9.37220874e-01, 3.64929312e-01, 3.68566525e-01], - [ 9.40687443e-01, 3.71224168e-01, 3.66761699e-01], - [ 9.44006448e-01, 3.77642889e-01, 3.65136328e-01], - [ 9.47179528e-01, 3.84177874e-01, 3.63701130e-01], - [ 9.50210150e-01, 3.90819546e-01, 3.62467694e-01], - [ 9.53099077e-01, 3.97562894e-01, 3.61438431e-01], - [ 9.55849237e-01, 4.04400213e-01, 3.60619076e-01], - [ 9.58464079e-01, 4.11323666e-01, 3.60014232e-01], - [ 9.60949221e-01, 4.18323245e-01, 3.59629789e-01], - [ 9.63310281e-01, 4.25389724e-01, 3.59469020e-01], - [ 9.65549351e-01, 4.32518707e-01, 3.59529151e-01], - [ 9.67671128e-01, 4.39702976e-01, 3.59810172e-01], - [ 9.69680441e-01, 4.46935635e-01, 3.60311120e-01], - [ 9.71582181e-01, 4.54210170e-01, 3.61030156e-01], - [ 9.73381238e-01, 4.61520484e-01, 3.61964652e-01], - [ 9.75082439e-01, 4.68860936e-01, 3.63111292e-01], - [ 9.76690494e-01, 4.76226350e-01, 3.64466162e-01], - [ 9.78209957e-01, 4.83612031e-01, 3.66024854e-01], - [ 9.79645181e-01, 4.91013764e-01, 3.67782559e-01], - [ 9.81000291e-01, 4.98427800e-01, 3.69734157e-01], - [ 9.82279159e-01, 5.05850848e-01, 3.71874301e-01], - [ 9.83485387e-01, 5.13280054e-01, 3.74197501e-01], - [ 9.84622298e-01, 5.20712972e-01, 3.76698186e-01], - [ 9.85692925e-01, 5.28147545e-01, 3.79370774e-01], - [ 9.86700017e-01, 5.35582070e-01, 3.82209724e-01], - [ 9.87646038e-01, 5.43015173e-01, 3.85209578e-01], - [ 9.88533173e-01, 5.50445778e-01, 3.88365009e-01], - [ 9.89363341e-01, 5.57873075e-01, 3.91670846e-01], - [ 9.90138201e-01, 5.65296495e-01, 3.95122099e-01], - [ 9.90871208e-01, 5.72706259e-01, 3.98713971e-01], - [ 9.91558165e-01, 5.80106828e-01, 4.02441058e-01], - [ 9.92195728e-01, 5.87501706e-01, 4.06298792e-01], - [ 9.92784669e-01, 5.94891088e-01, 4.10282976e-01], - [ 9.93325561e-01, 6.02275297e-01, 4.14389658e-01], - [ 9.93834412e-01, 6.09643540e-01, 4.18613221e-01], - [ 9.94308514e-01, 6.16998953e-01, 4.22949672e-01], - [ 9.94737698e-01, 6.24349657e-01, 4.27396771e-01], - [ 9.95121854e-01, 6.31696376e-01, 4.31951492e-01], - [ 9.95480469e-01, 6.39026596e-01, 4.36607159e-01], - [ 9.95809924e-01, 6.46343897e-01, 4.41360951e-01], - [ 9.96095703e-01, 6.53658756e-01, 4.46213021e-01], - [ 9.96341406e-01, 6.60969379e-01, 4.51160201e-01], - [ 9.96579803e-01, 6.68255621e-01, 4.56191814e-01], - [ 9.96774784e-01, 6.75541484e-01, 4.61314158e-01], - [ 9.96925427e-01, 6.82827953e-01, 4.66525689e-01], - [ 9.97077185e-01, 6.90087897e-01, 4.71811461e-01], - [ 9.97186253e-01, 6.97348991e-01, 4.77181727e-01], - [ 9.97253982e-01, 7.04610791e-01, 4.82634651e-01], - [ 9.97325180e-01, 7.11847714e-01, 4.88154375e-01], - [ 9.97350983e-01, 7.19089119e-01, 4.93754665e-01], - [ 9.97350583e-01, 7.26324415e-01, 4.99427972e-01], - [ 9.97341259e-01, 7.33544671e-01, 5.05166839e-01], - [ 9.97284689e-01, 7.40771893e-01, 5.10983331e-01], - [ 9.97228367e-01, 7.47980563e-01, 5.16859378e-01], - [ 9.97138480e-01, 7.55189852e-01, 5.22805996e-01], - [ 9.97019342e-01, 7.62397883e-01, 5.28820775e-01], - [ 9.96898254e-01, 7.69590975e-01, 5.34892341e-01], - [ 9.96726862e-01, 7.76794860e-01, 5.41038571e-01], - [ 9.96570645e-01, 7.83976508e-01, 5.47232992e-01], - [ 9.96369065e-01, 7.91167346e-01, 5.53498939e-01], - [ 9.96162309e-01, 7.98347709e-01, 5.59819643e-01], - [ 9.95932448e-01, 8.05527126e-01, 5.66201824e-01], - [ 9.95680107e-01, 8.12705773e-01, 5.72644795e-01], - [ 9.95423973e-01, 8.19875302e-01, 5.79140130e-01], - [ 9.95131288e-01, 8.27051773e-01, 5.85701463e-01], - [ 9.94851089e-01, 8.34212826e-01, 5.92307093e-01], - [ 9.94523666e-01, 8.41386618e-01, 5.98982818e-01], - [ 9.94221900e-01, 8.48540474e-01, 6.05695903e-01], - [ 9.93865767e-01, 8.55711038e-01, 6.12481798e-01], - [ 9.93545285e-01, 8.62858846e-01, 6.19299300e-01], - [ 9.93169558e-01, 8.70024467e-01, 6.26189463e-01], - [ 9.92830963e-01, 8.77168404e-01, 6.33109148e-01], - [ 9.92439881e-01, 8.84329694e-01, 6.40099465e-01], - [ 9.92089454e-01, 8.91469549e-01, 6.47116021e-01], - [ 9.91687744e-01, 8.98627050e-01, 6.54201544e-01], - [ 9.91331929e-01, 9.05762748e-01, 6.61308839e-01], - [ 9.90929685e-01, 9.12915010e-01, 6.68481201e-01], - [ 9.90569914e-01, 9.20048699e-01, 6.75674592e-01], - [ 9.90174637e-01, 9.27195612e-01, 6.82925602e-01], - [ 9.89814839e-01, 9.34328540e-01, 6.90198194e-01], - [ 9.89433736e-01, 9.41470354e-01, 6.97518628e-01], - [ 9.89077438e-01, 9.48604077e-01, 7.04862519e-01], - [ 9.88717064e-01, 9.55741520e-01, 7.12242232e-01], - [ 9.88367028e-01, 9.62878026e-01, 7.19648627e-01], - [ 9.88032885e-01, 9.70012413e-01, 7.27076773e-01], - [ 9.87690702e-01, 9.77154231e-01, 7.34536205e-01], - [ 9.87386827e-01, 9.84287561e-01, 7.42001547e-01], - [ 9.87052509e-01, 9.91437853e-01, 7.49504188e-01]]; - - -if nargin < 1 - cm_data = cm; -else - hsv=rgb2hsv(cm); - hsv(170:end,1)=hsv(170:end,1)+1; % hardcoded - cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); - cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; - cm_data=hsv2rgb(cm_data); - -end -end diff --git a/Data-Analyzer/+Colormaps/plasma.m b/Data-Analyzer/+Colormaps/plasma.m deleted file mode 100644 index 367fcb7..0000000 --- a/Data-Analyzer/+Colormaps/plasma.m +++ /dev/null @@ -1,270 +0,0 @@ -function cm_data=plasma(m) - -cm = [[ 5.03832136e-02, 2.98028976e-02, 5.27974883e-01], - [ 6.35363639e-02, 2.84259729e-02, 5.33123681e-01], - [ 7.53531234e-02, 2.72063728e-02, 5.38007001e-01], - [ 8.62217979e-02, 2.61253206e-02, 5.42657691e-01], - [ 9.63786097e-02, 2.51650976e-02, 5.47103487e-01], - [ 1.05979704e-01, 2.43092436e-02, 5.51367851e-01], - [ 1.15123641e-01, 2.35562500e-02, 5.55467728e-01], - [ 1.23902903e-01, 2.28781011e-02, 5.59423480e-01], - [ 1.32380720e-01, 2.22583774e-02, 5.63250116e-01], - [ 1.40603076e-01, 2.16866674e-02, 5.66959485e-01], - [ 1.48606527e-01, 2.11535876e-02, 5.70561711e-01], - [ 1.56420649e-01, 2.06507174e-02, 5.74065446e-01], - [ 1.64069722e-01, 2.01705326e-02, 5.77478074e-01], - [ 1.71573925e-01, 1.97063415e-02, 5.80805890e-01], - [ 1.78950212e-01, 1.92522243e-02, 5.84054243e-01], - [ 1.86212958e-01, 1.88029767e-02, 5.87227661e-01], - [ 1.93374449e-01, 1.83540593e-02, 5.90329954e-01], - [ 2.00445260e-01, 1.79015512e-02, 5.93364304e-01], - [ 2.07434551e-01, 1.74421086e-02, 5.96333341e-01], - [ 2.14350298e-01, 1.69729276e-02, 5.99239207e-01], - [ 2.21196750e-01, 1.64970484e-02, 6.02083323e-01], - [ 2.27982971e-01, 1.60071509e-02, 6.04867403e-01], - [ 2.34714537e-01, 1.55015065e-02, 6.07592438e-01], - [ 2.41396253e-01, 1.49791041e-02, 6.10259089e-01], - [ 2.48032377e-01, 1.44393586e-02, 6.12867743e-01], - [ 2.54626690e-01, 1.38820918e-02, 6.15418537e-01], - [ 2.61182562e-01, 1.33075156e-02, 6.17911385e-01], - [ 2.67702993e-01, 1.27162163e-02, 6.20345997e-01], - [ 2.74190665e-01, 1.21091423e-02, 6.22721903e-01], - [ 2.80647969e-01, 1.14875915e-02, 6.25038468e-01], - [ 2.87076059e-01, 1.08554862e-02, 6.27294975e-01], - [ 2.93477695e-01, 1.02128849e-02, 6.29490490e-01], - [ 2.99855122e-01, 9.56079551e-03, 6.31623923e-01], - [ 3.06209825e-01, 8.90185346e-03, 6.33694102e-01], - [ 3.12543124e-01, 8.23900704e-03, 6.35699759e-01], - [ 3.18856183e-01, 7.57551051e-03, 6.37639537e-01], - [ 3.25150025e-01, 6.91491734e-03, 6.39512001e-01], - [ 3.31425547e-01, 6.26107379e-03, 6.41315649e-01], - [ 3.37683446e-01, 5.61830889e-03, 6.43048936e-01], - [ 3.43924591e-01, 4.99053080e-03, 6.44710195e-01], - [ 3.50149699e-01, 4.38202557e-03, 6.46297711e-01], - [ 3.56359209e-01, 3.79781761e-03, 6.47809772e-01], - [ 3.62553473e-01, 3.24319591e-03, 6.49244641e-01], - [ 3.68732762e-01, 2.72370721e-03, 6.50600561e-01], - [ 3.74897270e-01, 2.24514897e-03, 6.51875762e-01], - [ 3.81047116e-01, 1.81356205e-03, 6.53068467e-01], - [ 3.87182639e-01, 1.43446923e-03, 6.54176761e-01], - [ 3.93304010e-01, 1.11388259e-03, 6.55198755e-01], - [ 3.99410821e-01, 8.59420809e-04, 6.56132835e-01], - [ 4.05502914e-01, 6.78091517e-04, 6.56977276e-01], - [ 4.11580082e-01, 5.77101735e-04, 6.57730380e-01], - [ 4.17642063e-01, 5.63847476e-04, 6.58390492e-01], - [ 4.23688549e-01, 6.45902780e-04, 6.58956004e-01], - [ 4.29719186e-01, 8.31008207e-04, 6.59425363e-01], - [ 4.35733575e-01, 1.12705875e-03, 6.59797077e-01], - [ 4.41732123e-01, 1.53984779e-03, 6.60069009e-01], - [ 4.47713600e-01, 2.07954744e-03, 6.60240367e-01], - [ 4.53677394e-01, 2.75470302e-03, 6.60309966e-01], - [ 4.59622938e-01, 3.57374415e-03, 6.60276655e-01], - [ 4.65549631e-01, 4.54518084e-03, 6.60139383e-01], - [ 4.71456847e-01, 5.67758762e-03, 6.59897210e-01], - [ 4.77343929e-01, 6.97958743e-03, 6.59549311e-01], - [ 4.83210198e-01, 8.45983494e-03, 6.59094989e-01], - [ 4.89054951e-01, 1.01269996e-02, 6.58533677e-01], - [ 4.94877466e-01, 1.19897486e-02, 6.57864946e-01], - [ 5.00677687e-01, 1.40550640e-02, 6.57087561e-01], - [ 5.06454143e-01, 1.63333443e-02, 6.56202294e-01], - [ 5.12206035e-01, 1.88332232e-02, 6.55209222e-01], - [ 5.17932580e-01, 2.15631918e-02, 6.54108545e-01], - [ 5.23632990e-01, 2.45316468e-02, 6.52900629e-01], - [ 5.29306474e-01, 2.77468735e-02, 6.51586010e-01], - [ 5.34952244e-01, 3.12170300e-02, 6.50165396e-01], - [ 5.40569510e-01, 3.49501310e-02, 6.48639668e-01], - [ 5.46157494e-01, 3.89540334e-02, 6.47009884e-01], - [ 5.51715423e-01, 4.31364795e-02, 6.45277275e-01], - [ 5.57242538e-01, 4.73307585e-02, 6.43443250e-01], - [ 5.62738096e-01, 5.15448092e-02, 6.41509389e-01], - [ 5.68201372e-01, 5.57776706e-02, 6.39477440e-01], - [ 5.73631859e-01, 6.00281369e-02, 6.37348841e-01], - [ 5.79028682e-01, 6.42955547e-02, 6.35126108e-01], - [ 5.84391137e-01, 6.85790261e-02, 6.32811608e-01], - [ 5.89718606e-01, 7.28775875e-02, 6.30407727e-01], - [ 5.95010505e-01, 7.71902878e-02, 6.27916992e-01], - [ 6.00266283e-01, 8.15161895e-02, 6.25342058e-01], - [ 6.05485428e-01, 8.58543713e-02, 6.22685703e-01], - [ 6.10667469e-01, 9.02039303e-02, 6.19950811e-01], - [ 6.15811974e-01, 9.45639838e-02, 6.17140367e-01], - [ 6.20918555e-01, 9.89336721e-02, 6.14257440e-01], - [ 6.25986869e-01, 1.03312160e-01, 6.11305174e-01], - [ 6.31016615e-01, 1.07698641e-01, 6.08286774e-01], - [ 6.36007543e-01, 1.12092335e-01, 6.05205491e-01], - [ 6.40959444e-01, 1.16492495e-01, 6.02064611e-01], - [ 6.45872158e-01, 1.20898405e-01, 5.98867442e-01], - [ 6.50745571e-01, 1.25309384e-01, 5.95617300e-01], - [ 6.55579615e-01, 1.29724785e-01, 5.92317494e-01], - [ 6.60374266e-01, 1.34143997e-01, 5.88971318e-01], - [ 6.65129493e-01, 1.38566428e-01, 5.85582301e-01], - [ 6.69845385e-01, 1.42991540e-01, 5.82153572e-01], - [ 6.74522060e-01, 1.47418835e-01, 5.78688247e-01], - [ 6.79159664e-01, 1.51847851e-01, 5.75189431e-01], - [ 6.83758384e-01, 1.56278163e-01, 5.71660158e-01], - [ 6.88318440e-01, 1.60709387e-01, 5.68103380e-01], - [ 6.92840088e-01, 1.65141174e-01, 5.64521958e-01], - [ 6.97323615e-01, 1.69573215e-01, 5.60918659e-01], - [ 7.01769334e-01, 1.74005236e-01, 5.57296144e-01], - [ 7.06177590e-01, 1.78437000e-01, 5.53656970e-01], - [ 7.10548747e-01, 1.82868306e-01, 5.50003579e-01], - [ 7.14883195e-01, 1.87298986e-01, 5.46338299e-01], - [ 7.19181339e-01, 1.91728906e-01, 5.42663338e-01], - [ 7.23443604e-01, 1.96157962e-01, 5.38980786e-01], - [ 7.27670428e-01, 2.00586086e-01, 5.35292612e-01], - [ 7.31862231e-01, 2.05013174e-01, 5.31600995e-01], - [ 7.36019424e-01, 2.09439071e-01, 5.27908434e-01], - [ 7.40142557e-01, 2.13863965e-01, 5.24215533e-01], - [ 7.44232102e-01, 2.18287899e-01, 5.20523766e-01], - [ 7.48288533e-01, 2.22710942e-01, 5.16834495e-01], - [ 7.52312321e-01, 2.27133187e-01, 5.13148963e-01], - [ 7.56303937e-01, 2.31554749e-01, 5.09468305e-01], - [ 7.60263849e-01, 2.35975765e-01, 5.05793543e-01], - [ 7.64192516e-01, 2.40396394e-01, 5.02125599e-01], - [ 7.68090391e-01, 2.44816813e-01, 4.98465290e-01], - [ 7.71957916e-01, 2.49237220e-01, 4.94813338e-01], - [ 7.75795522e-01, 2.53657797e-01, 4.91170517e-01], - [ 7.79603614e-01, 2.58078397e-01, 4.87539124e-01], - [ 7.83382636e-01, 2.62499662e-01, 4.83917732e-01], - [ 7.87132978e-01, 2.66921859e-01, 4.80306702e-01], - [ 7.90855015e-01, 2.71345267e-01, 4.76706319e-01], - [ 7.94549101e-01, 2.75770179e-01, 4.73116798e-01], - [ 7.98215577e-01, 2.80196901e-01, 4.69538286e-01], - [ 8.01854758e-01, 2.84625750e-01, 4.65970871e-01], - [ 8.05466945e-01, 2.89057057e-01, 4.62414580e-01], - [ 8.09052419e-01, 2.93491117e-01, 4.58869577e-01], - [ 8.12611506e-01, 2.97927865e-01, 4.55337565e-01], - [ 8.16144382e-01, 3.02368130e-01, 4.51816385e-01], - [ 8.19651255e-01, 3.06812282e-01, 4.48305861e-01], - [ 8.23132309e-01, 3.11260703e-01, 4.44805781e-01], - [ 8.26587706e-01, 3.15713782e-01, 4.41315901e-01], - [ 8.30017584e-01, 3.20171913e-01, 4.37835947e-01], - [ 8.33422053e-01, 3.24635499e-01, 4.34365616e-01], - [ 8.36801237e-01, 3.29104836e-01, 4.30905052e-01], - [ 8.40155276e-01, 3.33580106e-01, 4.27454836e-01], - [ 8.43484103e-01, 3.38062109e-01, 4.24013059e-01], - [ 8.46787726e-01, 3.42551272e-01, 4.20579333e-01], - [ 8.50066132e-01, 3.47048028e-01, 4.17153264e-01], - [ 8.53319279e-01, 3.51552815e-01, 4.13734445e-01], - [ 8.56547103e-01, 3.56066072e-01, 4.10322469e-01], - [ 8.59749520e-01, 3.60588229e-01, 4.06916975e-01], - [ 8.62926559e-01, 3.65119408e-01, 4.03518809e-01], - [ 8.66077920e-01, 3.69660446e-01, 4.00126027e-01], - [ 8.69203436e-01, 3.74211795e-01, 3.96738211e-01], - [ 8.72302917e-01, 3.78773910e-01, 3.93354947e-01], - [ 8.75376149e-01, 3.83347243e-01, 3.89975832e-01], - [ 8.78422895e-01, 3.87932249e-01, 3.86600468e-01], - [ 8.81442916e-01, 3.92529339e-01, 3.83228622e-01], - [ 8.84435982e-01, 3.97138877e-01, 3.79860246e-01], - [ 8.87401682e-01, 4.01761511e-01, 3.76494232e-01], - [ 8.90339687e-01, 4.06397694e-01, 3.73130228e-01], - [ 8.93249647e-01, 4.11047871e-01, 3.69767893e-01], - [ 8.96131191e-01, 4.15712489e-01, 3.66406907e-01], - [ 8.98983931e-01, 4.20391986e-01, 3.63046965e-01], - [ 9.01807455e-01, 4.25086807e-01, 3.59687758e-01], - [ 9.04601295e-01, 4.29797442e-01, 3.56328796e-01], - [ 9.07364995e-01, 4.34524335e-01, 3.52969777e-01], - [ 9.10098088e-01, 4.39267908e-01, 3.49610469e-01], - [ 9.12800095e-01, 4.44028574e-01, 3.46250656e-01], - [ 9.15470518e-01, 4.48806744e-01, 3.42890148e-01], - [ 9.18108848e-01, 4.53602818e-01, 3.39528771e-01], - [ 9.20714383e-01, 4.58417420e-01, 3.36165582e-01], - [ 9.23286660e-01, 4.63250828e-01, 3.32800827e-01], - [ 9.25825146e-01, 4.68103387e-01, 3.29434512e-01], - [ 9.28329275e-01, 4.72975465e-01, 3.26066550e-01], - [ 9.30798469e-01, 4.77867420e-01, 3.22696876e-01], - [ 9.33232140e-01, 4.82779603e-01, 3.19325444e-01], - [ 9.35629684e-01, 4.87712357e-01, 3.15952211e-01], - [ 9.37990034e-01, 4.92666544e-01, 3.12575440e-01], - [ 9.40312939e-01, 4.97642038e-01, 3.09196628e-01], - [ 9.42597771e-01, 5.02639147e-01, 3.05815824e-01], - [ 9.44843893e-01, 5.07658169e-01, 3.02433101e-01], - [ 9.47050662e-01, 5.12699390e-01, 2.99048555e-01], - [ 9.49217427e-01, 5.17763087e-01, 2.95662308e-01], - [ 9.51343530e-01, 5.22849522e-01, 2.92274506e-01], - [ 9.53427725e-01, 5.27959550e-01, 2.88883445e-01], - [ 9.55469640e-01, 5.33093083e-01, 2.85490391e-01], - [ 9.57468770e-01, 5.38250172e-01, 2.82096149e-01], - [ 9.59424430e-01, 5.43431038e-01, 2.78700990e-01], - [ 9.61335930e-01, 5.48635890e-01, 2.75305214e-01], - [ 9.63202573e-01, 5.53864931e-01, 2.71909159e-01], - [ 9.65023656e-01, 5.59118349e-01, 2.68513200e-01], - [ 9.66798470e-01, 5.64396327e-01, 2.65117752e-01], - [ 9.68525639e-01, 5.69699633e-01, 2.61721488e-01], - [ 9.70204593e-01, 5.75028270e-01, 2.58325424e-01], - [ 9.71835007e-01, 5.80382015e-01, 2.54931256e-01], - [ 9.73416145e-01, 5.85761012e-01, 2.51539615e-01], - [ 9.74947262e-01, 5.91165394e-01, 2.48151200e-01], - [ 9.76427606e-01, 5.96595287e-01, 2.44766775e-01], - [ 9.77856416e-01, 6.02050811e-01, 2.41387186e-01], - [ 9.79232922e-01, 6.07532077e-01, 2.38013359e-01], - [ 9.80556344e-01, 6.13039190e-01, 2.34646316e-01], - [ 9.81825890e-01, 6.18572250e-01, 2.31287178e-01], - [ 9.83040742e-01, 6.24131362e-01, 2.27937141e-01], - [ 9.84198924e-01, 6.29717516e-01, 2.24595006e-01], - [ 9.85300760e-01, 6.35329876e-01, 2.21264889e-01], - [ 9.86345421e-01, 6.40968508e-01, 2.17948456e-01], - [ 9.87332067e-01, 6.46633475e-01, 2.14647532e-01], - [ 9.88259846e-01, 6.52324832e-01, 2.11364122e-01], - [ 9.89127893e-01, 6.58042630e-01, 2.08100426e-01], - [ 9.89935328e-01, 6.63786914e-01, 2.04858855e-01], - [ 9.90681261e-01, 6.69557720e-01, 2.01642049e-01], - [ 9.91364787e-01, 6.75355082e-01, 1.98452900e-01], - [ 9.91984990e-01, 6.81179025e-01, 1.95294567e-01], - [ 9.92540939e-01, 6.87029567e-01, 1.92170500e-01], - [ 9.93031693e-01, 6.92906719e-01, 1.89084459e-01], - [ 9.93456302e-01, 6.98810484e-01, 1.86040537e-01], - [ 9.93813802e-01, 7.04740854e-01, 1.83043180e-01], - [ 9.94103226e-01, 7.10697814e-01, 1.80097207e-01], - [ 9.94323596e-01, 7.16681336e-01, 1.77207826e-01], - [ 9.94473934e-01, 7.22691379e-01, 1.74380656e-01], - [ 9.94553260e-01, 7.28727890e-01, 1.71621733e-01], - [ 9.94560594e-01, 7.34790799e-01, 1.68937522e-01], - [ 9.94494964e-01, 7.40880020e-01, 1.66334918e-01], - [ 9.94355411e-01, 7.46995448e-01, 1.63821243e-01], - [ 9.94140989e-01, 7.53136955e-01, 1.61404226e-01], - [ 9.93850778e-01, 7.59304390e-01, 1.59091984e-01], - [ 9.93482190e-01, 7.65498551e-01, 1.56890625e-01], - [ 9.93033251e-01, 7.71719833e-01, 1.54807583e-01], - [ 9.92505214e-01, 7.77966775e-01, 1.52854862e-01], - [ 9.91897270e-01, 7.84239120e-01, 1.51041581e-01], - [ 9.91208680e-01, 7.90536569e-01, 1.49376885e-01], - [ 9.90438793e-01, 7.96858775e-01, 1.47869810e-01], - [ 9.89587065e-01, 8.03205337e-01, 1.46529128e-01], - [ 9.88647741e-01, 8.09578605e-01, 1.45357284e-01], - [ 9.87620557e-01, 8.15977942e-01, 1.44362644e-01], - [ 9.86509366e-01, 8.22400620e-01, 1.43556679e-01], - [ 9.85314198e-01, 8.28845980e-01, 1.42945116e-01], - [ 9.84031139e-01, 8.35315360e-01, 1.42528388e-01], - [ 9.82652820e-01, 8.41811730e-01, 1.42302653e-01], - [ 9.81190389e-01, 8.48328902e-01, 1.42278607e-01], - [ 9.79643637e-01, 8.54866468e-01, 1.42453425e-01], - [ 9.77994918e-01, 8.61432314e-01, 1.42808191e-01], - [ 9.76264977e-01, 8.68015998e-01, 1.43350944e-01], - [ 9.74443038e-01, 8.74622194e-01, 1.44061156e-01], - [ 9.72530009e-01, 8.81250063e-01, 1.44922913e-01], - [ 9.70532932e-01, 8.87896125e-01, 1.45918663e-01], - [ 9.68443477e-01, 8.94563989e-01, 1.47014438e-01], - [ 9.66271225e-01, 9.01249365e-01, 1.48179639e-01], - [ 9.64021057e-01, 9.07950379e-01, 1.49370428e-01], - [ 9.61681481e-01, 9.14672479e-01, 1.50520343e-01], - [ 9.59275646e-01, 9.21406537e-01, 1.51566019e-01], - [ 9.56808068e-01, 9.28152065e-01, 1.52409489e-01], - [ 9.54286813e-01, 9.34907730e-01, 1.52921158e-01], - [ 9.51726083e-01, 9.41670605e-01, 1.52925363e-01], - [ 9.49150533e-01, 9.48434900e-01, 1.52177604e-01], - [ 9.46602270e-01, 9.55189860e-01, 1.50327944e-01], - [ 9.44151742e-01, 9.61916487e-01, 1.46860789e-01], - [ 9.41896120e-01, 9.68589814e-01, 1.40955606e-01], - [ 9.40015097e-01, 9.75158357e-01, 1.31325517e-01]]; - -if nargin < 1 - cm_data = cm; -else - hsv=rgb2hsv(cm); - hsv(153:end,1)=hsv(153:end,1)+1; % hardcoded - cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); - cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; - cm_data=hsv2rgb(cm_data); - -end -end \ No newline at end of file diff --git a/Data-Analyzer/+Colormaps/viridis.m b/Data-Analyzer/+Colormaps/viridis.m deleted file mode 100644 index 6b85a81..0000000 --- a/Data-Analyzer/+Colormaps/viridis.m +++ /dev/null @@ -1,267 +0,0 @@ -function cm_data=viridis(m) -cm = [[ 0.26700401, 0.00487433, 0.32941519], - [ 0.26851048, 0.00960483, 0.33542652], - [ 0.26994384, 0.01462494, 0.34137895], - [ 0.27130489, 0.01994186, 0.34726862], - [ 0.27259384, 0.02556309, 0.35309303], - [ 0.27380934, 0.03149748, 0.35885256], - [ 0.27495242, 0.03775181, 0.36454323], - [ 0.27602238, 0.04416723, 0.37016418], - [ 0.2770184 , 0.05034437, 0.37571452], - [ 0.27794143, 0.05632444, 0.38119074], - [ 0.27879067, 0.06214536, 0.38659204], - [ 0.2795655 , 0.06783587, 0.39191723], - [ 0.28026658, 0.07341724, 0.39716349], - [ 0.28089358, 0.07890703, 0.40232944], - [ 0.28144581, 0.0843197 , 0.40741404], - [ 0.28192358, 0.08966622, 0.41241521], - [ 0.28232739, 0.09495545, 0.41733086], - [ 0.28265633, 0.10019576, 0.42216032], - [ 0.28291049, 0.10539345, 0.42690202], - [ 0.28309095, 0.11055307, 0.43155375], - [ 0.28319704, 0.11567966, 0.43611482], - [ 0.28322882, 0.12077701, 0.44058404], - [ 0.28318684, 0.12584799, 0.44496 ], - [ 0.283072 , 0.13089477, 0.44924127], - [ 0.28288389, 0.13592005, 0.45342734], - [ 0.28262297, 0.14092556, 0.45751726], - [ 0.28229037, 0.14591233, 0.46150995], - [ 0.28188676, 0.15088147, 0.46540474], - [ 0.28141228, 0.15583425, 0.46920128], - [ 0.28086773, 0.16077132, 0.47289909], - [ 0.28025468, 0.16569272, 0.47649762], - [ 0.27957399, 0.17059884, 0.47999675], - [ 0.27882618, 0.1754902 , 0.48339654], - [ 0.27801236, 0.18036684, 0.48669702], - [ 0.27713437, 0.18522836, 0.48989831], - [ 0.27619376, 0.19007447, 0.49300074], - [ 0.27519116, 0.1949054 , 0.49600488], - [ 0.27412802, 0.19972086, 0.49891131], - [ 0.27300596, 0.20452049, 0.50172076], - [ 0.27182812, 0.20930306, 0.50443413], - [ 0.27059473, 0.21406899, 0.50705243], - [ 0.26930756, 0.21881782, 0.50957678], - [ 0.26796846, 0.22354911, 0.5120084 ], - [ 0.26657984, 0.2282621 , 0.5143487 ], - [ 0.2651445 , 0.23295593, 0.5165993 ], - [ 0.2636632 , 0.23763078, 0.51876163], - [ 0.26213801, 0.24228619, 0.52083736], - [ 0.26057103, 0.2469217 , 0.52282822], - [ 0.25896451, 0.25153685, 0.52473609], - [ 0.25732244, 0.2561304 , 0.52656332], - [ 0.25564519, 0.26070284, 0.52831152], - [ 0.25393498, 0.26525384, 0.52998273], - [ 0.25219404, 0.26978306, 0.53157905], - [ 0.25042462, 0.27429024, 0.53310261], - [ 0.24862899, 0.27877509, 0.53455561], - [ 0.2468114 , 0.28323662, 0.53594093], - [ 0.24497208, 0.28767547, 0.53726018], - [ 0.24311324, 0.29209154, 0.53851561], - [ 0.24123708, 0.29648471, 0.53970946], - [ 0.23934575, 0.30085494, 0.54084398], - [ 0.23744138, 0.30520222, 0.5419214 ], - [ 0.23552606, 0.30952657, 0.54294396], - [ 0.23360277, 0.31382773, 0.54391424], - [ 0.2316735 , 0.3181058 , 0.54483444], - [ 0.22973926, 0.32236127, 0.54570633], - [ 0.22780192, 0.32659432, 0.546532 ], - [ 0.2258633 , 0.33080515, 0.54731353], - [ 0.22392515, 0.334994 , 0.54805291], - [ 0.22198915, 0.33916114, 0.54875211], - [ 0.22005691, 0.34330688, 0.54941304], - [ 0.21812995, 0.34743154, 0.55003755], - [ 0.21620971, 0.35153548, 0.55062743], - [ 0.21429757, 0.35561907, 0.5511844 ], - [ 0.21239477, 0.35968273, 0.55171011], - [ 0.2105031 , 0.36372671, 0.55220646], - [ 0.20862342, 0.36775151, 0.55267486], - [ 0.20675628, 0.37175775, 0.55311653], - [ 0.20490257, 0.37574589, 0.55353282], - [ 0.20306309, 0.37971644, 0.55392505], - [ 0.20123854, 0.38366989, 0.55429441], - [ 0.1994295 , 0.38760678, 0.55464205], - [ 0.1976365 , 0.39152762, 0.55496905], - [ 0.19585993, 0.39543297, 0.55527637], - [ 0.19410009, 0.39932336, 0.55556494], - [ 0.19235719, 0.40319934, 0.55583559], - [ 0.19063135, 0.40706148, 0.55608907], - [ 0.18892259, 0.41091033, 0.55632606], - [ 0.18723083, 0.41474645, 0.55654717], - [ 0.18555593, 0.4185704 , 0.55675292], - [ 0.18389763, 0.42238275, 0.55694377], - [ 0.18225561, 0.42618405, 0.5571201 ], - [ 0.18062949, 0.42997486, 0.55728221], - [ 0.17901879, 0.43375572, 0.55743035], - [ 0.17742298, 0.4375272 , 0.55756466], - [ 0.17584148, 0.44128981, 0.55768526], - [ 0.17427363, 0.4450441 , 0.55779216], - [ 0.17271876, 0.4487906 , 0.55788532], - [ 0.17117615, 0.4525298 , 0.55796464], - [ 0.16964573, 0.45626209, 0.55803034], - [ 0.16812641, 0.45998802, 0.55808199], - [ 0.1666171 , 0.46370813, 0.55811913], - [ 0.16511703, 0.4674229 , 0.55814141], - [ 0.16362543, 0.47113278, 0.55814842], - [ 0.16214155, 0.47483821, 0.55813967], - [ 0.16066467, 0.47853961, 0.55811466], - [ 0.15919413, 0.4822374 , 0.5580728 ], - [ 0.15772933, 0.48593197, 0.55801347], - [ 0.15626973, 0.4896237 , 0.557936 ], - [ 0.15481488, 0.49331293, 0.55783967], - [ 0.15336445, 0.49700003, 0.55772371], - [ 0.1519182 , 0.50068529, 0.55758733], - [ 0.15047605, 0.50436904, 0.55742968], - [ 0.14903918, 0.50805136, 0.5572505 ], - [ 0.14760731, 0.51173263, 0.55704861], - [ 0.14618026, 0.51541316, 0.55682271], - [ 0.14475863, 0.51909319, 0.55657181], - [ 0.14334327, 0.52277292, 0.55629491], - [ 0.14193527, 0.52645254, 0.55599097], - [ 0.14053599, 0.53013219, 0.55565893], - [ 0.13914708, 0.53381201, 0.55529773], - [ 0.13777048, 0.53749213, 0.55490625], - [ 0.1364085 , 0.54117264, 0.55448339], - [ 0.13506561, 0.54485335, 0.55402906], - [ 0.13374299, 0.54853458, 0.55354108], - [ 0.13244401, 0.55221637, 0.55301828], - [ 0.13117249, 0.55589872, 0.55245948], - [ 0.1299327 , 0.55958162, 0.55186354], - [ 0.12872938, 0.56326503, 0.55122927], - [ 0.12756771, 0.56694891, 0.55055551], - [ 0.12645338, 0.57063316, 0.5498411 ], - [ 0.12539383, 0.57431754, 0.54908564], - [ 0.12439474, 0.57800205, 0.5482874 ], - [ 0.12346281, 0.58168661, 0.54744498], - [ 0.12260562, 0.58537105, 0.54655722], - [ 0.12183122, 0.58905521, 0.54562298], - [ 0.12114807, 0.59273889, 0.54464114], - [ 0.12056501, 0.59642187, 0.54361058], - [ 0.12009154, 0.60010387, 0.54253043], - [ 0.11973756, 0.60378459, 0.54139999], - [ 0.11951163, 0.60746388, 0.54021751], - [ 0.11942341, 0.61114146, 0.53898192], - [ 0.11948255, 0.61481702, 0.53769219], - [ 0.11969858, 0.61849025, 0.53634733], - [ 0.12008079, 0.62216081, 0.53494633], - [ 0.12063824, 0.62582833, 0.53348834], - [ 0.12137972, 0.62949242, 0.53197275], - [ 0.12231244, 0.63315277, 0.53039808], - [ 0.12344358, 0.63680899, 0.52876343], - [ 0.12477953, 0.64046069, 0.52706792], - [ 0.12632581, 0.64410744, 0.52531069], - [ 0.12808703, 0.64774881, 0.52349092], - [ 0.13006688, 0.65138436, 0.52160791], - [ 0.13226797, 0.65501363, 0.51966086], - [ 0.13469183, 0.65863619, 0.5176488 ], - [ 0.13733921, 0.66225157, 0.51557101], - [ 0.14020991, 0.66585927, 0.5134268 ], - [ 0.14330291, 0.66945881, 0.51121549], - [ 0.1466164 , 0.67304968, 0.50893644], - [ 0.15014782, 0.67663139, 0.5065889 ], - [ 0.15389405, 0.68020343, 0.50417217], - [ 0.15785146, 0.68376525, 0.50168574], - [ 0.16201598, 0.68731632, 0.49912906], - [ 0.1663832 , 0.69085611, 0.49650163], - [ 0.1709484 , 0.69438405, 0.49380294], - [ 0.17570671, 0.6978996 , 0.49103252], - [ 0.18065314, 0.70140222, 0.48818938], - [ 0.18578266, 0.70489133, 0.48527326], - [ 0.19109018, 0.70836635, 0.48228395], - [ 0.19657063, 0.71182668, 0.47922108], - [ 0.20221902, 0.71527175, 0.47608431], - [ 0.20803045, 0.71870095, 0.4728733 ], - [ 0.21400015, 0.72211371, 0.46958774], - [ 0.22012381, 0.72550945, 0.46622638], - [ 0.2263969 , 0.72888753, 0.46278934], - [ 0.23281498, 0.73224735, 0.45927675], - [ 0.2393739 , 0.73558828, 0.45568838], - [ 0.24606968, 0.73890972, 0.45202405], - [ 0.25289851, 0.74221104, 0.44828355], - [ 0.25985676, 0.74549162, 0.44446673], - [ 0.26694127, 0.74875084, 0.44057284], - [ 0.27414922, 0.75198807, 0.4366009 ], - [ 0.28147681, 0.75520266, 0.43255207], - [ 0.28892102, 0.75839399, 0.42842626], - [ 0.29647899, 0.76156142, 0.42422341], - [ 0.30414796, 0.76470433, 0.41994346], - [ 0.31192534, 0.76782207, 0.41558638], - [ 0.3198086 , 0.77091403, 0.41115215], - [ 0.3277958 , 0.77397953, 0.40664011], - [ 0.33588539, 0.7770179 , 0.40204917], - [ 0.34407411, 0.78002855, 0.39738103], - [ 0.35235985, 0.78301086, 0.39263579], - [ 0.36074053, 0.78596419, 0.38781353], - [ 0.3692142 , 0.78888793, 0.38291438], - [ 0.37777892, 0.79178146, 0.3779385 ], - [ 0.38643282, 0.79464415, 0.37288606], - [ 0.39517408, 0.79747541, 0.36775726], - [ 0.40400101, 0.80027461, 0.36255223], - [ 0.4129135 , 0.80304099, 0.35726893], - [ 0.42190813, 0.80577412, 0.35191009], - [ 0.43098317, 0.80847343, 0.34647607], - [ 0.44013691, 0.81113836, 0.3409673 ], - [ 0.44936763, 0.81376835, 0.33538426], - [ 0.45867362, 0.81636288, 0.32972749], - [ 0.46805314, 0.81892143, 0.32399761], - [ 0.47750446, 0.82144351, 0.31819529], - [ 0.4870258 , 0.82392862, 0.31232133], - [ 0.49661536, 0.82637633, 0.30637661], - [ 0.5062713 , 0.82878621, 0.30036211], - [ 0.51599182, 0.83115784, 0.29427888], - [ 0.52577622, 0.83349064, 0.2881265 ], - [ 0.5356211 , 0.83578452, 0.28190832], - [ 0.5455244 , 0.83803918, 0.27562602], - [ 0.55548397, 0.84025437, 0.26928147], - [ 0.5654976 , 0.8424299 , 0.26287683], - [ 0.57556297, 0.84456561, 0.25641457], - [ 0.58567772, 0.84666139, 0.24989748], - [ 0.59583934, 0.84871722, 0.24332878], - [ 0.60604528, 0.8507331 , 0.23671214], - [ 0.61629283, 0.85270912, 0.23005179], - [ 0.62657923, 0.85464543, 0.22335258], - [ 0.63690157, 0.85654226, 0.21662012], - [ 0.64725685, 0.85839991, 0.20986086], - [ 0.65764197, 0.86021878, 0.20308229], - [ 0.66805369, 0.86199932, 0.19629307], - [ 0.67848868, 0.86374211, 0.18950326], - [ 0.68894351, 0.86544779, 0.18272455], - [ 0.69941463, 0.86711711, 0.17597055], - [ 0.70989842, 0.86875092, 0.16925712], - [ 0.72039115, 0.87035015, 0.16260273], - [ 0.73088902, 0.87191584, 0.15602894], - [ 0.74138803, 0.87344918, 0.14956101], - [ 0.75188414, 0.87495143, 0.14322828], - [ 0.76237342, 0.87642392, 0.13706449], - [ 0.77285183, 0.87786808, 0.13110864], - [ 0.78331535, 0.87928545, 0.12540538], - [ 0.79375994, 0.88067763, 0.12000532], - [ 0.80418159, 0.88204632, 0.11496505], - [ 0.81457634, 0.88339329, 0.11034678], - [ 0.82494028, 0.88472036, 0.10621724], - [ 0.83526959, 0.88602943, 0.1026459 ], - [ 0.84556056, 0.88732243, 0.09970219], - [ 0.8558096 , 0.88860134, 0.09745186], - [ 0.86601325, 0.88986815, 0.09595277], - [ 0.87616824, 0.89112487, 0.09525046], - [ 0.88627146, 0.89237353, 0.09537439], - [ 0.89632002, 0.89361614, 0.09633538], - [ 0.90631121, 0.89485467, 0.09812496], - [ 0.91624212, 0.89609127, 0.1007168 ], - [ 0.92610579, 0.89732977, 0.10407067], - [ 0.93590444, 0.8985704 , 0.10813094], - [ 0.94563626, 0.899815 , 0.11283773], - [ 0.95529972, 0.90106534, 0.11812832], - [ 0.96489353, 0.90232311, 0.12394051], - [ 0.97441665, 0.90358991, 0.13021494], - [ 0.98386829, 0.90486726, 0.13689671], - [ 0.99324789, 0.90615657, 0.1439362 ]]; - -if nargin < 1 - cm_data = cm; -else - hsv=rgb2hsv(cm); - cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); - cm_data=hsv2rgb(cm_data); - -end -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/PhysicsConstants.m b/Data-Analyzer/+Helper/PhysicsConstants.m deleted file mode 100644 index bf01b03..0000000 --- a/Data-Analyzer/+Helper/PhysicsConstants.m +++ /dev/null @@ -1,36 +0,0 @@ -classdef PhysicsConstants < handle - properties (Constant) - % CODATA - PlanckConstant=6.62607015E-34; - PlanckConstantReduced=6.62607015E-34/(2*pi); - FineStructureConstant=7.2973525698E-3; - ElectronMass=9.10938291E-31; - GravitationalConstant=6.67384E-11; - ProtonMass=1.672621777E-27; - AtomicMassUnit=1.660539066E-27; - BohrRadius=5.2917721067E-11; - BohrMagneton=9.274009994E-24; - BoltzmannConstant=1.38064852E-23; - StandardGravityAcceleration=9.80665; - SpeedOfLight=299792458; - StefanBoltzmannConstant=5.670373E-8; - ElectronCharge=1.602176634E-19; - VacuumPermeability=1.25663706212E-6; - DielectricConstant=8.8541878128E-12; - ElectronGyromagneticFactor=-2.00231930436153; - AvogadroConstant=6.02214076E23; - ZeroKelvin = 273.15; - GravitationalAcceleration = 9.80553; - - % Dy specific constants - Dy164Mass = 163.929174751*1.660539066E-27; - Dy164IsotopicAbundance = 0.2826; - DyMagneticMoment = 9.93*9.274009994E-24; - end - - methods - function pc = PhysicsConstants() - end - end - -end diff --git a/Data-Analyzer/+Helper/ProgressBar.m b/Data-Analyzer/+Helper/ProgressBar.m deleted file mode 100644 index 1ae7ca0..0000000 --- a/Data-Analyzer/+Helper/ProgressBar.m +++ /dev/null @@ -1,68 +0,0 @@ -classdef ProgressBar < handle -% class for command-line progress-bar notification. - properties - strPercentageLength; - strDotsMaximum; - end - methods - %--- constructor - function this = ProgressBar() - %% Initialization - % Vizualization parameters - this.strPercentageLength = 10; % Length of percentage string (must be >5) - this.strDotsMaximum = 10; % The total number of dots in a progress bar - end - %--- print method - function run(this, msg) - % This function creates a text progress bar. It should be called with a - % STRING argument to initialize and terminate. Otherwise the number corresponding - % to progress in % should be supplied. - % INPUTS: C Either: Text string to initialize or terminate - % Percentage number to show progress - % OUTPUTS: N/A - % Example: Please refer to demo_textprogressbar.m - % Author: Paul Proteus (e-mail: proteus.paul (at) yahoo (dot) com) - % Version: 1.0 - % Changes tracker: 29.06.2010 - First version - % Inspired by: http://blogs.mathworks.com/loren/2007/08/01/monitoring-progress-of-a-calculation/ - %% Main - persistent strCR; % Carriage return pesistent variable - if isempty(strCR) && ~ischar(msg) - % Progress bar must be initialized with a string - error('The text progress must be initialized with a string!'); - elseif isempty(strCR) && ischar(msg) - % Progress bar - initialization - fprintf('\n%s', msg); - strCR = -1; - elseif ~isempty(strCR) && ischar(msg) - % Progress bar - termination - strCR = []; - fprintf([msg '\n']); - elseif isnumeric(msg) - % Progress bar - normal progress - msg = floor(msg); - percentageOut = [num2str(msg) '%%']; - percentageOut = [percentageOut repmat(' ',1,this.strPercentageLength-length(percentageOut)-1)]; - nDots = floor(msg/100*this.strDotsMaximum); - dotOut = ['[' repmat('.',1,nDots) repmat(' ',1,this.strDotsMaximum-nDots) ']']; - strOut = [percentageOut dotOut]; - - % Print it on the screen - if strCR == -1 - % Don't do carriage return during first run - fprintf(strOut); - else - % Do it during all the other runs - fprintf([strCR strOut]); - end - - % Update carriage return - strCR = repmat('\b',1,length(strOut)-1); - - else - % Any other unexpected input - error('Unsupported argument type'); - end - end - end -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/batchAnalyze.m b/Data-Analyzer/+Helper/batchAnalyze.m deleted file mode 100644 index 7e9d867..0000000 --- a/Data-Analyzer/+Helper/batchAnalyze.m +++ /dev/null @@ -1,47 +0,0 @@ -function results_all = batchAnalyze(baseFolder, dates, runs, options) - arguments - baseFolder (1,:) char - dates (1,:) string - runs (1,:) cell - options struct - end - - assert(length(dates) == length(runs), ... - 'Each entry in `dates` must correspond to a cell in `runs`.'); - - results_all = []; - - for i = 1:length(dates) - currentDate = dates(i); - currentRuns = runs{i}; - - for j = 1:length(currentRuns) - runID = currentRuns(j); - folderPath = fullfile(baseFolder, currentDate, runID); - - if ~endsWith(folderPath, filesep) - options.folderPath = [char(folderPath) filesep]; - else - options.folderPath = char(folderPath); - end - - try - args = [fieldnames(options), struct2cell(options)]'; - args = args(:)'; - - % Single struct result - results = Analyzer.performAnalysis(args{:}); - - % Attach metadata - results.date = currentDate; - results.run = runID; - - % Append to results_all - results_all = [results_all; results]; - - catch ME - warning("Error processing %s/%s: %s", currentDate, runID, ME.message); - end - end - end -end diff --git a/Data-Analyzer/+Helper/calculateODImage.m b/Data-Analyzer/+Helper/calculateODImage.m deleted file mode 100644 index 0414fb4..0000000 --- a/Data-Analyzer/+Helper/calculateODImage.m +++ /dev/null @@ -1,46 +0,0 @@ -function imageOD = calculateODImage(imageAtom, imageBackground, imageDark, mode, exposureTime) -%CALCULATEODIMAGE Calculates the optical density (OD) image for absorption imaging. -% -% imageOD = calculateODImage(imageAtom, imageBackground, imageDark, mode, exposureTime) -% -% Inputs: -% imageAtom - Image with atoms -% imageBackground - Image without atoms -% imageDark - Image without light -% mode - 'LowIntensity' (default) or 'HighIntensity' -% exposureTime - Required only for 'HighIntensity' [in seconds] -% -% Output: -% imageOD - Computed OD image -% - - arguments - imageAtom (:,:) {mustBeNumeric} - imageBackground (:,:) {mustBeNumeric} - imageDark (:,:) {mustBeNumeric} - mode char {mustBeMember(mode, {'LowIntensity', 'HighIntensity'})} = 'LowIntensity' - exposureTime double = NaN - end - - % Compute numerator and denominator - numerator = imageBackground - imageDark; - denominator = imageAtom - imageDark; - - % Avoid division by zero - numerator(numerator == 0) = 1; - denominator(denominator == 0) = 1; - - % Calculate OD based on mode - switch mode - case 'LowIntensity' - imageOD = -log(abs(denominator ./ numerator)); - - case 'HighIntensity' - if isnan(exposureTime) - error('Exposure time must be provided for HighIntensity mode.'); - end - imageOD = abs(denominator ./ numerator); - imageOD = -log(imageOD) + (numerator - denominator) ./ (7000 * (exposureTime / 5e-6)); - end - -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/collectODImages.m b/Data-Analyzer/+Helper/collectODImages.m deleted file mode 100644 index a2d5e93..0000000 --- a/Data-Analyzer/+Helper/collectODImages.m +++ /dev/null @@ -1,137 +0,0 @@ -function [ordered_od_imgs, ordered_scan_parameter_values, ordered_file_list] = collectODImages(options) -%% Applies cropping, background subtraction, and optional fringe removal, optional unshuffling on OD image dataset -% Automatically reuses in-memory full dataset if available; -% otherwise, reads and processes raw HDF5 data. -% -% Inputs: -% options - structure containing processing options: -% .folderPath : path to raw HDF5 files -% .saveDirectory : path to save cache (if needed) -% .cam, .angle : camera selection and rotation angle -% .ImagingMode, .PulseDuration : imaging parameters -% .scan_parameter : name of scan parameter -% .center, .span : cropping settings -% .fraction : background subtraction fraction -% .removeFringes : logical flag for fringe removal -% .skipUnshuffling : logical flag to skip unshuffling -% .scan_reference_values: reference values for unshuffling -% -% Outputs: -% ordered_od_imgs : cell array of processed OD images (ordered) -% ordered_scan_parameter_values: vector of scan parameter values (ordered) -% ordered_file_list : cell array of file names (ordered) - - % --- Check if the full OD dataset and scan parameters exist in workspace --- - fullDataExists = evalin('base', 'exist(''full_od_imgs'', ''var'')') && ... - evalin('base', 'exist(''full_bkg_imgs'', ''var'')') && ... - evalin('base', 'exist(''raw_scan_parameter_values'', ''var'')') && ... - evalin('base', 'exist(''raw_file_list'', ''var'')'); - - if fullDataExists - % Both required datasets exist, use them directly - fprintf('\nReusing full OD image dataset and scan parameters from memory.\n'); - full_od_imgs = evalin('base', 'full_od_imgs'); - full_bkg_imgs = evalin('base', 'full_bkg_imgs'); - raw_scan_parameter_values = evalin('base', 'raw_scan_parameter_values'); - raw_file_list = evalin('base', 'raw_file_list'); - else - % Either dataset is missing, process raw HDF5 files completely - fprintf('\nFull OD image dataset or scan parameters not found in memory.\n'); - [full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list] = Helper.processRawData(options); - - % Optionally save the full dataset into workspace for future reuse - assignin('base', 'full_od_imgs', full_od_imgs); - assignin('base', 'full_bkg_imgs', full_bkg_imgs); - assignin('base', 'raw_scan_parameter_values', raw_scan_parameter_values); - assignin('base', 'raw_file_list', raw_file_list); - fprintf('\nCompleted computing OD images. Stored in workspace for reuse.\n'); - end - - nFiles = size(full_od_imgs, 3); - - % --- Preallocate arrays for processed images --- - absimages = zeros(options.span(1)+1, options.span(2)+1, nFiles, 'single'); - refimages = zeros(options.span(1)+1, options.span(2)+1, nFiles, 'single'); - - % --- Process each image: crop and subtract background --- - for k = 1:nFiles - od_img = full_od_imgs(:,:,k); % original full OD image, never modified - bkg_img = full_bkg_imgs(:,:,k); % original full background image, never modified - if any(isnan(od_img(:))) - absimages(:,:,k) = nan(options.span(1)+1, options.span(2)+1, 'single'); - continue - end - if any(isnan(bkg_img(:))) - refimages(:,:,k) = nan(options.span(1)+1, options.span(2)+1, 'single'); - continue - end - - % Crop image around the region of interest - cropped_absimage = Helper.cropODImage(od_img, options.center, options.span); - cropped_refimage = Helper.cropODImage(bkg_img, options.center, options.span); - - % Subtract background offset based on fraction - processed_absimage = Helper.subtractBackgroundOffset(cropped_absimage, options.fraction); - processed_refimage = Helper.subtractBackgroundOffset(cropped_refimage, options.fraction); - - % Store processed image (transpose to match orientation) - absimages(:,:,k) = processed_absimage'; - refimages(:,:,k) = processed_refimage'; - end - - % --- Optional fringe removal --- - if isfield(options, 'removeFringes') && options.removeFringes - fprintf('\nApplying fringe removal to processed images...\n'); - optrefimages = Helper.removeFringesInImage(absimages, refimages); - absimages_fringe_removed = absimages - optrefimages; - processed_od_imgs = arrayfun(@(i) absimages_fringe_removed(:,:,i), 1:nFiles, 'UniformOutput', false); - fprintf('\nFringe removal completed.\n'); - else - processed_od_imgs = arrayfun(@(i) absimages(:,:,i), 1:nFiles, 'UniformOutput', false); - end - - % --- Optional unshuffling based on scan reference values --- - if isfield(options, 'skipUnshuffling') && ~options.skipUnshuffling - fprintf('\nReordering images according to scan parameter reference values...\n'); - - n_values = length(options.scan_reference_values); - n_total = length(raw_scan_parameter_values); - n_reps = n_total / n_values; - - ordered_scan_parameter_values = zeros(1, n_total); - ordered_od_imgs = cell(1, n_total); - ordered_file_list = cell(1, n_total); - counter = 1; - - temp_scan_values = raw_scan_parameter_values; % copy for indexing - temp_od_imgs = processed_od_imgs; - temp_file_list = raw_file_list; % copy original file paths for reordering - - for rep = 1:n_reps - for val = options.scan_reference_values - idx = find(temp_scan_values == val, 1, 'first'); - if isempty(idx), continue; end - ordered_scan_parameter_values(counter) = temp_scan_values(idx); - ordered_od_imgs{counter} = temp_od_imgs{idx}; - ordered_file_list{counter} = temp_file_list{idx}; % reorder file list - temp_scan_values(idx) = NaN; % mark as used - temp_od_imgs{idx} = []; - temp_file_list{idx} = []; - counter = counter + 1; - end - end - - fprintf('\nImage reordering completed.\n'); - else - % No unshuffling: keep original order - ordered_od_imgs = processed_od_imgs; - ordered_scan_parameter_values = raw_scan_parameter_values; - ordered_file_list = raw_file_list; - end - - % Optionally save the full dataset into workspace for future reuse - assignin('base', 'od_imgs', ordered_od_imgs); - assignin('base', 'scan_parameter_values', ordered_scan_parameter_values); - - fprintf('\nOD image dataset ready for further analysis.\n'); -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/cropODImage.m b/Data-Analyzer/+Helper/cropODImage.m deleted file mode 100644 index b1776bd..0000000 --- a/Data-Analyzer/+Helper/cropODImage.m +++ /dev/null @@ -1,18 +0,0 @@ -function ret = cropODImage(img, center, span) - % Crop the image according to the region of interest (ROI). - % :param dataSet: The images - % :type dataSet: xarray DataArray or DataSet - % :param center: The center of region of interest (ROI) - % :type center: tuple - % :param span: The span of region of interest (ROI) - % :type span: tuple - % :return: The cropped images - % :rtype: xarray DataArray or DataSet - - x_start = floor(center(1) - span(1) / 2); - x_end = floor(center(1) + span(1) / 2); - y_start = floor(center(2) - span(2) / 2); - y_end = floor(center(2) + span(2) / 2); - - ret = img(y_start:y_end, x_start:x_end); -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/drawODOverlays.m b/Data-Analyzer/+Helper/drawODOverlays.m deleted file mode 100644 index e0cbc4a..0000000 --- a/Data-Analyzer/+Helper/drawODOverlays.m +++ /dev/null @@ -1,58 +0,0 @@ -function drawODOverlays(x1, y1, x2, y2) - - % Parameters - tick_spacing = 10; % µm between ticks - tick_length = 2; % µm tick mark length - line_color = [0.5 0.5 0.5]; - tick_color = [0.5 0.5 0.5]; - font_size = 10; - - % Vector from start to end - dx = x2 - x1; - dy = y2 - y1; - L = sqrt(dx^2 + dy^2); - - % Unit direction vector along diagonal - ux = dx / L; - uy = dy / L; - - % Perpendicular unit vector for ticks - perp_ux = -uy; - perp_uy = ux; - - % Midpoint (center) - xc = (x1 + x2) / 2; - yc = (y1 + y2) / 2; - - % Number of positive and negative ticks - n_ticks = floor(L / (2 * tick_spacing)); - - % Draw main diagonal line - plot([x1 x2], [y1 y2], '--', 'Color', line_color, 'LineWidth', 1.2); - - for i = -n_ticks:n_ticks - d = i * tick_spacing; - xt = xc + d * ux; - yt = yc + d * uy; - - % Tick line endpoints - xt1 = xt - 0.5 * tick_length * perp_ux; - yt1 = yt - 0.5 * tick_length * perp_uy; - xt2 = xt + 0.5 * tick_length * perp_ux; - yt2 = yt + 0.5 * tick_length * perp_uy; - - % Draw tick - plot([xt1 xt2], [yt1 yt2], '--', 'Color', tick_color, 'LineWidth', 1); - - % Label: centered at tick, offset slightly along diagonal - if d ~= 0 - text(xt, yt, sprintf('%+d', d), ... - 'Color', tick_color, ... - 'FontSize', font_size, ... - 'HorizontalAlignment', 'center', ... - 'VerticalAlignment', 'bottom', ... - 'Rotation', atan2d(dy, dx)); - end - - end -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/drawPSOverlays.m b/Data-Analyzer/+Helper/drawPSOverlays.m deleted file mode 100644 index 8dc007a..0000000 --- a/Data-Analyzer/+Helper/drawPSOverlays.m +++ /dev/null @@ -1,102 +0,0 @@ -function drawPSOverlays(kx, ky, k_min, k_max) -% drawPSOverlays - Draw overlays on existing FFT plot: -% - Radial lines every 30° -% - Annular highlight with white (upper half) and gray (lower half) circles at k_min and k_max -% - Horizontal white bands at ky=0 between k_min and k_max -% - Scale ticks and labels every 1 μm⁻¹ along each radial line -% -% Inputs: -% kx, ky - reciprocal space vectors (μm⁻¹) -% k_min - inner annulus radius (μm⁻¹) -% k_max - outer annulus radius (μm⁻¹) - - hold on - - % === Overlay Radial Lines + Scales === - max_kx = max(abs(kx)); - max_ky = max(abs(ky)); - - for angle = 0 : pi/6 : pi - x_line = [0, max_kx] * cos(angle); - y_line = [0, max_ky] * sin(angle); - - % Plot radial lines - plot(x_line, y_line, '--', 'Color', [0.5 0.5 0.5], 'LineWidth', 1.2); - plot(x_line, -y_line, '--', 'Color', [0.5 0.5 0.5], 'LineWidth', 1.2); - - % Draw scale ticks along both lines - drawTicksAlongLine(0,0, x_line(2), y_line(2)); - drawTicksAlongLine(0,0, x_line(2), -y_line(2)); - end - - % === Overlay Annular Highlight === - theta_full = linspace(0, 2*pi, 500); - - % Upper half: white dashed circles - plot(k_min * cos(theta_full(theta_full <= pi)), ... - k_min * sin(theta_full(theta_full <= pi)), 'k--', 'LineWidth', 1.2); - plot(k_max * cos(theta_full(theta_full <= pi)), ... - k_max * sin(theta_full(theta_full <= pi)), 'k--', 'LineWidth', 1.2); - - % Lower half: gray dashed circles - plot(k_min * cos(theta_full(theta_full > pi)), ... - k_min * sin(theta_full(theta_full > pi)), '--', 'Color', [0.5 0.5 0.5], 'LineWidth', 1.0); - plot(k_max * cos(theta_full(theta_full > pi)), ... - k_max * sin(theta_full(theta_full > pi)), '--', 'Color', [0.5 0.5 0.5], 'LineWidth', 1.0); - - % === Highlight horizontal band across k_y = 0 === - x_vals = kx; - xW1 = x_vals((x_vals >= -k_max) & (x_vals < -k_min)); - xW2 = x_vals((x_vals > k_min) & (x_vals <= k_max)); - - plot(xW1, zeros(size(xW1)), 'k--', 'LineWidth', 1.2); - plot(xW2, zeros(size(xW2)), 'k--', 'LineWidth', 1.2); - - hold off - - - % --- Nested helper function to draw ticks along a radial line --- - function drawTicksAlongLine(x_start, y_start, x_end, y_end) - % Tick parameters - tick_spacing = 1; % spacing between ticks in μm⁻¹ - tick_length = 0.05 * sqrt((x_end - x_start)^2 + (y_end - y_start)^2); - tick_color = [0.5 0.5 0.5]; - font_size = 8; - - % Vector along the line - dx = x_end - x_start; - dy = y_end - y_start; - L = sqrt(dx^2 + dy^2); - ux = dx / L; - uy = dy / L; - - % Perpendicular vector for ticks - perp_ux = -uy; - perp_uy = ux; - - % Number of ticks - n_ticks = floor(L / tick_spacing); - - for i = 1:n_ticks - xt = x_start + i * tick_spacing * ux; - yt = y_start + i * tick_spacing * uy; - - % Tick endpoints - xt1 = xt - 0.5 * tick_length * perp_ux; - yt1 = yt - 0.5 * tick_length * perp_uy; - xt2 = xt + 0.5 * tick_length * perp_ux; - yt2 = yt + 0.5 * tick_length * perp_uy; - - % Draw tick - plot([xt1 xt2], [yt1 yt2], '-', 'Color', tick_color, 'LineWidth', 1); - - % Label - text(xt, yt, sprintf('%d', i), ... - 'Color', tick_color, ... - 'FontSize', font_size, ... - 'HorizontalAlignment', 'center', ... - 'VerticalAlignment', 'bottom', ... - 'Rotation', atan2d(dy, dx)); - end - end -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/getBkgOffsetFromCorners.m b/Data-Analyzer/+Helper/getBkgOffsetFromCorners.m deleted file mode 100644 index 81f8990..0000000 --- a/Data-Analyzer/+Helper/getBkgOffsetFromCorners.m +++ /dev/null @@ -1,11 +0,0 @@ -function ret = getBkgOffsetFromCorners(img, x_fraction, y_fraction) - % image must be a 2D numerical array - [dim1, dim2] = size(img); - - s1 = img(1:round(dim1 * y_fraction), 1:round(dim2 * x_fraction)); - s2 = img(1:round(dim1 * y_fraction), round(dim2 - dim2 * x_fraction):dim2); - s3 = img(round(dim1 - dim1 * y_fraction):dim1, 1:round(dim2 * x_fraction)); - s4 = img(round(dim1 - dim1 * y_fraction):dim1, round(dim2 - dim2 * x_fraction):dim2); - - ret = mean([mean(s1(:)), mean(s2(:)), mean(s3(:)), mean(s4(:))]); -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/processRawData.m b/Data-Analyzer/+Helper/processRawData.m deleted file mode 100644 index e253497..0000000 --- a/Data-Analyzer/+Helper/processRawData.m +++ /dev/null @@ -1,90 +0,0 @@ -function [full_od_imgs, full_bkg_imgs, raw_scan_parameter_values, raw_file_list] = processRawData(options) -%% Reads HDF5 files, computes OD images -% -% Inputs: options.folderPath, options.cam, options.angle, ImagingMode, PulseDuration, scan_parameter, etc. -% -% Returns the OD images and scan parameters immediately in memory. -% This function does NOT do cropping or fringe removal. - - fprintf('\nProcessing raw data files at %s ...\n', options.folderPath); - - % ===== Group paths in HDF5 files ===== - groupList = ["/images/MOT_3D_Camera/in_situ_absorption", ... - "/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"]; - - % ===== Find files ===== - files = dir(fullfile(options.folderPath, '*.h5')); - nFiles = length(files); - if nFiles == 0 - error('\nNo HDF5 files found in %s', options.folderPath); - end - - % Determine image size from first file - testFile = fullfile(files(1).folder, files(1).name); - atm_test = double(imrotate(h5read(testFile, append(groupList(options.cam), "/atoms")), options.angle)); - [ny, nx] = size(atm_test); - - % --- Preallocate in-memory arrays --- - full_od_imgs = nan(ny, nx, nFiles, 'single'); - full_bkg_imgs = nan(ny, nx, nFiles, 'single'); - raw_scan_parameter_values = zeros(1, nFiles); - - % --- Progress bar --- - if isfield(options, 'showProgressBar') && options.showProgressBar - pb = Helper.ProgressBar(); - pb.run('Computing OD images | Progress: '); - end - - raw_file_list = strings(1, nFiles); % store full file paths - - % ===== Loop over files ===== - for k = 1:nFiles - fullFileName = fullfile(files(k).folder, files(k).name); - raw_file_list(k) = fullFileName; % track original file - - if ~isfield(options, 'showProgressBar') || ~options.showProgressBar - fprintf('Now reading %s\n', fullFileName); - end - - try - atm_img = double(imrotate(h5read(fullFileName, append(groupList(options.cam), "/atoms")), options.angle)); - bkg_img = double(imrotate(h5read(fullFileName, append(groupList(options.cam), "/background")), options.angle)); - dark_img = double(imrotate(h5read(fullFileName, append(groupList(options.cam), "/dark")), options.angle)); - od_img = Helper.calculateODImage(atm_img, bkg_img, dark_img, options.ImagingMode, options.PulseDuration); - full_od_imgs(:, :, k) = single(od_img); - full_bkg_imgs(:, :, k) = single(bkg_img); - catch - warning('Missing data in %s, storing NaNs.', fullFileName); - full_od_imgs(:, :, k) = nan(ny, nx, 1, 'single'); - full_bkg_imgs(:, :, k) = nan(ny, nx, 1, 'single'); - continue; - end - - % Extract scan parameter - info = h5info(fullFileName, '/globals'); - for i = 1:length(info.Attributes) - if strcmp(info.Attributes(i).Name, options.scan_parameter) - if strcmp(options.scan_parameter, 'ps_rot_mag_fin_pol_angle') - raw_scan_parameter_values(k) = 180 - info.Attributes(i).Value; - else - raw_scan_parameter_values(k) = info.Attributes(i).Value; - end - end - end - - % Update progress bar - if isfield(options, 'showProgressBar') && options.showProgressBar - progressPercent = round(k / nFiles * 100); - pb.run(progressPercent); - end - end - - % Finish progress bar - if isfield(options, 'showProgressBar') && options.showProgressBar - pb.run(' Done!'); - end - -end diff --git a/Data-Analyzer/+Helper/removeFringesInImage.m b/Data-Analyzer/+Helper/removeFringesInImage.m deleted file mode 100644 index 96f9c0e..0000000 --- a/Data-Analyzer/+Helper/removeFringesInImage.m +++ /dev/null @@ -1,70 +0,0 @@ -function [optrefimages] = removeFringesInImage(absimages, refimages, bgmask) - % removefringesInImage - Fringe removal and noise reduction from absorption images. - % Creates an optimal reference image for each absorption image in a set as - % a linear combination of reference images, with coefficients chosen to - % minimize the least-squares residuals between each absorption image and - % the optimal reference image. The coefficients are obtained by solving a - % linear set of equations using matrix inverse by LU decomposition. - % - % Application of the algorithm is described in C. F. Ockeloen et al, Improved - % detection of small atom numbers through image processing, arXiv:1007.2136 (2010). - % - % Syntax: - % [optrefimages] = removefringesInImage(absimages,refimages,bgmask); - % - % Required inputs: - % absimages - Absorption image data, - % typically 16 bit grayscale images - % refimages - Raw reference image data - % absimages and refimages are both cell arrays containing - % 2D array data. The number of refimages can differ from the - % number of absimages. - % - % Optional inputs: - % bgmask - Array specifying background region used, - % 1=background, 0=data. Defaults to all ones. - % Outputs: - % optrefimages - Cell array of optimal reference images, - % equal in size to absimages. - % - - % Dependencies: none - % - % Authors: Shannon Whitlock, Caspar Ockeloen - % Reference: C. F. Ockeloen, A. F. Tauschinsky, R. J. C. Spreeuw, and - % S. Whitlock, Improved detection of small atom numbers through - % image processing, arXiv:1007.2136 - % Email: - % May 2009; Last revision: 11 August 2010 - - % Process inputs - - % Set variables, and flatten absorption and reference images - nimgs = size(absimages,3); - nimgsR = size(refimages,3); - xdim = size(absimages(:,:,1),2); - ydim = size(absimages(:,:,1),1); - - R = single(reshape(refimages,xdim*ydim,nimgsR)); - A = single(reshape(absimages,xdim*ydim,nimgs)); - optrefimages=zeros(size(absimages)); % preallocate - - if not(exist('bgmask','var')); bgmask=ones(ydim,xdim); end - k = find(bgmask(:)==1); % Index k specifying background region - - % Ensure there are no duplicate reference images - % R=unique(R','rows')'; % comment this line if you run out of memory - - % Decompose B = R*R' using singular value or LU decomposition - [L,U,p] = lu(R(k,:)'*R(k,:),'vector'); % LU decomposition - - for j=1:nimgs - b=R(k,:)'*A(k,j); - % Obtain coefficients c which minimise least-square residuals - lower.LT = true; upper.UT = true; - c = linsolve(U,linsolve(L,b(p,:),lower),upper); - - % Compute optimised reference image - optrefimages(:,:,j)=reshape(R*c,[ydim xdim]); - end -end \ No newline at end of file diff --git a/Data-Analyzer/+Helper/subtractBackgroundOffset.m b/Data-Analyzer/+Helper/subtractBackgroundOffset.m deleted file mode 100644 index 118bab8..0000000 --- a/Data-Analyzer/+Helper/subtractBackgroundOffset.m +++ /dev/null @@ -1,16 +0,0 @@ -function ret = subtractBackgroundOffset(img, fraction) - % Remove the background from the image. - % :param dataArray: The image - % :type dataArray: xarray DataArray - % :param x_fraction: The fraction of the pixels used in x axis - % :type x_fraction: float - % :param y_fraction: The fraction of the pixels used in y axis - % :type y_fraction: float - % :return: The image after removing background - % :rtype: xarray DataArray - - x_fraction = fraction(1); - y_fraction = fraction(2); - offset = Helper.getBkgOffsetFromCorners(img, x_fraction, y_fraction); - ret = img - offset; -end \ No newline at end of file diff --git a/Data-Analyzer/+Plotter/compareMultipleDatasets.m b/Data-Analyzer/+Plotter/compareMultipleDatasets.m deleted file mode 100644 index 70c5999..0000000 --- a/Data-Analyzer/+Plotter/compareMultipleDatasets.m +++ /dev/null @@ -1,84 +0,0 @@ -function compareMultipleDatasets(scanValsCell, meanValsCell, stderrValsCell, varargin) -% compareMultipleDatasets compares multiple datasets with error bars. -% -% Inputs: -% scanValsCell - cell array of x-values for each dataset -% meanValsCell - cell array of mean y-values for each dataset -% stderrValsCell - cell array of std/error values for each dataset -% -% Name-Value Pair Arguments: -% 'FigNum', 'FontName', 'MarkerSize', 'LineWidth', 'CapSize', -% 'YLim', 'Labels', 'Title', 'XLabel', 'YLabel', -% 'SkipSaveFigures', 'SaveFileName', 'SaveDirectory' - - % --- Parse inputs --- - p = inputParser; - addParameter(p, 'FigNum', 1, @isnumeric); - addParameter(p, 'FontName', 'Arial', @ischar); - addParameter(p, 'MarkerSize', 6, @isnumeric); - addParameter(p, 'LineWidth', 1.5, @isnumeric); - addParameter(p, 'CapSize', 5, @isnumeric); - addParameter(p, 'YLim', [], @isnumeric); - addParameter(p, 'Labels', {}, @iscell); - addParameter(p, 'Title', '', @ischar); - addParameter(p, 'XLabel', '', @ischar); - addParameter(p, 'YLabel', '', @ischar); - addParameter(p, 'SkipSaveFigures', true, @islogical); - addParameter(p, 'SaveDirectory', pwd, @ischar); - addParameter(p, 'SaveFileName', 'figure.fig', @ischar); - parse(p, varargin{:}); - opts = p.Results; - - % --- Default labels --- - nDatasets = numel(scanValsCell); - if isempty(opts.Labels) - opts.Labels = arrayfun(@(i) sprintf('Dataset %d',i), 1:nDatasets, 'UniformOutput', false); - end - - % --- Marker/line style cycle --- - markerList = {'o', 's', 'd', '^', 'v', '>', '<', 'p', 'h', '*', '+'}; - lineList = {'-', '--', ':', '-.'}; - - % --- Plot --- - fig = figure(opts.FigNum); clf; - set(fig, 'Color', 'w', 'Position', [100 100 950 750]); - hold on; - - for i = 1:nDatasets - marker = markerList{mod(i-1, numel(markerList)) + 1}; - lineStyle = lineList{mod(i-1, numel(lineList)) + 1}; - styleStr = [marker lineStyle]; - - if isempty(stderrValsCell{i}) - plot(scanValsCell{i}, meanValsCell{i}, styleStr, ... - 'MarkerSize', opts.MarkerSize, 'LineWidth', opts.LineWidth, ... - 'DisplayName', opts.Labels{i}); - else - errorbar(scanValsCell{i}, meanValsCell{i}, stderrValsCell{i}, styleStr, ... - 'MarkerSize', opts.MarkerSize, 'LineWidth', opts.LineWidth, 'CapSize', opts.CapSize, ... - 'DisplayName', opts.Labels{i}); - end - end - - hold off; - ax = gca; - axisFontSize = 14; - titleFontSize = 16; - set(ax, 'FontName', opts.FontName, 'FontSize', axisFontSize); - - if ~isempty(opts.YLim) - ylim(opts.YLim); - end - - xlabel(opts.XLabel, 'Interpreter', 'latex', 'FontSize', axisFontSize); - ylabel(opts.YLabel, 'Interpreter', 'latex', 'FontSize', axisFontSize); - title(opts.Title, 'Interpreter', 'latex', 'FontSize', titleFontSize); - legend('Location', 'best'); - grid on; - - % --- Save figure --- - Plotter.saveFigure(fig, ... - 'SaveFileName', opts.SaveFileName, ... - 'SaveDirectory', opts.SaveDirectory, ... - 'SkipSaveFigures', opts.SkipSaveFigures); -end \ No newline at end of file diff --git a/Data-Analyzer/+Plotter/plotAverageSpectra.m b/Data-Analyzer/+Plotter/plotAverageSpectra.m deleted file mode 100644 index 376ff8c..0000000 --- a/Data-Analyzer/+Plotter/plotAverageSpectra.m +++ /dev/null @@ -1,126 +0,0 @@ -function plotAverageSpectra(scan_parameter_values, spectral_analysis_results, varargin) -%% plotAverageSpectra: Plot averaged power, radial, and angular spectra for a scan -% -% Inputs: -% scan_parameter_values - array of scan parameter values -% spectral_analysis_results - struct with fields: -% kx, ky, PS_all, k_rho_vals, S_k_all, theta_vals, S_theta_all -% -% Name-Value Pair Arguments: -% 'ScanParameterName', 'FigNum', 'ColormapPS', 'Font', -% 'SaveFileName', 'SaveDirectory', 'SkipSaveFigures' - - % --- Extract data from struct --- - kx = spectral_analysis_results.kx; - ky = spectral_analysis_results.ky; - ps_list = spectral_analysis_results.PS_all; - k_rho_vals = spectral_analysis_results.k_rho_vals; - s_k_list = spectral_analysis_results.S_k_all; - theta_vals = spectral_analysis_results.theta_vals; - s_theta_list = spectral_analysis_results.S_theta_all; - - % --- Parse optional parameters --- - p = inputParser; - addParameter(p, 'ScanParameterName', 'ScanParameter', @ischar); - addParameter(p, 'FigNum', 1, @(x) isnumeric(x) && isscalar(x)); - addParameter(p, 'ColormapPS', Colormaps.coolwarm(), @(x) isnumeric(x) || ismatrix(x)); - addParameter(p, 'Font', 'Arial', @ischar); - addParameter(p, 'SaveFileName', 'figure.fig', @ischar); - addParameter(p, 'SaveDirectory', pwd, @ischar); - addParameter(p, 'SkipSaveFigures', false, @islogical); - parse(p, varargin{:}); - opts = p.Results; - - scanParam = opts.ScanParameterName; - figNum = opts.FigNum; - colormapPS = opts.ColormapPS; - fontName = opts.Font; - saveFileName = opts.SaveFileName; - saveDirectory = opts.SaveDirectory; - skipSaveFigures = opts.SkipSaveFigures; - - % --- Unique scan parameters --- - [uniqueParams, ~, idx] = unique(scan_parameter_values); - nParams = numel(uniqueParams); - - % --- Loop over each unique parameter --- - for pIdx = 1:nParams - currentParam = uniqueParams(pIdx); - shotIndices = find(idx == pIdx); - nShots = numel(shotIndices); - - % --- Initialize accumulators --- - avgPS = 0; - avgS_k = 0; - avgS_theta = 0; - - % --- Sum over shots --- - for j = 1:nShots - avgPS = avgPS + ps_list{shotIndices(j)}; - avgS_k = avgS_k + s_k_list{shotIndices(j)}; - avgS_theta = avgS_theta + s_theta_list{shotIndices(j)}; - end - - % --- Average --- - avgPS = avgPS / nShots; - avgS_k = avgS_k / nShots; - avgS_theta = avgS_theta / nShots; - - % ==== Plot ==== - fig = figure(figNum); clf; - set(fig, 'Color', 'w', 'Position', [400 200 1200 400]); - tLayout = tiledlayout(1,3,'TileSpacing','compact','Padding','compact'); - - axisFontSize = 14; - titleFontSize = 16; - - % --- 1. Power Spectrum --- - nexttile; - imagesc(kx, ky, log(1 + avgPS)); - axis image; - set(gca, 'FontSize', axisFontSize, 'YDir', 'normal'); - xlabel('k_x [\mum^{-1}]','Interpreter','tex','FontSize',axisFontSize,'FontName',fontName); - ylabel('k_y [\mum^{-1}]','Interpreter','tex','FontSize',axisFontSize,'FontName',fontName); - title('Average Power Spectrum','FontSize',titleFontSize,'FontWeight','bold'); - colormap(colormapPS); - colorbar; - - % --- Annotate scan parameter --- - if strcmp(scanParam,'ps_rot_mag_fin_pol_angle') - txt = sprintf('%.1f^\\circ', currentParam); - else - txt = sprintf('%.2f G', currentParam); - end - text(0.975,0.975,txt,'Color','white','FontWeight','bold','FontSize',axisFontSize, ... - 'Interpreter','tex','Units','normalized','HorizontalAlignment','right','VerticalAlignment','top'); - - % --- 2. Radial Spectrum --- - nexttile; - plot(k_rho_vals, avgS_k, 'LineWidth', 2); - xlabel('k_\rho [\mum^{-1}]','Interpreter','tex','FontSize',axisFontSize); - ylabel('Magnitude (a.u.)','Interpreter','tex','FontSize',axisFontSize); - title('Average S(k_\rho)','FontSize',titleFontSize,'FontWeight','bold'); - set(gca,'FontSize',axisFontSize,'YScale','log','XLim',[min(k_rho_vals), max(k_rho_vals)]); - grid on; - - % --- 3. Angular Spectrum --- - nexttile; - plot(theta_vals/pi, avgS_theta, 'LineWidth', 2); - xlabel('\theta/\pi [rad]','Interpreter','tex','FontSize',axisFontSize); - ylabel('Magnitude (a.u.)','Interpreter','tex','FontSize',axisFontSize); - title('Average S(\theta)','FontSize',titleFontSize,'FontWeight','bold'); - set(gca,'FontSize',axisFontSize,'YScale','log','YLim',[1e4, 1e7]); - ax = gca; - ax.XMinorGrid = 'on'; - ax.YMinorGrid = 'on'; - grid on; - - drawnow; - - % --- Save figure --- - saveFigure(fig, ... - 'SaveFileName', saveFileName, ... - 'SaveDirectory', saveDirectory, ... - 'SkipSaveFigures', skipSaveFigures); - end -end diff --git a/Data-Analyzer/+Plotter/plotCumulants.m b/Data-Analyzer/+Plotter/plotCumulants.m deleted file mode 100644 index f2a0437..0000000 --- a/Data-Analyzer/+Plotter/plotCumulants.m +++ /dev/null @@ -1,93 +0,0 @@ -function plotCumulants(scan_vals, cumulant_data, varargin) -%% plotCumulants: Plots the first four cumulants vs. a scan parameter -% -% Usage: -% plotCumulants(scan_vals, {mean_vals, var_vals, skew_vals, fourth_order_vals}, ... -% 'Title', 'My Title', ... -% 'FigNum', 1, ... -% 'FontName', 'Arial', ... -% 'MarkerSize', 6, ... -% 'LineWidth', 1.5, ... -% 'SkipSaveFigures', false, ... -% 'SaveFileName', 'cumulants.fig', ... -% 'SaveDirectory', pwd); - - % --- Parse optional name-value pairs --- - p = inputParser; - addParameter(p, 'Title', '', @ischar); - addParameter(p, 'XLabel', 'Scan Parameter', @ischar); - addParameter(p, 'FigNum', 1, @(x) isnumeric(x) && isscalar(x)); - addParameter(p, 'FontName', 'Arial', @ischar); - addParameter(p, 'MarkerSize', 6, @isnumeric); - addParameter(p, 'LineWidth', 1.5, @isnumeric); - addParameter(p, 'SkipSaveFigures', false, @islogical); - addParameter(p, 'SaveFileName', 'cumulants.fig', @ischar); - addParameter(p, 'SaveDirectory', pwd, @ischar); - parse(p, varargin{:}); - opts = p.Results; - - % --- Extract cumulant data --- - mean_vals = cumulant_data{1}; - var_vals = cumulant_data{2}; - skew_vals = cumulant_data{3}; - fourth_order_vals = cumulant_data{4}; - - % --- Figure setup --- - fig = figure(opts.FigNum); clf; - set(fig, 'Color', 'w', 'Position', [100 100 950 750]); - - axisFontSize = 14; - labelFontSize = 16; - titleFontSize = 16; - - tLayout = tiledlayout(2,2,'TileSpacing','compact','Padding','compact'); - - % --- Mean --- - nexttile; - errorbar(scan_vals, mean_vals, sqrt(var_vals), 'o-', ... - 'LineWidth', opts.LineWidth, 'MarkerSize', opts.MarkerSize); - title('Mean', 'FontSize', titleFontSize, 'FontWeight', 'bold'); - xlabel(opts.XLabel, 'FontSize', labelFontSize); - ylabel('\kappa_1', 'FontSize', labelFontSize); - set(gca, 'FontSize', axisFontSize, 'FontName', opts.FontName); - grid on; - - % --- Variance --- - nexttile; - plot(scan_vals, var_vals, 's-', 'LineWidth', opts.LineWidth, 'MarkerSize', opts.MarkerSize); - title('Variance', 'FontSize', titleFontSize, 'FontWeight', 'bold'); - xlabel(opts.XLabel, 'FontSize', labelFontSize); - ylabel('\kappa_2', 'FontSize', labelFontSize); - set(gca, 'FontSize', axisFontSize, 'FontName', opts.FontName); - grid on; - - % --- Skewness --- - nexttile; - plot(scan_vals, skew_vals, 'd-', 'LineWidth', opts.LineWidth, 'MarkerSize', opts.MarkerSize); - title('Skewness', 'FontSize', titleFontSize, 'FontWeight', 'bold'); - xlabel(opts.XLabel, 'FontSize', labelFontSize); - ylabel('\kappa_3', 'FontSize', labelFontSize); - set(gca, 'FontSize', axisFontSize, 'FontName', opts.FontName); - grid on; - - % --- Binder Cumulant --- - nexttile; - plot(scan_vals, fourth_order_vals, '^-', 'LineWidth', opts.LineWidth, 'MarkerSize', opts.MarkerSize); - title('Binder Cumulant', 'FontSize', titleFontSize, 'FontWeight', 'bold'); - xlabel(opts.XLabel, 'FontSize', labelFontSize); - ylabel('\kappa_4', 'FontSize', labelFontSize); - set(gca, 'FontSize', axisFontSize, 'FontName', opts.FontName); - grid on; - - % --- Super title --- - if ~isempty(opts.Title) - sgtitle(opts.Title, 'FontWeight', 'bold', 'FontSize', titleFontSize, 'Interpreter', 'latex'); - end - - % --- Save figure --- - Plotter.saveFigure(fig, ... - 'SaveFileName', opts.SaveFileName, ... - 'SaveDirectory', opts.SaveDirectory, ... - 'SkipSaveFigures', opts.SkipSaveFigures); - -end \ No newline at end of file diff --git a/Data-Analyzer/+Plotter/plotG2.m b/Data-Analyzer/+Plotter/plotG2.m deleted file mode 100644 index 7cc839b..0000000 --- a/Data-Analyzer/+Plotter/plotG2.m +++ /dev/null @@ -1,72 +0,0 @@ -function plotG2(g2_all, g2_error_all, theta_values, scan_parameter_values, scan_parameter, varargin) -%% plotG2: Plots g2 angular correlations with optional parameters -% -% Usage: -% plotG2(g2_all, g2_error_all, theta_values, unique_scan_parameter_values, scan_parameter, ... -% 'Title', 'My Title', 'XLabel', 'B (G)', 'YLabel', '$g^{(2)}$', ... -% 'FigNum', 1, 'FontName', 'Arial', 'Colormap', @Colormaps.coolwarm, ... -% 'SaveFileName', 'myplot.fig', 'SaveDirectory', 'results') - - % --- Parse name-value pairs --- - p = inputParser; - addParameter(p, 'Title', 'g^{(2)}(\delta\theta) vs \delta\theta', @(x) ischar(x) || isstring(x)); - addParameter(p, 'XLabel', '$\delta\theta / \pi$', @(x) ischar(x) || isstring(x)); - addParameter(p, 'YLabel', '$g^{(2)}(\delta\theta)$', @(x) ischar(x) || isstring(x)); - addParameter(p, 'FontName', 'Arial', @ischar); - addParameter(p, 'FontSize', 14, @isnumeric); - addParameter(p, 'Colormap', @parula); - addParameter(p, 'FigNum', [], @(x) isempty(x) || (isnumeric(x) && isscalar(x))); - addParameter(p, 'SkipSaveFigures', false, @islogical); - addParameter(p, 'SaveFileName', 'figure.fig', @ischar); - addParameter(p, 'SaveDirectory', pwd, @ischar); - addParameter(p, 'YLim', [0 1], @isnumeric); - parse(p, varargin{:}); - opts = p.Results; - - nParams = size(g2_all, 1); - - % --- Create figure --- - if isempty(opts.FigNum) - fig = figure; - else - fig = figure(opts.FigNum); - end - clf(fig); - set(fig, 'Color', 'w', 'Position', [100 100 950 750]); - hold on; - - % --- Colormap --- - cmap = opts.Colormap(nParams); - - % --- Plot data with errorbars --- - legend_entries = cell(nParams, 1); - for i = 1:nParams - errorbar(theta_values/pi, g2_all(i,:), g2_error_all(i,:), ... - 'o', 'Color', cmap(i,:), 'MarkerSize', 4, 'MarkerFaceColor', cmap(i,:), 'CapSize', 4); - - switch scan_parameter - case 'ps_rot_mag_fin_pol_angle' - legend_entries{i} = sprintf('$\\alpha = %g^\\circ$', scan_parameter_values(i)); - case 'rot_mag_field' - legend_entries{i} = sprintf('B = %.2f G', scan_parameter_values(i)); - otherwise - legend_entries{i} = sprintf('%g', scan_parameter_values(i)); - end - end - - % --- Formatting --- - xlabel(opts.XLabel, 'Interpreter', 'latex', 'FontName', opts.FontName, 'FontSize', opts.FontSize); - ylabel(opts.YLabel, 'Interpreter', 'latex', 'FontName', opts.FontName, 'FontSize', opts.FontSize); - title(opts.Title, 'Interpreter', 'latex', 'FontName', opts.FontName, 'FontSize', opts.FontSize + 2); - legend(legend_entries, 'Interpreter', 'latex', 'Location', 'bestoutside'); - set(gca, 'FontName', opts.FontName, 'FontSize', opts.FontSize); - ylim(opts.YLim); - grid on; - - % --- Save figure --- - Plotter.saveFigure(fig, ... - 'SaveFileName', opts.SaveFileName, ... - 'SaveDirectory', opts.SaveDirectory, ... - 'SkipSaveFigures', opts.SkipSaveFigures); - -end diff --git a/Data-Analyzer/+Plotter/plotHeatmap.m b/Data-Analyzer/+Plotter/plotHeatmap.m deleted file mode 100644 index a7bb002..0000000 --- a/Data-Analyzer/+Plotter/plotHeatmap.m +++ /dev/null @@ -1,69 +0,0 @@ -function plotHeatmap(results_all, x_values, y_values, fieldName, varargin) -%% plotHeatmap: Plots a heatmap for a field in a struct array. -% -% Usage: -% plotHeatmap(results_all, x_values, y_values, fieldName, ... -% 'FigNum', 1, 'Colormap', parula, 'CLim', [0 1], ... -% 'XLabel', '\alpha (degrees)', 'YLabel', 'BField (G)', ... -% 'Title', 'My Title', 'SaveFileName', 'heatmap.fig', ... -% 'SaveDirectory', 'results', 'SkipSaveFigures', false); - - % --- Parse optional inputs --- - p = inputParser; - addParameter(p, 'FigNum', []); - addParameter(p, 'Colormap', parula); - addParameter(p, 'CLim', []); - addParameter(p, 'XLabel', '\alpha (degrees)'); - addParameter(p, 'YLabel', 'BField (G)'); - addParameter(p, 'Title', fieldName); - addParameter(p, 'FontName', 'Arial'); - addParameter(p, 'FontSize', 14); - addParameter(p, 'SkipSaveFigures', false, @islogical); - addParameter(p, 'SaveFileName', 'heatmap.fig', @ischar); - addParameter(p, 'SaveDirectory', pwd, @ischar); - parse(p, varargin{:}); - opts = p.Results; - - N_y = length(results_all); - N_x = length(x_values); - - % --- Preallocate data matrix --- - data_matrix = NaN(N_y, N_x); - for i = 1:N_y - if isfield(results_all(i), fieldName) - data_matrix(i, :) = results_all(i).(fieldName); - else - warning('Field "%s" does not exist in results_all(%d). Filling with NaN.', fieldName, i); - end - end - - % --- Create figure --- - if isempty(opts.FigNum) - fig = figure; - else - fig = figure(opts.FigNum); - end - clf(fig); - set(fig, 'Color', 'w', 'Position', [50 50 950 750]); - - % --- Plot heatmap --- - imagesc(x_values, y_values, data_matrix); - colormap(opts.Colormap); - if ~isempty(opts.CLim) - caxis(opts.CLim); - end - set(gca, 'FontName', opts.FontName, 'FontSize', opts.FontSize, 'YDir', 'normal'); - - % --- Labels and title --- - xlabel(opts.XLabel, 'Interpreter', 'tex', 'FontName', opts.FontName, 'FontSize', opts.FontSize); - ylabel(opts.YLabel, 'Interpreter', 'tex', 'FontName', opts.FontName, 'FontSize', opts.FontSize); - title(opts.Title, 'Interpreter', 'latex', 'FontSize', opts.FontSize + 2, 'FontWeight', 'bold'); - colorbar; - - % --- Save figure --- - Plotter.saveFigure(fig, ... - 'SaveFileName', opts.SaveFileName, ... - 'SaveDirectory', opts.SaveDirectory, ... - 'SkipSaveFigures', opts.SkipSaveFigures); - -end diff --git a/Data-Analyzer/+Plotter/plotMeanWithSE.m b/Data-Analyzer/+Plotter/plotMeanWithSE.m deleted file mode 100644 index 7cebde5..0000000 --- a/Data-Analyzer/+Plotter/plotMeanWithSE.m +++ /dev/null @@ -1,70 +0,0 @@ -function plotMeanWithSE(scan_values, data_values, varargin) -%% plotMeanWithSE: Plots mean ± standard error vs a scan parameter. -% -% Usage: -% plotMeanWithSE(scan_values, data_values, ... -% 'Title', 'My Title', 'XLabel', 'Parameter', 'YLabel', 'Mean Value', ... -% 'FigNum', 1, 'FontName', 'Arial', 'YLim', [0 1], ... -% 'SaveFileName', 'mean_with_se.fig', 'SaveDirectory', 'results', ... -% 'SkipSaveFigures', false); - - % --- Parse optional name-value pairs --- - p = inputParser; - addParameter(p, 'Title', '', @(x) ischar(x) || isstring(x)); - addParameter(p, 'XLabel', '', @(x) ischar(x) || isstring(x)); - addParameter(p, 'YLabel', '', @(x) ischar(x) || isstring(x)); - addParameter(p, 'FigNum', [], @(x) isempty(x) || (isnumeric(x) && isscalar(x))); - addParameter(p, 'FontName', 'Arial', @ischar); - addParameter(p, 'FontSize', 14, @isnumeric); - addParameter(p, 'YLim', [], @(x) isempty(x) || isnumeric(x)); - addParameter(p, 'SkipSaveFigures', false, @islogical); - addParameter(p, 'SaveFileName', 'mean_with_se.fig', @ischar); - addParameter(p, 'SaveDirectory', pwd, @ischar); - parse(p, varargin{:}); - opts = p.Results; - - % --- Compute mean and standard error --- - [unique_vals, ~, idx] = unique(scan_values); - mean_vals = zeros(size(unique_vals)); - stderr_vals = zeros(size(unique_vals)); - for i = 1:length(unique_vals) - group = data_values(idx == i); - if iscell(group) - groupVals = [group{:}]; - else - groupVals = group; - end - mean_vals(i) = mean(groupVals); - stderr_vals(i) = std(groupVals) / sqrt(length(groupVals)); - end - - % --- Create figure --- - if isempty(opts.FigNum) - fig = figure; - else - fig = figure(opts.FigNum); - end - clf(fig); - set(fig, 'Color', 'w', 'Position', [100 100 950 750]); - - % --- Plot error bars --- - errorbar(unique_vals, mean_vals, stderr_vals, 'o--', ... - 'LineWidth', 1.8, 'MarkerSize', 6, 'CapSize', 5); - - % --- Axis formatting --- - set(gca, 'FontName', opts.FontName, 'FontSize', opts.FontSize); - if ~isempty(opts.YLim) - ylim(opts.YLim); - end - xlabel(opts.XLabel, 'Interpreter', 'latex', 'FontName', opts.FontName, 'FontSize', opts.FontSize); - ylabel(opts.YLabel, 'Interpreter', 'latex', 'FontName', opts.FontName, 'FontSize', opts.FontSize); - title(opts.Title, 'Interpreter', 'latex', 'FontSize', opts.FontSize + 2, 'FontWeight', 'bold'); - grid on; - - % --- Save figure --- - Plotter.saveFigure(fig, ... - 'SaveFileName', opts.SaveFileName, ... - 'SaveDirectory', opts.SaveDirectory, ... - 'SkipSaveFigures', opts.SkipSaveFigures); - -end diff --git a/Data-Analyzer/+Plotter/plotPDF.m b/Data-Analyzer/+Plotter/plotPDF.m deleted file mode 100644 index 0ababf7..0000000 --- a/Data-Analyzer/+Plotter/plotPDF.m +++ /dev/null @@ -1,81 +0,0 @@ -function plotPDF(dataCell, referenceValues, varargin) -%% plotPDF: Plots 2D heatmap of PDFs for grouped data -% -% Usage: -% Plotter.plotPDF(dataCell, referenceValues, ... -% 'Title', 'My Title', ... -% 'XLabel', 'Scan Parameter', ... -% 'YLabel', 'Data Values', ... -% 'FigNum', 1, ... -% 'FontName', 'Arial', ... -% 'SkipSaveFigures', true, ... -% 'SaveFileName', 'SavedPDFs', ... -% 'SaveDirectory', 'results', ... -% 'NumPoints', 200, ... -% 'DataRange', [min max], ... -% 'XLim', [xmin xmax], ... -% 'Colormap', @jet); - - % --- Parse optional inputs --- - p = inputParser; - addParameter(p, 'Title', '', @(x) ischar(x) || isstring(x)); - addParameter(p, 'XLabel', '', @(x) ischar(x) || isstring(x)); - addParameter(p, 'YLabel', '', @(x) ischar(x) || isstring(x)); - addParameter(p, 'FigNum', 1, @(x) isscalar(x)); - addParameter(p, 'FontName', 'Arial', @ischar); - addParameter(p, 'FontSize', 14, @isnumeric); - addParameter(p, 'SkipSaveFigures', false, @islogical); - addParameter(p, 'SaveFileName', 'pdf.fig', @ischar); - addParameter(p, 'SaveDirectory', pwd, @ischar); - addParameter(p, 'NumPoints', 200, @(x) isscalar(x)); - addParameter(p, 'DataRange', [], @(x) isempty(x) || numel(x)==2); - addParameter(p, 'XLim', [], @(x) isempty(x) || numel(x)==2); - addParameter(p, 'Colormap', @jet); - parse(p, varargin{:}); - opts = p.Results; - - N_params = numel(referenceValues); - - % --- Determine y-grid for PDF --- - if isempty(opts.DataRange) - allData = cell2mat(dataCell(:)); - y_grid = linspace(min(allData), max(allData), opts.NumPoints); - else - y_grid = linspace(opts.DataRange(1), opts.DataRange(2), opts.NumPoints); - end - - pdf_matrix = zeros(numel(y_grid), N_params); - - % --- Compute PDFs --- - for i = 1:N_params - data = dataCell{i}; - data = data(~isnan(data)); - if isempty(data), continue; end - f = ksdensity(data, y_grid); - pdf_matrix(:, i) = f; - end - - % --- Plot heatmap --- - fig = figure(opts.FigNum); clf(fig); - set(fig, 'Color', 'w', 'Position',[100 100 950 750]); - - imagesc(referenceValues, y_grid, pdf_matrix); - set(gca, 'YDir', 'normal', 'FontName', opts.FontName, 'FontSize', opts.FontSize); - xlabel(opts.XLabel, 'Interpreter', 'latex', 'FontSize', opts.FontSize, 'FontName', opts.FontName); - ylabel(opts.YLabel, 'Interpreter', 'latex', 'FontSize', opts.FontSize, 'FontName', opts.FontName); - title(opts.Title, 'Interpreter', 'latex', 'FontSize', opts.FontSize + 2, 'FontWeight', 'bold'); - colormap(feval(opts.Colormap)); - c = colorbar; - ylabel(c, 'PDF', 'Interpreter', 'latex', 'FontSize', opts.FontSize); - - if ~isempty(opts.XLim) - xlim(opts.XLim); - end - - % --- Save figure --- - Plotter.saveFigure(fig, ... - 'SaveFileName', opts.SaveFileName, ... - 'SaveDirectory', opts.SaveDirectory, ... - 'SkipSaveFigures', opts.SkipSaveFigures); - -end diff --git a/Data-Analyzer/+Plotter/saveFigure.m b/Data-Analyzer/+Plotter/saveFigure.m deleted file mode 100644 index eddab90..0000000 --- a/Data-Analyzer/+Plotter/saveFigure.m +++ /dev/null @@ -1,50 +0,0 @@ -function saveFigure(fig, varargin) -%% saveFigure saves a MATLAB figure as a .fig file in a specified directory. -% -% Usage: -% saveFigure(fig) -% saveFigure(fig, 'SaveFileName', 'myplot.fig', 'SaveDirectory', 'results', 'SkipSaveFigures', false) -% -% Inputs: -% fig - Figure handle to save -% -% Optional Parameters: -% 'SaveFileName' - Name of the file (default: 'figure.fig') -% 'SaveDirectory' - Directory to save into (default: current working directory) -% 'SkipSaveFigures' - If true, skips saving (default: false) -% -% Example: -% fig = figure; -% plot(1:10, rand(1,10)); -% saveFigure(fig, 'SaveFileName', 'test.fig', 'SaveDirectory', 'plots'); - - % --- Defaults --- - p = inputParser; - addParameter(p, 'SaveFileName', 'figure.fig'); - addParameter(p, 'SaveDirectory', pwd); - addParameter(p, 'SkipSaveFigures', false); - parse(p, varargin{:}); - opts = p.Results; - - if opts.SkipSaveFigures - return; % Do nothing - end - - % --- Ensure directory exists --- - if ~exist(opts.SaveDirectory, 'dir') - mkdir(opts.SaveDirectory); - end - - % --- Ensure .fig extension --- - [~, name, ext] = fileparts(opts.SaveFileName); - if isempty(ext) - ext = '.fig'; - elseif ~strcmpi(ext, '.fig') - warning('Overriding extension to .fig (was %s).', ext); - ext = '.fig'; - end - - saveFullPath = fullfile(opts.SaveDirectory, [name ext]); - savefig(fig, saveFullPath); - fprintf('Figure saved as MATLAB .fig: %s\n', saveFullPath); -end diff --git a/Data-Analyzer/+Scripts/BECToDroplets/plotAnalysisResults.m b/Data-Analyzer/+Scripts/BECToDroplets/plotAnalysisResults.m deleted file mode 100644 index 1ba03bc..0000000 --- a/Data-Analyzer/+Scripts/BECToDroplets/plotAnalysisResults.m +++ /dev/null @@ -1,159 +0,0 @@ -%% ------------------ 1. Mean ± Std Plots ------------------ -% Plot Radial Spectral Contrast -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.radial_spectral_contrast, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Radial Spectral Contrast', ... - 'FigNum', 1, ... - 'FontName', options.font, ... - 'SaveFileName', 'RadialSpectralContrast.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Angular Spectral Weight -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.angular_spectral_weight, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Angular Spectral Weight', ... - 'FigNum', 2, ... - 'FontName', options.font, ... - 'SaveFileName', 'AngularSpectralWeight.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Peak Offset Angular Correlation -Plotter.plotMeanWithSE(options.scan_reference_values, results_all.custom_g_results.max_g2_all_per_scan_parameter_value, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 3, ... - 'YLim', [0 1], ... - 'FontName', options.font, ... - 'SaveFileName', 'PeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 2. g²(θ) across transition ------------------ -Plotter.plotG2(results_all.full_g2_results.g2_all, ... - results_all.full_g2_results.g2_error_all, ... - results_all.full_g2_results.theta_values, ... - options.scan_reference_values, ... - 'rot_mag_field', ... - 'Title', options.titleString, ... - 'XLabel', '$\delta\theta / \pi$', ... - 'YLabel', '$g^{(2)}(\delta\theta)$', ... - 'FigNum', 4, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'G2ThetaAcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'Colormap', @Colormaps.coolwarm); - -%% ------------------ 3. PDF of max g² across transition ------------------ -Plotter.plotPDF(results_all.custom_g_results.max_g2_all_per_scan_parameter_value, options.scan_reference_values, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}]$', ... - 'FigNum', 5, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'PDF_MaxG2AcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'NumPoints', 200, ... - 'DataRange', [0 1.5], ... - 'Colormap', @Colormaps.coolwarm, ... - 'XLim', [min(options.scan_reference_values) max(options.scan_reference_values)]); - - -%% ------------------ 4. Cumulants across transition ------------------ -Plotter.plotCumulants(options.scan_reference_values, ... - {results_all.custom_g_results.mean_max_g2, results_all.custom_g_results.var_max_g2, results_all.custom_g_results.skew_max_g2_angle, results_all.custom_g_results.fourth_order_cumulant_max_g2}, ... - 'Title', 'Cumulants of Peak Offset Angular Correlation', ... - 'XLabel', 'B (G)', ... - 'FigNum', 6, ... - 'FontName', options.font, ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'CumulantOfPeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results']); -%{ - -%% ------------------ 6. Average of Spectra Plots ------------------ - -Plotter.plotAverageSpectra(scan_parameter_values, ... - spectral_analysis_results, ... - 'ScanParameterName', scan_parameter, ... - 'FigNum', 7, ... - 'ColormapPS', Colormaps.coolwarm(), ... - 'Font', 'Bahnschrift', ... - 'SaveFileName', 'avgSpectra.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 7. Compare quantities ------------------ -% Load Droplets → Stripes data -Data = load(dtsFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -dts_scan_parameter_values = Data.unique_scan_parameter_values; -dts_mean_mg2 = Data.mean_max_g2_values; -dts_stderr_mg2 = Data.std_error_g2_values; - -% Load Stripes → Droplets data -Data = load(stdFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -std_scan_parameter_values = Data.unique_scan_parameter_values; -std_mean_mg2 = Data.mean_max_g2_values; -std_stderr_mg2 = Data.std_error_g2_values; - -% Prepare cell arrays for multiple datasets -scanValsCell = {dts_scan_parameter_values, std_scan_parameter_values}; -meanValsCell = {dts_mean_mg2, std_mean_mg2}; -stderrValsCell = {dts_stderr_mg2, std_stderr_mg2}; - -% Compare datasets -compareMultipleDatasets(scanValsCell, meanValsCell, stderrValsCell, ... - 'FigNum', 8, ... - 'FontName', 'Bahnschrift', ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'CapSize', 5, ... - 'YLim', [0 1], ... - 'Labels', {'Droplets → Stripes', 'Stripes → Droplets'}, ... - 'Title', 'AngularCorrelation_Comparison', ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SaveFileName', 'AngularCorrelation_Comparison.fig'); - -%% ------------------ 8. Heatmaps ------------------ - -BFields = [2.35, 2.15, 2.0, 1.85, 1.7, 1.55, 1.4, 1.35]; - -% Heatmap of mean_max_g2_values -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'mean_max_g2_values', ... - 'Colormap', @sky, ... - 'CLim', [0 1], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 9, ... - 'SaveFileName', 'Heatmap_MaxG2.fig', ... - 'SaveDirectory', options.resultsDir); - -% Heatmap of radial_spectral_contrast -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'radial_spectral_contrast', ... - 'Colormap', @sky, ... - 'CLim', [0 0.008], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', 'Radial Spectral Contrast', ... - 'FigNum', 10, ... - 'SaveFileName', 'Heatmap_RadialSpectralContrast.fig', ... - 'SaveDirectory', options.resultsDir); -%} \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/BECToDroplets/plotImages.m b/Data-Analyzer/+Scripts/BECToDroplets/plotImages.m deleted file mode 100644 index 93146d0..0000000 --- a/Data-Analyzer/+Scripts/BECToDroplets/plotImages.m +++ /dev/null @@ -1,75 +0,0 @@ -%% ===== BEC-Droplets Settings ===== -options = struct(); - -% File / paths -options.folderPath = "//DyLabNAS/Data/StructuralPhaseTransition/2025/08/13/0062"; -options.savefileName = 'BECToDroplets'; -options.saveDirectory = "Z:/Users/Karthik/Data-Analyzer/+Scripts"; - -% 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 = 23.94; -options.removeFringes = false; -options.ImagingMode = 'HighIntensity'; -options.PulseDuration = 5e-6; % in s - -% Fourier analysis settings -% Radial Spectral Distribution -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 for centered moving avg - -% Angular Spectral Distribution -options.k_min = 1.2771; % in μm⁻¹ -options.k_max = 2.5541; % in μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; % zoomed-in region around center - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -if strcmp(options.savefileName, 'BECToDroplets') - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; -elseif strcmp(options.savefileName, 'BECToStripes') - 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'; -elseif strcmp(options.savefileName, 'DropletsToStripes') - options.scan_reference_values = [0, 5, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]; - options.titleString = 'Droplets to Stripes'; -elseif strcmp(options.savefileName, 'StripesToDroplets') - 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 - -% Flags -options.skipNormalization = true; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Optional extras -options.font = 'Bahnschrift'; - -%% -[od_imgs, scan_parameter_values, file_list] = Helper.collectODImages(options); - -%% -Analyzer.runInteractiveODImageViewer(od_imgs, scan_parameter_values, file_list, options); \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/BECToDroplets/runFullAnalysis.m b/Data-Analyzer/+Scripts/BECToDroplets/runFullAnalysis.m deleted file mode 100644 index a665fe0..0000000 --- a/Data-Analyzer/+Scripts/BECToDroplets/runFullAnalysis.m +++ /dev/null @@ -1,80 +0,0 @@ -%% ===== BEC-Droplets Settings ===== - -% Batch Loop Parameters -baseFolder = '//DyLabNAS/Data/StructuralPhaseTransition/2025/08/'; - -dates = ["13"]; -runs = { - ["0062"] -}; - -options = struct(); - -% File / paths -options.savefileName = 'BECToDroplets'; -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 = 23.94; -options.removeFringes = false; -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.k_min = 1.2771; % μm⁻¹ -options.k_max = 2.5541; % μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -switch options.savefileName - case 'BECToDroplets' - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; - case 'BECToStripes' - 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, 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, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]); - options.titleString = 'Stripes to Droplets'; -end - -% Flags -options.skipNormalization = false; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Extras -options.font = 'Bahnschrift'; - -%% ===== Run Batch Analysis ===== -results_all = Helper.batchAnalyze(baseFolder, dates, runs, options); diff --git a/Data-Analyzer/+Scripts/BECToDropletsToStripes/plotAnalysisResults.m b/Data-Analyzer/+Scripts/BECToDropletsToStripes/plotAnalysisResults.m deleted file mode 100644 index 1ba03bc..0000000 --- a/Data-Analyzer/+Scripts/BECToDropletsToStripes/plotAnalysisResults.m +++ /dev/null @@ -1,159 +0,0 @@ -%% ------------------ 1. Mean ± Std Plots ------------------ -% Plot Radial Spectral Contrast -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.radial_spectral_contrast, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Radial Spectral Contrast', ... - 'FigNum', 1, ... - 'FontName', options.font, ... - 'SaveFileName', 'RadialSpectralContrast.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Angular Spectral Weight -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.angular_spectral_weight, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Angular Spectral Weight', ... - 'FigNum', 2, ... - 'FontName', options.font, ... - 'SaveFileName', 'AngularSpectralWeight.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Peak Offset Angular Correlation -Plotter.plotMeanWithSE(options.scan_reference_values, results_all.custom_g_results.max_g2_all_per_scan_parameter_value, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 3, ... - 'YLim', [0 1], ... - 'FontName', options.font, ... - 'SaveFileName', 'PeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 2. g²(θ) across transition ------------------ -Plotter.plotG2(results_all.full_g2_results.g2_all, ... - results_all.full_g2_results.g2_error_all, ... - results_all.full_g2_results.theta_values, ... - options.scan_reference_values, ... - 'rot_mag_field', ... - 'Title', options.titleString, ... - 'XLabel', '$\delta\theta / \pi$', ... - 'YLabel', '$g^{(2)}(\delta\theta)$', ... - 'FigNum', 4, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'G2ThetaAcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'Colormap', @Colormaps.coolwarm); - -%% ------------------ 3. PDF of max g² across transition ------------------ -Plotter.plotPDF(results_all.custom_g_results.max_g2_all_per_scan_parameter_value, options.scan_reference_values, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}]$', ... - 'FigNum', 5, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'PDF_MaxG2AcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'NumPoints', 200, ... - 'DataRange', [0 1.5], ... - 'Colormap', @Colormaps.coolwarm, ... - 'XLim', [min(options.scan_reference_values) max(options.scan_reference_values)]); - - -%% ------------------ 4. Cumulants across transition ------------------ -Plotter.plotCumulants(options.scan_reference_values, ... - {results_all.custom_g_results.mean_max_g2, results_all.custom_g_results.var_max_g2, results_all.custom_g_results.skew_max_g2_angle, results_all.custom_g_results.fourth_order_cumulant_max_g2}, ... - 'Title', 'Cumulants of Peak Offset Angular Correlation', ... - 'XLabel', 'B (G)', ... - 'FigNum', 6, ... - 'FontName', options.font, ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'CumulantOfPeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results']); -%{ - -%% ------------------ 6. Average of Spectra Plots ------------------ - -Plotter.plotAverageSpectra(scan_parameter_values, ... - spectral_analysis_results, ... - 'ScanParameterName', scan_parameter, ... - 'FigNum', 7, ... - 'ColormapPS', Colormaps.coolwarm(), ... - 'Font', 'Bahnschrift', ... - 'SaveFileName', 'avgSpectra.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 7. Compare quantities ------------------ -% Load Droplets → Stripes data -Data = load(dtsFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -dts_scan_parameter_values = Data.unique_scan_parameter_values; -dts_mean_mg2 = Data.mean_max_g2_values; -dts_stderr_mg2 = Data.std_error_g2_values; - -% Load Stripes → Droplets data -Data = load(stdFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -std_scan_parameter_values = Data.unique_scan_parameter_values; -std_mean_mg2 = Data.mean_max_g2_values; -std_stderr_mg2 = Data.std_error_g2_values; - -% Prepare cell arrays for multiple datasets -scanValsCell = {dts_scan_parameter_values, std_scan_parameter_values}; -meanValsCell = {dts_mean_mg2, std_mean_mg2}; -stderrValsCell = {dts_stderr_mg2, std_stderr_mg2}; - -% Compare datasets -compareMultipleDatasets(scanValsCell, meanValsCell, stderrValsCell, ... - 'FigNum', 8, ... - 'FontName', 'Bahnschrift', ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'CapSize', 5, ... - 'YLim', [0 1], ... - 'Labels', {'Droplets → Stripes', 'Stripes → Droplets'}, ... - 'Title', 'AngularCorrelation_Comparison', ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SaveFileName', 'AngularCorrelation_Comparison.fig'); - -%% ------------------ 8. Heatmaps ------------------ - -BFields = [2.35, 2.15, 2.0, 1.85, 1.7, 1.55, 1.4, 1.35]; - -% Heatmap of mean_max_g2_values -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'mean_max_g2_values', ... - 'Colormap', @sky, ... - 'CLim', [0 1], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 9, ... - 'SaveFileName', 'Heatmap_MaxG2.fig', ... - 'SaveDirectory', options.resultsDir); - -% Heatmap of radial_spectral_contrast -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'radial_spectral_contrast', ... - 'Colormap', @sky, ... - 'CLim', [0 0.008], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', 'Radial Spectral Contrast', ... - 'FigNum', 10, ... - 'SaveFileName', 'Heatmap_RadialSpectralContrast.fig', ... - 'SaveDirectory', options.resultsDir); -%} \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/BECToDropletsToStripes/plotImages.m b/Data-Analyzer/+Scripts/BECToDropletsToStripes/plotImages.m deleted file mode 100644 index 93146d0..0000000 --- a/Data-Analyzer/+Scripts/BECToDropletsToStripes/plotImages.m +++ /dev/null @@ -1,75 +0,0 @@ -%% ===== BEC-Droplets Settings ===== -options = struct(); - -% File / paths -options.folderPath = "//DyLabNAS/Data/StructuralPhaseTransition/2025/08/13/0062"; -options.savefileName = 'BECToDroplets'; -options.saveDirectory = "Z:/Users/Karthik/Data-Analyzer/+Scripts"; - -% 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 = 23.94; -options.removeFringes = false; -options.ImagingMode = 'HighIntensity'; -options.PulseDuration = 5e-6; % in s - -% Fourier analysis settings -% Radial Spectral Distribution -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 for centered moving avg - -% Angular Spectral Distribution -options.k_min = 1.2771; % in μm⁻¹ -options.k_max = 2.5541; % in μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; % zoomed-in region around center - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -if strcmp(options.savefileName, 'BECToDroplets') - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; -elseif strcmp(options.savefileName, 'BECToStripes') - 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'; -elseif strcmp(options.savefileName, 'DropletsToStripes') - options.scan_reference_values = [0, 5, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]; - options.titleString = 'Droplets to Stripes'; -elseif strcmp(options.savefileName, 'StripesToDroplets') - 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 - -% Flags -options.skipNormalization = true; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Optional extras -options.font = 'Bahnschrift'; - -%% -[od_imgs, scan_parameter_values, file_list] = Helper.collectODImages(options); - -%% -Analyzer.runInteractiveODImageViewer(od_imgs, scan_parameter_values, file_list, options); \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/BECToDropletsToStripes/runFullAnalysis.m b/Data-Analyzer/+Scripts/BECToDropletsToStripes/runFullAnalysis.m deleted file mode 100644 index a665fe0..0000000 --- a/Data-Analyzer/+Scripts/BECToDropletsToStripes/runFullAnalysis.m +++ /dev/null @@ -1,80 +0,0 @@ -%% ===== BEC-Droplets Settings ===== - -% Batch Loop Parameters -baseFolder = '//DyLabNAS/Data/StructuralPhaseTransition/2025/08/'; - -dates = ["13"]; -runs = { - ["0062"] -}; - -options = struct(); - -% File / paths -options.savefileName = 'BECToDroplets'; -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 = 23.94; -options.removeFringes = false; -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.k_min = 1.2771; % μm⁻¹ -options.k_max = 2.5541; % μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -switch options.savefileName - case 'BECToDroplets' - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; - case 'BECToStripes' - 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, 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, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]); - options.titleString = 'Stripes to Droplets'; -end - -% Flags -options.skipNormalization = false; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Extras -options.font = 'Bahnschrift'; - -%% ===== Run Batch Analysis ===== -results_all = Helper.batchAnalyze(baseFolder, dates, runs, options); diff --git a/Data-Analyzer/+Scripts/BECToStripes/plotAnalysisResults.m b/Data-Analyzer/+Scripts/BECToStripes/plotAnalysisResults.m deleted file mode 100644 index 1ba03bc..0000000 --- a/Data-Analyzer/+Scripts/BECToStripes/plotAnalysisResults.m +++ /dev/null @@ -1,159 +0,0 @@ -%% ------------------ 1. Mean ± Std Plots ------------------ -% Plot Radial Spectral Contrast -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.radial_spectral_contrast, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Radial Spectral Contrast', ... - 'FigNum', 1, ... - 'FontName', options.font, ... - 'SaveFileName', 'RadialSpectralContrast.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Angular Spectral Weight -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.angular_spectral_weight, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Angular Spectral Weight', ... - 'FigNum', 2, ... - 'FontName', options.font, ... - 'SaveFileName', 'AngularSpectralWeight.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Peak Offset Angular Correlation -Plotter.plotMeanWithSE(options.scan_reference_values, results_all.custom_g_results.max_g2_all_per_scan_parameter_value, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 3, ... - 'YLim', [0 1], ... - 'FontName', options.font, ... - 'SaveFileName', 'PeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 2. g²(θ) across transition ------------------ -Plotter.plotG2(results_all.full_g2_results.g2_all, ... - results_all.full_g2_results.g2_error_all, ... - results_all.full_g2_results.theta_values, ... - options.scan_reference_values, ... - 'rot_mag_field', ... - 'Title', options.titleString, ... - 'XLabel', '$\delta\theta / \pi$', ... - 'YLabel', '$g^{(2)}(\delta\theta)$', ... - 'FigNum', 4, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'G2ThetaAcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'Colormap', @Colormaps.coolwarm); - -%% ------------------ 3. PDF of max g² across transition ------------------ -Plotter.plotPDF(results_all.custom_g_results.max_g2_all_per_scan_parameter_value, options.scan_reference_values, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}]$', ... - 'FigNum', 5, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'PDF_MaxG2AcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'NumPoints', 200, ... - 'DataRange', [0 1.5], ... - 'Colormap', @Colormaps.coolwarm, ... - 'XLim', [min(options.scan_reference_values) max(options.scan_reference_values)]); - - -%% ------------------ 4. Cumulants across transition ------------------ -Plotter.plotCumulants(options.scan_reference_values, ... - {results_all.custom_g_results.mean_max_g2, results_all.custom_g_results.var_max_g2, results_all.custom_g_results.skew_max_g2_angle, results_all.custom_g_results.fourth_order_cumulant_max_g2}, ... - 'Title', 'Cumulants of Peak Offset Angular Correlation', ... - 'XLabel', 'B (G)', ... - 'FigNum', 6, ... - 'FontName', options.font, ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'CumulantOfPeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results']); -%{ - -%% ------------------ 6. Average of Spectra Plots ------------------ - -Plotter.plotAverageSpectra(scan_parameter_values, ... - spectral_analysis_results, ... - 'ScanParameterName', scan_parameter, ... - 'FigNum', 7, ... - 'ColormapPS', Colormaps.coolwarm(), ... - 'Font', 'Bahnschrift', ... - 'SaveFileName', 'avgSpectra.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 7. Compare quantities ------------------ -% Load Droplets → Stripes data -Data = load(dtsFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -dts_scan_parameter_values = Data.unique_scan_parameter_values; -dts_mean_mg2 = Data.mean_max_g2_values; -dts_stderr_mg2 = Data.std_error_g2_values; - -% Load Stripes → Droplets data -Data = load(stdFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -std_scan_parameter_values = Data.unique_scan_parameter_values; -std_mean_mg2 = Data.mean_max_g2_values; -std_stderr_mg2 = Data.std_error_g2_values; - -% Prepare cell arrays for multiple datasets -scanValsCell = {dts_scan_parameter_values, std_scan_parameter_values}; -meanValsCell = {dts_mean_mg2, std_mean_mg2}; -stderrValsCell = {dts_stderr_mg2, std_stderr_mg2}; - -% Compare datasets -compareMultipleDatasets(scanValsCell, meanValsCell, stderrValsCell, ... - 'FigNum', 8, ... - 'FontName', 'Bahnschrift', ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'CapSize', 5, ... - 'YLim', [0 1], ... - 'Labels', {'Droplets → Stripes', 'Stripes → Droplets'}, ... - 'Title', 'AngularCorrelation_Comparison', ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SaveFileName', 'AngularCorrelation_Comparison.fig'); - -%% ------------------ 8. Heatmaps ------------------ - -BFields = [2.35, 2.15, 2.0, 1.85, 1.7, 1.55, 1.4, 1.35]; - -% Heatmap of mean_max_g2_values -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'mean_max_g2_values', ... - 'Colormap', @sky, ... - 'CLim', [0 1], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 9, ... - 'SaveFileName', 'Heatmap_MaxG2.fig', ... - 'SaveDirectory', options.resultsDir); - -% Heatmap of radial_spectral_contrast -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'radial_spectral_contrast', ... - 'Colormap', @sky, ... - 'CLim', [0 0.008], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', 'Radial Spectral Contrast', ... - 'FigNum', 10, ... - 'SaveFileName', 'Heatmap_RadialSpectralContrast.fig', ... - 'SaveDirectory', options.resultsDir); -%} \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/BECToStripes/plotImages.m b/Data-Analyzer/+Scripts/BECToStripes/plotImages.m deleted file mode 100644 index 93146d0..0000000 --- a/Data-Analyzer/+Scripts/BECToStripes/plotImages.m +++ /dev/null @@ -1,75 +0,0 @@ -%% ===== BEC-Droplets Settings ===== -options = struct(); - -% File / paths -options.folderPath = "//DyLabNAS/Data/StructuralPhaseTransition/2025/08/13/0062"; -options.savefileName = 'BECToDroplets'; -options.saveDirectory = "Z:/Users/Karthik/Data-Analyzer/+Scripts"; - -% 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 = 23.94; -options.removeFringes = false; -options.ImagingMode = 'HighIntensity'; -options.PulseDuration = 5e-6; % in s - -% Fourier analysis settings -% Radial Spectral Distribution -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 for centered moving avg - -% Angular Spectral Distribution -options.k_min = 1.2771; % in μm⁻¹ -options.k_max = 2.5541; % in μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; % zoomed-in region around center - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -if strcmp(options.savefileName, 'BECToDroplets') - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; -elseif strcmp(options.savefileName, 'BECToStripes') - 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'; -elseif strcmp(options.savefileName, 'DropletsToStripes') - options.scan_reference_values = [0, 5, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]; - options.titleString = 'Droplets to Stripes'; -elseif strcmp(options.savefileName, 'StripesToDroplets') - 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 - -% Flags -options.skipNormalization = true; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Optional extras -options.font = 'Bahnschrift'; - -%% -[od_imgs, scan_parameter_values, file_list] = Helper.collectODImages(options); - -%% -Analyzer.runInteractiveODImageViewer(od_imgs, scan_parameter_values, file_list, options); \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/BECToStripes/runFullAnalysis.m b/Data-Analyzer/+Scripts/BECToStripes/runFullAnalysis.m deleted file mode 100644 index a665fe0..0000000 --- a/Data-Analyzer/+Scripts/BECToStripes/runFullAnalysis.m +++ /dev/null @@ -1,80 +0,0 @@ -%% ===== BEC-Droplets Settings ===== - -% Batch Loop Parameters -baseFolder = '//DyLabNAS/Data/StructuralPhaseTransition/2025/08/'; - -dates = ["13"]; -runs = { - ["0062"] -}; - -options = struct(); - -% File / paths -options.savefileName = 'BECToDroplets'; -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 = 23.94; -options.removeFringes = false; -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.k_min = 1.2771; % μm⁻¹ -options.k_max = 2.5541; % μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -switch options.savefileName - case 'BECToDroplets' - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; - case 'BECToStripes' - 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, 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, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]); - options.titleString = 'Stripes to Droplets'; -end - -% Flags -options.skipNormalization = false; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Extras -options.font = 'Bahnschrift'; - -%% ===== Run Batch Analysis ===== -results_all = Helper.batchAnalyze(baseFolder, dates, runs, options); diff --git a/Data-Analyzer/+Scripts/BECToStripesToDroplets/plotAnalysisResults.m b/Data-Analyzer/+Scripts/BECToStripesToDroplets/plotAnalysisResults.m deleted file mode 100644 index 1ba03bc..0000000 --- a/Data-Analyzer/+Scripts/BECToStripesToDroplets/plotAnalysisResults.m +++ /dev/null @@ -1,159 +0,0 @@ -%% ------------------ 1. Mean ± Std Plots ------------------ -% Plot Radial Spectral Contrast -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.radial_spectral_contrast, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Radial Spectral Contrast', ... - 'FigNum', 1, ... - 'FontName', options.font, ... - 'SaveFileName', 'RadialSpectralContrast.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Angular Spectral Weight -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.angular_spectral_weight, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Angular Spectral Weight', ... - 'FigNum', 2, ... - 'FontName', options.font, ... - 'SaveFileName', 'AngularSpectralWeight.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Peak Offset Angular Correlation -Plotter.plotMeanWithSE(options.scan_reference_values, results_all.custom_g_results.max_g2_all_per_scan_parameter_value, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 3, ... - 'YLim', [0 1], ... - 'FontName', options.font, ... - 'SaveFileName', 'PeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 2. g²(θ) across transition ------------------ -Plotter.plotG2(results_all.full_g2_results.g2_all, ... - results_all.full_g2_results.g2_error_all, ... - results_all.full_g2_results.theta_values, ... - options.scan_reference_values, ... - 'rot_mag_field', ... - 'Title', options.titleString, ... - 'XLabel', '$\delta\theta / \pi$', ... - 'YLabel', '$g^{(2)}(\delta\theta)$', ... - 'FigNum', 4, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'G2ThetaAcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'Colormap', @Colormaps.coolwarm); - -%% ------------------ 3. PDF of max g² across transition ------------------ -Plotter.plotPDF(results_all.custom_g_results.max_g2_all_per_scan_parameter_value, options.scan_reference_values, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}]$', ... - 'FigNum', 5, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'PDF_MaxG2AcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'NumPoints', 200, ... - 'DataRange', [0 1.5], ... - 'Colormap', @Colormaps.coolwarm, ... - 'XLim', [min(options.scan_reference_values) max(options.scan_reference_values)]); - - -%% ------------------ 4. Cumulants across transition ------------------ -Plotter.plotCumulants(options.scan_reference_values, ... - {results_all.custom_g_results.mean_max_g2, results_all.custom_g_results.var_max_g2, results_all.custom_g_results.skew_max_g2_angle, results_all.custom_g_results.fourth_order_cumulant_max_g2}, ... - 'Title', 'Cumulants of Peak Offset Angular Correlation', ... - 'XLabel', 'B (G)', ... - 'FigNum', 6, ... - 'FontName', options.font, ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'CumulantOfPeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results']); -%{ - -%% ------------------ 6. Average of Spectra Plots ------------------ - -Plotter.plotAverageSpectra(scan_parameter_values, ... - spectral_analysis_results, ... - 'ScanParameterName', scan_parameter, ... - 'FigNum', 7, ... - 'ColormapPS', Colormaps.coolwarm(), ... - 'Font', 'Bahnschrift', ... - 'SaveFileName', 'avgSpectra.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 7. Compare quantities ------------------ -% Load Droplets → Stripes data -Data = load(dtsFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -dts_scan_parameter_values = Data.unique_scan_parameter_values; -dts_mean_mg2 = Data.mean_max_g2_values; -dts_stderr_mg2 = Data.std_error_g2_values; - -% Load Stripes → Droplets data -Data = load(stdFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -std_scan_parameter_values = Data.unique_scan_parameter_values; -std_mean_mg2 = Data.mean_max_g2_values; -std_stderr_mg2 = Data.std_error_g2_values; - -% Prepare cell arrays for multiple datasets -scanValsCell = {dts_scan_parameter_values, std_scan_parameter_values}; -meanValsCell = {dts_mean_mg2, std_mean_mg2}; -stderrValsCell = {dts_stderr_mg2, std_stderr_mg2}; - -% Compare datasets -compareMultipleDatasets(scanValsCell, meanValsCell, stderrValsCell, ... - 'FigNum', 8, ... - 'FontName', 'Bahnschrift', ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'CapSize', 5, ... - 'YLim', [0 1], ... - 'Labels', {'Droplets → Stripes', 'Stripes → Droplets'}, ... - 'Title', 'AngularCorrelation_Comparison', ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SaveFileName', 'AngularCorrelation_Comparison.fig'); - -%% ------------------ 8. Heatmaps ------------------ - -BFields = [2.35, 2.15, 2.0, 1.85, 1.7, 1.55, 1.4, 1.35]; - -% Heatmap of mean_max_g2_values -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'mean_max_g2_values', ... - 'Colormap', @sky, ... - 'CLim', [0 1], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 9, ... - 'SaveFileName', 'Heatmap_MaxG2.fig', ... - 'SaveDirectory', options.resultsDir); - -% Heatmap of radial_spectral_contrast -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'radial_spectral_contrast', ... - 'Colormap', @sky, ... - 'CLim', [0 0.008], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', 'Radial Spectral Contrast', ... - 'FigNum', 10, ... - 'SaveFileName', 'Heatmap_RadialSpectralContrast.fig', ... - 'SaveDirectory', options.resultsDir); -%} \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/BECToStripesToDroplets/plotImages.m b/Data-Analyzer/+Scripts/BECToStripesToDroplets/plotImages.m deleted file mode 100644 index 93146d0..0000000 --- a/Data-Analyzer/+Scripts/BECToStripesToDroplets/plotImages.m +++ /dev/null @@ -1,75 +0,0 @@ -%% ===== BEC-Droplets Settings ===== -options = struct(); - -% File / paths -options.folderPath = "//DyLabNAS/Data/StructuralPhaseTransition/2025/08/13/0062"; -options.savefileName = 'BECToDroplets'; -options.saveDirectory = "Z:/Users/Karthik/Data-Analyzer/+Scripts"; - -% 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 = 23.94; -options.removeFringes = false; -options.ImagingMode = 'HighIntensity'; -options.PulseDuration = 5e-6; % in s - -% Fourier analysis settings -% Radial Spectral Distribution -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 for centered moving avg - -% Angular Spectral Distribution -options.k_min = 1.2771; % in μm⁻¹ -options.k_max = 2.5541; % in μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; % zoomed-in region around center - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -if strcmp(options.savefileName, 'BECToDroplets') - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; -elseif strcmp(options.savefileName, 'BECToStripes') - 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'; -elseif strcmp(options.savefileName, 'DropletsToStripes') - options.scan_reference_values = [0, 5, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]; - options.titleString = 'Droplets to Stripes'; -elseif strcmp(options.savefileName, 'StripesToDroplets') - 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 - -% Flags -options.skipNormalization = true; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Optional extras -options.font = 'Bahnschrift'; - -%% -[od_imgs, scan_parameter_values, file_list] = Helper.collectODImages(options); - -%% -Analyzer.runInteractiveODImageViewer(od_imgs, scan_parameter_values, file_list, options); \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/BECToStripesToDroplets/runFullAnalysis.m b/Data-Analyzer/+Scripts/BECToStripesToDroplets/runFullAnalysis.m deleted file mode 100644 index a665fe0..0000000 --- a/Data-Analyzer/+Scripts/BECToStripesToDroplets/runFullAnalysis.m +++ /dev/null @@ -1,80 +0,0 @@ -%% ===== BEC-Droplets Settings ===== - -% Batch Loop Parameters -baseFolder = '//DyLabNAS/Data/StructuralPhaseTransition/2025/08/'; - -dates = ["13"]; -runs = { - ["0062"] -}; - -options = struct(); - -% File / paths -options.savefileName = 'BECToDroplets'; -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 = 23.94; -options.removeFringes = false; -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.k_min = 1.2771; % μm⁻¹ -options.k_max = 2.5541; % μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -switch options.savefileName - case 'BECToDroplets' - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; - case 'BECToStripes' - 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, 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, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]); - options.titleString = 'Stripes to Droplets'; -end - -% Flags -options.skipNormalization = false; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Extras -options.font = 'Bahnschrift'; - -%% ===== Run Batch Analysis ===== -results_all = Helper.batchAnalyze(baseFolder, dates, runs, options); diff --git a/Data-Analyzer/+Scripts/PhaseDiagram/plotAnalysisResults.m b/Data-Analyzer/+Scripts/PhaseDiagram/plotAnalysisResults.m deleted file mode 100644 index 1ba03bc..0000000 --- a/Data-Analyzer/+Scripts/PhaseDiagram/plotAnalysisResults.m +++ /dev/null @@ -1,159 +0,0 @@ -%% ------------------ 1. Mean ± Std Plots ------------------ -% Plot Radial Spectral Contrast -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.radial_spectral_contrast, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Radial Spectral Contrast', ... - 'FigNum', 1, ... - 'FontName', options.font, ... - 'SaveFileName', 'RadialSpectralContrast.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Angular Spectral Weight -Plotter.plotMeanWithSE(scan_parameter_values, results_all.spectral_analysis_results.angular_spectral_weight, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', 'Angular Spectral Weight', ... - 'FigNum', 2, ... - 'FontName', options.font, ... - 'SaveFileName', 'AngularSpectralWeight.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -% Plot Peak Offset Angular Correlation -Plotter.plotMeanWithSE(options.scan_reference_values, results_all.custom_g_results.max_g2_all_per_scan_parameter_value, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 3, ... - 'YLim', [0 1], ... - 'FontName', options.font, ... - 'SaveFileName', 'PeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 2. g²(θ) across transition ------------------ -Plotter.plotG2(results_all.full_g2_results.g2_all, ... - results_all.full_g2_results.g2_error_all, ... - results_all.full_g2_results.theta_values, ... - options.scan_reference_values, ... - 'rot_mag_field', ... - 'Title', options.titleString, ... - 'XLabel', '$\delta\theta / \pi$', ... - 'YLabel', '$g^{(2)}(\delta\theta)$', ... - 'FigNum', 4, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'G2ThetaAcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'Colormap', @Colormaps.coolwarm); - -%% ------------------ 3. PDF of max g² across transition ------------------ -Plotter.plotPDF(results_all.custom_g_results.max_g2_all_per_scan_parameter_value, options.scan_reference_values, ... - 'Title', options.titleString, ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}]$', ... - 'FigNum', 5, ... - 'FontName', options.font, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'PDF_MaxG2AcrossTransition.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'NumPoints', 200, ... - 'DataRange', [0 1.5], ... - 'Colormap', @Colormaps.coolwarm, ... - 'XLim', [min(options.scan_reference_values) max(options.scan_reference_values)]); - - -%% ------------------ 4. Cumulants across transition ------------------ -Plotter.plotCumulants(options.scan_reference_values, ... - {results_all.custom_g_results.mean_max_g2, results_all.custom_g_results.var_max_g2, results_all.custom_g_results.skew_max_g2_angle, results_all.custom_g_results.fourth_order_cumulant_max_g2}, ... - 'Title', 'Cumulants of Peak Offset Angular Correlation', ... - 'XLabel', 'B (G)', ... - 'FigNum', 6, ... - 'FontName', options.font, ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveFileName', 'CumulantOfPeakOffsetAngularCorrelation.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results']); -%{ - -%% ------------------ 6. Average of Spectra Plots ------------------ - -Plotter.plotAverageSpectra(scan_parameter_values, ... - spectral_analysis_results, ... - 'ScanParameterName', scan_parameter, ... - 'FigNum', 7, ... - 'ColormapPS', Colormaps.coolwarm(), ... - 'Font', 'Bahnschrift', ... - 'SaveFileName', 'avgSpectra.fig', ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SkipSaveFigures', options.skipSaveFigures); - -%% ------------------ 7. Compare quantities ------------------ -% Load Droplets → Stripes data -Data = load(dtsFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -dts_scan_parameter_values = Data.unique_scan_parameter_values; -dts_mean_mg2 = Data.mean_max_g2_values; -dts_stderr_mg2 = Data.std_error_g2_values; - -% Load Stripes → Droplets data -Data = load(stdFile, ... - 'unique_scan_parameter_values', ... - 'mean_max_g2_values', ... - 'std_error_g2_values'); -std_scan_parameter_values = Data.unique_scan_parameter_values; -std_mean_mg2 = Data.mean_max_g2_values; -std_stderr_mg2 = Data.std_error_g2_values; - -% Prepare cell arrays for multiple datasets -scanValsCell = {dts_scan_parameter_values, std_scan_parameter_values}; -meanValsCell = {dts_mean_mg2, std_mean_mg2}; -stderrValsCell = {dts_stderr_mg2, std_stderr_mg2}; - -% Compare datasets -compareMultipleDatasets(scanValsCell, meanValsCell, stderrValsCell, ... - 'FigNum', 8, ... - 'FontName', 'Bahnschrift', ... - 'MarkerSize', 6, ... - 'LineWidth', 1.5, ... - 'CapSize', 5, ... - 'YLim', [0 1], ... - 'Labels', {'Droplets → Stripes', 'Stripes → Droplets'}, ... - 'Title', 'AngularCorrelation_Comparison', ... - 'XLabel', 'B (G)', ... - 'YLabel', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'SkipSaveFigures', options.skipSaveFigures, ... - 'SaveDirectory', [options.saveDirectory '/Results'], ... - 'SaveFileName', 'AngularCorrelation_Comparison.fig'); - -%% ------------------ 8. Heatmaps ------------------ - -BFields = [2.35, 2.15, 2.0, 1.85, 1.7, 1.55, 1.4, 1.35]; - -% Heatmap of mean_max_g2_values -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'mean_max_g2_values', ... - 'Colormap', @sky, ... - 'CLim', [0 1], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', '$\mathrm{max}[g^{(2)}_{[50,70]}(\delta\theta)]$', ... - 'FigNum', 9, ... - 'SaveFileName', 'Heatmap_MaxG2.fig', ... - 'SaveDirectory', options.resultsDir); - -% Heatmap of radial_spectral_contrast -Plotter.plotHeatmap(results_all, options.scan_groups, BFields, 'radial_spectral_contrast', ... - 'Colormap', @sky, ... - 'CLim', [0 0.008], ... - 'XLabel', '\alpha (degrees)', ... - 'YLabel', 'BField (G)', ... - 'Title', 'Radial Spectral Contrast', ... - 'FigNum', 10, ... - 'SaveFileName', 'Heatmap_RadialSpectralContrast.fig', ... - 'SaveDirectory', options.resultsDir); -%} \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/PhaseDiagram/plotImages.m b/Data-Analyzer/+Scripts/PhaseDiagram/plotImages.m deleted file mode 100644 index 93146d0..0000000 --- a/Data-Analyzer/+Scripts/PhaseDiagram/plotImages.m +++ /dev/null @@ -1,75 +0,0 @@ -%% ===== BEC-Droplets Settings ===== -options = struct(); - -% File / paths -options.folderPath = "//DyLabNAS/Data/StructuralPhaseTransition/2025/08/13/0062"; -options.savefileName = 'BECToDroplets'; -options.saveDirectory = "Z:/Users/Karthik/Data-Analyzer/+Scripts"; - -% 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 = 23.94; -options.removeFringes = false; -options.ImagingMode = 'HighIntensity'; -options.PulseDuration = 5e-6; % in s - -% Fourier analysis settings -% Radial Spectral Distribution -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 for centered moving avg - -% Angular Spectral Distribution -options.k_min = 1.2771; % in μm⁻¹ -options.k_max = 2.5541; % in μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; % zoomed-in region around center - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -if strcmp(options.savefileName, 'BECToDroplets') - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; -elseif strcmp(options.savefileName, 'BECToStripes') - 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'; -elseif strcmp(options.savefileName, 'DropletsToStripes') - options.scan_reference_values = [0, 5, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]; - options.titleString = 'Droplets to Stripes'; -elseif strcmp(options.savefileName, 'StripesToDroplets') - 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 - -% Flags -options.skipNormalization = true; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Optional extras -options.font = 'Bahnschrift'; - -%% -[od_imgs, scan_parameter_values, file_list] = Helper.collectODImages(options); - -%% -Analyzer.runInteractiveODImageViewer(od_imgs, scan_parameter_values, file_list, options); \ No newline at end of file diff --git a/Data-Analyzer/+Scripts/PhaseDiagram/runFullAnalysis.m b/Data-Analyzer/+Scripts/PhaseDiagram/runFullAnalysis.m deleted file mode 100644 index a665fe0..0000000 --- a/Data-Analyzer/+Scripts/PhaseDiagram/runFullAnalysis.m +++ /dev/null @@ -1,80 +0,0 @@ -%% ===== BEC-Droplets Settings ===== - -% Batch Loop Parameters -baseFolder = '//DyLabNAS/Data/StructuralPhaseTransition/2025/08/'; - -dates = ["13"]; -runs = { - ["0062"] -}; - -options = struct(); - -% File / paths -options.savefileName = 'BECToDroplets'; -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 = 23.94; -options.removeFringes = false; -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.k_min = 1.2771; % μm⁻¹ -options.k_max = 2.5541; % μm⁻¹ -options.N_angular_bins = 180; -options.Angular_Threshold = 75; -options.Angular_Sigma = 2; -options.Angular_WindowSize = 5; -options.zoom_size = 50; - -% Scan parameter -options.scan_parameter = 'rot_mag_field'; - -switch options.savefileName - case 'BECToDroplets' - options.scan_reference_values = [2.40, 2.39, 2.38, 2.37, 2.35, 2.34, 2.32, 2.30, 2.28, 2.26, 2.24, 2.22, 2.2, 2.15, 2.10, 2.05, 2, 1.95, 1.90, 1.85, 1.8]; - options.titleString = 'BEC to Droplets'; - case 'BECToStripes' - 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, 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, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 35, 40]); - options.titleString = 'Stripes to Droplets'; -end - -% Flags -options.skipNormalization = false; -options.skipUnshuffling = false; -options.skipPreprocessing = true; -options.skipMasking = true; -options.skipIntensityThresholding = true; -options.skipBinarization = true; -options.skipMovieRender = true; -options.skipSaveFigures = true; -options.skipSaveOD = true; -options.skipLivePlot = false; -options.showProgressBar = true; - -% Extras -options.font = 'Bahnschrift'; - -%% ===== Run Batch Analysis ===== -results_all = Helper.batchAnalyze(baseFolder, dates, runs, options);