no longer needed
This commit is contained in:
		
							parent
							
								
									65f5a71e58
								
							
						
					
					
						commit
						05e1ede24f
					
				
							
								
								
									
										217
									
								
								EPR_script.m
									
									
									
									
									
								
							
							
						
						
									
										217
									
								
								EPR_script.m
									
									
									
									
									
								
							| @ -1,217 +0,0 @@ | |||||||
| % high-spin S=1 simulation |  | ||||||
| % Inputs requested in command line at certain points |  | ||||||
| 
 |  | ||||||
| clear variables |  | ||||||
| close all |  | ||||||
| 
 |  | ||||||
|  % window positions (currently optimised for dual WQHD with main on right) |  | ||||||
|  % also uncomment all figure(gcf) when working with single monitor |  | ||||||
| % Give desired position of figure window as number of pixels [pos_x pos_y size_x size_y]: |  | ||||||
| position = [-1250,50,1200,800]; |  | ||||||
| % Give desired position of figure(2) window (will have two stacked subplots) |  | ||||||
| % as number of pixels [pos_x pos_y size_x size_y]:  |  | ||||||
| position2 = [-2000,50,700,800]; |  | ||||||
| % Give desired position of figure(3) window (will contain EPR spectrum and  |  | ||||||
| % simulation) as number of pixels [pos_x pos_y size_x size_y]:  |  | ||||||
| position3 = [-1250,50,1200,600]; |  | ||||||
| 
 |  | ||||||
| % specify dir for printing figures |  | ||||||
| figdir = './'; |  | ||||||
| % specifiy excel-file for saving parameters |  | ||||||
| table_path = 'example_results.xlsx'; |  | ||||||
| 
 |  | ||||||
| %% loading Data |  | ||||||
| path = input('Path to dataset: ','s'); |  | ||||||
| load(path) |  | ||||||
| 
 |  | ||||||
| whos % what variables have been loaded |  | ||||||
| params % what information is contained in the structure called 'params' |  | ||||||
| 
 |  | ||||||
| % get name of dataset |  | ||||||
| dataname = string(extractBefore(extractAfter(path,asManyOfPattern(wildcardPattern + "/")),'.')); |  | ||||||
| % using Parallel Computing toolbox to speed up (check with "gpuDevice" if you can use this) |  | ||||||
| gpuData = gpuArray(Data); |  | ||||||
| 
 |  | ||||||
| %% Baseline Correcting |  | ||||||
| % plot the raw data & check the number of points before the signal (pre-trigger) |  | ||||||
| plot(gpuData) |  | ||||||
| title('raw data') |  | ||||||
| set(gcf,'Position',position) |  | ||||||
| 
 |  | ||||||
| % substract the pre-trigger |  | ||||||
| pre_trigger = input('Number of pre-trigger points: '); |  | ||||||
| signal_baseline_time = bsxfun(@minus, gpuData, mean(gpuData(1:pre_trigger,:))); |  | ||||||
| plot(signal_baseline_time) % plot the corrected data set |  | ||||||
| title('time corrected data') |  | ||||||
| set(gcf,'Position',position) |  | ||||||
| % figure(gcf) % bring figure to foreground |  | ||||||
| 
 |  | ||||||
| ready = input('Proceed?'); |  | ||||||
| 
 |  | ||||||
