%% --- User chooses which dataset to load --- datasetIdx = 1; % <-- change this to 1, 2, 3, ... datasetName = sprintf('Dataset_%d', datasetIdx); % --- Base directory selection --- useLocalBaseDir = false; % <-- set true to use script location, false to use manual path if useLocalBaseDir % Use folder where this script is located thisScriptPath = mfilename('fullpath'); [thisScriptDir, ~, ~] = fileparts(thisScriptPath); baseDir = fullfile(thisScriptDir, 'Results'); else % Use manually specified folder baseDir = 'E:\Results - Experiment\202508\BECToStripes\'; end % --- Build paths --- dataFile = fullfile(baseDir, 'SavedData', [datasetName '.mat']); figSaveDir = fullfile(baseDir, 'SavedFigures', datasetName); % --- Load dataset --- data = load(dataFile); % --- Ensure figure folder exists --- if ~exist(figSaveDir, 'dir') mkdir(figSaveDir); end % --- Access dataset struct dynamically --- datasetStruct = data.(datasetName); compiled_results = datasetStruct.results; scan_parameter_values = datasetStruct.scan_parameter_values; scan_reference_values = datasetStruct.scan_reference_values; % --- Load options used during analysis --- options = datasetStruct.options; options.font = 'Bahnschrift'; % override if needed options.skipSaveFigures = false; % override if needed %% ------------------ 1. Mean ± Std Plots ------------------ % Plot Radial Spectral Contrast Plotter.plotMeanWithSE(scan_parameter_values, compiled_results.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', figSaveDir, ... % save figures inside dataset-specific folder 'SkipSaveFigures', options.skipSaveFigures); % Plot Angular Spectral Weight Plotter.plotMeanWithSE(scan_parameter_values, compiled_results.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', figSaveDir, ... 'SkipSaveFigures', options.skipSaveFigures); % Plot Peak Offset Angular Correlation Plotter.plotMeanWithSE(scan_parameter_values, compiled_results.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', figSaveDir, ... 'SkipSaveFigures', options.skipSaveFigures); %% ------------------ 2. PDF of Radial Spectral Contrast across transition ------------------ % Ensure row vectors contrast = compiled_results.spectral_analysis_results.radial_spectral_contrast(:)'; params = scan_parameter_values(:)'; reference = scan_reference_values(:)'; % Preallocate a cell array to hold grouped results grouped_contrast = cell(size(reference)); % 1x21 % Loop over each unique reference value for i = 1:length(reference) ref_val = reference(i); % Find indices where the scan param matches this reference idx = params == ref_val; % Store corresponding contrast values grouped_contrast{i} = contrast(idx); end Plotter.plotPDF(grouped_contrast, ... scan_reference_values, ... 'Title', options.titleString, ... 'XLabel', 'B (G)', ... 'YLabel', 'Radial Spectral Contrast', ... 'FigNum', 4, ... 'FontName', options.font, ... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveFileName', 'PDF_MaxG2AcrossTransition.fig', ... 'SaveDirectory', figSaveDir, ... 'NumberOfBins', 20, ... 'NormalizeHistogram', true, ... 'DataRange', [0 0.1], ... 'Colormap', @Colormaps.coolwarm, ... 'XLim', [min(scan_reference_values) max(scan_reference_values)]); %% ------------------ 3. Cumulants across transition ------------------ maxOrder = 4; % Set the order of cumulants you want numGroups = length(grouped_contrast); % Preallocate matrix to store cumulants % Each row corresponds to a group (i.e., a scan_reference_value) % Each column corresponds to a cumulant order (1 to maxOrder) cumulant_matrix = NaN(numGroups, maxOrder); for i = 1:numGroups data_i = grouped_contrast{i}; cumulant_matrix(i, :) = Calculator.computeCumulants(data_i, maxOrder); end mean_rsc = cumulant_matrix(:, 1); var_rsc = cumulant_matrix(:, 2); skew_rsc = cumulant_matrix(:, 3); binder_rsc = cumulant_matrix(:, 4); Plotter.plotCumulants(scan_reference_values, ... {mean_rsc, var_rsc, skew_rsc, binder_rsc}, ... 'Title', 'Cumulants of Radial Spectral Contrast', ... 'XLabel', 'B (G)', ... 'FigNum', 5, ... 'FontName', options.font, ... 'MarkerSize', 6, ... 'LineWidth', 1.5, ... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveFileName', 'CumulantOfPeakOffsetAngularCorrelation.fig', ... 'SaveDirectory', figSaveDir); %% ------------------ 4. g²(θ) across transition ------------------ Plotter.plotG2(compiled_results.full_g2_results.g2_mean, ... compiled_results.full_g2_results.g2_error, ... compiled_results.full_g2_results.theta_values, ... scan_reference_values, ... options.scanParameterUnits, ... 'Title', options.titleString, ... 'XLabel', '$\delta\theta / \pi$', ... 'YLabel', '$g^{(2)}(\delta\theta)$', ... 'FigNum', 6, ... 'FontName', options.font, ... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveFileName', 'G2ThetaAcrossTransition.fig', ... 'SaveDirectory', figSaveDir, ... 'Colormap', @Colormaps.coolwarm); %% ------------------ 5. Feature extraction of g²(θ) across transition ------------------ Plotter.plotG2Curves(compiled_results.full_g2_results, ... 'Title', options.titleString, ... 'XLabel', '\theta / \pi', ... 'YLabel', 'g^{(2)}(\theta)', ... 'HighlightEvery', 10, ... % highlight every 10th repetition 'FontName', options.font, ... 'FigNum', 7, ... 'TileTitlePrefix', 'B', ... % user-defined tile prefix 'TileTitleSuffix', 'G', ... % user-defined suffix (e.g., Gauss symbol)... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveFileName', 'G2Curves.fig', ... 'SaveDirectory', figSaveDir); % g2_analysis_results = Analyzer.analyzeAutocorrelation(compiled_results.full_g2_results); % Plotter.plotG2Features(g2_analysis_results, ... 'Title', options.titleString, ... 'XLabel', 'B (G)', ... 'FontName', options.font, ... 'FigNum', 8, ... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveFileName', 'G2Features.fig', ... 'SaveDirectory', figSaveDir); % Plotter.plotG2Cumulants(g2_analysis_results, ... 'Title', options.titleString, ... 'XLabel', 'B (G)', ... 'FontName', options.font, ... 'FigNum', 9, ... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveFileName', 'G2Cumulants.fig', ... 'SaveDirectory', figSaveDir); %% ------------------ 6. PDF of max g² across transition ------------------ Plotter.plotPDF(compiled_results.custom_g_results.max_g2_all_per_scan_parameter_value, ... scan_reference_values, ... 'Title', options.titleString, ... 'XLabel', 'B (G)', ... 'YLabel', '$\mathrm{max}[g^{(2)}]$', ... 'FigNum', 10, ... 'FontName', options.font, ... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveFileName', 'PDF_MaxG2AcrossTransition.fig', ... 'SaveDirectory', figSaveDir, ... 'NumberOfBins', 20, ... 'NormalizeHistogram', true, ... 'DataRange', [0 1.5], ... 'Colormap', @Colormaps.coolwarm, ... 'XLim', [min(scan_reference_values) max(scan_reference_values)]); %% ------------------ 7. Cumulants across transition ------------------ Plotter.plotCumulants(scan_reference_values, ... {compiled_results.custom_g_results.mean_max_g2, compiled_results.custom_g_results.var_max_g2, compiled_results.custom_g_results.skew_max_g2_angle, compiled_results.custom_g_results.fourth_order_cumulant_max_g2}, ... 'Title', 'Cumulants of Peak Offset Angular Correlation', ... 'XLabel', 'B (G)', ... 'FigNum', 11, ... 'FontName', options.font, ... 'MarkerSize', 6, ... 'LineWidth', 1.5, ... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveFileName', 'CumulantOfPeakOffsetAngularCorrelation.fig', ... 'SaveDirectory', figSaveDir); %% %{ %% ------------------ 8. PCA ------------------ Plotter.plotPCAResults(compiled_results.pca_results, scan_parameter_values, scan_reference_values, ... 'FigNumRange', [12,13,14,15,16,17], ... 'FontName', options.font, ... 'SkipSaveFigures', options.skipSaveFigures, ... 'SaveDirectory', figSaveDir); %% ------------------ 9. 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', figSaveDir, ... 'SkipSaveFigures', options.skipSaveFigures); %}