Unverified Commit 4a89e021 authored by Christian Arthur's avatar Christian Arthur Committed by GitHub
Browse files

Zoom Probe Plot (#31)



* Updated DesignNotes.ppt

* Update 1
Added Zoom and Pan functionality to axesSDG (probe display) on the MainGUI with additional buttons in the GUI

* Update 1.1
Minor Zoom adjustments

* Update 1.1.1
Minor Merge Mistake; Minor Zoom adjustments

* Update 1.1.2
Minor additions

* Update 1.1.3
Minor Adjustments

* -- Clean up MainGUI.fig controls in "Data Plot Window" and "Probe Plot Window" panels.

* Update 1.1.4
Cleared the y-axis label on AxesSDG

Co-authored-by: default avatarJay Dubb <jayd1860@gmail.com>
parent ab784002
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -53,7 +53,13 @@ iSrcDet = maingui.axesSDG.iSrcDet;
color       = maingui.axesSDG.linecolor;

SD          = maingui.dataTree.currElem.GetSDG();

if isfield(maingui.axesSDG, 'xlim')
    xbox        = maingui.axesSDG.xlim;
    ybox        = maingui.axesSDG.ylim;
else
    bbox        = maingui.dataTree.currElem.GetSdgBbox();
end

% Set axes handle properties and parameters 
if ~ishandles(hAxes)
@@ -66,7 +72,11 @@ if ishandles(maingui.axesSDG.handles.ch)
    delete(maingui.axesSDG.handles.ch)
    delete(findobj(hAxes, 'Type', 'line'))  % Prevents previously drawn lines from piling up
end
if isfield(maingui.axesSDG, 'xlim')
    axis(hAxes, [xbox(1), xbox(2), ybox(1), ybox(2)]);
else
    axis(hAxes, [bbox(1), bbox(2), bbox(3), bbox(4)]);
end
%set(hAxes, 'xticklabel','', 'yticklabel','', 'xgrid','off, ygrid','off')
set(hAxes, 'xticklabel','')
bttndownfcn = get(hAxes,'ButtonDownFcn');
@@ -173,13 +183,13 @@ if isempty(maingui.axesSDG.handles.SD)
    for idx1 = 1:nSrcs
        if ~isempty(find(MeasList(:,1)==idx1)) %#ok<*EFIND>
            hSD(idx1) = text( SD.SrcPos(idx1,1), SD.SrcPos(idx1,2), sprintf('%d', idx1), 'fontsize',fs, 'fontweight','bold', 'color','r' );
            set(hSD(idx1), 'ButtonDownFcn',get(hAxes,'ButtonDownFcn'), 'horizontalalignment','center', 'edgecolor',edgecol);
            set(hSD(idx1), 'ButtonDownFcn',get(hAxes,'ButtonDownFcn'), 'horizontalalignment','center', 'edgecolor',edgecol, 'Clipping', 'on');
        end
    end
    for idx2 = 1:nDets
        if ~isempty(find(MeasList(:,2)==idx2))
            hSD(idx2+idx1) = text( SD.DetPos(idx2,1), SD.DetPos(idx2,2), sprintf('%d', idx2), 'fontsize',fs, 'fontweight','bold', 'color','b' );
            set(hSD(idx2+idx1), 'ButtonDownFcn',get(hAxes,'ButtonDownFcn'), 'horizontalalignment','center', 'edgecolor',edgecol);
            set(hSD(idx2+idx1), 'ButtonDownFcn',get(hAxes,'ButtonDownFcn'), 'horizontalalignment','center', 'edgecolor',edgecol, 'Clipping', 'on');
        end
    end
    maingui.axesSDG.handles.SD = hSD;
+7.35 KiB (91.3 KiB)

File changed.

No diff preview for this file type.

+76 −7
Original line number Diff line number Diff line
@@ -210,6 +210,10 @@ InitGuiControls(handles);
DisplayGroupTree(handles);
Display(handles, hObject);

% Store Original X and Y Lims for AxesSDG
maingui.axesSDG.xlim = maingui.axesSDG.handles.axes.XLim;
maingui.axesSDG.ylim = maingui.axesSDG.handles.axes.YLim;

maingui.handles = handles;
maingui.handles.pValuesFig = [];

@@ -969,10 +973,10 @@ for iBlk = iDataBlks
            DisplayDataRawOrOD(t, d, dStd, iWl, iChBlk, chVis, nTrials, condition, linecolors);
            if isa(dataTree.currElem, 'RunClass')
                sRate = 1/mean(diff(dataTree.currElem.acquired.data.time));
                xlabel('Time (s)', 'FontSize', 17);
                xlabel('Time (s)', 'FontSize', 11);
%                 xlabel(['Time (s) | f_s = ' num2str(sRate) ' Hz'], 'FontSize', 17);
            else
                xlabel('Time (s)', 'FontSize', 17);
                xlabel('Time (s)', 'FontSize', 11);
            end
            ylabel('');
        elseif datatype == maingui.buttonVals.CONC || datatype == maingui.buttonVals.CONC_HRF
@@ -983,23 +987,23 @@ for iBlk = iDataBlks
            DisplayDataConc(t, d, dStd, hbType, iChBlk, chVis, nTrials, condition, linecolors);
            if isa(dataTree.currElem, 'RunClass')
                sRate = 1/mean(diff(dataTree.currElem.acquired.data.time));
                xlabel('Time (s)', 'FontSize', 17);
                xlabel('Time (s)', 'FontSize', 11);
%                 xlabel(['Time(s) | f_s = ' num2str(sRate) ' Hz'], 'FontSize', 17);
            else
                xlabel('Time (s)', 'FontSize', 17);
                xlabel('Time (s)', 'FontSize', 11);
            end
            procName = {procElem.procStream.fcalls.name};
            idx = contains(procName, 'hmrR_OD2Conc_new');
            idx = contains(procName, 'hmrR_OD2Conc');
            if ~isempty(find(idx,1))
                ppf = procElem.procStream.fcalls(idx).paramIn.value;
                if ppf(condition) == 1 && ~isempty(dataTree.currElem.acquired.metaDataTags.tags.LengthUnit)
                    unit = dataTree.currElem.acquired.metaDataTags.tags.LengthUnit;
                    ylabel(['\muM ' unit], 'FontSize', 17);
                else
                ylabel('\muM', 'FontSize', 17);
                ylabel('\muM', 'FontSize', 11);
                end
            else
                ylabel('\muM', 'FontSize', 17);
                ylabel('\muM', 'FontSize', 11);
            end
        end
    end
@@ -1782,3 +1786,68 @@ fname = uiputfile('*.m', 'Export Processing Stream to Script (.m)', 'processing_
if fname ~= 0
    exportProcessScript(fname, maingui.dataTree.currElem.procStream);
end

% --------------------------------------------------------------------
function panProbeCallback(hObject, eventdata, handles)
global maingui;
axes(handles.axesSDG)
xrange = xlim();
% xm = mean(xrange);
xd = xrange(2)-xrange(1);
yrange = ylim();
% ym = mean(yrange);
yd = yrange(2)-yrange(1);
%Ratio can be adjusted
if get(hObject,'string')=='<'
    xlim( [xrange(1)-xd/5 xrange(2)-xd/5] );
    maingui.axesSDG.xlim = [xrange(1)-xd/5 xrange(2)-xd/5];
elseif get(hObject,'string')=='>'
    xlim( [xrange(1)+xd/5 xrange(2)+xd/5] );
    maingui.axesSDG.xlim = [xrange(1)+xd/5 xrange(2)+xd/5];
elseif get(hObject,'string')=='/\'
    ylim( [yrange(1)+yd/5 yrange(2)+yd/5] );
    maingui.axesSDG.ylim = [yrange(1)+yd/5 yrange(2)+yd/5];
elseif get(hObject,'string')=='\/'
    ylim( [yrange(1)-yd/5 yrange(2)-yd/5] );
    maingui.axesSDG.ylim = [yrange(1)-yd/5 yrange(2)-yd/5];
end


% --------------------------------------------------------------------
function zoomInCallback(hObject, eventdata, handles)
global maingui;
axes(handles.axesSDG)
axes(handles.axesSDG)
xrange = xlim();
xd = xrange(2)-xrange(1);
yrange = ylim();
yd = yrange(2)-yrange(1);
xlim( [xrange(1)+xd/10 xrange(2)-xd/10] );
ylim( [yrange(1)+yd/10 yrange(2)-yd/10] );
% Store X and Y Lims for AxesSDG
maingui.axesSDG.xlim = [xrange(1)+xd/10 xrange(2)-xd/10];
maingui.axesSDG.ylim = [yrange(1)+yd/10 yrange(2)-yd/10];

% --------------------------------------------------------------------
function zoomOutCallback(hObject, eventdata, handles)
global maingui;
axes(handles.axesSDG)
axes(handles.axesSDG)
xrange = xlim();
xd = xrange(2)-xrange(1);
yrange = ylim();
yd = yrange(2)-yrange(1);
xlim( [xrange(1)-xd/10 xrange(2)+xd/10] );
ylim( [yrange(1)-yd/10 yrange(2)+yd/10] );
maingui.axesSDG.xlim = [xrange(1)-xd/10 xrange(2)+xd/10];
maingui.axesSDG.ylim = [yrange(1)-yd/10 yrange(2)+yd/10];

% --------------------------------------------------------------------
function resetProbeViewCallback(hObject, eventdata, handles)
global maingui;
axes(handles.axesSDG)
bbox = maingui.dataTree.currElem.GetSdgBbox();
xlim( bbox(1:2) );
ylim( bbox(3:4) );
maingui.axesSDG.xlim = bbox(1:2);
maingui.axesSDG.ylim = bbox(3:4);