|  % plot the transpose and check the number of points to the lower and higher fields of the signal |  | ||||||
| plot(signal_baseline_time.') |  | ||||||
| title('transposed time corrected data') |  | ||||||
| set(gcf,'Position',position) |  | ||||||
| % figure(gcf) % bring figure to foreground |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  % BASELINE correction |  | ||||||
| baseline_points = input('Number of baseline points (use smaller value from left and right): '); |  | ||||||
| l1 = mean(signal_baseline_time(:,1:baseline_points),2); % calculate the mean on the left along the time axis |  | ||||||
| l2 = mean(signal_baseline_time(:,end-baseline_points:end),2); %calculate the mean on the right along the time axis |  | ||||||
| baseline_time = (l1 +l2)/2; %take the average |  | ||||||
| 
 |  | ||||||
| signal_baseline_time_field = bsxfun(@minus, signal_baseline_time, baseline_time); % subtract the background in the time-domain  |  | ||||||
| 
 |  | ||||||
|  % plot the corrected data set |  | ||||||
| plot(signal_baseline_time_field.') |  | ||||||
| title('transposed fully corrected data') |  | ||||||
| set(gcf,'Position',position) |  | ||||||
| % figure(gcf) % bring figure to foreground |  | ||||||
| 
 |  | ||||||
| clear ready |  | ||||||
| ready = input('Proceed?'); |  | ||||||
| 
 |  | ||||||
|  % plot the transpose to find the region of maximum signal. Use this below |  | ||||||
| plot(signal_baseline_time_field) |  | ||||||
| title('fully corrected data') |  | ||||||
| set(gcf,'Position',position) |  | ||||||
| % figure(gcf) % bring figure to foreground |  | ||||||
| 
 |  | ||||||
|  % contour plot: The index gives the number of contours |  | ||||||
| % contourf(signal_baseline_field_time,6) |  | ||||||
| 
 |  | ||||||
|  % NORMALISING |  | ||||||
| max_region = input('Region of the maximum signal as [x1:x2]: '); |  | ||||||
| % take the mean over the maxium region. You can decide how wide it is |  | ||||||
| signal_baseline_time_field_mean = (mean(signal_baseline_time_field(max_region,:))); |  | ||||||
| % normalise the amplitude to 1 |  | ||||||
| signal_baseline_time_field_mean_norm = signal_baseline_time_field_mean/max(signal_baseline_time_field_mean); |  | ||||||
| 
 |  | ||||||
| %% Creating figure with two subplots |  | ||||||
| figure(2) |  | ||||||
| set(gcf,'PaperUnits','centimeters') |  | ||||||
| set(gcf,'Position',position2) |  | ||||||
| set(gcf,'InvertHardcopy','off','Color',[1 1 1]) |  | ||||||
| set(0,'DefaultAxesFontSize', 12,'DefaultAxesLineWidth',2) |  | ||||||
| 
 |  | ||||||
| cont_or_surf = input('Should lower subplot be contour(1) or surface(2) plot? (1/2): '); |  | ||||||
| subplot(2,1,2) |  | ||||||
| if cont_or_surf == 1 |  | ||||||
|     % contour plot: add the time and field axes |  | ||||||
|     contourf(0.1*params.Field_Vector, TimeBase*1e6 ,signal_baseline_time_field,'LineColor','none') |  | ||||||
| elseif cont_or_surf == 2 |  | ||||||
|     % surface plot: add the time and field axes |  | ||||||
|     surf(0.1*params.Field_Vector, TimeBase*1e6 ,signal_baseline_time_field) |  | ||||||
|     colormap default |  | ||||||
|     shading interp |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| xlabel('Magnetic Field / mT') |  | ||||||
| ylabel('Time / \mus') |  | ||||||
| 
 |  | ||||||
| subplot(2,1,1) |  | ||||||
|  % plot the spectrum |  | ||||||
| plot(0.1*params.Field_Vector,signal_baseline_time_field_mean_norm,'LineWidth',2) |  | ||||||
| 
 |  | ||||||
| xlabel('Magnetic Field / mT') |  | ||||||
| axis('tight') |  | ||||||
| box off |  | ||||||
| 
 |  | ||||||
| %% Simulation section |  | ||||||
| 
 |  | ||||||
| Exp.mwFreq = params.mwFreq; % GHz |  | ||||||
| Exp.nPoints = length(params.Field_Vector); |  | ||||||
| Exp.CenterSweep = 0.1*[params.Field_Center params.Field_Sweep]; % mT (converted from Gauss) |  | ||||||
| Exp.Harmonic = 0; % zeroth harmonic |  | ||||||
| 
 |  | ||||||
| init_proceed = 'n'; |  | ||||||
| while init_proceed == 'n' |  | ||||||
|     % populations of the triplet sub-levels |  | ||||||
|     % these need to be varied manually to get the right shape |  | ||||||
|     Exp.Temperature = input('Input population of triplett sublevels as [T_x T_y T_z]: '); |  | ||||||
|     % initial simulation settings |  | ||||||
|     Sys.S = 1; % Total Spin |  | ||||||
|     Sys.g = input('g value: '); % needs to be optimised |  | ||||||
|     Sys.D = input('D and E value as [D E]: '); % mT, The D and E values need to be optimised |  | ||||||
|     Sys.lw = input('Isotropic line broadening at FWHM as [Gaussian Lorentzian]: '); % mT, linewidth needs to be optimised |  | ||||||
|      |  | ||||||
|     [bfield,spec] = pepper(Sys,Exp); % perform a simulation with the parameters above |  | ||||||
|     spec_norm = spec/max(spec); % normalize the simulation |  | ||||||
|      |  | ||||||
|     figure(3) |  | ||||||
|     set (gcf,'PaperUnits','centimeters') |  | ||||||
|     set (gcf,'Position',position3) % set the position, size and shape of the plot |  | ||||||
|     set (gcf,'InvertHardcopy','off','Color',[1 1 1]) |  | ||||||
|     set(0,'DefaultAxesFontSize', 16,'DefaultAxesLineWidth',1.5) |  | ||||||
|     plot(0.1*params.Field_Vector,signal_baseline_time_field_mean_norm,'r', bfield,spec_norm,'b','LineWidth',1); |  | ||||||
|     axis('tight') |  | ||||||
|     legend('experimental','simulation') |  | ||||||
|     legend boxoff |  | ||||||
|     xlabel('Magnetic Field / mT') |  | ||||||
|     ylabel('EPR signal / A. U.') |  | ||||||
|     set(gca,'Box','Off', 'XMinorTick','On', 'YMinorTick','On', 'TickDir','Out', 'YColor','k') |  | ||||||
|     pause(2); |  | ||||||
|     init_proceed = input('Spectrum shape manually fitted? [y/n]: ','s'); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
|  % variation settings for simulation |  | ||||||
| Vary.g = 0.01;  |  | ||||||
| Vary.D = [10 10]; |  | ||||||
| Vary.lw = [1 0]; |  | ||||||
|  % further setup |  | ||||||
| FitOpt.Method = 'simplex fcn'; |  | ||||||
| FitOpt.Scaling = 'lsq'; |  | ||||||
| 
 |  | ||||||
|  % When you have got a good fit by eye, use esfit to optimise |  | ||||||
| simu_proceed = 'n'; |  | ||||||
| while simu_proceed == 'n' |  | ||||||
|     % fitting routine |  | ||||||
|     [BestSys,BestSpc] = esfit('pepper',signal_baseline_time_field_mean_norm,Sys,Vary,Exp,[],FitOpt); |  | ||||||
|     % plot best fit |  | ||||||
|     figure(3) |  | ||||||
|     plot(0.1*params.Field_Vector,signal_baseline_time_field_mean_norm,'r',... |  | ||||||
|          0.1*params.Field_Vector,BestSpc,'b','LineWidth',1); |  | ||||||
|     axis('tight') |  | ||||||
|     legend('experimental','simulation') |  | ||||||
|     legend boxoff |  | ||||||
|     xlabel('Magnetic Field / mT') |  | ||||||
|     ylabel('EPR signal / A. U.') |  | ||||||
|     set(gca,'Box','Off', 'XMinorTick','On', 'YMinorTick','On', 'TickDir','Out', 'YColor','k') |  | ||||||
|      |  | ||||||
|     simu_proceed = input('Did the simulation converge? [y/n]: ','s'); |  | ||||||
|     if simu_proceed == 'n' |  | ||||||
|         simu_val = input('Do you want to repeat the simulation with new best values? [y/n]: ','s'); |  | ||||||
|         if simu_val == 'y' |  | ||||||
|             Sys.g = BestSys.g; |  | ||||||
|             Sys.D = BestSys.D; |  | ||||||
|             Sys.lw = BestSys.lw; |  | ||||||
|         end |  | ||||||
|     end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| %% printing figures |  | ||||||
| printing = input('Do you want to print figure(3)? [y/n]: ','s'); |  | ||||||
| if printing == 'y' |  | ||||||
|     figure(3) |  | ||||||
|     set(gcf,'Units','Inches'); |  | ||||||
|     pos = get(gcf,'Position'); |  | ||||||
|     set(gcf,'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[pos(3), pos(4)]); |  | ||||||
|     print(gcf,strcat(figdir,dataname),'-dpdf','-r0'); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| %% saving parameters |  | ||||||
|  % concatenate data to existing table |  | ||||||
| table_old = readtable(table_path); |  | ||||||
| table_old.Properties.VariableNames = {'filename', 'date', 'pre-trigger', ... |  | ||||||
|     'baseline_points', 'max_area_left', 'max_area_right', 'T_x', 'T_y', 'T_z', ... |  | ||||||
|     'sim. g-value', 'sim_D', 'sim_E', 'sim_lw_gauss', 'sim_lw_lorentz'}; |  | ||||||
| % new data as table |  | ||||||
| table_new = table(dataname, string(datestr(clock)), pre_trigger, baseline_points, ... |  | ||||||
|     max_region(1), max_region(end), Exp.Temperature(1), Exp.Temperature(2), Exp.Temperature(3), ... |  | ||||||
|     BestSys.g, BestSys.D(1), BestSys.D(2), BestSys.lw(1), BestSys.lw(2), ... |  | ||||||
|     'VariableNames', {'filename', 'date', 'pre-trigger', 'baseline_points', ... |  | ||||||
|     'max_area_left', 'max_area_right', 'T_x', 'T_y', 'T_z', 'sim. g-value', ... |  | ||||||
|     'sim_D', 'sim_E', 'sim_lw_gauss', 'sim_lw_lorentz'}); |  | ||||||
| table_conc = [table_old;table_new]; |  | ||||||
| writetable(table_conc,table_path) |  | ||||||
| @ -1,7 +0,0 @@ | |||||||
| function [outputArg1,outputArg2] = double_2D_3D_plot(inputArg1,inputArg2) |  | ||||||
| %DOUBLE_2D_3D_PLOT Summary of this function goes here |  | ||||||
| %   Detailed explanation goes here |  | ||||||
| outputArg1 = inputArg1; |  | ||||||
| outputArg2 = inputArg2; |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user