Latest additions - scripts to calculate average peak column density and unit cell density.
This commit is contained in:
parent
99d9413530
commit
d341782462
@ -0,0 +1,83 @@
|
|||||||
|
function [AveragePCD] = extractAveragePeakColumnDensity(folder_path, run_index, radius, minPeakHeight, SuppressPlotFlag)
|
||||||
|
set(0,'defaulttextInterpreter','latex')
|
||||||
|
set(groot, 'defaultAxesTickLabelInterpreter','latex'); set(groot, 'defaultLegendInterpreter','latex');
|
||||||
|
|
||||||
|
format long
|
||||||
|
|
||||||
|
% Load data
|
||||||
|
Data = load(sprintf(horzcat(folder_path, '/Run_%03i/psi_gs.mat'),run_index),'psi','Params','Transf','Observ');
|
||||||
|
|
||||||
|
Params = Data.Params;
|
||||||
|
Transf = Data.Transf;
|
||||||
|
Observ = Data.Observ;
|
||||||
|
|
||||||
|
if isgpuarray(Data.psi)
|
||||||
|
psi = gather(Data.psi);
|
||||||
|
else
|
||||||
|
psi = Data.psi;
|
||||||
|
end
|
||||||
|
if isgpuarray(Data.Observ.residual)
|
||||||
|
Observ.residual = gather(Data.Observ.residual);
|
||||||
|
else
|
||||||
|
Observ.residual = Data.Observ.residual;
|
||||||
|
end
|
||||||
|
|
||||||
|
% Axes scaling and coordinates in micrometers
|
||||||
|
x = Transf.x * Params.l0 * 1e6;
|
||||||
|
y = Transf.y * Params.l0 * 1e6;
|
||||||
|
z = Transf.z * Params.l0 * 1e6;
|
||||||
|
|
||||||
|
dz = z(2)-z(1);
|
||||||
|
|
||||||
|
% Compute probability density |psi|^2
|
||||||
|
n = abs(psi).^2;
|
||||||
|
nxy = squeeze(trapz(n*dz,3));
|
||||||
|
|
||||||
|
state = nxy';
|
||||||
|
peaks = extractPeaks(state, radius, minPeakHeight);
|
||||||
|
peakHeights = state(peaks);
|
||||||
|
AveragePCD = mean(peakHeights);
|
||||||
|
[row, col] = find(peaks);
|
||||||
|
|
||||||
|
if ~SuppressPlotFlag
|
||||||
|
figure(1);
|
||||||
|
clf
|
||||||
|
set(gcf,'Position', [100, 100, 900, 900])
|
||||||
|
plotxy = pcolor(x,y,state);
|
||||||
|
set(plotxy, 'EdgeColor', 'none');
|
||||||
|
hold on;
|
||||||
|
plot(x(col), y(row), 'w+', 'MarkerSize', 8, 'LineWidth', 1.5);
|
||||||
|
cbar1 = colorbar;
|
||||||
|
cbar1.Label.Interpreter = 'latex';
|
||||||
|
% cbar1.Ticks = []; % Disable the ticks
|
||||||
|
colormap(gca, Helper.Colormaps.plasma())
|
||||||
|
xlabel('$x$ ($\mu$m)', 'Interpreter', 'latex', 'FontSize', 16)
|
||||||
|
ylabel('$y$ ($\mu$m)', 'Interpreter', 'latex', 'FontSize', 16)
|
||||||
|
title(['<CD> = ' num2str(AveragePCD)], ...
|
||||||
|
'Interpreter', 'tex', 'FontSize', 16)
|
||||||
|
set(gca, 'FontSize', 16); % For tick labels only
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function [peaks_mask] = extractPeaks(image, radius, minPeakHeight)
|
||||||
|
peaks = imregionalmax(image);
|
||||||
|
peaks(image < minPeakHeight) = 0;
|
||||||
|
|
||||||
|
[row, col] = find(peaks); % row and col are the coordinates of the detected peaks
|
||||||
|
unique_peaks = true(size(row)); % Assume all peaks are unique initially
|
||||||
|
|
||||||
|
% Check distances between each peak and remove duplicates
|
||||||
|
for i = 1:length(row)
|
||||||
|
if unique_peaks(i) % If this peak hasn't been excluded
|
||||||
|
% Find the distance from this peak to all other peaks
|
||||||
|
dist = sqrt((row(i) - row).^2 + (col(i) - col).^2); % Euclidean distance
|
||||||
|
|
||||||
|
% Exclude any peak within the radius
|
||||||
|
unique_peaks(dist < radius & dist > 0) = false; % Exclude other peaks in radius
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
% Save the peaks
|
||||||
|
peaks_mask = false(size(image));
|
||||||
|
peaks_mask(sub2ind(size(image), row(unique_peaks), col(unique_peaks))) = true;
|
||||||
|
end
|
116
Dipolar-Gas-Simulator/+Scripts/extractAverageUnitCellDensity.m
Normal file
116
Dipolar-Gas-Simulator/+Scripts/extractAverageUnitCellDensity.m
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
function [UCD] = extractAverageUnitCellDensity(folder_path, run_index, radius, minPeakHeight, SuppressPlotFlag)
|
||||||
|
set(0,'defaulttextInterpreter','latex')
|
||||||
|
set(groot, 'defaultAxesTickLabelInterpreter','latex'); set(groot, 'defaultLegendInterpreter','latex');
|
||||||
|
|
||||||
|
format long
|
||||||
|
|
||||||
|
% Load data
|
||||||
|
Data = load(sprintf(horzcat(folder_path, '/Run_%03i/psi_gs.mat'),run_index),'psi','Params','Transf','Observ');
|
||||||
|
|
||||||
|
Params = Data.Params;
|
||||||
|
Transf = Data.Transf;
|
||||||
|
Observ = Data.Observ;
|
||||||
|
|
||||||
|
if isgpuarray(Data.psi)
|
||||||
|
psi = gather(Data.psi);
|
||||||
|
else
|
||||||
|
psi = Data.psi;
|
||||||
|
end
|
||||||
|
if isgpuarray(Data.Observ.residual)
|
||||||
|
Observ.residual = gather(Data.Observ.residual);
|
||||||
|
else
|
||||||
|
Observ.residual = Data.Observ.residual;
|
||||||
|
end
|
||||||
|
|
||||||
|
% Axes scaling and coordinates in micrometers
|
||||||
|
x = Transf.x * Params.l0 * 1e6;
|
||||||
|
y = Transf.y * Params.l0 * 1e6;
|
||||||
|
z = Transf.z * Params.l0 * 1e6;
|
||||||
|
|
||||||
|
dz = z(2)-z(1);
|
||||||
|
|
||||||
|
% Compute probability density |psi|^2
|
||||||
|
n = abs(psi).^2;
|
||||||
|
nxy = squeeze(trapz(n*dz,3));
|
||||||
|
|
||||||
|
state = nxy';
|
||||||
|
peaks = extractPeaks(state, radius, minPeakHeight);
|
||||||
|
peakHeights = state(peaks);
|
||||||
|
[row, col] = find(peaks);
|
||||||
|
[~, maxIdx] = max(peakHeights);
|
||||||
|
MaxPeakLocation = [row(maxIdx), col(maxIdx)];
|
||||||
|
|
||||||
|
% Voronoi diagram of peak positions
|
||||||
|
points = [col, row]; % Voronoi uses [x, y]
|
||||||
|
[V, C] = voronoin(points);
|
||||||
|
|
||||||
|
% Voronoi cell of the max peak
|
||||||
|
Vcell_indices = C{maxIdx};
|
||||||
|
|
||||||
|
% Plot the Voronoi cell
|
||||||
|
if all(Vcell_indices > 0) && all(Vcell_indices <= size(V, 1)) && ~any(isinf(V(Vcell_indices, 1)))
|
||||||
|
vx = interp1(1:numel(x), x, V(Vcell_indices,1), 'linear', 'extrap');
|
||||||
|
vy = interp1(1:numel(y), y, V(Vcell_indices,2), 'linear', 'extrap');
|
||||||
|
% Close the polygon by repeating the first vertex
|
||||||
|
vx(end+1) = vx(1);
|
||||||
|
vy(end+1) = vy(1);
|
||||||
|
% Compute area of the Voronoi cell polygon using the shoelace formula
|
||||||
|
AreaOfVoronoiCell = polyarea(vx, vy); % Area of Voronoi cell around max peak in um^2
|
||||||
|
else
|
||||||
|
warning('Voronoi cell for max peak is unbounded or invalid.');
|
||||||
|
end
|
||||||
|
|
||||||
|
% Create grid points mesh
|
||||||
|
[X, Y] = meshgrid(x, y); % Note: size(X) and size(Y) match size(state)
|
||||||
|
|
||||||
|
% Determine points inside Voronoi polygon
|
||||||
|
inCellMask = inpolygon(X, Y, vx, vy);
|
||||||
|
|
||||||
|
% Sum all state values inside the Voronoi cell polygon
|
||||||
|
NumberOfParticlesInVoronoiCell = sum(state(inCellMask));
|
||||||
|
|
||||||
|
UCD = NumberOfParticlesInVoronoiCell / AreaOfVoronoiCell;
|
||||||
|
|
||||||
|
if ~SuppressPlotFlag
|
||||||
|
figure(1);
|
||||||
|
clf
|
||||||
|
set(gcf,'Position', [100, 100, 900, 900])
|
||||||
|
plotxy = pcolor(x,y,state);
|
||||||
|
set(plotxy, 'EdgeColor', 'none');
|
||||||
|
hold on;
|
||||||
|
plot(x(MaxPeakLocation(2)), y(MaxPeakLocation(1)), 'w+', 'MarkerSize', 8, 'LineWidth', 1.5);
|
||||||
|
plot(vx, vy, 'w-', 'LineWidth', 1.5);
|
||||||
|
cbar1 = colorbar;
|
||||||
|
cbar1.Label.Interpreter = 'latex';
|
||||||
|
% cbar1.Ticks = []; % Disable the ticks
|
||||||
|
colormap(gca, Helper.Colormaps.plasma())
|
||||||
|
xlabel('$x$ ($\mu$m)', 'Interpreter', 'latex', 'FontSize', 16)
|
||||||
|
ylabel('$y$ ($\mu$m)', 'Interpreter', 'latex', 'FontSize', 16)
|
||||||
|
title(['UCD = ' num2str(UCD) ' \mum^{-2}'], ...
|
||||||
|
'Interpreter', 'tex', 'FontSize', 16)
|
||||||
|
set(gca, 'FontSize', 16); % For tick labels only
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function [peaks_mask] = extractPeaks(image, radius, minPeakHeight)
|
||||||
|
peaks = imregionalmax(image);
|
||||||
|
peaks(image < minPeakHeight) = 0;
|
||||||
|
|
||||||
|
[row, col] = find(peaks); % row and col are the coordinates of the detected peaks
|
||||||
|
unique_peaks = true(size(row)); % Assume all peaks are unique initially
|
||||||
|
|
||||||
|
% Check distances between each peak and remove duplicates
|
||||||
|
for i = 1:length(row)
|
||||||
|
if unique_peaks(i) % If this peak hasn't been excluded
|
||||||
|
% Find the distance from this peak to all other peaks
|
||||||
|
dist = sqrt((row(i) - row).^2 + (col(i) - col).^2); % Euclidean distance
|
||||||
|
|
||||||
|
% Exclude any peak within the radius
|
||||||
|
unique_peaks(dist < radius & dist > 0) = false; % Exclude other peaks in radius
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
% Save the peaks
|
||||||
|
peaks_mask = false(size(image));
|
||||||
|
peaks_mask(sub2ind(size(image), row(unique_peaks), col(unique_peaks))) = true;
|
||||||
|
end
|
@ -483,18 +483,21 @@ JobNumber = 2; % 82
|
|||||||
% JobNumber = 3; % 83
|
% JobNumber = 3; % 83
|
||||||
Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)
|
||||||
[contrast, period_X, period_Y] = Scripts.analyzeGSWavefunction_in_plane_trap(SaveDirectory, JobNumber);
|
[contrast, period_X, period_Y] = Scripts.analyzeGSWavefunction_in_plane_trap(SaveDirectory, JobNumber);
|
||||||
|
|
||||||
%% - Plot GS wavefunction
|
%% - Plot GS wavefunction
|
||||||
% SaveDirectory = './Results/Data_Full3D/CompleteLHY/AspectRatio2_8';
|
% SaveDirectory = './Results/Data_Full3D/CompleteLHY/AspectRatio2_8';
|
||||||
% SaveDirectory = './Results/Data_Full3D/CompleteLHY/AspectRatio3_7';
|
% SaveDirectory = './Results/Data_Full3D/CompleteLHY/AspectRatio3_7';
|
||||||
SaveDirectory = './Results/Data_Full3D/CompleteLHY/AspectRatio3_8';
|
SaveDirectory = './Results/Data_Full3D/CompleteLHY/AspectRatio3_8';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
% SaveDirectory = './Results/Data_Full3D/CompleteLHY/BeyondSSD_SSD';
|
% SaveDirectory = './Results/Data_Full3D/CompleteLHY/BeyondSSD_SSD';
|
||||||
% SaveDirectory = './Results/Data_Full3D/CompleteLHY/BeyondSSD_Labyrinth';
|
% SaveDirectory = './Results/Data_Full3D/CompleteLHY/BeyondSSD_Labyrinth';
|
||||||
SaveDirectory = './Results/Data_Full3D/CompleteLHY/BeyondSSD_Honeycomb';
|
SaveDirectory = './Results/Data_Full3D/CompleteLHY/BeyondSSD_Honeycomb';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%% - Plot GS wavefunction
|
%% - Plot GS wavefunction
|
||||||
SaveDirectory = './Results/Data_Full3D/ApproximateLHY/AspectRatio2_8';
|
SaveDirectory = './Results/Data_Full3D/ApproximateLHY/AspectRatio2_8';
|
||||||
% SaveDirectory = './Results/Data_Full3D/ApproximateLHY/AspectRatio3_7';
|
% SaveDirectory = './Results/Data_Full3D/ApproximateLHY/AspectRatio3_7';
|
||||||
@ -502,36 +505,44 @@ SaveDirectory = './Results/Data_Full3D/ApproximateLHY/AspectRatio2_8';
|
|||||||
% SaveDirectory = './Results/Data_Full3D/ApproximateLHY/AspectRatio3_9';
|
% SaveDirectory = './Results/Data_Full3D/ApproximateLHY/AspectRatio3_9';
|
||||||
JobNumber = 3;
|
JobNumber = 3;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
% SaveDirectory = './Results/Data_Full3D/ApproximateLHY/BeyondSSD_SSD';
|
% SaveDirectory = './Results/Data_Full3D/ApproximateLHY/BeyondSSD_SSD';
|
||||||
% SaveDirectory = './Results/Data_Full3D/ApproximateLHY/BeyondSSD_Labyrinth';
|
% SaveDirectory = './Results/Data_Full3D/ApproximateLHY/BeyondSSD_Labyrinth';
|
||||||
SaveDirectory = './Results/Data_Full3D/ApproximateLHY/BeyondSSD_Honeycomb';
|
SaveDirectory = './Results/Data_Full3D/ApproximateLHY/BeyondSSD_Honeycomb';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/TiltedDipoles0';
|
SaveDirectory = './Results/Data_Full3D/TiltedDipoles0';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/TiltedDipoles15';
|
SaveDirectory = './Results/Data_Full3D/TiltedDipoles15';
|
||||||
JobNumber = 2;
|
JobNumber = 2;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/TiltedDipoles30';
|
SaveDirectory = './Results/Data_Full3D/TiltedDipoles30';
|
||||||
JobNumber = 2;
|
JobNumber = 2;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/TiltedDipoles45';
|
SaveDirectory = './Results/Data_Full3D/TiltedDipoles45';
|
||||||
JobNumber = 2;
|
JobNumber = 2;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/RealTimeDynamics';
|
SaveDirectory = './Results/Data_Full3D/RealTimeDynamics';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.makeMovie(SaveDirectory, JobNumber)
|
Plotter.makeMovie(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles15';
|
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles15';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles30';
|
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles30';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
@ -540,33 +551,56 @@ Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
|||||||
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles35';
|
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles35';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles40';
|
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles40';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles45';
|
SaveDirectory = './Results/Data_Full3D/AnisotropicTrap/TiltedDipoles45';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/PhaseDiagram/GradientDescent/';
|
SaveDirectory = './Results/Data_Full3D/PhaseDiagram/GradientDescent/';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = './Results/Data_Full3D/PhaseDiagram/ImagTimePropagation/aS_8.312000e+01_theta_020_phi_000_N_100000';
|
SaveDirectory = './Results/Data_Full3D/PhaseDiagram/ImagTimePropagation/aS_8.312000e+01_theta_020_phi_000_N_100000';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%%
|
%%
|
||||||
SaveDirectory = 'D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta40/HighN/aS_9.250000e+01_theta_040_phi_000_N_916667';
|
SaveDirectory = 'D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta0/HighN/aS_9.562000e+01_theta_000_phi_000_N_712500';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber)
|
||||||
|
|
||||||
%% Identify and count droplets
|
%% Identify and count droplets
|
||||||
Radius = 2; % The radius within which peaks will be considered duplicates
|
Radius = 2; % The radius within which peaks will be considered duplicates
|
||||||
PeakThreshold = 6E3;
|
PeakThreshold = 3E3;
|
||||||
SaveDirectory = 'D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta0/HighN/aS_8.729000e+01_theta_000_phi_000_N_2550000';
|
SaveDirectory = 'D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta0/HighN/aS_9.562000e+01_theta_000_phi_000_N_712500';
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
SuppressPlotFlag = false;
|
SuppressPlotFlag = false;
|
||||||
DropletNumber = Scripts.identifyAndCountDroplets(SaveDirectory, JobNumber, Radius, PeakThreshold, SuppressPlotFlag);
|
DropletNumber = Scripts.identifyAndCountDroplets(SaveDirectory, JobNumber, Radius, PeakThreshold, SuppressPlotFlag);
|
||||||
|
|
||||||
|
%% Extract average peak column density
|
||||||
|
Radius = 2; % The radius within which peaks will be considered duplicates
|
||||||
|
PeakThreshold = 3E3;
|
||||||
|
SaveDirectory = 'D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta0/HighN/aS_9.562000e+01_theta_000_phi_000_N_712500';
|
||||||
|
JobNumber = 0;
|
||||||
|
SuppressPlotFlag = false;
|
||||||
|
AveragePCD = Scripts.extractAveragePeakColumnDensity(SaveDirectory, JobNumber, Radius, PeakThreshold, SuppressPlotFlag);
|
||||||
|
|
||||||
|
%% Extract average unit cell density
|
||||||
|
Radius = 2; % The radius within which peaks will be considered duplicates
|
||||||
|
PeakThreshold = 3E3;
|
||||||
|
SaveDirectory = 'D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta0/HighN/aS_9.562000e+01_theta_000_phi_000_N_712500';
|
||||||
|
JobNumber = 0;
|
||||||
|
SuppressPlotFlag = false;
|
||||||
|
UCD = Scripts.extractAverageUnitCellDensity(SaveDirectory, JobNumber, Radius, PeakThreshold, SuppressPlotFlag);
|
||||||
|
|
||||||
%% Plot number of droplets
|
%% Plot number of droplets
|
||||||
% Parameters
|
% Parameters
|
||||||
Radius = 2;
|
Radius = 2;
|
||||||
@ -632,15 +666,31 @@ legend(legendEntries, 'Interpreter', 'tex', 'FontSize', 12, 'Location', 'bestout
|
|||||||
grid on;
|
grid on;
|
||||||
hold off;
|
hold off;
|
||||||
|
|
||||||
%% Plot TF radii of unmodulated states
|
%% Plot average peak column density
|
||||||
% Parameters
|
% Parameters
|
||||||
|
Radius = 2;
|
||||||
|
PeakThreshold = 400;
|
||||||
JobNumber = 0;
|
JobNumber = 0;
|
||||||
TitleString = "[ \omega_x, \omega_y, \omega_z ] = 2 \pi \times [ 50, 20, 150 ] Hz; \theta = 40^\circ";
|
TitleString = "[ \omega_x, \omega_y, \omega_z ] = 2 \pi \times [ 50, 20, 150 ] Hz; \theta = 0^\circ";
|
||||||
SuppressPlotFlag = true;
|
SuppressPlotFlag = true;
|
||||||
|
|
||||||
SCATTERING_LENGTH_RANGE = [97.71];
|
SCATTERING_LENGTH_RANGE = [95.62];
|
||||||
|
|
||||||
NUM_ATOMS_LIST = [50000 54545 59091 63636 68182 72727 77273 81818 86364 90909 95455 100000 304167 508333 712500 916667 1120833 1325000 1529167 1733333 1937500 2141667 2345833 2550000 2754167 2958333 3162500 3366667 3570833 3775000 3979167 4183333 4387500 4591667 4795833 5000000];
|
NUM_ATOMS_LIST = [50000 54545 59091 63636 68182 72727 77273 81818 86364 90909 95455 100000 304167 508333 712500 916667 1120833 1325000 ...
|
||||||
|
1529167 1733333 1937500 2141667 2345833 2550000 2754167 2958333 3162500 3366667 3570833 3775000 3979167 4183333 4387500 ...
|
||||||
|
4591667 4795833 5000000];
|
||||||
|
|
||||||
|
% Prepare figure
|
||||||
|
figure(1);
|
||||||
|
clf;
|
||||||
|
set(gcf,'Position', [100, 100, 1000, 700]);
|
||||||
|
hold on;
|
||||||
|
|
||||||
|
% Color order for better visibility
|
||||||
|
colors = lines(length(SCATTERING_LENGTH_RANGE));
|
||||||
|
|
||||||
|
% Store legend labels
|
||||||
|
legendEntries = cell(1, length(SCATTERING_LENGTH_RANGE));
|
||||||
|
|
||||||
% Loop over scattering lengths
|
% Loop over scattering lengths
|
||||||
for j = 1:length(SCATTERING_LENGTH_RANGE)
|
for j = 1:length(SCATTERING_LENGTH_RANGE)
|
||||||
@ -650,7 +700,57 @@ for j = 1:length(SCATTERING_LENGTH_RANGE)
|
|||||||
aS_string = sprintf('%.6e', aS);
|
aS_string = sprintf('%.6e', aS);
|
||||||
|
|
||||||
% Construct base directory for this aS
|
% Construct base directory for this aS
|
||||||
baseDir = ['D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta40/aS_' ...
|
baseDir = ['D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta0/HighN/aS_' ...
|
||||||
|
aS_string '_theta_000_phi_000_N_'];
|
||||||
|
|
||||||
|
% Preallocate results for this curve
|
||||||
|
AverageCDs = zeros(size(NUM_ATOMS_LIST));
|
||||||
|
|
||||||
|
% Loop over all atom numbers
|
||||||
|
for i = 1:length(NUM_ATOMS_LIST)
|
||||||
|
N = NUM_ATOMS_LIST(i);
|
||||||
|
SaveDirectory = [baseDir num2str(N)];
|
||||||
|
|
||||||
|
% Call your droplet counting function
|
||||||
|
AverageCDs(i) = Scripts.extractAveragePeakColumnDensity(SaveDirectory, JobNumber, Radius, PeakThreshold, SuppressPlotFlag);
|
||||||
|
end
|
||||||
|
|
||||||
|
% Plot curve
|
||||||
|
plot(NUM_ATOMS_LIST, AverageCDs, 'o-', ...
|
||||||
|
'Color', colors(j, :), 'LineWidth', 1.5);
|
||||||
|
|
||||||
|
% Store legend entry
|
||||||
|
legendEntries{j} = ['a_s = ' num2str(aS) 'a_o'];
|
||||||
|
end
|
||||||
|
|
||||||
|
% Finalize plot
|
||||||
|
xlabel('Number of Atoms', 'Interpreter', 'tex', 'FontSize', 16);
|
||||||
|
ylabel('Average Peak Column Density', 'Interpreter', 'tex', 'FontSize', 16);
|
||||||
|
title(TitleString, 'Interpreter', 'tex', 'FontSize', 18);
|
||||||
|
legend(legendEntries, 'Interpreter', 'tex', 'FontSize', 12, 'Location', 'bestoutside');
|
||||||
|
grid on;
|
||||||
|
hold off;
|
||||||
|
|
||||||
|
%% Plot TF radii of unmodulated states
|
||||||
|
% Parameters
|
||||||
|
JobNumber = 0;
|
||||||
|
TitleString = "[ \omega_x, \omega_y, \omega_z ] = 2 \pi \times [ 50, 20, 150 ] Hz; \theta = 40^\circ";
|
||||||
|
SuppressPlotFlag = true;
|
||||||
|
|
||||||
|
SCATTERING_LENGTH_RANGE = [97.71];
|
||||||
|
|
||||||
|
NUM_ATOMS_LIST = [50000 54545 59091 63636 68182 72727 77273 81818 86364 90909 95455];
|
||||||
|
% NUM_ATOMS_LIST = [100000 304167 508333 712500 916667 1120833 1325000 1529167 1733333 1937500 2141667 2345833 2550000 2754167 2958333 3162500 3366667 3570833 3775000 3979167 4183333 4387500 4591667 4795833 5000000];
|
||||||
|
|
||||||
|
% Loop over scattering lengths
|
||||||
|
for j = 1:length(SCATTERING_LENGTH_RANGE)
|
||||||
|
aS = SCATTERING_LENGTH_RANGE(j);
|
||||||
|
|
||||||
|
% Format scattering length in scientific notation with 6 decimal places
|
||||||
|
aS_string = sprintf('%.6e', aS);
|
||||||
|
|
||||||
|
% Construct base directory for this aS
|
||||||
|
baseDir = ['D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta40/LowN/aS_' ...
|
||||||
aS_string '_theta_040_phi_000_N_'];
|
aS_string '_theta_040_phi_000_N_'];
|
||||||
|
|
||||||
% Preallocate results for this curve: rows = N, cols = [Rx, Ry]
|
% Preallocate results for this curve: rows = N, cols = [Rx, Ry]
|
||||||
@ -711,6 +811,7 @@ axis square
|
|||||||
grid on;
|
grid on;
|
||||||
|
|
||||||
sgtitle(TitleString, 'Interpreter', 'tex', 'FontSize', 18);
|
sgtitle(TitleString, 'Interpreter', 'tex', 'FontSize', 18);
|
||||||
|
|
||||||
%% Overlay curves
|
%% Overlay curves
|
||||||
|
|
||||||
% File list and associated theta labels
|
% File list and associated theta labels
|
||||||
@ -799,7 +900,7 @@ SCATTERING_LENGTH_RANGE ="[75.00 76.09 77.18 78.27 79.36 80.00 81.04 82.08 83.12
|
|||||||
NUM_ATOMS_LIST ="[50000 54545 59091 63636 68182 72727 77273 81818 86364 90909 95455]";
|
NUM_ATOMS_LIST ="[50000 54545 59091 63636 68182 72727 77273 81818 86364 90909 95455]";
|
||||||
|
|
||||||
%% Explore the states
|
%% Explore the states
|
||||||
SCATTERING_LENGTH_RANGE = [97.71];
|
SCATTERING_LENGTH_RANGE = [95.62];
|
||||||
NUM_ATOMS_LIST = [100000 304167 508333 712500 916667 1120833 1325000 1529167 1733333 1937500 2141667 2345833 2550000 2754167 2958333 3162500 3366667 3570833 3775000 3979167 4183333 4387500 4591667 4795833 5000000];
|
NUM_ATOMS_LIST = [100000 304167 508333 712500 916667 1120833 1325000 1529167 1733333 1937500 2141667 2345833 2550000 2754167 2958333 3162500 3366667 3570833 3775000 3979167 4183333 4387500 4591667 4795833 5000000];
|
||||||
% NUM_ATOMS_LIST = [4183333 4387500 4591667 4795833 5000000];
|
% NUM_ATOMS_LIST = [4183333 4387500 4591667 4795833 5000000];
|
||||||
|
|
||||||
@ -810,7 +911,7 @@ for i = 1:length(SCATTERING_LENGTH_RANGE)
|
|||||||
for j = 1:length(NUM_ATOMS_LIST)
|
for j = 1:length(NUM_ATOMS_LIST)
|
||||||
N = NUM_ATOMS_LIST(j);
|
N = NUM_ATOMS_LIST(j);
|
||||||
|
|
||||||
SaveDirectory = sprintf('D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta40/HighN/aS_%.6e_theta_040_phi_000_N_%d', aS, N);
|
SaveDirectory = sprintf('D:/Results - Numerics/Data_Full3D/PhaseDiagram/ImagTimePropagation/Theta0/HighN/aS_%.6e_theta_000_phi_000_N_%d', aS, N);
|
||||||
fprintf('Processing JobNumber %d: %s\n', JobNumber, SaveDirectory);
|
fprintf('Processing JobNumber %d: %s\n', JobNumber, SaveDirectory);
|
||||||
|
|
||||||
% Call the plotting function
|
% Call the plotting function
|
||||||
@ -828,12 +929,7 @@ end
|
|||||||
%% Missing files
|
%% Missing files
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'aS_8.208000e+01_theta_000_phi_000_N_90909'
|
''
|
||||||
'aS_8.729000e+01_theta_000_phi_000_N_77273'
|
|
||||||
'aS_8.729000e+01_theta_000_phi_000_N_95455'
|
|
||||||
'aS_8.729000e+01_theta_000_phi_000_N_3775000'
|
|
||||||
'aS_9.250000e+01_theta_000_phi_000_N_5000000'
|
|
||||||
'aS_9.771000e+01_theta_020_phi_000_N_3775000'
|
|
||||||
};
|
};
|
||||||
|
|
||||||
% Preallocate arrays
|
% Preallocate arrays
|
||||||
|
Loading…
Reference in New Issue
Block a user