Skip to content
Snippets Groups Projects
tsgqc.m 132 KiB
Newer Older
  'String', 'Max : yyyy-mm-dd hh:mm:ss', ...
  'HorizontalAlignment', 'left', ...
  'Units', 'normalized', ...
  'FontSize', tsg.fontSize-1, ...
  'Position',[.01 .35 .95 .15]);
hetDateMax = uicontrol( ...
  'Parent', hpDateLimit, ...
  'Style', 'edit', ...
  'Units', 'normalized', ...
  'BackgroundColor', 'white',...
  'FontSize', tsg.fontSize, ...
  'Tag', 'CORRECT_DATEMAX_EDIT',...
  'Position',[.01 .15 .95 .17]);

%% uiPanel for the Calibration coefficient used the Correction module

% Create the uipanel
hpCalCoef = uipanel( ...
  'Parent', hMainFig, ...
  'Title', 'Calibration', ...
  'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ...
  'Visible', 'off', ...
  'Units', 'normalized','Position', [.0, .46, .15, .50]);

jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
htCalCNDC1 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'Conductivity : C = A*C + B', ...
  'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .925 .95 .05]);
htCalCNDC2 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'A', ...
  'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .85 .08 .05]);
hetCalCNDCSlope = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'edit', ...
  'FontSize', tsg.fontSize, 'BackgroundColor', 'white',...
  'Tag', 'CORRECT_CAL_CNDC_A',...
  'HandleVisibility','on', ...
  'Units', 'normalized', 'Position',[.1 .85 .85 .05]);
htCalCNDC3 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'B', ...
  'HorizontalAlignment', 'left',  'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .775 .08 .05]);
hetCalCNDCOffset = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'edit', ...
  'FontSize', tsg.fontSize, 'BackgroundColor', 'white',...
  'HandleVisibility','on', ...
  'Tag', 'CORRECT_CAL_CNDC_B',...
  'Units', 'normalized', 'Position',[.1 .775 .85 .05]);

htCalSSJT1 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'SSJT : T = A*T + B', ...
  'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .675 .95 .05]);
htCalSSJT2 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'A', ...
  'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .6 .08 .05]);
hetCalSSJTSlope = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'edit', ...
  'BackgroundColor', 'white',...
  'FontSize', tsg.fontSize, ...
  'HandleVisibility','on', ...
  'Tag', 'CORRECT_CAL_SSJT_A',...
  'Units', 'normalized', 'Position',[.1 .6 .85 .05]);
htCalSSJT3 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'B', ...
  'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .525 .08 .05]);
hetCalSSJTOffset = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'edit', ...
  'FontSize', tsg.fontSize, 'BackgroundColor', 'white',...
  'HandleVisibility','on', ...
  'Tag', 'CORRECT_CAL_SSJT_B',...
  'Units', 'normalized', 'Position',[.1 .525 .85 .05]);

htCalSSTP1 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'SSPT : T = A*T + B', ...
  'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .425 .95 .05]);
htCalSSTP2 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'A', ...
  'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .35 .08 .05]);
hetCalSSTPSlope = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'edit', ...
  'BackgroundColor', 'white',...
  'FontSize', tsg.fontSize, ...
  'HandleVisibility','on', ...
  'Tag', 'CORRECT_CAL_SSJT_A',...
  'Units', 'normalized', 'Position',[.1 .35 .85 .05]);
htCalSSTP3 = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'Text', 'String', 'B', ...
  'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ...
  'Units', 'normalized', 'Position',[.01 .275 .08 .05]);
hetCalSSTPOffset = uicontrol( ...
  'Parent', hpCalCoef, ...
  'Style', 'edit', ...
  'FontSize', tsg.fontSize, 'BackgroundColor', 'white',...
  'HandleVisibility','on', ...
  'Tag', 'CORRECT_CAL_SSJT_B',...
  'Units', 'normalized', 'Position',[.1 .275 .85 .05]);

hrbCal = uicontrol( ...
  'Style','pushbutton', 'Parent',hpCalCoef, ...
  'String','Calibrate',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'CORRECT_CAL_PUSH', ...
  'Units', 'normalized','pos',[.05 .15 .9 .075], ...
  'HandleVisibility', handleVisibility, ...
  'Callback', @CalibrateCallback);
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
hrbCancelCal = uicontrol( ...
  'Style','pushbutton', 'Parent',hpCalCoef, ...
  'String','Cancel calibration',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'CORRECT_CAL_PUSH', ...
  'Units', 'normalized','pos',[.05 .05 .9 .075], ...
  'HandleVisibility', handleVisibility, ...
  'Callback', @CancelCalibrationCallback);


