diff --git a/correct_magnetic_basline.m b/correct_magnetic_basline.m index 300201f..880073f 100644 --- a/correct_magnetic_basline.m +++ b/correct_magnetic_basline.m @@ -1,7 +1,101 @@ -function [outputArg1,outputArg2] = correct_magnetic_basline(inputArg1,inputArg2) -%CORRECT_MAGNETIC_BASLINE Summary of this function goes here -% Detailed explanation goes here -outputArg1 = inputArg1; -outputArg2 = inputArg2; +function [dataOUT] = correct_magnetic_basline(dataIN) +%CORRECT_MAGNETIC_BASLINE UI for basline correction along field axis +% +% Usage: [dataOUT] = CORRECT_MAGNETIC_BASLINE(dataIN), where dataIN is a +% dataset loaded via the LOAD_MATLAB or LOAD_BRUKER function. +% +% The function will show the input data and offer an input field, where +% the number of field basline points should be set. By pressing "Apply" the +% correction will be executed and the graph changes to the corrected data. +% By pressing "Reset" the graph will return to show the original data. +% Exit the function by pressing "Done". + +%% creating UI +fig = figure; +fig.Name = 'Correct Magnetic Baseline'; +fig.Units = 'Normalized'; +fig.Position = [.2 .2 .6 .6]; +fig.Tag = 'CorrMagBase'; + +%panel for plot +plotpanel = uipanel(fig); +plotpanel.Units = 'Normalized'; +plotpanel.Position = [.01 .06 .98 .92]; +%axes for plot +ax = axes(plotpanel); +ax.XLabel.String = 'Magnetic field'; +ax.YLabel.String = 'Intensity'; +%plot current data in figure with field as x axis +dataIN_transp = dataIN.'; +plot(ax,dataIN_transp) +axis tight + +%create push buttons +a = uicontrol(fig,'Style','pushbutton'); +a.String = 'Apply'; +a.Units = 'Normalized'; +a.Position = [.52 .01 .15 .05]; +a.FontUnits = 'Normalized'; +a.FontSize = 0.6; +a.Tag = 'Apply'; +a.Callback = @FieldApplyButtonPushed; + +r = uicontrol(fig,'Style','pushbutton'); +r.String = 'Reset'; +r.Units = 'Normalized'; +r.Position = [.68 .01 .15 .05]; +r.FontUnits = 'Normalized'; +r.FontSize = 0.6; +r.Tag = 'Reset'; +r.Callback = @FieldResetButtonPushed; + +d = uicontrol(fig,'Style','pushbutton'); +d.String = 'Done'; +d.Units = 'Normalized'; +d.Position = [.84 .01 .15 .05]; +d.FontUnits = 'Normalized'; +d.FontSize = 0.6; +d.Tag = 'Done'; +d.Callback = @FieldDoneButtonPushed; + +%create input field +p = uicontrol(fig,'Style','edit'); +p.Units = 'Normalized'; +p.Position = [.01 .01 .5 .05]; +p.HorizontalAlignment = 'left'; +p.FontUnits = 'Normalized'; +p.FontSize = 0.6; +p.Tag = 'FieldPoints'; + +uicontrol(p); %passes focus to input +uiwait(fig) + +%% Callback functions + function FieldApplyButtonPushed(src,event) + field_baseline = str2double(get(p,'String')); + %field baseline CORRECTING + data_size = size(dataIN); + dataOUT = zeros(data_size); + baseline_mean_right = mean(dataIN(:,1:field_baseline),2); + baseline_mean_left = mean(dataIN(:,end-field_baseline:end),2); + baseline_mean = (baseline_mean_right + baseline_mean_left) / 2; + for n = 1:data_size(1) + dataOUT(n,:) = dataIN(n,:) - baseline_mean(n); + end + %plotting result with field as x axis + dataOUT_transp = dataOUT.'; + plot(ax,dataOUT_transp) + axis tight + end + + function FieldResetButtonPushed(src,event) + plot(ax,dataIN_transp) + axis tight + end + + function FieldDoneButtonPushed(src,event) + close 'Correct Magnetic Baseline' + end + end