Newer
Older
Yves Gouriou
committed
end
%% QC_OnMenuCallback ............................... Quality Control Module
%----------------------------------------------------------------------
% Callback function run when the QC toggle tool is pressed
%----------------------------------------------------------------------
function QC_OnMenuCallback(gcbo, eventdata)
% Make the QC code uipanel visible
% --------------------------------
set( hbgQc, 'Visible' ,'on');
set( hbgParameter, 'Visible', 'off');
% Desactivate toggletools.
% ------------------------
set( hZoomInToggletool, 'state', 'off', 'enable', 'on' );
set( hZoomOutToggletool, 'state', 'off', 'enable', 'on' );
set( hPanToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
set( hCalToggletool, 'state', 'off', 'enable', 'off' );
set( hInterpToggletool, 'state', 'off', 'enable', 'off' );
% Retrieve named application data
% -------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
PARA = getParaCorModule( hMainFig );
% refresh QC statistic panel
% --------------------------
display_QC( hMainFig );
% Activate right clic context menu on first axes (salinity)
% ---------------------------------------------------------
set(hPlotAxes(1),'UIContextMenu', hQcCmenu);
% Activate clic mouse menu on first axes (salinity) for next rbbox
% ----------------------------------------------------------------
set(hPlotAxes(1),'ButtonDownFcn', @QC_SelectCallback);
% change cursor to crosshair aspect
% ---------------------------------
set( hMainFig, 'Pointer', 'crosshair');
% -------------------------------------------------------------
% nested function on mouse clic when QC toggle tool is selected
% -------------------------------------------------------------
function QC_SelectCallback(gcbo, eventdata)
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
% disable ButtonMotion on main fig during select
% prevent drawing to map
% ----------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', []);
% Selection of the data within the figure
% ---------------------------------------
point1 = get(gca,'CurrentPoint'); % button down detected
finalRect = rbbox; % return figure units
point2 = get(gca,'CurrentPoint'); % button up detected
point1 = point1(1,1:2); % extract x and y
point2 = point2(1,1:2);
p1 = min(point1,point2);
p2 = max(point1,point2); % calculate locations
% The following code is only executed if the left mouse button is clicked.
% If the right mouse button is clicked, this code must not be
% executed as the variable 'ind' will be emptied. And this variable
% is used when the context menu (callback 'Qc') is called
% -----------------------------------------------------------------
if ~strcmp( get(gcf, 'SelectionType'), 'alt')
% The QC is applied either on TSG data either on Sample data.
% it depends if the Botte Toggle button has been cliked on
% -----------------------------------------------------------
if strcmp( get(hBottleToggletool, 'state'), 'on')
% get index on selected zone
% --------------------------
if ~isempty(tsg.DAYD_EXT)
ind = find(tsg.DAYD_EXT > p1(1) & tsg.DAYD_EXT < p2(1) & ...
tsg.EXT_DIF > p1(2) & tsg.EXT_DIF < p2(2));
Yves Gouriou
committed
% Keep the information on the indices of the selected zone
% --------------------------------------------------------
tsg.rbboxind = ind .* ones(size(ind));
% Modifiy the QC
% --------------
tsg.([SAMPLE '_EXT_QC'])(ind) = tsg.qc.active.Code;
Yves Gouriou
committed
% Save the modifications
% ----------------------
setappdata( hMainFig, 'tsg_data', tsg);
% plot selected data with selected code
% --------------------------------------
plot_Correction( hMainFig, hPlotAxes, PARA);
Yves Gouriou
committed
end
else
% get index on selected zone
% ---------------------------
ind = find(tsg.DAYD > p1(1,1) & tsg.DAYD < p2(1,1) & ...
tsg.(PARA{1}) > p1(1,2) & tsg.(PARA{1}) < p2(1,2));
% Keep the information on the indices of the selected zone
% --------------------------------------------------------
tsg.rbboxind = ind .* ones(size(ind));
% Modifiy the QC
% --------------
tsg.([PARA{1} '_QC'])(ind) = tsg.qc.active.Code;
% put last SSPS_QC in queue (Undo/Redo)
% -------------------------------------
%tsg.queue = push( tsg.queue, tsg.([PARA '_QC']));
% store QC in queue object, for undo
% ----------------------------------
%tsg.queue = push(tsg.queue, tsg.([PARA '_QC']));
% Save the modifications
% ----------------------
setappdata( hMainFig, 'tsg_data', tsg);
% ------------------------------------
plot_Validation( hMainFig, hPlotAxes, 1, PARA{1} );
% refresh QC statistic panel
% --------------------------
display_QC( hMainFig );
% Update the map if already displayed
% -----------------------------------
if strcmp( get(hMapFig,'visible'), 'on') == 1
erase_Line( hPlotAxes, 4 );
plot_map( hMainFig, hPlotAxes);
% enable undo menu
% ----------------
set(findobj('tag','UIMENU_UNDO'),'enable','on');
end
% As soon as a modification took place the data should be saved
% -------------------------------------------------------------
set( hSaveMenu, 'UserData', 'on' );
end
% enable ButtonMotion on main fig after select QC area
% ----------------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion);
end
end
%% QC_OffMenuCallback .............................. Quality Control Module
%----------------------------------------------------------------------
% Callback function run when the QC toggle tool is released
%----------------------------------------------------------------------
function QC_OffMenuCallback(gcbo, eventdata)
% Desactive right clic menu on first axes (salinity)
% ---------------------------------------------------
set(hPlotAxes(1),'UIContextMenu', []);
% Desactive clic mouse menu (zoom) on first axes (salinity)
% ----------------------------------------------------------
set(hPlotAxes(1),'ButtonDownFcn', []);
% Uipanel visible or not
% -----------------------
set( hbgQc, 'Visible', 'off' );
if strcmp( get(hBottleToggletool, 'state'), 'off' )
set( hCalToggletool, 'state', 'off', 'enable', 'on' );
set( hInterpToggletool, 'state', 'off', 'enable', 'on' );
end
% uibuttongroup uipanel used to choose a parameter is set to
% on only if the Correction screen (bottle toggletool) is off
% -----------------------------------------------------------
if strcmp( get( hBottleToggletool, 'state'), 'off')
set( hbgParameter, 'Visible', 'on');
end
% cursor back to normal
% ---------------------
set(hMainFig,'Pointer','arrow');
end
%% Qc context menu selected ........................ Quality Control Module
%-----------------------------------------------------------
% Callback function run when the QC context menu is selected
%
% Context menu used to attribute a QC to the TSG time series
%
%-----------------------------------------------------------
function Qc(hObject, eventdata, key)
% Retrieve Default Quality Code and Color
% ---------------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% Get the parameter (SSPS, SSJT or SSTP)
% --------------------------------------
PARA = getParaCorModule( hMainFig );
% get key and some values in hashtable
% ------------------------------------

