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

86 lines
3.6 KiB
Matlab

%% ===== Load saved cumulant data =====
file_D2S = 'C:\Users\Karthik-OfficePC\Documents\GitRepositories\Calculations\Data-Analyzer\+Scripts\Comparison\Cumulants\DropletsToStripes_MeanVariance_AllThetaData.mat';
file_S2D = 'C:\Users\Karthik-OfficePC\Documents\GitRepositories\Calculations\Data-Analyzer\+Scripts\Comparison\Cumulants\StripesToDroplets_MeanVariance_AllThetaData.mat';
data_D2S = load(file_D2S); % contains cumulantData
data_S2D = load(file_S2D); % contains cumulantData
%% ===== User selections =====
theta_target = pi/3; % θ to analyze
Bfield_target = 2.20; % B-field to analyze (Gauss)
%% ===== Find theta index =====
theta_vals = arrayfun(@(t) data_D2S.cumulantData(t,1).theta, 1:size(data_D2S.cumulantData,1));
[~, tIdx] = min(abs(theta_vals - theta_target));
%% ===== Find B-field index =====
Bfield_labels_D2S = cellfun(@(s) sscanf(s,'B = %f G'), {data_D2S.cumulantData(tIdx,:).label});
[~, dIdx] = min(abs(Bfield_labels_D2S - Bfield_target));
Bfield_labels_S2D = cellfun(@(s) sscanf(s,'B = %f G'), {data_S2D.cumulantData(tIdx,:).label});
[~, sIdx] = min(abs(Bfield_labels_S2D - Bfield_target));
%% ===== Extract data for plotting =====
scan_vals = data_D2S.cumulantData(tIdx,dIdx).scan_vals;
mean_D2S = data_D2S.cumulantData(tIdx,dIdx).mean;
var_D2S = data_D2S.cumulantData(tIdx,dIdx).variance;
mean_S2D = data_S2D.cumulantData(tIdx,sIdx).mean;
var_S2D = data_S2D.cumulantData(tIdx,sIdx).variance;
%% ===== Setup trimmed coolwarm colormap =====
fullCmap = Colormaps.coolwarm(256);
blueSide = fullCmap(1:100,:);
redSide = fullCmap(157:end,:);
trimmedCmap = [blueSide; redSide];
% Assign colors: first curve blue, second curve red
color_D2S = trimmedCmap(10,:); % dark blue
color_S2D = trimmedCmap(end-10,:); % dark red
%% ===== Plot comparison =====
fig = figure('Color','w','Position',[100 100 1000 500]);
tLayout = tiledlayout(1,2,'TileSpacing','Compact','Padding','Compact');
thetaStr = thetaToPiStr(theta_target);
% --- Mean ---
ax1 = nexttile; hold(ax1,'on');
plot(ax1, scan_vals, mean_D2S, '-o','LineWidth',2,'MarkerSize',8,'MarkerFaceColor',color_D2S,'Color',color_D2S,'DisplayName','Droplets → Stripes');
plot(ax1, scan_vals, mean_S2D, '-s','LineWidth',2,'MarkerSize',8,'MarkerFaceColor',color_S2D,'Color',color_S2D,'DisplayName','Stripes → Droplets');
xlabel(ax1, '\alpha (degrees)'); ylabel(ax1, '\kappa_1');
title(ax1, sprintf('Mean (\\theta = %s, B = %.2f G)', thetaStr, Bfield_target));
legend(ax1,'Location','northwest'); grid(ax1,'on');
% --- Variance ---
ax2 = nexttile; hold(ax2,'on');
plot(ax2, scan_vals, var_D2S, '-o','LineWidth',2,'MarkerSize',8,'MarkerFaceColor',color_D2S,'Color',color_D2S,'DisplayName','Droplets → Stripes');
plot(ax2, scan_vals, var_S2D, '-s','LineWidth',2,'MarkerSize',8,'MarkerFaceColor',color_S2D,'Color',color_S2D,'DisplayName','Stripes → Droplets');
xlabel(ax2, '\alpha (degrees)'); ylabel(ax2, '\kappa_2');
title(ax2, sprintf('Variance (\\theta = %s, B = %.2f G)', thetaStr, Bfield_target));
legend(ax2,'Location','northwest'); grid(ax2,'on');
sgtitle('Cumulant Comparison: Droplets ↔ Stripes');
%% ===== Helper function to format theta in terms of pi =====
function thetaStr = thetaToPiStr(thetaRad)
% Convert theta in radians to a string like 'pi/3' or 'pi' or '2*pi/3'
[N,D] = rat(thetaRad/pi,1e-6); % rational approximation
if N == 0
thetaStr = '0';
elseif D == 1
if N==1
thetaStr = '\\pi';
else
thetaStr = sprintf('%d\\pi',N);
end
else
if N == 1
thetaStr = sprintf('\\pi/%d',D); % omit 1 in numerator
else
thetaStr = sprintf('%d\\pi/%d',N,D);
end
end
end