Code covered by the BSD License  

Highlights from
spec file reader

image thumbnail
from spec file reader by Zhang Jiang
Monitor, read, save scans from SPEC files and calculate true reflectivity.

trueref(varargin)
function trueref(varargin)
% TRUEREF GUI to calculate true reflectivity by subtracting longitudinal
%   diffuse scattering from measured reflectivity.
%
% Copyright 2004 Zhang Jiang
% $Revision: 3.2 $  $Date: 2004/11/24 11:09:30 $

hFigTrueref = findall(0,'Tag','trueref_Fig');
if isempty(hFigTrueref)
    initFigure;
else
    figure(hFigTrueref);
end

%================================================================
% --- initialize figure
%================================================================
function initFigure
% --------------------------------
% --- main figure handle
% --------------------------------
posScreen   = get(0,'screenSize');
hFigWidth   = 680;
hFigHeight  = 531;
hFigPos     = [...
    posScreen(3)/2-hFigWidth/2+5,...
    posScreen(4)/2-hFigHeight/2-30,...
    hFigWidth,hFigHeight];
hFigTrueref = figure(...
    'BackingStore','on',...
    'Units','pixels',...
    'DockControls','off',...
    'Resize','on',...
    'PaperOrient','portrait',...
    'PaperPositionMode','auto',...
    'IntegerHandle','off',...
    'NumberTitle','off',...
    'MenuBar','none',...
    'Toolbar','none',...
    'Name','True Reflectivity',...
    'Position',hFigPos,...
    'HandleVisibility','callback',...
    'Tag','trueref_Fig',...
    'CloseRequestFcn',@trueref_CloseRequestFcn,...
    'UserData',[]);

%-------------------------------
% --- layout axes
%-------------------------------
hAxes = axes(...
    'Parent',hFigTrueref,...
    'Box','on',...
    'XGrid','on',...
    'YGrid','on',...
    'Tag','trueref_Axes',...
    'YScale','log');

%-------------------------------
% layout menu file
%-------------------------------
hMenuFile = uimenu(hFigTrueref,...
    'Label','&File',...
    'Position',1,...
    'HandleVisibility','callback');
hMenuFileImportData = uimenu(hMenuFile,...
    'Label','&Import Data...',...
    'HandleVisibility','callback',...
    'Accelerator','I',...
    'callback',@truerefimport);
hMenuFileClose = uimenu(hMenuFile,...
    'Label','&Close',...
    'HandleVisibility','callback',...
    'Accelerator','W',...
    'callback',@trueref_CloseRequestFcn);
hMenuFileSave = uimenu(hMenuFile,...
    'Label','&Save',...
    'Separator','on',...
    'HandleVisibility','callback',...
    'Accelerator','S',...
    'callback','curvesave');
hMenuFileSave2Workspace = uimenu(hMenuFile,...
    'Label','Save to &Workspace',...
    'HandleVisibility','callback',...
    'callback','save2workspace');
hMenuFilePreferences = uimenu(hMenuFile,...
    'Label','Pre&ferences...',...
    'Position',5,...
    'Separator','on',...
    'HandleVisibility','callback',...
    'callback','preferences');
hMenuFilePageSetup = uimenu(hMenuFile,...
    'Label','Pa&ge Setup...',...
    'Separator','on',...
    'HandleVisibility','callback',...
    'callback','pagesetupdlg');
hMenuFilePrintPreview = uimenu(hMenuFile,...
    'Label','Print Pre&view...',...
    'Position',7,...
    'HandleVisibility','callback',...
    'callback','printpreview');
hMenuFilePrint = uimenu(hMenuFile,...
    'Label','&Print...',...
    'HandleVisibility','callback',...
    'Accelerator','P',...
    'callback','printdlg');
hMenuFilePrintToFigure = uimenu(hMenuFile,...
    'Label','Print to Figure',...
    'HandleVisibility','callback',...
    'callback','print2figure');

% --------------------------------
% --- layout menu tools
% --------------------------------
hMenuTools = uimenu(hFigTrueref,...
    'Label','&Tools',...
    'HandleVisibility','callback');
hMenuToolsReplot = uimenu(hMenuTools,...
    'Label','&Replot',...
    'HandleVisibility','callback');
hMenuToolsReplotAll = uimenu(hMenuToolsReplot,...
    'Label','All',...
    'HandleVisibility','callback',...
    'Accelerator','A',...
    'Tag','trueref_ReplotAll',...
    'callback',@trueref_ReplotFcn);