jacques.grelet_ird.fr
committed
code = tsg.qc.hash.(key).code;
color = tsg.qc.hash.(key).color;
% set active code and color from selected context menu
% ----------------------------------------------------
tsg.qc.active.Code = code;
tsg.qc.active.Color = color;
% Modify and plot the last selected tsg data
% ------------------------------------------
if isfield(tsg, 'rbboxind') && ~isempty( tsg.rbboxind )
if strcmp( get(hBottleToggletool, 'state'), 'on')
tsg.([SAMPLE '_EXT_QC'])(tsg.rbboxind) = tsg.qc.active.Code;
% in the application data
% ----------------------------------------
setappdata( hMainFig, 'tsg_data', tsg );
% Draw the 3 plots of the Correction figure
% -----------------------------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
else
tsg.([PARA{1} '_QC'])(tsg.rbboxind) = tsg.qc.active.Code;
% Save tsg.SSPS_QC in the application data
% ----------------------------------------
setappdata( hMainFig, 'tsg_data', tsg );
% Draw plot 1 of the validation figure
% ------------------------------------
plot_Validation( hMainFig, hPlotAxes, 1, PARA{1} );
end
end
% Update the radio button corresponding to the selected
% QC context menu (rbg : RadioButtonGroup)
% -----------------------------------------------------
% radioTag = ['TAG_QC_RADIO_' key]; % Build the TAG of the CODE
% hbgChildren = get(hbgQc,'Children'); % Get the handles of the rbg
% hbgTagCell = get(hbgChildren, 'tag'); % get the TAG of the rbg
% ind = strcmp(radioTag, hbgTagCell); % Compare the TAG
% hRadioButton = hbgChildren( ind == 1 ); % Get the handle of the button
% set(hbgQc, 'SelectedObject', hRadioButton); % Make this button active
display_QC( hMainFig);
setappdata( hMainFig, 'tsg_data', tsg );
end
%% Radiobutton Quality Control ..................... Quality Control Module
% ---------------------------------------------------------------
% Callback to select CODE and COLOR QC from the RadioButton Group
% ---------------------------------------------------------------
function RadiobuttonQc(source, eventdata)
% Retrieve Default Quality Code and Color
% ---------------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% Retrieve the key from the active RadioButton
% --------------------------------------------
rbTag = get(eventdata.NewValue,'Tag');
key = strrep(rbTag, 'TAG_QC_RADIO_', '');
% store his handle to uibuttongroup userdata
% ------------------------------------------
set(hbgQc,'Userdata', eventdata.NewValue);
% set active code and color from selected context menu
% ----------------------------------------------------