%% uiPanel for Interpolation of position

% Create the uipanel
hpInterpPos = uipanel( ...
  'Parent', hMainFig, ...
  'Title', 'Lat-Lon interpolation', ...
  'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ...
  'Visible', 'off', ...
  'Units', 'normalized','Position', [.0, .75, .15, .21]);
hrbInterpLinear = uicontrol( ...
  'Style','pushbutton', 'Parent',hpInterpPos, ...
  'String','Linear interpolation',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'TAG_PUSH_INTERP_LINEAR', ...
  'Units', 'normalized','pos',[.05 .65 .9 .25], ...
  'HandleVisibility', handleVisibility, ...
  'Callback', @InterpPosLinearCallback);
hrbInterpOther = uicontrol( ...
  'Style','pushbutton', 'Parent',hpInterpPos, ...
  'String','Other method',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'TAG_PUSH_INTERP_OTHER', ...
  'Units', 'normalized','pos',[.05 .35 .9 .25], ...
  'HandleVisibility', handleVisibility, ...
  'Callback', @InterpPosOtherCallback);
hrbInterpCancel = uicontrol( ...
  'Style','pushbutton', 'Parent',hpInterpPos, ...
  'String','Cancel interpolation',...
  'FontSize',tsg.fontSize-1,...
  'Tag', 'TAG_PUSH_INTERP_CANCEL', ...
  'Units', 'normalized','pos',[.05 .05 .9 .25], ...
  'HandleVisibility', handleVisibility, ...
  'Callback', @InterpPosCancelCallback);

jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%
% end of main function (GUI definition)
% 

