Script to manually generate the phase diagram added

This commit is contained in:
Karthik 2025-05-03 12:27:34 +02:00
parent eb9a2a2150
commit 1856a26e92
2 changed files with 78 additions and 12 deletions

View File

@ -0,0 +1,66 @@
function createPhaseDiagram()
% Define axis values
SCATTERING_LENGTH_RANGE = [79.0 80.0 81.0 82.0 83.0 84.0 85.0 86.0 87.0 88.0 89.0 90.0];
NUM_ATOMS_LIST = [50000 60000 70000 80000];
M = zeros(12, 4); % Phase diagram matrix
fig = figure('Name', 'Manual Phase Diagram Input', ...
'NumberTitle', 'off', ...
'KeyPressFcn', @keyCallback);
hImg = imagesc(M);
set(gca, 'YDir', 'normal');
colormap(parula);
colorbar;
axis equal tight;
xticks(1:4);
yticks(1:12);
xticklabels(string(NUM_ATOMS_LIST));
yticklabels(string(SCATTERING_LENGTH_RANGE));
xlabel('Number of Atoms');
ylabel('Scattering Length (a0)');
grid on;
title('Click a cell to label it. Press "q" to quit.');
set(fig, 'WindowButtonDownFcn', @clickCallback);
uiwait(fig); % Wait until user quits
[filename, pathname] = uiputfile('phase_diagram_matrix.mat', 'Save Matrix As');
if ischar(filename)
save(fullfile(pathname, filename), 'M', 'SCATTERING_LENGTH_RANGE', 'NUM_ATOMS_LIST');
disp(['Matrix saved to ' fullfile(pathname, filename)]);
end
function clickCallback(~, ~)
C = get(gca, 'CurrentPoint');
col = round(C(1,1));
row = round(C(1,2));
if row >= 1 && row <= 12 && col >= 1 && col <= 4
prompt = sprintf('Enter label for scattering length %.1f and N = %d:', ...
SCATTERING_LENGTH_RANGE(row), NUM_ATOMS_LIST(col));
answer = inputdlg(prompt, 'Input Label', 1);
if ~isempty(answer)
val = str2double(answer{1});
if ~isnan(val)
M(row, col) = val;
refreshDisplay();
else
warndlg('Invalid input. Please enter a numeric value.', 'Invalid Input');
end
end
end
end
function keyCallback(~, event)
if strcmp(event.Key, 'q')
uiresume(fig);
close(fig);
end
end
function refreshDisplay()
set(hImg, 'CData', M);
drawnow;
end
end

View File

@ -549,51 +549,51 @@ SaveDirectory = './Results/Data_3D/AnisotropicTrap/TiltedDipoles45';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_079_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_079_theta_000_phi_000_N_50000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_080_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_080_theta_000_phi_000_N_50000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_081_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_081_theta_000_phi_000_N_50000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_082_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_082_theta_000_phi_000_N_60000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_083_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_083_theta_000_phi_000_N_60000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_084_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_084_theta_000_phi_000_N_70000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_085_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_085_theta_000_phi_000_N_70000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_086_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_086_theta_000_phi_000_N_80000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_087_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_087_theta_000_phi_000_N_100000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_088_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_089_theta_000_phi_000_N_105000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_089_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_084_theta_000_phi_000_N_65000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%
SaveDirectory = './Results/Data_3D/GradientDescent/aS_090_theta_000_phi_000_N_90000'; SaveDirectory = './Results/Data_3D/GradientDescent/aS_090_theta_000_phi_000_N_70000';
JobNumber = 0; JobNumber = 0;
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
%% %%