jacques.grelet_ird.fr
committed
tsg.qc.active.Code = tsg.qc.hash.(key).code;
tsg.qc.active.Color = tsg.qc.hash.(key).color;

jacques.grelet_ird.fr
committed
% save tsg struct
% ----------------
end
%% preQcPanCallback .................................Quality Control Module
% ---------------------------------------------------------------
% Callback function ... to be completed
% ---------------------------------------------------------------
function preQcPanCallback(obj, evd)
set(hQCToggletool, 'state', 'off' );
end
%% postQcPanCallback ............................... Quality Control Module
% ---------------------------------------------------------------
% Callback function ... to be completed
% ---------------------------------------------------------------
% Set the right limit and interval to the 3 axes
% ----------------------------------------------
for iaxe = 1:3
set(hPlotAxes(iaxe),'XTickMode','auto')
datetick(hPlotAxes(iaxe),'x','keeplimits')
end
% Re-draw the map once the pan is off - only valide in QC mode
% -------------------------------------------------------------
if strcmp( get(hMapFig, 'visible'), 'on') == 1
erase_Line( hPlotAxes, 4 );
plot_map( hMainFig, hPlotAxes);
end
% restacks the figure to the top of the screen
% --------------------------------------------
figure( hMainFig);
set(hQCToggletool, 'state', 'on' );
%---------------------------------------------------------------------
% Callback function run when mouse pointer is moving on temperature plot
% draw corresponding measurement position on map
%---------------------------------------------------------------------
function MouseMotion(hObject, eventdata)
% Test if the callback can be activated
% -------------------------------------
if strcmp( get( hMainFig, 'UserData'), 'ButtonMotionOn')
% Retrieve named application data
% -------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% Get current position of cusor and return its coordinates in
% axes with handle h_axes
% -----------------------------------------------------------
a = get(hPlotAxes(1), 'CurrentPoint');
x = a(2,1);
y = a(2,2);
% Get the Limits of axes 1
% ------------------------
limx = get(hPlotAxes(1), 'XLim');
limy = get(hPlotAxes(1), 'YLim');
% Code to Activate the PAN function when QC mode is active
% A PAN zone is defined in the bottom (10%) of PlotAxes(1)
% 1 - one to desactivate QC when Pan is set to on.
% 2 - one to reactivate QC once the pan has been used.
% ---------------------------------------------------------
qcState = get(hQCToggletool, 'state' );
if strcmp(qcState, 'on' );
% Suppose that Y axes is increasing from the bottom to the top
% ------------------------------------------------------------
limy2 = limy(1) + (limy(2)-limy(1)) * 0.10;
if x > limx(1) && x < limx(2) && y <= limy2 && y >= limy(1)
hPan = pan(hMainFig);
set(hPan,'ActionPreCallback', @preQcPanCallback);
set(hPan,'ActionPostCallback', @postQcPanCallback);
set(hPan,'Enable','on');
else

