Newer
Older
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
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
% 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
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
%% 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 );
% Correction
% ----------
error = corTsgBias(hMainFig, PARA, dateMin, dateMax);
switch error
case 1
% Plot in the 3 axes
% ------------------
plot_Correction( hMainFig, hPlotAxes, PARA );
case -1
if DateMax <= DateMin
msgbox( 'Date limits are not correct',...
'Correction module', 'warn', 'modal');
end
end
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
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
% 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
% get index on selected zone - Only on X axes (time)
% --------------------------------------------------
ind = find(tsg.DAYD >= p1(1,1) & tsg.DAYD <= p2(1,1));
% Write the date in the Editable uicontrol
% ----------------------------------------
set( hetDateMin, 'String', datestr(tsg.DAYD(ind(1)), 31));
set( hetDateMax, 'String', datestr(tsg.DAYD(ind(end)), 31));
% enable ButtonMotion on main fig after select QC area
% ----------------------------------------------------
set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion);
end
end
%% SelectTime_OffMenuCallback
%----------------------------
function SelectTime_OffMenuCallback(hObject, eventdata)
% Desactivate time limit buttons
% ------------------------------
set( hTimelimitToggletool, 'state', 'off');
set( hMainFig, 'WindowButtonDownFcn', []);
set( hMainFig, 'Pointer', 'arrow');
end
%% Clim_OffMenuCallback
%------------------------------------------------------------------------
% Callback function run when the Levitus climatology toolbar is unselected
%------------------------------------------------------------------------
function Clim_OffMenuCallback(hObject, eventdata)
% Get lines handles from tag
% --------------------------
hLines = findobj('-regexp', 'Tag', 'TAG_LINE_CLIMATO_');
% Delete climatology lines on axes
% ---------------------------------
delete(hLines);
%------------------------------------------------------------------------
% Callback function run when the Levitus climatology toolbar is unselected
%------------------------------------------------------------------------
function Clim_OnMenuCallback(hObject, eventdata)
% Test if the TSG and bucket files have been read
% -----------------------------------------------
if strcmp( get(hOpenMenu, 'UserData'), 'on' )
% plot climatology
% ----------------
plot_Climatology(hMainFig, hPlotAxes);
end
end
%% ClimatoSelectMenuCallback
% -------------------------------------------------------------------
% Callback function run when climato submenu is selected
% -------------------------------------------------------------------
function ClimatoSelectMenuCallback(hObject, eventdata, climato, time)
% find all climato submenu and set 'checked' property to 'off'
% ------------------------------------------------------------
hdl = findobj( '-regexp', 'tag', 'TAG_UIMENU_CLIMATO');
set(hdl, 'checked', 'off');
% set current climato submenu checked
% -----------------------------------
set(hObject, 'checked', 'on');
% memorize action on climatology menu for next use
% ------------------------------------------------
s.type = climato;
s.time = time;
set(hClimatoMenu, 'userdata', s);
% check if climatology toggle button is set
% -----------------------------------------
if strcmp(get(hClimToggletool, 'state'), 'on')