hMenuToolsReplotRef = uimenu(hMenuToolsReplot,...
    'Label','Reflectivity',...
    'HandleVisibility','callback',...
    'Tag','trueref_ReplotRef',...
    'callback',@trueref_ReplotFcn);
hMenuToolsReplotPos = uimenu(hMenuToolsReplot,...
    'Label','Positive Longitudinal Diffuse',...
    'HandleVisibility','callback',...
    'Tag','trueref_ReplotPos',...
    'callback',@trueref_ReplotFcn);
hMenuToolsReplotNeg = uimenu(hMenuToolsReplot,...
    'Label','Negative Longitudinal Diffuse',...
    'HandleVisibility','callback',...
    'Tag','trueref_ReplotNeg',...
    'callback',@trueref_ReplotFcn);
hMenuToolsPlotStyle = uimenu(hMenuTools,...
    'Label','&Plot Style',...
    'HandleVisibility','callback');
hMenuToolsPlotStyleLinear = uimenu(hMenuToolsPlotStyle,...
    'Label','Linear',...
    'HandleVisibility','callback',...
    'Checked','off',...
    'Tag','trueref_MenuToolsPlotStyleLinear',...
    'Callback',@trueref_MenuToolsPlotStyleFcn);
hMenuToolsPlotStyleLogx = uimenu(hMenuToolsPlotStyle,...
    'Label','Logx',...
    'HandleVisibility','callback',...
    'Checked','off',...
    'Tag','trueref_MenuToolsPlotStyleLogx',...
    'Callback',@trueref_MenuToolsPlotStyleFcn);
hMenuToolsPlotStyleLogy = uimenu(hMenuToolsPlotStyle,...
    'Label','Logy',...
    'HandleVisibility','callback',...
    'Checked','on',...
    'Tag','trueref_MenuToolsPlotStyleLogy',...
    'Callback',@trueref_MenuToolsPlotStyleFcn);
hMenuToolsPlotStyleLogxy = uimenu(hMenuToolsPlotStyle,...
    'Label','Logxy',...
    'HandleVisibility','callback',...
    'Checked','off',...
    'Tag','trueref_MenuToolsPlotStyleLogxy',...
    'Callback',@trueref_MenuToolsPlotStyleFcn);
hMenuToolsInvertX = uimenu(hMenuTools,...
    'Label','&Invert X Axis',...
    'Separator','on',...
    'Callback','invertxaxis',...
    'HandleVisibility','callback');
hMenuToolsScanMerge = uimenu(hMenuTools,...
    'Label','&Merge Scans',...
    'HandleVisibility','callback',...
    'Accelerator','M',...
    'Callback','truerefmerge');
hMenuToolsTrue = uimenu(hMenuTools,...
    'Separator','on',...
    'Label','&True Reflectivity',...
    'HandleVisibility','callback',...
    'Accelerator','T',...
    'Callback','truerefcal');
hMenuToolsFootprint = uimenu(hMenuTools,...
    'Label','Footprint Correction (Reflectivity in Qz space only)...',...
    'Separator','on',...
    'Callback','footprint',...
    'HandleVisibility','callback',...
    'Tag','specr_MenuToolsFootprint');
hMenuToolsNormalize = uimenu(hMenuTools,...
    'Label','&Normalize...',...
    'HandleVisibility','callback',...
    'Accelerator','N',...
    'Callback','curvenormalize');
hMenuToolsReset = uimenu(hMenuTools,...
    'Label','Re&set Figure',...
    'Separator','on',...
    'HandleVisibility','callback',...
    'Accelerator','R',...
    'Callback','resettrueref');

% --------------------------------
% --- layout menu help
% --------------------------------
hMenuHelp = uimenu(hFigTrueref,...
    'Label','&Help',...
    'HandleVisibility','callback',...
    'Tag','trueref_MenuHelp');    
hMenuHelpTrueref = uimenu(hMenuHelp,...
    'Label','&True Reflectivity Help',...
    'HandleVisibility','callback',...
    'Callback',@trueref_Help);
hMenuHelpAbout = uimenu(hMenuHelp,...
    'Label','&About True Reflectivity',...
    'HandleVisibility','callback',...
    'Separator','on',...
    'Callback',@trueref_AboutTrueref);