%% *************************** CALLBACKS **********************************
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%  All following callback are in nested functions
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%% OpenMenuCallback function run when the Open menu item is selected
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
  function OpenMenuCallback(hObject, eventdata)
    % Activate or desactivate uipanels
    % --------------------------------
    set( hpCalCoef,            'Visible', 'off' );
    set( hpDateLimit,          'Visible', 'off' );
    set( hpInterpPos,          'Visible', 'off' );
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %     set( hMapFig,            'Visible', 'off' );
    %    set( hbgParameter,         'Visible', 'off');

    % Toggle button
    % -------------
    set( hBottleToggletool,    'state', 'off' );
    set( hCalToggletool,       'state', 'off' );
    set( hClimToggletool,      'state', 'off' );
    set( hInterpToggletool,    'state', 'off' );
    set( hPanToggletool,       'state', 'off' );
    set( hQCToggletool,        'state', 'off' );
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %     set( hMapToggletool,       'state', 'off' );
    set( hTimelimitToggletool, 'state', 'off' );
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %    set( hZoomToggletool,      'state', 'off' );

    % Open standard dialog box for retrieving files
    % ---------------------------------------------
    [fileName, pathname, filterIndex] = uigetfile( ...
      {'*.arg';'*.ast';'*.btl';'*.lbv';'*.nc';'*.ora';'*.sdf';'*.spl';...

    % flushes the event queue and updates the closed uigetfile window
    % ---------------------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    drawnow;

    % if the user clicks the Cancel button or closes the dialog window,
    % FileName and PathName are set to 0.
    % -----------------------------------------------------------------
    if ~isequal(fileName, 0)
      % Pointer set to watch during reading and plotting
      % ------------------------------------------------
      set( hMainFig, 'Pointer', 'watch' );

      % construct valid and full file path
      % -----------------------------------
      fullFileName = strcat(pathname, fileName);

      % Read the data
      % -------------
      [errTsg, errSpl] = read_data( hMainFig, filterIndex, fullFileName);
 
      % Get the tsg structure
      % ---------------------
      tsg = getappdata( hMainFig, 'tsg_data');
      % Keep the pathname of the tsgqc m_file
      % -------------------------------------
      tsgqcname = mfilename;
      fulltsgqcname = mfilename('fullpath');
      tsg.DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ;
      setappdata( hMainFig, 'tsg_data', tsg);

      % A TSG file has been read
      % ------------------------
      if errTsg > 0
        % set WindowButtonMotionFcn on
        % ----------------------------
        set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion);

        % A TSG file has been open and read
        % ---------------------------------
        set( hOpenMenu, 'UserData', 'on' );
        % enable toolbar menu pushtool
        % ----------------------------
        hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_');
        set(hdl_pushtool, 'Enable', 'on');
        set( hbgParameter, 'Visible', 'on');
        % Enable Save and Export menu
        % ---------------------------
        set(hSaveMenu,   'Enable', 'on');
        set(hExportMenu, 'Enable', 'on');
        set(hQCMenu, 'Enable', 'on');
        % update some fields in tsg structure and restore tsg
        % ---------------------------------------------------
%         updateTsgStruct(hMainFig );
%         tsg = getappdata( hMainFig, 'tsg_data');

        % update the filename display
        % ---------------------------
        set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext));
        % The callback to detect the mouse motion can be set to on
        % --------------------------------------------------------
        set( hMainFig, 'UserData', 'ButtonMotionOn');
        % Update QC statistics
        % --------------------
        display_QC( hMainFig );
        % Initialise the popupmenu displaying the parameters that can be
        % plot
        % --------------------------------------------------------------
        initParameterChoice( hMainFig, pmhPara );
        tsg = getappdata( hMainFig, 'tsg_data');

        % Test if there is records with the same date and time.
        % very simple test made because of a bug in the acquisition
        % software used on IRD VOS
        % ---------------------------------------------------------
        testDoubleDate(hMainFig);
        
        % Test if there are fillable missing positions
        % ---------------------------------------------------------
        testMissPos(hMainFig);
        
      elseif errTsg > -2
        % Problem to read the file or
        % Choice of parameters for Labview file canceled by the user
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
        % TSG structure has been reinitialize
        % Disable toolbar menu pushtool except the open file button
        % ----------------------------------------------------------
        hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_');
        set(hdl_pushtool, 'Enable', 'off');
        set( hOpenPushtool, 'Enable', 'on' );

      end    %if errTsg > 0

      if errTsg == 1 || errSpl == 1

        % Draw the 3 plots of the validation figure
        % The plots need to be re-initialize because of a bug with
        % the zoom function. When you open a new TSG file and you
        % have used the zoom funtion with the preceding file.
        % The zoom function keep the X and Y limits of the preceding file
        % ---------------------------------------------------------------
        delete( hPlotAxes(1) );
        delete( hPlotAxes(2) );
        delete( hPlotAxes(3) );

        hPlotAxes(1) = axes( 'Parent', hPlotsPanel, 'Visible', 'off', ...
          'box', 'on', 'Units', 'normalized','Tag', 'TAG_AXES_1', ...
          'HandleVisibility','on', 'Position',[.05, .64, .93, .35]);
        hPlotAxes(2) = axes( 'Parent', hPlotsPanel, 'Visible', 'off',...
          'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_2', ...
          'HandleVisibility','on', 'Position',[.05, .33, .93, .27]);
        hPlotAxes(3) = axes('Parent', hPlotsPanel, 'Visible', 'off',...
          'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_3', ...
          'HandleVisibility','on', 'Position',[.05, .02, .93, .27]);

        resetAxes( hMainFig, hPlotAxes )

jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
        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} );

        set( hMapFig, 'Name', tsg.file.name);

        % Update the map if already displayed
        % -----------------------------------
        if strcmp( get(hMapFig,'visible'), 'on') == 1
          erase_Line( hPlotAxes, 4 );
          plot_map( hMainFig, hPlotAxes);

    end    % if ~isequal(fileName, 0)
    % Pointer reset to arrow
    % ----------------------
    set( hMainFig, 'Pointer', 'arrow' );

  end

%% Inter_OnMenuCallback ................................... Interpolation
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when
%
  function Inter_OnMenuCallback( hObject, eventdata)

    % Activate or desactivate uipanels
    % --------------------------------
    set( hpDateLimit,          'Visible', 'on' );
    set( hpInterpPos,          'Visible', 'on' );
    set( hpCalCoef,            'Visible', 'off');
    set( hbgQc,                'Visible', 'off');
    set( hbgParameter,         'Visible', 'off');
    % Toggle button
    % -------------
    set( hBottleToggletool,    'state', 'off', 'enable', 'off');
    set( hCalToggletool,       'state', 'off', 'enable', 'off');
    set( hClimToggletool,      'state', 'off', 'enable', 'off');
    set( hPanToggletool,       'state', 'off', 'enable', 'on' );
    set( hQCToggletool,        'enable', 'off');
    set( hTimelimitToggletool, 'state', 'off', 'enable', 'on' );
    set( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
    set( hZoomOutToggletool,   'state', 'off', 'enable', 'on' );
    set( hHeaderPushtool,      'enable', 'off' );
    % Get application data TSG
    % ------------------------
    tsg = getappdata( hMainFig, 'tsg_data');
    % 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));
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed

    % Draw the 3 plots of the interpolation figure
    % --------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    plot_Interpolation( hMainFig, hPlotAxes, 1 );
    plot_Interpolation( hMainFig, hPlotAxes, 2 );
    plot_Interpolation( hMainFig, hPlotAxes, 3 );

  end

