Calculations/Data-Analyzer/+Scripts/Comparison/compareTwoModeGaussianFitCumulants.m

113 lines
5.0 KiB
Matlab

%% Compare D→S vs S→D Fit Cumulants
% Author: Karthik
% Date: 2025-10-17
%% ---------- Load Fit Data ----------
basePath = "C:\Users\Karthik-OfficePC\Documents\GitRepositories\Calculations\Data-Analyzer\+Scripts\";
% D→S direction
data = load(fullfile(basePath, "BECToDropletsToStripes\DToS_ASDFitData\fitResults.mat"));
DToS_fitResults = data.fitResults;
data = load(fullfile(basePath, "BECToDropletsToStripes\DToS_ASDFitData\scan_parameter_values.mat"));
DToS_scanparamVals = data.scan_parameter_values;
data = load(fullfile(basePath, "BECToDropletsToStripes\DToS_ASDFitData\scan_reference_values.mat"));
DToS_scanrefVals = data.scan_reference_values;
% S→D direction
data = load(fullfile(basePath, "BECToStripesToDroplets\SToD_ASDFitData\fitResults.mat"));
SToD_fitResults = data.fitResults;
data = load(fullfile(basePath, "BECToStripesToDroplets\SToD_ASDFitData\scan_parameter_values.mat"));
SToD_scanparamVals = data.scan_parameter_values;
data = load(fullfile(basePath, "BECToStripesToDroplets\SToD_ASDFitData\scan_reference_values.mat"));
SToD_scanrefVals = data.scan_reference_values;
%% ---------- Compute Cumulants (scan-wise, per param) ----------
paramMap = struct('A1',1,'mu1',2,'sigma1',3,'A2',4,'mu2',5,'sigma2',6);
paramNames = {'A2','mu2'}; % parameters to compute cumulants for
maxOrder = 4; % compute up to 4th order cumulants
cumulants_DToS = struct();
cumulants_SToD = struct();
for p = 1:numel(paramNames)
paramName = paramNames{p};
paramIdx = paramMap.(paramName);
% --- D→S cumulants ---
cumulants_DToS.(paramName) = NaN(numel(DToS_scanrefVals), maxOrder);
for k = 1:numel(DToS_scanrefVals)
alphaVal = DToS_scanrefVals(k);
mask = DToS_scanparamVals == alphaVal; % pick all repetitions for this reference value
pvals = arrayfun(@(f) f.pFit(paramIdx), DToS_fitResults(mask), 'UniformOutput', true);
cumulants_DToS.(paramName)(k,:) = Calculator.computeCumulants(pvals, maxOrder);
end
% --- S→D cumulants ---
cumulants_SToD.(paramName) = NaN(numel(SToD_scanrefVals), maxOrder);
for k = 1:numel(SToD_scanrefVals)
alphaVal = SToD_scanrefVals(k);
mask = SToD_scanparamVals == alphaVal; % pick all repetitions for this reference value
pvals = arrayfun(@(f) f.pFit(paramIdx), SToD_fitResults(mask), 'UniformOutput', true);
cumulants_SToD.(paramName)(k,:) = Calculator.computeCumulants(pvals, maxOrder);
end
end
%% ---------- Plot Comparison ----------
params = {'\kappa_1','\kappa_2','\kappa_3','\kappa_4'};
titles = {'Mean','Variance','Skewness','Binder Cumulant'};
fontName = 'Bahnschrift';
fontSize = 14;
markerSize = 8;
lineWidth = 2;
colors = [0.2 0.4 0.7; 0.8 0.3 0.3]; % D→S: blue, S→D: red
% ===== A₂ Cumulants =====
fig1 = figure('Name','Cumulants of A₂: D→S vs S→D', ...
'Color','w', 'Position',[100 100 950 750]);
tLayout1 = tiledlayout(2,2,'TileSpacing','Compact','Padding','Compact');
title(tLayout1, 'Comparison of cumulants of secondary peak amplitude', ...
'FontName', fontName, 'FontSize', fontSize+4, 'FontWeight','bold');
for k = 1:4
ax = nexttile; hold(ax,'on');
plot(ax, DToS_scanrefVals, cumulants_DToS.A2(:,k), 'o--', ...
'Color', colors(1,:), 'LineWidth', lineWidth, 'MarkerSize', markerSize, 'MarkerFaceColor', colors(1,:), ...
'DisplayName','D→S');
plot(ax, SToD_scanrefVals, cumulants_SToD.A2(:,k), 's--', ...
'Color', colors(2,:), 'LineWidth', lineWidth, 'MarkerSize', markerSize, 'MarkerFaceColor', colors(2,:), ...
'DisplayName','S→D');
xlabel(ax, '\alpha (degrees)', 'FontName', fontName, 'FontSize', fontSize);
ylabel(ax, params{k}, 'FontName', fontName, 'FontSize', fontSize);
title(ax, titles{k}, 'FontName', fontName, 'FontSize', fontSize+2);
grid(ax,'on'); set(ax,'FontName', fontName,'FontSize', fontSize);
legend(ax, 'Location','northeast');
end
% ===== μ₂ Cumulants =====
fig2 = figure('Name','Cumulants of μ₂: D→S vs S→D', ...
'Color','w', 'Position',[100 100 950 750]);
tLayout2 = tiledlayout(2,2,'TileSpacing','Compact','Padding','Compact');
title(tLayout2, 'Comparison of cumulants of secondary peak position', ...
'FontName', fontName, 'FontSize', fontSize+4, 'FontWeight','bold');
for k = 1:4
ax = nexttile; hold(ax,'on');
plot(ax, DToS_scanrefVals, cumulants_DToS.mu2(:,k), 'o--', ...
'Color', colors(1,:), 'LineWidth', lineWidth, 'MarkerSize', markerSize, 'MarkerFaceColor', colors(1,:), ...
'DisplayName','D→S');
plot(ax, SToD_scanrefVals, cumulants_SToD.mu2(:,k), 's--', ...
'Color', colors(2,:), 'LineWidth', lineWidth, 'MarkerSize', markerSize, 'MarkerFaceColor', colors(2,:), ...
'DisplayName','S→D');
xlabel(ax, '\alpha (degrees)', 'FontName', fontName, 'FontSize', fontSize);
ylabel(ax, params{k}, 'FontName', fontName, 'FontSize', fontSize);
title(ax, titles{k}, 'FontName', fontName, 'FontSize', fontSize+2);
grid(ax,'on'); set(ax,'FontName', fontName,'FontSize', fontSize);
legend(ax, 'Location','northeast');
end