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');