jacques.grelet_ird.fr
committed
try
pan(hMainFig, 'off');
catch
end
% Dynamically display data in uicontrol
% -------------------------------------
if x > tsg.DAYD(1) && x < tsg.DAYD(end)
% display cursor in location in text uicontrol
% --------------------------------------------
indCursor = find( tsg.DAYD > x);
set( hInfoDateText, 'String',...
datestr(tsg.DAYD(indCursor(1)),'dd/mm/yyyy HH:MM'));
set( hInfoLatText, 'String', dd2dm(tsg.LATX(indCursor(1)),0));
set( hInfoLongText, 'String', dd2dm(mod(tsg.LONX(indCursor(1))+180,360)-180,1));
if ~isempty(tsg.SSPS)
set( hInfoSSPSText, 'String', tsg.SSPS(indCursor(1)));
end
if ~isempty(tsg.SSJT)
set( hInfoSSJTText, 'String', tsg.SSJT(indCursor(1)));
end
if ~isempty(tsg.SSTP)
set( hInfoSSTPText, 'String', tsg.SSTP(indCursor(1)));
end
% Plot the position on the map if this one is active
% --------------------------------------------------
if strcmp( get(hMapFig, 'Visible'), 'on')
% Select the map axes
% -------------------
axes( hPlotAxes(4));
% Look for a MARKER (Red point) on the ship track
% -----------------------------------------------
h = findobj( hPlotAxes(4), '-regexp','Tag', 'TAG_PLOT4_LINE_MARKER');
if isempty( h ) % if no Marker
% Plot a Marker (Red point) on the ship track
% -------------------------------------------
hMarker = m_line( mod(tsg.LONX(indCursor(1))+tsg.lonplus,tsg.lonmod)-tsg.lonplus,...
tsg.LATX(indCursor(1)),...
'Marker','o','MarkerSize',5, ...
'Color','r', 'MarkerFaceColor','r');
% Put a tag on the Marker - This tag allows to get the handle
% of the Marker
% -----------------------------------------------------------
set( hMarker, 'TAG', 'TAG_PLOT4_LINE_MARKER' );
if ~isnan( tsg.LONX(indCursor(1)) )
% Delete the Marker and redraw it
% -------------------------------
delete( h);
hMarker = m_line( ...
tsg.LONX(indCursor(1)), tsg.LATX(indCursor(1)),...
'Marker','o','MarkerSize',5, ...
'Color','r', 'MarkerFaceColor','r');
% Put a tag on the Marker - This tag allows to get the handle
% of the Marker
% -----------------------------------------------------------
set( hMarker, 'TAG', 'TAG_PLOT4_LINE_MARKER' );
end
end
end
end
%% Map_OnMenuCallback
%---------------------------------------------------------------------
% Callback function run when the Map tool bar item is selected
%---------------------------------------------------------------------
function Map_OnMenuCallback(hObject, eventdata)
% Desactivate Zoom and Pan toggle buttons
% ---------------------------------------
set(hZoomInToggletool, 'state', 'off' );
set(hZoomOutToggletool, 'state', 'off' );
set(hPanToggletool, 'state', 'off' );
% Make the earth map visible
% --------------------------
set(hMapFig, 'Visible', 'on' );
erase_Line( hPlotAxes, 4 );
plot_map( hMainFig, hPlotAxes)