% --------------------------------
% --- toolbar handles
% --------------------------------
icons = load('icons.mat');
hToolbar = uitoolbar(hFigTrueref,...
    'Tag','trueref_Toolbar');
hToolbarOpen = uipushtool(hToolbar,...
    'CData',icons.opendoc,...
    'TooltipString','Import Data',...
    'ClickedCallback',@truerefimport,...
    'Tag','toolbarOpen');
hToolbarSave = uipushtool(hToolbar,...
    'CData',icons.savedoc,...
    'TooltipString','Save Data',...
    'ClickedCallback','curvesave',...
    'Tag','toolbarSave');
hToolbarPrint = uipushtool(hToolbar,...
    'CData',icons.printdoc,...
    'TooltipString','Print Figure',...
    'ClickedCallback','printdlg',...
    'Tag','toolbarPrint');
hToolbarEditPlot = uitoggletool(hToolbar,...
    'CData',icons.iconpointer,...
    'TooltipString','Edit Plot',...
    'ClickedCallback',@toolbarEditPlotFcn,...
    'Separator','on',...
    'Tag','toolbarEditPlot');
hToolbarZoom = uitoggletool(hToolbar,...
    'CData',icons.iconzoomin,...
    'Separator','on',...
    'TooltipString','Zoom',...
    'State','off',...
    'ClickedCallback',@toolbarZoomFcn,...
    'Tag','toolbarZoom');
hToolbarPan = uitoggletool(hToolbar,...
    'CData',icons.iconpan,...
    'TooltipString','Pan',...
    'ClickedCallback',@toolbarPanFcn,...
    'Tag','toolbarPan');
hToolbarDataCursor = uitoggletool(hToolbar,...
    'CData',icons.icondatatip,...
    'TooltipString','Data Cursor',...
    'ClickedCallback',@toolbarDataCursorFcn,...
    'Separator','on',...
    'Tag','toolbarDataCursor');

hToolbarLegend = uitoggletool(hToolbar,...
    'CData',icons.iconlegend,...
    'TooltipString','Legend On/Off',...
    'ClickedCallback',@toolbarLegendFcn,...
    'Separator','on',...
    'Tag','toolbarLegend');
hToolbarGrid = uitoggletool(hToolbar,...
    'CData',icons.icongrid,...
    'TooltipString','Grid On/Off',...
    'ClickedCallback','grid',...
    'State','on',...
    'Tag','toolbarGrid');
hToolbarPlottoolsOff = uipushtool(hToolbar,...
    'CData',icons.iconplottoolsoff,...
    'TooltipString','Hide Plot Tools',...
    'ClickedCallback',@toolbarPlottoolsOffFcn,...
    'Separator','on',...
    'Enable','off',...
    'Tag','toolbarPlottoolsOff');
hToolbarPlottoolsOff = uipushtool(hToolbar,...
    'CData',icons.iconplottoolson,...
    'TooltipString','Show Plot Tools',...
    'ClickedCallback',@toolbarPlottoolsOnFcn,...
    'Enable','on',...
    'Tag','toolbarPlottoolsOn');
hToolbarInvert = uipushtool(hToolbar,...
    'CData',icons.iconinvertx,...
    'Separator','on',...    
    'TooltipString','Invert X Axis',...
    'ClickedCallback','invertxaxis',...
    'Tag','toolbarInvert');
hToolbarMerge = uipushtool(hToolbar,...
    'CData',icons.iconmerge,...
    'TooltipString','Merge Scans',...
    'ClickedCallback','truerefmerge',...
    'Tag','toolbarMerge');
hToolbarFootprint = uipushtool(hToolbar,...
    'CData',icons.iconfootprint,...
    'TooltipString','Footprint Correction',...
    'ClickedCallback','footprint',...
    'Tag','toolbarFootprint');
hToolbarSettings = uipushtool(hToolbar,...
    'CData',icons.iconsettings,...
    'Separator','on',...    
    'TooltipString','Settings',...
    'ClickedCallback','specrsettings',...
    'Tag','toolbarSettings');


%================================================================
% close figure request function
%================================================================
function trueref_CloseRequestFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hAxes = findall(hFigTrueref,'Tag','trueref_Axes');
hLine = findall(hAxes,'Type','line');
if isempty(hLine)
    resettrueref;
    delete(hFigTrueref);
    return;