%% Inter_OffMenuCallback .................................. Interpolation
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when
%
  function Inter_OffMenuCallback( hObject, eventdata)
    % Activate or desactivate uipanels
    % --------------------------------
    set( hpCalCoef,            'Visible', 'off' );
    set( hpDateLimit,          'Visible', 'off' );
    set( hpInterpPos,          'Visible', 'off' );
    set( hbgParameter,         'Visible', 'on'  );
    % Enable Pushbuttons
    % ------------------
    set( hBottleToggletool,    'state', 'off', 'enable', 'on' );
    set( hCalToggletool,       'state', 'off', 'enable', 'on'  );
    set( hClimToggletool,      'state', 'off', 'enable', 'on'  );
    set( hPanToggletool,       'state', 'off', 'enable', 'on'  );
    set( hQCToggletool,        'state', 'off', 'enable', 'on'  );
    set( hTimelimitToggletool, 'state', 'off', 'enable', 'off' );
    set( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
    set( hZoomOutToggletool,   'state', 'off', 'enable', 'on' );

    set( hHeaderPushtool,      'enable', 'on' );

    % Get tsg structure
    % -----------------
    tsg = getappdata( hMainFig, 'tsg_data' );
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed

    % Draw the 3 plots of the validation figure
    % -----------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    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} );

    % Set the pointer
    % ---------------
    set( hMainFig, 'Pointer', 'arrow');

  end

%% InterpLinearCallback ...............................Interpolation Linear
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%------------------------------------------------------------------------
% Callback function run when
%----------------------------------------------------------------------
  function InterpPosLinearCallback( hObject, eventdata)

    % 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');
    error = interpPosLinear( hMainFig, dateMin, dateMax );
    switch error

      case 1

        % Plot in the 3 axes
        % ------------------
        plot_Interpolation( hMainFig, hPlotAxes, 2 );
        plot_Interpolation( hMainFig, hPlotAxes, 3 );

      case -1
        msgbox( 'Date limits are not correct',...
          'Correction module', 'warn', 'modal');
    end


  end

%% InterpOtherCallback ...............................Interpolation OTher
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when
%----------------------------------------------------------------------
  function InterpPosOtherCallback( hObject, eventdata)

    msgbox( 'Method not yet implemented', ...
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
      'Function InterpOtherCallback', ...
      'warn',...
      'modal' );
  end

%% InterpPosCancelCallback ..........................Cancel Interpolation
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
  function InterpPosCancelCallback(hObject, eventdata)
    % Callback function run when
    % Get tsg application data
    % ------------------------
    tsg = getappdata( hMainFig, 'tsg_data' );
    % Get NO_CONTROL and INTERPOLATED_VALUE codes
    % -------------------------------------------
    NO_CONTROL         = tsg.qc.hash.NO_CONTROL.code;
    INTERPOLATED_VALUE = tsg.qc.hash.INTERPOLATED_VALUE.code;

    if ~isempty( tsg.POSITION_QC )
      iINTERP = find(  tsg.POSITION_QC == INTERPOLATED_VALUE);
      tsg.LATX( iINTERP ) = NaN * ones( size( iINTERP), 1 );
      tsg.LONX( iINTERP ) = NaN * ones( size( iINTERP), 1 );
      tsg.POSITION_QC = [];
    end
    % Save tsg application data
    % --------------------------
    setappdata( hMainFig, 'tsg_data', tsg );
    % Refresh plots
    % -------------
    plot_Interpolation( hMainFig, hPlotAxes, 1 );
    plot_Interpolation( hMainFig, hPlotAxes, 2 );
    plot_Interpolation( hMainFig, hPlotAxes, 3 );

  end


