diff --git a/Dipolar-Gas-Simulator/+Scripts/analyzeGSWavefunction_multipleruns.m b/Dipolar-Gas-Simulator/+Scripts/analyzeGSWavefunction_multipleruns.m index cd0ff88..5eae21e 100644 --- a/Dipolar-Gas-Simulator/+Scripts/analyzeGSWavefunction_multipleruns.m +++ b/Dipolar-Gas-Simulator/+Scripts/analyzeGSWavefunction_multipleruns.m @@ -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 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 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'); + % 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 contrast_array = zeros(1, numberofruns); periodX_array = zeros(1, numberofruns); periodY_array = zeros(1, numberofruns); - % Set up video writer - videoObj = VideoWriter(output_video_name, 'MPEG-4'); % Create a video file object - videoObj.FrameRate = 1; % Set the frame rate (adjust as needed) - videoObj.Quality = 100; % Maximum quality (for compression) - open(videoObj); % Open the video file for writing + % 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.FrameRate = 1; % Set the frame rate (adjust as needed) + videoObj.Quality = 100; % Maximum quality (for compression) + open(videoObj); % Open the video file for writing + end % Loop through all the runs and process each folder for run_index = 1:numberofruns % 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 contrast_array(run_index) = contrast; @@ -33,16 +41,28 @@ function [contrast_array, periodX_array, periodY_array] = analyzeGSWavefunction_ periodY_array(run_index) = periodY; % Capture the current figure (output of analyzeGSWavefunction_multipleruns) - frame = getframe(gcf); % Get current figure as a frame - writeVideo(videoObj, frame); % Write the frame to the video file - + frame = gcf; % Get current figure as a frame + + 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 close(gcf); end - % Close the video writer after all frames have been added - close(videoObj); - fprintf('Video saved as %s\n', output_video_name); - + % Close the video writer if the user chose 'video' + if strcmp(save_option, 'video') + close(videoObj); + 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 -end +end \ No newline at end of file diff --git a/Dipolar-Gas-Simulator/+Scripts/run_locally.m b/Dipolar-Gas-Simulator/+Scripts/run_locally.m index b592a79..78b2370 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_locally.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_locally.m @@ -276,19 +276,23 @@ Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber) %% - Analysis SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz500'; 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 SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz750'; 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 SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz1000'; 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 SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz2000'; NumberOfJobs = 16; -[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); \ No newline at end of file +SaveOption = 'images'; +[contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs, SaveOption); \ No newline at end of file diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m index 9ace958..18385dc 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m @@ -30,7 +30,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 1; +OptionsStruct.JobNumber = 0; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500'; @@ -72,7 +72,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 2; +OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500'; @@ -114,7 +114,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 1; +OptionsStruct.JobNumber = 0; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750'; @@ -156,7 +156,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 2; +OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750'; @@ -198,7 +198,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 1; +OptionsStruct.JobNumber = 0; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000'; @@ -240,7 +240,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 2; +OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000'; @@ -282,7 +282,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 1; +OptionsStruct.JobNumber = 0; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000'; @@ -324,7 +324,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 2; +OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000'; diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_fixed_system_size.m.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_fixed_system_size.m.m index 2642e25..da57fe7 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_fixed_system_size.m.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_fixed_system_size.m.m @@ -30,7 +30,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 1; +OptionsStruct.JobNumber = 0; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; @@ -72,7 +72,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 2; +OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; @@ -114,7 +114,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 3; +OptionsStruct.JobNumber = 2; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; @@ -156,7 +156,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 4; +OptionsStruct.JobNumber = 3; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; @@ -198,7 +198,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 5; +OptionsStruct.JobNumber = 4; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; @@ -240,7 +240,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 6; +OptionsStruct.JobNumber = 5; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; @@ -282,7 +282,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 7; +OptionsStruct.JobNumber = 6; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500'; diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_in_plane_trap.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_in_plane_trap.m index e6584c2..01781eb 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_in_plane_trap.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_in_plane_trap.m @@ -1,6 +1,5 @@ %% Tilting of the dipoles % Atom Number = 1250 ppum -% System size = [5 * l_rot, 5 * l_rot] %% v_z = 500, theta = 0: a_s = 76.41 @@ -32,7 +31,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 1; +OptionsStruct.JobNumber = 0; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/Hz500'; @@ -76,7 +75,7 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 2; +OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/Hz500'; diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_transition_angle.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_transition_angle.m index a508385..086a46a 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_transition_angle.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_transition_angle.m @@ -36,7 +36,7 @@ for i = 1:num_iterations OptionsStruct.WidthCutoff = 5e-3; 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.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz500'; @@ -84,7 +84,7 @@ for i = 1:num_iterations OptionsStruct.WidthCutoff = 5e-3; 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.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz750'; @@ -132,7 +132,7 @@ for i = 1:num_iterations OptionsStruct.WidthCutoff = 5e-3; 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.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz1000'; @@ -180,7 +180,7 @@ for i = 1:num_iterations OptionsStruct.WidthCutoff = 5e-3; 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.SaveData = true; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz2000';