function [dataOUT,params] = average_maximum(dataIN,params) %AVERAGE_MAXIMUM normalizes data by max of region % % Usage: [dataOUT,params] = AVERAGE_MAXIMUM(dataIN,params), where dataIN % is a dataset loaded via the LOAD_MATLAB or LOAD_BRUKER function. % % The function will show the input data and offer two input fields, where % the left and right borders of the maximum's region should be set. % By pressing "Apply" normalization to maximum will be executed and the % graph changes to the normalized data. The borders of the maximum region % and the mean of maxima will also be appended to the params struct. % By pressing "Reset" the graph will return to show the original data. % Exit the function by pressing "Done". %% creating UI fig = figure; fig.Name = 'Average of Data in Maximum'; fig.Units = 'Normalized'; fig.Position = [.2 .2 .6 .6]; fig.Tag = 'Normalize'; %panel for plot plotpanel = uipanel(fig); plotpanel.Units = 'Normalized'; plotpanel.Position = [.01 .06 .98 .92]; %axes for plot ax = axes(plotpanel); %plot current data in figure with time as x axis plot(ax,dataIN) xlabel(ax,'Time Points'); ylabel(ax,'EPR Signal / A. U.'); axis(ax,'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 = @NormApplyButtonPushed; 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 = @NormResetButtonPushed; 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 = @NormDoneButtonPushed; %create input fields p1 = uicontrol(fig,'Style','edit'); p1.String = 'Left point of max region'; p1.Units = 'Normalized'; p1.Position = [.01 .01 .24 .05]; p1.HorizontalAlignment = 'left'; p1.FontUnits = 'Normalized'; p1.FontSize = 0.6; p1.Tag = 'MaxRegionLeft'; p2 = uicontrol(fig,'Style','edit'); p2.String = 'Right point of max region'; p2.Units = 'Normalized'; p2.Position = [.25 .01 .24 .05]; p2.HorizontalAlignment = 'left'; p2.FontUnits = 'Normalized'; p2.FontSize = 0.6; p2.Tag = 'MaxRegionRight'; uicontrol(p1); %passes focus to first input uiwait(fig) %% Callback functions function NormApplyButtonPushed(~,~) left_point = str2double(get(p1,'String')); right_point = str2double(get(p2,'String')); %take mean of each field line between specified min and max time maxima_mean = mean(dataIN([left_point right_point],:)); %normalize amplitude to 1 by dividing by max of means dataOUT = dataIN / max(maxima_mean); %plotting result with time as x axis plot(ax,dataOUT) xlabel(ax,'Time Points'); ylabel(ax,'EPR Signal / A. U.'); axis(ax,'tight'); %writing parameter params.region_of_max = [left_point right_point]; params.max_mean = maxima_mean / max(maxima_mean); end function NormResetButtonPushed(~,~) plot(ax,dataIN) xlabel(ax,'Time Points'); ylabel(ax,'EPR Signal / A. U.'); axis(ax,'tight'); end function NormDoneButtonPushed(~,~) close 'Average of Data in Maximum' end end