%% Cal_OnMenuCallback ..................................... Calibration
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when
%----------------------------------------------------------------------
  function Cal_OnMenuCallback( hObject, eventdata)
    % Activate or desactivate uipanels
    % --------------------------------
    set( hpCalCoef,         'Visible', 'on' );
    set( hbgParameter,      'Visible', 'off');
    set( hbgQc,             'Visible', 'off');
    % Pushbutton
    % ----------
    set( hQCToggletool,     'enable', 'off' );
    set( hClimToggletool,   'enable', 'off', 'state', 'off' );
    set( hBottleToggletool, 'enable', 'off' );
    set( hInterpToggletool, 'enable', 'off' );
    set( hHeaderPushtool,   'enable', 'off' );

    set( hPanToggletool,       'state', 'off', 'enable', 'on' );
    set( hTimelimitToggletool, 'state', 'off', 'enable', 'off' );
    set( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
    set( hZoomOutToggletool,   'state', 'off', 'enable', 'on' );
    % Get tsg application data
    % ------------------------
    tsg = getappdata( hMainFig, 'tsg_data' );
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed

    % Draw the 3 plots of the validation figure
    % -----------------------------------------
    plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' );
    plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' );
    plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' );
    % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array
    % ------------------------------------------------------------
    A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV);
    B_CNDC = strmatch('OFFSET',tsg.CNDC_LINCOEF_CONV);
    A_SSJT = strmatch('SLOPE', tsg.SSJT_LINCOEF_CONV);
    B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV);
    A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV);
    B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV);
    % Write the Cal Coef in the Editable uicontrol
    % --------------------------------------------
    set( hetCalCNDCSlope,  'String', num2str(tsg.CNDC_LINCOEF(A_CNDC)));
    set( hetCalCNDCOffset, 'String', num2str(tsg.CNDC_LINCOEF(B_CNDC)));
    set( hetCalSSJTSlope,  'String', num2str(tsg.SSJT_LINCOEF(A_SSJT)));
    set( hetCalSSJTOffset, 'String', num2str(tsg.SSJT_LINCOEF(B_SSJT)));
    set( hetCalSSTPSlope,  'String', num2str(tsg.SSTP_LINCOEF(A_SSTP)));
    set( hetCalSSTPOffset, 'String', num2str(tsg.SSTP_LINCOEF(B_SSTP)));
    % Intermediate variables
    % ----------------------
    tsg.CNDC_LINCOEF_NEW(A_CNDC) = str2num(get( hetCalCNDCSlope,  'String'));
    tsg.CNDC_LINCOEF_NEW(B_CNDC) = str2num(get( hetCalCNDCOffset, 'String'));
    tsg.SSJT_LINCOEF_NEW(A_SSJT) = str2num(get( hetCalSSJTSlope,  'String'));
    tsg.SSJT_LINCOEF_NEW(B_SSJT) = str2num(get( hetCalSSJTOffset, 'String'));
    tsg.SSTP_LINCOEF_NEW(A_SSTP) = str2num(get( hetCalSSTPSlope,  'String'));
    tsg.SSTP_LINCOEF_NEW(B_SSTP) = str2num(get( hetCalSSTPOffset, 'String'));

    % Save tsg application data
    % --------------------------
    setappdata( hMainFig, 'tsg_data', tsg );

  end