end
quitButton = questdlg('Quit without saving data ?',...
    'Confirm Close','Quit','Cancel','Cancel');
switch quitButton
    case 'Cancel'
        % take no action
        return;
    case 'Quit'
        % Prepare to close GUI application window
        resettrueref;
        delete(hFigTrueref);
end


%================================================================
% --- menu tools replot callback function
%================================================================
function trueref_ReplotFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hAxes = findall(hFigTrueref,'Tag','trueref_Axes');
hMenuToolsReplotAll = findall(hFigTrueref,'Tag','trueref_ReplotAll');
hMenuToolsReplotRef = findall(hFigTrueref,'Tag','trueref_ReplotRef');
hMenuToolsReplotPos = findall(hFigTrueref,'Tag','trueref_ReplotPos');
hMenuToolsReplotNeg = findall(hFigTrueref,'Tag','trueref_ReplotNeg');
switch hObject
    case hMenuToolsReplotAll
        truerefplot('All');
    case hMenuToolsReplotRef
        truerefplot('Ref');
    case hMenuToolsReplotPos
        truerefplot('Pos');
    case hMenuToolsReplotNeg
        truerefplot('Neg');
end
return;


%================================================================
% --- menu tools plotstyle callback function
%================================================================
function trueref_MenuToolsPlotStyleFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hAxes = findall(hFigTrueref,'Tag','trueref_Axes');
hMenuToolsPlotStyleLinear = findall(hFigTrueref,'Tag','trueref_MenuToolsPlotStyleLinear');
hMenuToolsPlotStyleLogx = findall(hFigTrueref,'Tag','trueref_MenuToolsPlotStyleLogx');
hMenuToolsPlotStyleLogy = findall(hFigTrueref,'Tag','trueref_MenuToolsPlotStyleLogy');
hMenuToolsPlotStyleLogxy = findall(hFigTrueref,'Tag','trueref_MenuToolsPlotStyleLogxy');
set(hMenuToolsPlotStyleLinear,'checked','off');
set(hMenuToolsPlotStyleLogx,'checked','off');
set(hMenuToolsPlotStyleLogy,'checked','off');
set(hMenuToolsPlotStyleLogxy,'checked','off');
set(hObject,'checked','on');
switch hObject
    case hMenuToolsPlotStyleLinear
        set(hAxes,'XScale','linear','YScale','linear');
    case hMenuToolsPlotStyleLogx
        set(hAxes,'XScale','log','YScale','linear');
    case hMenuToolsPlotStyleLogy
        set(hAxes,'XScale','linear','YScale','log');
    case hMenuToolsPlotStyleLogxy
        set(hAxes,'XScale','log','YScale','log');
end


%================================================================
% --- toolbar plottools off callback function
%================================================================
function toolbarPlottoolsOffFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hToolbarPlottoolsOff = findall(hFigTrueref,'Tag','toolbarPlottoolsOff');
hToolbarPlottoolsOn  = findall(hFigTrueref,'Tag','toolbarPlottoolsOn');
hToolbarEditPlot = findall(hFigTrueref,'Tag','toolbarEditPlot');
hToolbarZoom = findall(hFigTrueref,'Tag','toolbarZoom');
hToolbarPan = findall(hFigTrueref,'Tag','toolbarPan');
hToolbarDataCursor = findall(hFigTrueref,'Tag','toolbarDataCursor');
if strcmp(get(hToolbarPlottoolsOff,'Enable'),'off')
    return;
else
    zoom off;
    pan off;
    datacursormode off;
    set(hToolbarZoom,'State','off');
    set(hToolbarPan,'State','off');
    set(hToolbarDataCursor,'State','off');
    set(hToolbarPlottoolsOff,'Enable','off');
    set(hToolbarPlottoolsOn,'Enable','on');
    plottools off;
end


%================================================================
% --- toobar plottools on callback function
%================================================================
function toolbarPlottoolsOnFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hToolbarPlottoolsOff = findall(hFigTrueref,'Tag','toolbarPlottoolsOff');
hToolbarPlottoolsOn  = findall(hFigTrueref,'Tag','toolbarPlottoolsOn');
hToolbarEditPlot = findall(hFigTrueref,'Tag','toolbarEditPlot');
hToolbarZoom = findall(hFigTrueref,'Tag','toolbarZoom');
hToolbarPan = findall(hFigTrueref,'Tag','toolbarPan');
hToolbarDataCursor = findall(hFigTrueref,'Tag','toolbarDataCursor');
if strcmp(get(hToolbarPlottoolsOn,'Enable'),'off')
    return;
