Minor mods to analysis routines.

This commit is contained in:
Karthik 2025-02-04 20:02:17 +01:00
parent cdde4deb99
commit 05e80ff2e5
6 changed files with 65 additions and 42 deletions

View File

@ -1,4 +1,4 @@
function [contrast_array, periodX_array, periodY_array] = analyzeGSWavefunction_multipleruns(folder_base_path, numberofruns) function [contrast_array, periodX_array, periodY_array] = analyzeGSWavefunction_multipleruns(folder_base_path, numberofruns, save_option)
% Extract the last two folder names from folder_base_path % Extract the last two folder names from folder_base_path
folder_parts = strsplit(folder_base_path, '/'); folder_parts = strsplit(folder_base_path, '/');
@ -8,24 +8,32 @@ function [contrast_array, periodX_array, periodY_array] = analyzeGSWavefunction_
video_name_base = folder_parts{end}; % In case there's only one folder in the path video_name_base = folder_parts{end}; % In case there's only one folder in the path
end end
% Create the output video name with .mp4 extension % Create the output video name with .mp4 extension (for video option)
output_video_name = strcat(video_name_base, '_wavefunction_analysis.mp4'); output_video_name = strcat(video_name_base, '_wavefunction_analysis.mp4');
% Create the output folder name (for image saving option)
output_folder_name = strcat(video_name_base, '_wavefunction_analysis_images');
if strcmp(save_option, 'images') && ~exist(output_folder_name, 'dir')
mkdir(output_folder_name); % Create the folder if it doesn't exist
end
% Initialize arrays to store contrast, periodX, and periodY for each run % Initialize arrays to store contrast, periodX, and periodY for each run
contrast_array = zeros(1, numberofruns); contrast_array = zeros(1, numberofruns);
periodX_array = zeros(1, numberofruns); periodX_array = zeros(1, numberofruns);
periodY_array = zeros(1, numberofruns); periodY_array = zeros(1, numberofruns);
% Set up video writer % Set up video writer if the user chooses 'video'
if strcmp(save_option, 'video')
videoObj = VideoWriter(output_video_name, 'MPEG-4'); % Create a video file object videoObj = VideoWriter(output_video_name, 'MPEG-4'); % Create a video file object
videoObj.FrameRate = 1; % Set the frame rate (adjust as needed) videoObj.FrameRate = 1; % Set the frame rate (adjust as needed)
videoObj.Quality = 100; % Maximum quality (for compression) videoObj.Quality = 100; % Maximum quality (for compression)
open(videoObj); % Open the video file for writing open(videoObj); % Open the video file for writing
end
% Loop through all the runs and process each folder % Loop through all the runs and process each folder
for run_index = 1:numberofruns for run_index = 1:numberofruns
% Call the function that processes the wavefunction data % Call the function that processes the wavefunction data
[contrast, periodX, periodY] = Scripts.analyzeGSWavefunction(folder_base_path, run_index); [contrast, periodX, periodY] = Scripts.analyzeGSWavefunction(folder_base_path, run_index-1);
% Store the results in the arrays % Store the results in the arrays
contrast_array(run_index) = contrast; contrast_array(run_index) = contrast;
@ -33,16 +41,28 @@ function [contrast_array, periodX_array, periodY_array] = analyzeGSWavefunction_
periodY_array(run_index) = periodY; periodY_array(run_index) = periodY;
% Capture the current figure (output of analyzeGSWavefunction_multipleruns) % Capture the current figure (output of analyzeGSWavefunction_multipleruns)
frame = getframe(gcf); % Get current figure as a frame frame = gcf; % Get current figure as a frame
writeVideo(videoObj, frame); % Write the frame to the video file
if strcmp(save_option, 'video')
% Write the frame to the video file
writeVideo(videoObj, getframe(frame));
elseif strcmp(save_option, 'images')
% Save the figure as an image
image_filename = fullfile(output_folder_name, sprintf('wavefunction_run_%d.png', run_index-1));
saveas(frame, image_filename); % Save the image as a PNG file (adjust file type if needed)
end
% Optionally close the figure if you don't need it % Optionally close the figure if you don't need it
close(gcf); close(gcf);
end end
% Close the video writer after all frames have been added % Close the video writer if the user chose 'video'
if strcmp(save_option, 'video')
close(videoObj); close(videoObj);
fprintf('Video saved as %s\n', output_video_name); fprintf('Video saved as %s\n', output_video_name);
elseif strcmp(save_option, 'images')
fprintf('Images saved in folder %s\n', output_folder_name);
end
% Return the arrays % Return the arrays
end end

View File

@ -276,19 +276,23 @@ Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)
%% - Analysis %% - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz500'; SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz500';
NumberOfJobs = 16; NumberOfJobs = 16;
[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); SaveOption = 'images';
[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs, SaveOption);
%% - Analysis %% - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz750'; SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz750';
NumberOfJobs = 16; NumberOfJobs = 16;
[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); SaveOption = 'images';
[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs, SaveOption);
%% - Analysis %% - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz1000'; SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz1000';
NumberOfJobs = 16; NumberOfJobs = 16;
[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); SaveOption = 'images';
[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs, SaveOption);
%% - Analysis %% - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz2000'; SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz2000';
NumberOfJobs = 16; NumberOfJobs = 16;
[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); SaveOption = 'images';
[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs, SaveOption);

View File

@ -30,7 +30,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 0;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500';
@ -72,7 +72,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500';
@ -114,7 +114,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 0;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750';
@ -156,7 +156,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750';
@ -198,7 +198,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 0;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000';
@ -240,7 +240,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000';
@ -282,7 +282,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 0;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000';
@ -324,7 +324,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000';

View File

@ -30,7 +30,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 0;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
@ -72,7 +72,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
@ -114,7 +114,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 3; OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
@ -156,7 +156,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 4; OptionsStruct.JobNumber = 3;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
@ -198,7 +198,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 5; OptionsStruct.JobNumber = 4;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
@ -240,7 +240,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 6; OptionsStruct.JobNumber = 5;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
@ -282,7 +282,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 7; OptionsStruct.JobNumber = 6;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';

View File

@ -1,6 +1,5 @@
%% Tilting of the dipoles %% Tilting of the dipoles
% Atom Number = 1250 ppum % Atom Number = 1250 ppum
% System size = [5 * l_rot, 5 * l_rot]
%% v_z = 500, theta = 0: a_s = 76.41 %% v_z = 500, theta = 0: a_s = 76.41
@ -32,7 +31,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 0;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/Hz500';
@ -76,7 +75,7 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/Hz500';

View File

@ -36,7 +36,7 @@ for i = 1:num_iterations
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = i; % Assign a unique JobNumber per iteration OptionsStruct.JobNumber = i-1; % Assign a unique JobNumber per iteration
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz500'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz500';
@ -84,7 +84,7 @@ for i = 1:num_iterations
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = i; % Assign a unique JobNumber per iteration OptionsStruct.JobNumber = i-1; % Assign a unique JobNumber per iteration
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz750'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz750';
@ -132,7 +132,7 @@ for i = 1:num_iterations
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = i; % Assign a unique JobNumber per iteration OptionsStruct.JobNumber = i-1; % Assign a unique JobNumber per iteration
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz1000'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz1000';
@ -180,7 +180,7 @@ for i = 1:num_iterations
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = i; % Assign a unique JobNumber per iteration OptionsStruct.JobNumber = i-1; % Assign a unique JobNumber per iteration
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz2000'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz2000';