%% Cal_OffMenuCallback ..................................... Calibration
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when
%----------------------------------------------------------------------
  function Cal_OffMenuCallback( hObject, eventdata)
    % Activate or desactivate uipanels
    % --------------------------------
    set( hpCalCoef,         'Visible', 'off' );
    set( hbgParameter,      'Visible', 'on');
    % Enable Pushbuttons
    % ------------------
    set( hClimToggletool,   'enable', 'on' );
    set( hBottleToggletool, 'enable', 'on' );
    set( hInterpToggletool, 'enable', 'on' );
    set( hHeaderPushtool,   'enable', 'on' );
    set( hQCToggletool,        'state', 'off', 'enable', 'on'  );
    set( hPanToggletool,       'state', 'off', 'enable', 'on' );
    set( hTimelimitToggletool, 'state', 'off', 'enable', 'on' );
    set( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
    set( hZoomOutToggletool,   'state', 'off', 'enable', 'on' );
    % Get tsg application data
    % ------------------------
    tsg = getappdata( hMainFig, 'tsg_data' );
    % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array
    % ------------------------------------------------------------
    A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV);
    B_CNDC = strmatch('OFFSET',tsg.CNDC_LINCOEF_CONV);
    A_SSJT = strmatch('SLOPE', tsg.SSJT_LINCOEF_CONV);
    B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV);
    A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV);
    B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV);
    % Save the calibration coefficient
    % --------------------------------
    tsg.CNDC_LINCOEF(A_CNDC) = tsg.CNDC_LINCOEF_NEW(A_CNDC);
    tsg.CNDC_LINCOEF(B_CNDC) = tsg.CNDC_LINCOEF_NEW(B_CNDC);
    tsg.SSJT_LINCOEF(A_SSJT) = tsg.SSJT_LINCOEF_NEW(A_SSJT);
    tsg.SSJT_LINCOEF(B_SSJT) = tsg.SSJT_LINCOEF_NEW(B_SSJT);
    tsg.SSTP_LINCOEF(A_SSTP) = tsg.SSTP_LINCOEF_NEW(A_SSTP);
    tsg.SSTP_LINCOEF(B_SSTP) = tsg.SSTP_LINCOEF_NEW(B_SSTP);
    tsg.CNDC_LINCOEF_NEW = [];
    tsg.SSJT_LINCOEF_NEW = [];
    tsg.SSTP_LINCOEF_NEW = [];
    % Save tsg application data
    % --------------------------
    setappdata( hMainFig, 'tsg_data', tsg );
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed

    % Draw the 3 plots of the validation figure
    % -----------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    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} );

  end

%% CalibrateCallback .......................................... Calibration
  function CalibrateCallback(hObject, eventdata)
    % Callback function run when
    % Get tsg application data
    % ------------------------
    tsg = getappdata( hMainFig, 'tsg_data' );
    % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array
    % ------------------------------------------------------------
    A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV);
    B_CNDC = strmatch('OFFSET',tsg.CNDC_LINCOEF_CONV);
    A_SSJT = strmatch('SLOPE', tsg.SSJT_LINCOEF_CONV);
    B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV);
    A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV);
    B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV);
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    % Get the calibration coefficients.
    % They will be used in the function calibration
    % ---------------------------------------------
    tsg.CNDC_LINCOEF_NEW(A_CNDC) = str2num(get( hetCalCNDCSlope,  'String'));
    tsg.CNDC_LINCOEF_NEW(B_CNDC) = str2num(get( hetCalCNDCOffset, 'String'));
    tsg.SSJT_LINCOEF_NEW(A_SSJT) = str2num(get( hetCalSSJTSlope,  'String'));
    tsg.SSJT_LINCOEF_NEW(B_SSJT) = str2num(get( hetCalSSJTOffset, 'String'));
    tsg.SSTP_LINCOEF_NEW(A_SSTP) = str2num(get( hetCalSSTPSlope,  'String'));
    tsg.SSTP_LINCOEF_NEW(B_SSTP) = str2num(get( hetCalSSTPOffset, 'String'));
    % Save tsg application data
    % --------------------------
    setappdata( hMainFig, 'tsg_data', tsg );

    % Calibrate the sensors
    % ---------------------
    calibration( hMainFig );
    % Update the Adjusted variables (SSPS - SSJT) with calibrated records
    % -------------------------------------------------------------------
Yves Gouriou's avatar
Yves Gouriou committed
    % updateAdjustedVariable( hMainFig );
    % Refresh plot #1
    % ---------------
    plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' );
    plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' );
    plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' );
    % As soon as a modification took place the data should be saved
    % -------------------------------------------------------------
    set( hSaveMenu, 'UserData', 'on' );

  end

%% CancelCalibrationCallback .................................. Calibration
  function CancelCalibrationCallback(hObject, eventdata)
    % Callback function run when
    % Get tsg application data
    % ------------------------
    tsg = getappdata( hMainFig, 'tsg_data' );
    % Emptied the CAL variables
    % -------------------------
    tsg.CNDC_CAL = [];
    tsg.SSPS_CAL = [];
    tsg.SSJT_CAL = [];
    tsg.SSTP_CAL = [];
    % Save tsg application data
    % --------------------------
    setappdata( hMainFig, 'tsg_data', tsg );
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed

    % Update the Adjusted variables
    % -----------------------------