else
    plotedit;
    zoom off;
    pan off;
    datacursormode off;
    set(hToolbarEditPlot,'State','on');
    set(hToolbarZoom,'State','off');
    set(hToolbarPan,'State','off');
    set(hToolbarDataCursor,'State','off');
    set(hToolbarPlottoolsOn,'Enable','off');
    set(hToolbarPlottoolsOff,'Enable','on');
    plottools on;
end


%================================================================
% --- toolbar edit plot callback
%================================================================
function toolbarEditPlotFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hToolbarEditPlot = findall(hFigTrueref,'Tag','toolbarEditPlot');
hToolbarZoom = findall(hFigTrueref,'Tag','toolbarZoom');
hToolbarPan = findall(hFigTrueref,'Tag','toolbarPan');
hToolbarDataCursor = findall(hFigTrueref,'Tag','toolbarDataCursor');
plotedit;
zoom off;
pan off;
datacursormode off;
set(hToolbarZoom,'state','off');
set(hToolbarPan,'state','off');
set(hToolbarDataCursor,'state','off');

%================================================================
% --- toolbar zoom callback
%================================================================
function toolbarZoomFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hToolbarEditPlot = findall(hFigTrueref,'Tag','toolbarEditPlot');
hToolbarZoom = findall(hFigTrueref,'Tag','toolbarZoom');
hToolbarPan = findall(hFigTrueref,'Tag','toolbarPan');
hToolbarDataCursor = findall(hFigTrueref,'Tag','toolbarDataCursor');
plotedit off;
zoom;
pan off;
datacursormode off;
set(hToolbarEditPlot,'state','off');
set(hToolbarPan,'state','off');
set(hToolbarDataCursor,'state','off');

%================================================================
% --- toolbar pan callback
%================================================================
function toolbarPanFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hToolbarEditPlot = findall(hFigTrueref,'Tag','toolbarEditPlot');
hToolbarZoom = findall(hFigTrueref,'Tag','toolbarZoom');
hToolbarPan = findall(hFigTrueref,'Tag','toolbarPan');
hToolbarDataCursor = findall(hFigTrueref,'Tag','toolbarDataCursor');
plotedit off;
zoom off;
pan;
datacursormode off;
set(hToolbarEditPlot,'state','off');
set(hToolbarZoom,'state','off');
set(hToolbarDataCursor,'state','off');


%================================================================
% --- toolbar datacuror callback
%================================================================
function toolbarDataCursorFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
hToolbarEditPlot = findall(hFigTrueref,'Tag','toolbarEditPlot');
hToolbarZoom = findall(hFigTrueref,'Tag','toolbarZoom');
hToolbarPan = findall(hFigTrueref,'Tag','toolbarPan');
hToolbarDataCursor = findall(hFigTrueref,'Tag','toolbarDataCursor');
plotedit off;
zoom off;
pan off;
datacursormode;
set(hToolbarEditPlot,'state','off');
set(hToolbarZoom,'state','off');
set(hToolbarPan,'state','off');


%================================================================
% --- toolbar legend callback funcion
%================================================================
function toolbarLegendFcn(hObject,eventdata)
hFigTrueref = findall(0,'Tag','trueref_Fig');
curvelegend(hFigTrueref);

        

%================================================================
% --- menu trueref help callback fcn
%================================================================
function trueref_Help(hObject,eventdata)
% helpWeb = fullfile(matlabroot,'toolbox','xraylabtool','help','xraylabtool_page.html');
% helpview(helpWeb);
msgbox('No help','Help on True Reflectivity','Help','modal');
 
     
%================================================================
% --- menu about trueref function callback
%================================================================
function trueref_AboutTrueref(hObject,eventdata)
text_string = {...
    'True Reflectivity 3.2';...
    ' ';...
    'X-Ray and Soft Condensed Matter Group';...
    'Department of Physics';...
    'University of California, San Diego';...
    'Copyright 2004 Zhang Jiang';...
    'Email: zjiang@physics-mail.ucsd.edu'};
icons = load('icons.mat');
msgbox(text_string,'About True Reflectivity','custom',icons.logo.cdata,icons.logo.colormap,'modal');

Contact us at files@mathworks.com