jacques.grelet_ird.fr
committed
% De-activate keyPressFcn callback on main fig
% --------------------------------------------
set(hMainFig, 'KeyPressFcn', []);
%---------------------------------------------------------------------
% Callback function run when the Map tool bar item is unselected
%---------------------------------------------------------------------
function Map_OffMenuCallback(hObject, eventdata)
% ----------------------------

jacques.grelet_ird.fr
committed
% Re-activate keyPressFcn callback on main fig
% ---------------------------------------------
set(hMainFig, 'KeyPressFcn', @keyPressFcnCallback);
%% Bottle_OnMenuCallback ................................ Correction Module
%---------------------------------------------------------------------
% Callback function run when the bootle push tool is selected
%---------------------------------------------------------------------
function Bottle_OnMenuCallback(hObject, eventdata)
% Callback function run when the Bottle tool bar item is selected
% Get the tsg structure
% ---------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get the parameter we are working on (SSPS, SSJT, SSTP)
% ------------------------------------------------------
PARA = getParaCorModule( hMainFig );
% Switch somme buttons
% --------------------
set( hQCToggletool, 'state', 'off' );
set( hZoomInToggletool, 'state', 'off', 'enable', 'on' );
set( hZoomOutToggletool, 'state', 'off', 'enable', 'on' );
set( hPanToggletool, 'state', 'off' );
set( hClimToggletool, 'state', 'off', 'enable', 'off');
set( hCalToggletool, 'enable', 'off' );
set( hInterpToggletool, 'enable', 'off' );
set( hTimelimitToggletool, 'enable', 'on' );
% Activate or desactivate uipanels
% ---------------------------------
set( hpDateLimit, 'Visible', 'on' );
set( hbgCorMethod, 'Visible', 'on' );
set( hCorPanel, 'Visible', 'on' );
set( hbgParameter, 'Visible', 'off');
set( hbgQc, 'Visible', 'off');
if ~isempty( tsg.([SAMPLE '_EXT']) )
Yves Gouriou
committed
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
else
msgbox('No sample data file has been read', 'modal');
Yves Gouriou
committed
end
Yves Gouriou
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
% Necessary to unzoom as the new plot keep in memory the preceding zoom
% ---------------------------------------------------------------------
zoom out;
Yves Gouriou
committed
% Get the information on time limits of the time series
% Write them in the uipanel
% -----------------------------------------------------
noNaN = tsg.DAYD(~isnan( tsg.DAYD ));
set( hetDateMin, 'String', datestr(noNaN(1), 31));
set( hetDateMax, 'String', datestr(noNaN(end), 31));
end
%% Bottle_OffMenuCallback ............................... Correction module
%---------------------------------------------------------------------
% Callback function run when the bootle push tool is selected
%---------------------------------------------------------------------
function Bottle_OffMenuCallback(hObject, eventdata)
% If necessary toggle off some buttons
% ------------------------------------
set( hQCToggletool, 'state', 'off' );
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hClimToggletool, 'enable', 'on');
set( hCalToggletool, 'enable', 'on' );
set( hInterpToggletool, 'enable', 'on' );
set( hTimelimitToggletool, 'enable', 'off' );
% Activate or Desactivate uipanel
% --------------------------------
set( hpDateLimit, 'Visible', 'off' );
set( hCorPanel, 'Visible', 'off' );
set( hbgCorMethod, 'Visible', 'off' );
set( hbgParameter, 'Visible', 'on');
% Desactivate Click Mouse on figure
% ---------------------------------
set( hMainFig, 'WindowButtonDownFcn', []);
% Get tsg structure
% -----------------
tsg = getappdata( hMainFig, 'tsg_data' );
Yves Gouriou
committed
% Draw the 3 plots of the validation figure
% -----------------------------------------
plot_Validation( hMainFig, hPlotAxes, 1, tsg.plot.parameter{1} );
plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
% Necessary to unzoom as the new plot keep in memory the preceding zoom
% ---------------------------------------------------------------------
zoom out;
% Set the pointer
% ---------------
set( hMainFig, 'Pointer', 'arrow');
end
%% CorCancelCallback .................................... Correction Module
function CorCancelCallback(hObject, eventdata)
% Callback function run when ...
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
% --------------------------------------------------
tsg.([PARA{1} '_ADJUSTED']) = [];
tsg.([PARA{1} '_ADJUSTED_QC']) = [];
tsg.([PARA{1} '_ADJUSTED_ERROR']) = [];
% Save tsg data
% -------------
setappdata(hMainFig, 'tsg_data', tsg);
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
end
gael.alory_legos.obs-mip.fr
committed
%% CorGradientCallback .................................... Correction Module
function CorGradientCallback(hObject, eventdata)
% Callback function run when
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get the time limits for the correction A TESTER
% -----------------------------------------------
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
gael.alory_legos.obs-mip.fr
committed
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
SAMPLE = tsg.plot.sample;
if ~isempty( tsg.([SAMPLE '_EXT']) )
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
% Correction
% ----------
error = corTsgGradient(hMainFig, PARA, dateMin, dateMax);
switch error
case 1
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
gael.alory_legos.obs-mip.fr
committed
if DateMax <= DateMin
msgbox( 'Date limits are not correct',...
'Correction module', 'warn', 'modal');
end
gael.alory_legos.obs-mip.fr
committed
end
end
end
Yves Gouriou
committed
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
%% CorBiasCallback .................................... Correction Module
function CorBiasCallback(hObject, eventdata)
% Callback function run when
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get the time limits for the correction A TESTER
% -----------------------------------------------
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
SAMPLE = tsg.plot.sample;
if ~isempty( tsg.([SAMPLE '_EXT']) )
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
Yves Gouriou
committed
end
% Correction
% ----------
error = corTsgBias(hMainFig, PARA, dateMin, dateMax);
Yves Gouriou
committed
Yves Gouriou
committed
switch error
Yves Gouriou
committed
Yves Gouriou
committed
case 1
Yves Gouriou
committed
Yves Gouriou
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
Yves Gouriou
committed
Yves Gouriou
committed
case -1
Yves Gouriou
committed
Yves Gouriou
committed
if DateMax <= DateMin
msgbox( 'Date limits are not correct',...
'Correction module', 'warn', 'modal');
end
otherwise
msgbox( 'CorBiasCallback : Error different or -1',' ', 'error');
Yves Gouriou
committed
end
end
%% CorLinearCallback .................................... Correction Module
function CorLinearCallback(hObject, eventdata)
% Callback function run when
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get the time limits for the correction A TESTER
% -----------------------------------------------
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
if ~isempty( tsg.([SAMPLE '_EXT']) )
Yves Gouriou
committed
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
Yves Gouriou
committed
% Correction
% ----------
error = corTsgLinear(hMainFig, PARA, dateMin, dateMax);
Yves Gouriou
committed
switch error
Yves Gouriou
committed
case 1
Yves Gouriou
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
case -1
msgbox( 'Date limits are not correct',...
'Correction module', 'warn', 'modal');
end
end
end
%% CorMedianCallback .................................... Correction Module
function CorMedianCallback(hObject, eventdata)
% Callback function run when
% Desactivate somme Toggle button
% -------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hTimelimitToggletool, 'state', 'off' );
% Get the time limits for the correction A TESTER
% --------------------------------------
dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
% Get tsg application data
% ------------------------
tsg = getappdata(hMainFig, 'tsg_data');
% Get parameter we are working on (SSPS, SSJT, SSTP)
% or SSPS_CAL, SSJT_CAL, SSTP_CAL
% -------------------------------------------------
PARA = getParaCorModule( hMainFig );
if ~isempty( tsg.([SAMPLE '_EXT']) )
Yves Gouriou
committed
% Compute the sample-TSG differences
% ----------------------------------
diffTsgSample( hMainFig, PARA );
Yves Gouriou
committed
% Correction
% ----------
error = corTsgMedian(hMainFig, PARA, dateMin, dateMax);
Yves Gouriou
committed
switch error
Yves Gouriou
committed
case 1
Yves Gouriou
committed
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
% Nothing is done - Error msg within the corTsgMedian function
Yves Gouriou
committed
end
%% PopupMenu Select Parameter
% ---------------------------
function SelectParameter(hObject, eventdata, nplot)
% Callback function run when the ....
% Get application data
% --------------------
tsg = getappdata( hMainFig, 'tsg_data');
% Get the active string of the selected box
% -----------------------------------------
val = get( hObject, 'Value' );
string_list = get( hObject, 'String' );
selected_string = string_list{val};
% Get the default parameter
% -------------------------
tsg.plot.sample = selected_string;
if strcmp( tsg.plot.sample, 'SSJT' )
tsg.plot.sample = 'SSTP';
% Save application data
% --------------------
setappdata( hMainFig, 'tsg_data', tsg);
% Disable the climatology
% -----------------------
plotClim = 0;
if strcmp( get(hClimToggletool, 'state'), 'on' )
set( hClimToggletool, 'state', 'off' );
plotClim = 1;
end
% Disable the climatology
% -----------------------
set( hClimToggletool, 'state', 'off' );
plot_Validation( hMainFig, hPlotAxes, 1, tsg.plot.parameter{1} );
plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
% Plot the climatology if it was already plotted
% ----------------------------------------------
if plotClim
set( hClimToggletool, 'state', 'on' );
plot_Climatology(hMainFig, hPlotAxes);
%% SelectTime_OnMenuCallback
%---------------------------
function SelectTime_OnMenuCallback(hObject, eventdata)
% Callback function run when the ....
% Desactivate Zoom and Pan functions.
% ----------------------------------
set( hZoomInToggletool, 'state', 'off' );
set( hZoomOutToggletool, 'state', 'off' );
set( hQCToggletool, 'state', 'off' );
set( hPanToggletool, 'state', 'off' );
% Create a pointer to select the time limits
% ------------------------------------------
selTimePointer = ones(16)+1;
selTimePointer(1,:) = 1; selTimePointer(16,:) = 1;
selTimePointer(:,1) = 1; selTimePointer(:,16) = 1;
selTimePointer(1:4,8:9) = 1; selTimePointer(13:16,8:9) = 1;
selTimePointer(8:9,1:4) = 1; selTimePointer(8:9,13:16) = 1;
selTimePointer(5:12,5:12) = NaN; % Create a transparent region in the center
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
% Activate clic mouse menu on second axes (salinity) for next rbbox
% ----------------------------------------------------------------
set(hMainFig,'WindowButtonDownFcn', @Time_SelectCallback);
% change cursor
% ---------------
set( hMainFig, 'Pointer', 'custom',...
'PointerShapeCData', selTimePointer, 'PointerShapeHotSpot',[9 9]);
% ----------------------------------------------------------------------
% nested function on mouse clic when Select Time toggle tool is selected
% ----------------------------------------------------------------------
function Time_SelectCallback(gcbo, eventdata)
% disable ButtonMotion on main fig during select
% prevent drawing to map
% ----------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', []);
% Retrieve named application data
% -------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% Selection of the data within the figure
% ---------------------------------------
point1 = get(gca,'CurrentPoint'); % button down detected
finalRect = rbbox; % return figure units
point2 = get(gca,'CurrentPoint'); % button up detected
point1 = point1(1,1:2); % extract x and y
point2 = point2(1,1:2);
p1 = min(point1,point2);
p2 = max(point1,point2); % calculate locations