Yves Gouriou's avatar
Yves Gouriou committed
    % updateAdjustedVariable( hMainFig );
    % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array
    % ------------------------------------------------------------
    A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV);
    B_CNDC = strmatch('OFFSET',tsg.CNDC_LINCOEF_CONV);
    A_SSJT = strmatch('SLOPE', tsg.SSJT_LINCOEF_CONV);
    B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV);
    A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV);
    B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV);
    % Write the Cal Coef in the Editable uicontrol
    % --------------------------------------------
    set( hetCalCNDCSlope,  'String', num2str(tsg.CNDC_LINCOEF(A_CNDC)));
    set( hetCalCNDCOffset, 'String', num2str(tsg.CNDC_LINCOEF(B_CNDC)));
    set( hetCalSSJTSlope,  'String', num2str(tsg.SSJT_LINCOEF(A_SSJT)));
    set( hetCalSSJTOffset, 'String', num2str(tsg.SSJT_LINCOEF(B_SSJT)));
    set( hetCalSSTPSlope,  'String', num2str(tsg.SSTP_LINCOEF(A_SSTP)));
    set( hetCalSSTPOffset, 'String', num2str(tsg.SSTP_LINCOEF(B_SSTP)));
    % Refresh plot #1
    % ---------------
    plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' );
    plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' );
    plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' );
    % As soon as a modification took place the data should be saved
    % -------------------------------------------------------------
    set( hSaveMenu, 'UserData', 'on' );

  end

%% ZoomIn_OnMenuCallback
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when the toolbar zoom in (increase) push button
% is pressed
%----------------------------------------------------------------------
  function ZoomIn_OnMenuCallback(hObject, eventdata)
    % Desactivate some toggle buttons, hZoomOutToggletool changed state
    % must be call before zoom function because the callback set zoom to
    % off
    % -------------------------------------------------------------------
    set( hZoomOutToggletool,   'state', 'off' );
    set( hQCToggletool,        'state', 'off' );
    set( hPanToggletool,       'state', 'off' );
    set( hTimelimitToggletool, 'state', 'off' );

    % Hide the map. Otherwise it slows down the zooming
    % -------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %     set( hMapToggletool,       'state', 'off' );
    % returns a zoom mode object for the figure hMainFig handle
    % ---------------------------------------------------------
    hZoom = zoom(hMainFig);

    % Turns off the automatic adaptation of date ticks
    % ------------------------------------------------
    zoomAdaptiveDateTicks('off');

    % turns interactive zooming to in (increase)
    % ------------------------------------------
    set(hZoom, 'direction', 'in');

    % Disallows a zoom operation on the MAP axes objects
    % --------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %      setAllowAxesZoom(hZoom, hPlotAxes(4), false);

    % turns on interactive zooming (same effect than zoom on) but prevent
    % side effect on another figure
    % -------------------------------------------------------------------
    set(hZoom, 'enable', 'on');

    % Set this callback to listen to when a zoom operation finishes
    % must be call after enable zoom (bug ?)
    % -------------------------------------------------------------
    set(hZoom, 'ActionPostCallback', @ZoomPan_PostCallback);

  end

%% ZoomIn_OffMenuCallback
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when the toolbar zoom in (increase) push button
% is pressed
%----------------------------------------------------------------------
  function ZoomIn_OffMenuCallback(hObject, eventdata)
    % disable zoom mode
    % -----------------
    zoom off;
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%------------------------------------------------------------------------
% Callback function run when the toolbar zoom out (descrease) push button
% is pressed
%------------------------------------------------------------------------
  function ZoomOut_OnMenuCallback(hObject, eventdata)

    % Desactivate Zoom In Toggle toggle button
    % -----------------------------------------
    set( hZoomInToggletool,    'state', 'off' );
    set( hQCToggletool,        'state', 'off' );
    set( hPanToggletool,       'state', 'off' );
    set( hTimelimitToggletool, 'state', 'off' );
    % Hide the map. Otherwise it slows down the zooming
    % -------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %     set( hMapToggletool,       'state', 'off' );
    % returns a zoom mode object for the figure hMainFig handle
    % ---------------------------------------------------------
    hZoom = zoom(hMainFig);
    % turns interactive zooming out (decrease)
    % ----------------------------------------
    set(hZoom, 'direction', 'out');

    % Disallows a zoom operation on the MAP axes objects
    % --------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %     setAllowAxesZoom(hZoom, hPlotAxes(4), false);

    % turns on interactive zooming (same effect than zoom on) but prevent
    % side effect on another figure
    % -------------------------------------------------------------------
    set(hZoom, 'enable', 'on');
    % Set this callback to listen to when a zoom operation finishes
    % -------------------------------------------------------------
    set(hZoom, 'ActionPostCallback', @ZoomPan_PostCallback);
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%------------------------------------------------------------------------
% Callback function run when the toolbar zoom out (descrease) push button
% is pressed
%------------------------------------------------------------------------
  function ZoomOut_OffMenuCallback(hObject, eventdata)

    % turns interactive zooming off
    % -----------------------------
    zoom off;
    % cursor back to normal, test if it's really necessery
    % -----------------------------------------------------
    %set(hMainFig, 'Pointer', 'arrow');
  end

%% Pan_OnMenuCallback
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when the pan toggle toolbar is selected
%----------------------------------------------------------------------
  function Pan_OnMenuCallback(hObject, eventdata)
    % Desactivate some toggle buttons
    % -------------------------------
    set( hQCToggletool,        'state', 'off' );
    set( hTimelimitToggletool, 'state', 'off' );
    set( hZoomInToggletool,    'state', 'off' );
    set( hZoomOutToggletool,   'state', 'off' );
    % Hide the map. Otherwise it slows down the panning
    % -------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %     set( hMapToggletool,       'state', 'off' );

    % Returns a pan mode object for the figure handle
    % -----------------------------------------------
    hPan = pan(hMainFig);
    % Disallows a pan operation on the MAP axes objects
    % --------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    %     setAllowAxesPan(hPan, hPlotAxes(4), false);

    % turns on interactive pan (same effect than pan on) but prevent
    % side effect on another figure
    % --------------------------------------------------------------
    set(hPan, 'enable', 'on');
    % Set this callback to listen to when a zoom operation finishes
    % must be call after enable zoom (bug ?)
    % -------------------------------------------------------------
    set(hPan, 'ActionPostCallback', @ZoomPan_PostCallback);
%% Pan_OffMenuCallback
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%----------------------------------------------------------------------
% Callback function run when the pan toggle toolbar is released
%----------------------------------------------------------------------
  function Pan_OffMenuCallback(hObject, eventdata)
    % turns interactive pan off
    % -------------------------
    pan off;
    % cursor back to normal, test if it's really necessery
    % -----------------------------------------------------
    %set(hMainFig, 'Pointer', 'arrow');
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
%------------------------------------------------------------------------
% Callback function run when zoom or pan action finishes: redraw axes
%------------------------------------------------------------------------
  function ZoomPan_PostCallback(hObject, eventdata)

    % 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
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed

    % Re-draw the map once the zoom/pan is off
    % ----------------------------------------
    if strcmp( get(hMapFig,'visible'), 'on') == 1
      erase_Line( hPlotAxes, 4 );
      plot_map( hMainFig, hPlotAxes);
    end
%% QCMenuCallback
%----------------------------------------------------------------------
% Callback function run when the Automatic QC menu item is selected
%
% Si vous modiifer ce CallBack verifier les modifications a apporter a
% 1 - preferenceForm.m
% 2 - tsg_preference.m
%----------------------------------------------------------------------
  function QCMenuCallback(hObject, eventdata, test)
    
    switch test
      case 'Speed'
        minSpeedQC(hMainFig)
      case 'Flow'
        minFlowQC(hMainFig)
      case 'Press'
        minPressQC(hMainFig)
      case 'SSPSmin'
        minSSPSQC(hMainFig)
      case 'SSPSmax'
        maxSSPSQC(hMainFig)
      case 'SSJTmin'
        minSSJTQC(hMainFig)
      case 'SSJTmax'
        maxSSJTQC(hMainFig)
      case 'SSTPmin'
        minSSTPQC(hMainFig)
      case 'SSTPmax'
        maxSSTPQC(hMainFig)
      otherwise
        msgbox('QCMenuCallback : erreur', 'QCMenuCallback','error', 'modal');
    end

    % --------------------------
    % refresh QC statistic panel
    % --------------------------
    display_QC( hMainFig );

    % ------------------
    % Refresh the plots
    %-------------------
    
    % Get the parameter displayed on plot number 1 : figure at the top
    % -----------------------------------------------------------------
    PARA = getParaCorModule( hMainFig );

    % Draw plot 1
    % -----------
    plot_Validation( hMainFig, hPlotAxes, 1, PARA{1} );