From bb36082bcdf8baaf3d7d7e55f7a5ae5c297e27a6 Mon Sep 17 00:00:00 2001
From: Jacques Grelet <jacques.grelet@ird.fr>
Date: Wed, 26 Dec 2007 17:48:37 +0000
Subject: [PATCH] =?UTF-8?q?Ajout=20des=20classes:=20hashtable=20tsg=5Fnc.m?=
 =?UTF-8?q?=20utilis=C3=A9es=20pour=20la=20gestion=20des=20attributs=20glo?=
 =?UTF-8?q?baux=20et=20variables=20netcdf=20tsg=5Fnc=20est=20utilis=C3=A9e?=
 =?UTF-8?q?=20=C3=A9galement=20pour=20la=20gestion=20dynamique=20du=20masq?=
 =?UTF-8?q?ue=20de=20l'entete=20des=20attributs=20globaux?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 @hashtable/Contents.m    |  14 ++++++
 @hashtable/clear.m       |   9 ++++
 @hashtable/display.m     |  24 +++++++++
 @hashtable/elements.m    |  13 +++++
 @hashtable/get.m         |  12 +++++
 @hashtable/hashtable.m   |  21 ++++++++
 @hashtable/isempty.m     |   8 +++
 @hashtable/iskey.m       |   9 ++++
 @hashtable/keys.m        |   8 +++
 @hashtable/put.m         |  18 +++++++
 @hashtable/remove.m      |  11 +++++
 @hashtable/values.m      |   8 +++
 @tsg_nc/display.m        |   8 +++
 @tsg_nc/get.m            |  52 ++++++++++++++++++++
 @tsg_nc/get_fieldnames.m |  18 +++++++
 @tsg_nc/keys.m           |  10 ++++
 @tsg_nc/set.m            |   7 +++
 @tsg_nc/tsg_nc.m         | 103 +++++++++++++++++++++++++++++++++++++++
 @tsg_nc/tsg_ncattr.csv   |  34 +++++++++++++
 @tsg_nc/tsg_ncvar.csv    |  66 +++++++++++++++++++++++++
 20 files changed, 453 insertions(+)
 create mode 100644 @hashtable/Contents.m
 create mode 100644 @hashtable/clear.m
 create mode 100644 @hashtable/display.m
 create mode 100644 @hashtable/elements.m
 create mode 100644 @hashtable/get.m
 create mode 100644 @hashtable/hashtable.m
 create mode 100644 @hashtable/isempty.m
 create mode 100644 @hashtable/iskey.m
 create mode 100644 @hashtable/keys.m
 create mode 100644 @hashtable/put.m
 create mode 100644 @hashtable/remove.m
 create mode 100644 @hashtable/values.m
 create mode 100644 @tsg_nc/display.m
 create mode 100644 @tsg_nc/get.m
 create mode 100644 @tsg_nc/get_fieldnames.m
 create mode 100644 @tsg_nc/keys.m
 create mode 100644 @tsg_nc/set.m
 create mode 100644 @tsg_nc/tsg_nc.m
 create mode 100644 @tsg_nc/tsg_ncattr.csv
 create mode 100644 @tsg_nc/tsg_ncvar.csv

diff --git a/@hashtable/Contents.m b/@hashtable/Contents.m
new file mode 100644
index 0000000..7583c8d
--- /dev/null
+++ b/@hashtable/Contents.m
@@ -0,0 +1,14 @@
+% @HASHTABLE
+%
+% Files
+%   clear     - Clear hash table
+%   display   - Display a hash table object
+%   elements  - Get all hash table elements
+%   get       - Get data from the hash table
+%   hashtable - Constructor for HashTable class
+%   isempty   - Check to see if the hash is empty
+%   iskey     - Check to see if the hash is currently using a key
+%   keys      - Get all the keys currently being used in the hash
+%   put       - Put data in the hash table
+%   remove    - Remove element from the hash
+%   values    - Get all data contained in the hash table
diff --git a/@hashtable/clear.m b/@hashtable/clear.m
new file mode 100644
index 0000000..0db4b37
--- /dev/null
+++ b/@hashtable/clear.m
@@ -0,0 +1,9 @@
+function hash = clear(hash)
+%CLEAR Clear hash table
+%   hash = clear(hash)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+hash.keys = {};
+hash.data = {};
+
diff --git a/@hashtable/display.m b/@hashtable/display.m
new file mode 100644
index 0000000..b956331
--- /dev/null
+++ b/@hashtable/display.m
@@ -0,0 +1,24 @@
+function display(hash)
+%DISPLAY Display a hash table object
+%   display(hash)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+%isLoose = strcmp(get(0,'FormatSpacing'),'loose');
+isLoose = 0;
+
+if(length(inputname(1)) ~= 0)
+    if isLoose, disp(' '), end
+    disp( sprintf('%s =', inputname(1)) );
+end
+
+if isLoose, disp(' '), end
+
+%fprintf('\thashtable\n' );
+if isempty(hash)
+    fprintf('\tEmpty\n\n' );
+else
+%    disp( sprintf('\tElements:') );
+    display( elements(hash) );
+end
+
diff --git a/@hashtable/elements.m b/@hashtable/elements.m
new file mode 100644
index 0000000..d610e8b
--- /dev/null
+++ b/@hashtable/elements.m
@@ -0,0 +1,13 @@
+function data = elements(hash)
+%ELEMENTS Get all hash table elements
+%   data = values(hash)
+%
+% Get all hash table elements in a N-by-2 cell matrix where N is the number of
+% elements, first column contains the element keys, and second column contains
+% the element values.
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+data(:,1) = hash.keys;
+data(:,2) = hash.data;
+
diff --git a/@hashtable/get.m b/@hashtable/get.m
new file mode 100644
index 0000000..3b86f76
--- /dev/null
+++ b/@hashtable/get.m
@@ -0,0 +1,12 @@
+function data = get(hash,key)
+%GET Get data from the hash table
+%   data = get(hash,key)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+index = find(strcmp(hash.keys,key));
+if isempty(index)
+    data = {};
+else
+    data = hash.data{index};
+end
diff --git a/@hashtable/hashtable.m b/@hashtable/hashtable.m
new file mode 100644
index 0000000..7e4a8d0
--- /dev/null
+++ b/@hashtable/hashtable.m
@@ -0,0 +1,21 @@
+function hash = hashtable(varargin)
+%HASHTABLE Constructor for hashtable class
+%   hash = hashtable - Default constructor, empty hash table
+%   hash = hashtable(keys,data) - keys and data are N-by-1 lists
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+if nargin == 1 && isa(varargin{1},'hashtable')
+    hash = varargin{1};
+    return;
+elseif nargin == 0
+    h.keys = {};
+    h.data = {};
+elseif nargin == 2
+    h.keys = varargin{1};
+    h.data = varargin{2};
+else
+    error('hashtable:hashtable', 'Invalid arguments.');
+end
+    
+hash = class(h,'hashtable');
diff --git a/@hashtable/isempty.m b/@hashtable/isempty.m
new file mode 100644
index 0000000..f3a39e7
--- /dev/null
+++ b/@hashtable/isempty.m
@@ -0,0 +1,8 @@
+function bool = isempty(hash)
+%ISEMPTY Check to see if the hash is empty
+%   bool = isempty(hash)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+bool = isempty(hash.keys);
+
diff --git a/@hashtable/iskey.m b/@hashtable/iskey.m
new file mode 100644
index 0000000..0431a80
--- /dev/null
+++ b/@hashtable/iskey.m
@@ -0,0 +1,9 @@
+function bool = iskey(hash,key)
+%ISKEY Check to see if the hash is currently using a key
+%   bool = iskey(hash,key)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+index = find(strcmp(hash.keys,key));
+bool = ~isempty(index);
+
diff --git a/@hashtable/keys.m b/@hashtable/keys.m
new file mode 100644
index 0000000..ddadf5e
--- /dev/null
+++ b/@hashtable/keys.m
@@ -0,0 +1,8 @@
+function keys = keys(hash)
+%KEYS Get all the keys currently being used in the hash
+%   keys = keys(hash)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+keys = hash.keys;
+
diff --git a/@hashtable/put.m b/@hashtable/put.m
new file mode 100644
index 0000000..f08adfc
--- /dev/null
+++ b/@hashtable/put.m
@@ -0,0 +1,18 @@
+function hash = put(hash,key,data)
+%PUT Put data in the hash table
+%   hash = put(hash,key,data)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+index = find(strcmp(hash.keys,key));
+if isempty(index)
+    if isempty(hash.keys)
+        hash.keys{1} = key;
+        hash.data{1} = data;
+    else
+        hash.keys{end+1} = key;
+        hash.data{end+1} = data;
+    end
+else
+    hash.data{index} = data;
+end
diff --git a/@hashtable/remove.m b/@hashtable/remove.m
new file mode 100644
index 0000000..fa92ba4
--- /dev/null
+++ b/@hashtable/remove.m
@@ -0,0 +1,11 @@
+function hash = remove(hash,key)
+%REMOVE Remove element from the hash
+%   hash = remove(hash,key)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+index = find(strcmp(hash.keys,key));
+if ~isempty(index)
+    hash.keys = {hash.keys{1:index-1} hash.keys{index+1:end}};
+    hash.data = {hash.data{1:index-1} hash.data{index+1:end}};
+end
diff --git a/@hashtable/values.m b/@hashtable/values.m
new file mode 100644
index 0000000..c45cd44
--- /dev/null
+++ b/@hashtable/values.m
@@ -0,0 +1,8 @@
+function data = values(hash)
+%VALUES Get all data contained in the hash table
+%   data = values(hash)
+
+% Copyright (c) 2004 Matthew Krauski (mkrauski@uci.edu), CNLM, UC Irvine
+
+data = hash.data;
+
diff --git a/@tsg_nc/display.m b/@tsg_nc/display.m
new file mode 100644
index 0000000..2f733ac
--- /dev/null
+++ b/@tsg_nc/display.m
@@ -0,0 +1,8 @@
+function display(self)
+
+% tsg_ncvar/display
+
+% $Id$
+
+disp(struct(self));
+
diff --git a/@tsg_nc/get.m b/@tsg_nc/get.m
new file mode 100644
index 0000000..c950fc8
--- /dev/null
+++ b/@tsg_nc/get.m
@@ -0,0 +1,52 @@
+function result = get( self, varargin )
+
+% tsg_ncvar/get -- get structure of "tsg_ncvar" object.
+%
+% Input
+% -----
+% self   ........... instance of 'tsg_ncvar' object
+% key    ........... GF3 code
+% member ........... attribute member
+%
+% Output
+% ------
+% result ........... structure for the key (hastable)
+%
+% if key dosn't exist, return empty struct
+
+% $Id$
+
+% Test variable argument list
+% ---------------------------
+switch (nargin)
+  
+  % Return the list of key 
+  % ----------------------
+  case 1
+     result = keys(self);
+
+  % Return for a valid key the hash (structure)
+  % -------------------------------------------
+  case 2
+    if  ~isempty( find(strcmp(keys(self), varargin{1})))
+      result = get(self.hashtable, varargin{1});
+    else
+      result = {};
+    end
+    
+  % Return the hash member value 
+  % ----------------------------
+  case 3
+    % call method get for an hashtable object
+    result = get(self, varargin{1});
+    % test if third arg is a valid member of the struct in the hash
+    if ~isempty( find(strcmp(keys(self), varargin{1})) ) && ...
+        isfield(result,varargin{2})
+      result = result.(varargin{2});
+    else
+      result = {};
+    end
+    
+  otherwise
+    error('Wrong input args');
+end
diff --git a/@tsg_nc/get_fieldnames.m b/@tsg_nc/get_fieldnames.m
new file mode 100644
index 0000000..0349aab
--- /dev/null
+++ b/@tsg_nc/get_fieldnames.m
@@ -0,0 +1,18 @@
+function result = get_fieldnames( self )
+
+% tsg_ncvar/get_fieldnames -- get internal fieldnames of "tsg_ncvar" object.
+%
+% Input
+% -----
+% self     ........... an instance of 'tsg_ncvar' object
+%
+% Output
+% ------
+% result   ........... cell with fieldnames
+
+% $Id$
+
+theStruc = get(self,'DAYD');
+result = fieldnames(theStruc);
+    
+    
diff --git a/@tsg_nc/keys.m b/@tsg_nc/keys.m
new file mode 100644
index 0000000..2d86898
--- /dev/null
+++ b/@tsg_nc/keys.m
@@ -0,0 +1,10 @@
+function result = keys(self)
+
+% tsg_ncvar/keys -- Get all the keys currently being used in the internal
+%   tsg_ncvar hash
+%   result = keys(self)
+
+% $Id: keys.m 54 2006-03-03 13:44:00Z jgrelet $
+
+result = keys(self.hashtable);
+
diff --git a/@tsg_nc/set.m b/@tsg_nc/set.m
new file mode 100644
index 0000000..67b13aa
--- /dev/null
+++ b/@tsg_nc/set.m
@@ -0,0 +1,7 @@
+function self = set( self, varargin )
+
+% tsg_ncvar/set -- set new pair key/value for "tsg_ncvar" object.
+%
+% not implemented yet
+
+% $Id£
diff --git a/@tsg_nc/tsg_nc.m b/@tsg_nc/tsg_nc.m
new file mode 100644
index 0000000..2d38954
--- /dev/null
+++ b/@tsg_nc/tsg_nc.m
@@ -0,0 +1,103 @@
+function ncv = tsg_ncr( varargin )
+
+% tsg_nc/tsg_nr -- Constructor for "tsg_nc" class.
+% tsg_nc(varargin) constructs a 'tsg_nc' object from 
+% supplied csv 'filename'.
+%
+% Usage:  nca = tsg_ncvar( file )
+%
+% Input
+% -------
+% filename ........... csv data filename
+%
+% Output
+% --------
+% ncv      ........... instance of tsg_ncvar object
+%
+% See also: methods('tsg_ncvar').
+% 
+% $Id: roscop.m 129 2007-03-16 08:56:31Z jgrelet $
+
+% check varargin
+% --------------
+switch nargin
+  case 0  % create default object
+    error('csv filename not supplied');
+  case 1
+    if( isa(varargin{1}, 'char'))
+      file = varargin{1};      
+    else
+      error('Wrong input argument');
+    end
+  otherwise
+    error('Wrong number of input arguments');
+end
+
+% check csv file validity 
+% -----------------------
+fid = fopen( file, 'r' );
+if fid == -1
+  error(['The specified data file ''%s'' does not exist ...\n' ...
+         'or is not in the directory which is on the MATLAB search path'],...
+         file);   
+end
+
+% create hashtable
+% ----------------
+data = hashtable;
+
+% read csv file
+% -------------
+header   = textscan(fid,'%s \n %s [^\n]','headerlines', 3 );
+members  = textscan(header{1}{1},'%s','delimiter',';');
+types    = textscan(header{2}{1},'%s','delimiter',';');
+values   = textscan(fid,'%s','delimiter',';');
+
+% populate private structure ncv
+% ------------------------------
+ncv.file    = which( file );
+ncv.size    = numel(values{1}) / numel(members{1});
+ncv.member  = numel(members{1}); 
+
+% loop
+% ----
+for i=1:ncv.size
+  for j=2:ncv.member
+    member = genvarname(members{1}{j});
+    type   = genvarname(types{1}{j});
+    value  = values{1}{j + ncv.member * (i -1)};
+    key    = values{1}{1 + ncv.member * (i -1)};
+    
+    % dynamically populate structure 'theStruct' 
+    % ------------------------------------------
+    if isempty(values{1}{j + ncv.member * (i -1)})
+      theStruct.(member) = [];
+    else
+      switch type
+        case 'char'
+          theStruct.(member) = value;
+        case {'integer','double'}
+          theStruct.(member) = str2double(value);
+        otherwise
+          theStruct.(member) = value; 
+      end
+    end
+  end
+  
+  % populate the hashtable
+  % ----------------------
+  data = put(data, key, theStruct);
+  
+  % initialize internal structure
+  % -----------------------------
+  theStruct = [];
+  
+end
+
+% remove first member in structure, the key
+% -----------------------------------------
+ncv.member  = ncv.member -1;
+
+% bless tsg_ncvar class and inherite from hashtable data
+% ------------------------------------------------------
+ncv = class(ncv, 'tsg_nc', data );
diff --git a/@tsg_nc/tsg_ncattr.csv b/@tsg_nc/tsg_ncattr.csv
new file mode 100644
index 0000000..479b3e5
--- /dev/null
+++ b/@tsg_nc/tsg_ncattr.csv
@@ -0,0 +1,34 @@
+% definition
+% $Id$
+%
+code;name;uicontrolType;string;value;length;height;horizontalAlignment;comment;
+char;char;char;char;integer;integer;integer;char;char;
+PLATFORM_NAME;PLATFORM NAME:;edit;;;;;right;Ship name;
+SHIP_CALL_SIGN;SHIP CALL SIGN:;edit;;;;;right;Ship call sign;
+SHIP_MMSI;SHIP MMSI:;edit;;;;;right;Ship MMSI (ASN) number;
+TSG_TYPE;TSG TYPE:;popupmenu;SBE21|SBE45|UNKNO;1;.1;.015;right;Thermosalinograph model number;
+TSG_NUMBER;TSG NUMBER:;edit;;;;;right;TSG serial number;
+TINT_TYPE;TINT TYPE:;popupmenu;SBE38|SBE3S|UNKNO;1;.1;.015;right;External sea surface temperature sensor;
+TINT_NUMBER;TINT NUMBER:;edit;;;;;right;External temperature sensor serial number;
+DATA_TYPE;DATA TYPE:;edit;;;;;right;Describe data type contained in file, eg: Thermosilinometer data;
+DATA_MODE;DATA MODE:;popupmenu;Delayed mode data|Real time data;1;;;right;Indicate if the file contains real time or delayed mode data;
+SAMPLING_PERIOD;SAMPLING PERIOD:;edit;300;;.05;;right;Sampling period in seconds: 6 to 3600;
+PROCESSING_STATUS;PROCESSING STATUS:;edit;;;;;right;State of processing;
+DATE_START;DATE_START:;edit;;;;;right;Date of first measurements;
+DATE_END;DATE END:;edit;;;;;right;Date of last measurements;
+SOUTH_LATX;SOUTH LATX:;edit;;;;;right;South limit of measurements;
+NORTH_LATX;NORTH LATX:;edit;;;;;right;North limit of measurements;
+WEST_LONX;WEST LONX:;edit;;;;;right;West limit of measurements;
+EAST_LONX;EAST LONX:;edit;;;;;right;East limit of measurements;
+FORMAT_VERSION;FORMAT VERSION:;edit;1.4;;;;right;File format version;
+DATE_CREATION;DATE CREATION:;edit;;;;;right;Date and time of file creation, format: YYYYMMDDHHMISS;
+DATE_UPDATE;DATE UPDATE:;edit;;;;;right;Date and time of file update, format: YYYYMMDDHHMISS;
+DATA_RESTRICTIONS;DATA RESTRICTIONS:;edit;NONE;;;;right;Restriction on use for these data;
+CITATION;CITATION:;edit;;;;;right;This citation should be used for publications;
+COMMENT;COMMENT:;edit;;;;;right;;
+PROJECT_NAME;PROJECT NAME:;edit;;;;;right;Name of project wich operates the TSG line, ex: ORE-SSS;
+PI_NAME;PI NAME:;edit;;;;;right;Name of principal investigator in charge of the TSG, ex: IRD or GENAVIR;
+DATA_CENTRE;DATA CENTRE:;edit;;;;;right;Code for data center (2 char);
+DATA_ACQUISITION;DATA ACQUISITION:;edit;;;;;right;Acquisition data centre, ex: SHOM,IRD,GENAVIR,CNRS,...;
+PROCESSING_CENTRE;PROCESSING CENTRE:;edit;;;;;right;Processing data centre, ex: ORE-SSS,CORIOLIS,SISMER,...;
+PROCESSING_STATES;PROCESSING STATES:;edit;;;;;right;Need to be defined, IRD action,...;
diff --git a/@tsg_nc/tsg_ncvar.csv b/@tsg_nc/tsg_ncvar.csv
new file mode 100644
index 0000000..509ba34
--- /dev/null
+++ b/@tsg_nc/tsg_ncvar.csv
@@ -0,0 +1,66 @@
+% tsg_ncvar.csv:  definition (14 separators ; actually)
+% $Id$
+%
+code;dimension;long_name;standard_name;units;conventions;valid_min;valid_max;format;FillValue;epic_code;axis;resolution;comment;
+char;char;char;char;char;char;integer;integer;char;double;integer;char;double;char;
+REFERENCE_DATE_TIME;STRING14;;;;yyyymmddhhmmss;;;;;;;;Reference date for julian days origin;
+DATE;DAYD,STRING14;DATE OF MAIN INSTRUMENT MEASUREMENT;;;yyyymmddhhmmss;;;;;;;;This is the original data describing the date, it must not be lost;
+DATE_WS;DAYD,STRING14;DATE OF WATER SAMPLE;;;yyyymmddhhmmss;;;;;;;;This is the original data describing the date, it must not be lost;
+DATE_EXT;DAYD,STRING14;DATE OF EACH EXTERNAL DATA MEASUREMENT;;;yyyymmddhhmmss;;;;;;;;This is the original data describing the date, it must not be lost;
+DAYD;DAYD;DECIMAL JULIAN DAY (UTC) OF EACH MEASUREMENT;time;days since 1950/01/01 00:00:00;Relative julian days with decimal part (as parts of the day);0.0;36600.0;%9.5lf;9999999.;601;t;;Julian day of the measurement;
+DAYD_WS;DAYD_WS;DECIMAL JULIAN DAY (UTC) OF EACH WATER SAMPLE;time;days since 1950/01/01 00:00:00;Relative julian days with decimal part (as parts of the day);0.0;36600.0;%9.5lf;9999999.;601;t;;Julian day of the measurement;
+DAYD_EXT;DAYD_EXT;DECIMAL JULIAN DAY (UTC) OF EXTERNAL DATA MEASUREMENT;time;Days since 1950/01/01 00:00:00;Relative julian days with decimal part (as parts of the day);0.0;36600.0;%9.5lf;9999999.;601;t;;Julian day of the measurement;
+LATX;DAYD;LATITUDE OF EACH MEASUREMENT;latitude;degree_north (decimal);;-90;90;%+8.4lf;999999.;500;;;Latitude of the measurement;
+LATX_WS;DAYD_WS;LATITUDE OF WATER SAMPLE;latitude;degree_north (decimal);;-90;90;%+8.4lf;999999.;500;;;Latitude of the measurement;
+LATX_EXT;DAYD_EXT;LATITUDE OF EACH EXTERNAL DATA MEASUREMENT;latitude;degree_north (decimal);;-90;90;%+8.4lf;999999.;500;;;Latitude of the measurement;
+LONX;DAYD;LONGITUDE OF EACH MEASUREMENT;longitude;degree_east (decimal);;-180;180;%+9.4lf;999999.;501;;;Longitude of the measurement;
+LONX_WS;DAYD_WS;LONGITUDE OF WATER SAMPLE;longitude;degree_east (decimal);;-180;180;%+9.4lf;999999.;501;;;Longitude of the measurement;
+LONX_EXT;DAYD_EXT;LONGITUDE OF EACH EXTERNAL DATA MEASUREMENT;longitude;degree_east (decimal);;-180;180;%+9.4lf;999999.;501;;;Longitude of the measurement;
+SPDC;DAYD;SHIP SPEED COMPUTED FROM NAVIGATION;speed;knots;;0;50;%6.3lf;99999.;;;0.1;Ship speed from GPS (SOG). If SOG not available, derived from last position;
+PRES;DAYD;SEA PRESSURE IN TSG;pressure;decibar=10000 pascals;;0;10;%6.1lf;99999.;;;0.1;Pressure inside TSG, this is an indication that pump is working properly;
+CNDC;DAYD;ELECTRICAL CONDUCTIVITY;conductivity;mho/meter;;0;7;%5.3lf;99999.;;;0.0001;Conductivity measured by TSG. This data may have been reduced with a media (recommended) or a mean;
+CNDC_STD;DAYD;CONDUCTIVITY STANDARD DEVIATION;conductivity;mho/meter;;0;7;%5.3lf;99999.;;;0.0001;Standard deviation of conductivity measured by TSG (CNDC);
+CNDC_CAL;DAYD;CONDUCTIVITY CALIBRATED;conductivity calibrated;mho/meter;;0;7;%5.3lf;99999.;;;0.0001;Conductivity calibrated using linearization coefficient;
+CNDC_CALCOEF;NCOEF_CAL;CONDUCTIVITY CALIBRATION COEFFICIENTS;;;a,b,c,d,m;;;;99999.;;;;Conductivity linear drift correction coefficient;
+CNDC_LINCOEF;NCOEF_LIN;CONDUCTIVITY LINEAR DRIFT CORRECTION COEFFICIENTS;;;a,b;;;;99999.;;;;Conductivity Ocean temperature;
+SSJT;DAYD;WATER JACKET TEMPERATURE;temperature in TSG;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;Temperature inside TSG (Water Jacket Temperature). Warning, this is not ocean SST temperature. Used for salinity computation;
+SSJT_STD;DAYD;WATER JACKET TEMPERATURE STANDARD DEVIATION;temperature std;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;SSJT, Temperature inside TSG standard deviation for data wich have been reduced (with a mean or median);
+SSJT_CAL;DAYD;WATER JACKET TEMPERATURE CALIBRATED;temperature cal;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;SSJT, Temperature inside TSG calibrated using linearization coefficient;
+SSJT_CALCOEF;NCOEF_CAL;TEMPERATURE CALIBRATION COEFFICIENTS;;;a,b,c,d,f0;;;;99999.;;;;Temperature calibrated using linearization coefficient;
+SSJT_LINCOEF;NCOEF_LIN;TEMPERATURE LINEAR DRIFT CORRECTION COEFFICIENTS;;;a,b;;;;99999.;;;;Temperature linear drift correction coefficient;
+SSJT_ADJUSTED;DAYD;WATER JACKET TEMPERATURE ADJUSTED;temperature in TSG adjusted;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;Adjusted SSJT with external data (CTD,ARGO,XBT,...);
+SSJT_ADJUSTED_ERROR;DAYD;ERROR ON ADJUSTED WATER JACKET TEMPERATURE;error temperature in TSG adjusted;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;Quality flag applied on adjusted SSJT;
+SSJT_ADJUSTED_QC;DAYD;WATER JACKET TEMPERATURE QUALITY FLAG;quality flag applied on temperature in TSG adjusted;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;Quality flag applied on adjusted SSJT;
+SSJT_ADJUSTED_HIST;DAYD;ADJUSTED WATER JACKET TEMPERATURE PROCESSING HISTORY;temperature in TSG adjusted processing history;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;;
+SSPS;DAYD;SEA SURFACE PRACTICAL SALINITY;surface salinity;P.S.U.;;0;40;%6.3lf;99.999;;;0.001;Ocean salinity deduced fron conductivity and jacket TSG temperature;
+SSPS_QC;DAYD;SEA SURFACE SALINITY QUALITY FLAG;surface salinity quality;;;0;9;%1d;0;;;;Quality flag applied on salinity values;
+SSPS_CAL;DAYD;SEA SURFACE SALINITY CALIBRATED;surface salinity calibrated;P.S.U.;;0;40;%6.3lf;99.999;;;;Calibrated Ocean salinity deduced fron conductivity and jacket tsg temperature;
+SSPS_ADJUSTED;DAYD;SEA SURFACE SALINITY ADJUSTED;surface salinity adjusted;P.S.U.;;0;40;%6.3lf;99.999;;;0.001;Adjusted Ocean salinity deduced fron conductivity and jacket tsg temperature;
+SSPS_ADJUSTED_ERROR;DAYD;ERROR ON SEA SURFACE SALINITY ADJUSTED;error surface salinity adjusted;P.S.U.;;0;40;%6.3lf;99.999;;;;Error on adjusted Ocean salinity deduced fron conductivity and jacket tsg temperature;
+SSPS_ADJUSTED_QC;DAYD;ERROR ON SEA SURFACE SALINITY ADJUSTED QUALITY FLAG;error surface salinity adjusted quality;;;0;9;%1d;0;;;;Quality flag applied on adjusted Ocean salinity deduced fron conductivity and jacket tsg temperature;
+SSPS_ADJUSTED_HIST;DAYD;ADJUSTED SEA SURFACE SALINITY PROCESSING HISTORY;surface salinity adjusted processing history;;;;;;;;;;;
+SSPS_DEPH;N1;NOMINAL DEPTH OF WATER INTAKE FOR SALINITY MEASUREMENT;depth surface salinity;meter;;0;100;%6.3lf;99999.;;;;;
+SSPS_DEPH_MIN;N1;MINIMUM DEPTH OF WATER INTAKE FOR SALINITY MEASUREMENT;min depth surface salinity;meter;;0;100;%6.3lf;99999.;;;;;
+SSPS_DEPH_MAX;N1;MAXIMUM DEPTH OF WATER INTAKE FOR SALINITY MEASUREMENT;max depth surface salinity;meter;;0;100;%6.3lf;99999.;;;;;
+SSPS_WS;DAYD_WS;SEA SURFACE PRACTICAL SALINIT FROM WATER SAMPLE;surface salinity;P.S.U.;;0;40;%6.3lf;99.999;;;0.001;Sea surface salinity from water sample;
+SSPS_WS_QC;DAYD_WS;SEA SURFACE SALINITY QUALITY FLAG;surface salinity quality;;;0;9;%1d;0;;;;Quality flag applied on salinity values from water sample;
+SSPS_WS_ANALDATE;DAYD_WS;DATE OF WATER SAMPLE SURFACE SALINITY ANALYSIS;;;yyyymmddhhmmss;;;;;;;;Date of sea surface salinity water sample analysis;
+SSPS_WS_BOTTLE;DAYD_WS;SEA SURFACE SALINITY BOTTLE NUMBER;;;;;;;;;;;Number of sea surface salinity water sample;
+SSTP;DAYD;SEA SURFACE TEMPERATURE;surface temperature;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;Sea Surface Temperature (SST) measure at intake with external instrument. This is ocean SST;
+SSTP_QC;DAYD;SEA SURFACE TEMPERATURE QUALITY FLAG;surface temperature quality;;;0;9;%1d;0;;;;Quality flag applied on SST temperature values;
+SSTP_CAL;DAYD;SEA SURFACE TEMPERATURE CALIBRATED;surface temperature calibrated;Celsius degree;;-1.5;38;%6.3lf;99.999;;;;Calibrated Ocean temperature;
+SSTP_ADJUSTED;DAYD;SEA SURFACE TEMPERATURE ADJUSTED;surface temperature adjusted;Celsius degree;;-1.5;38;%6.3lf;99.999;;;;Adjusted Ocean temperature;
+SSTP_ADJUSTED_ERROR;DAYD;ERROR ON SEA SURFACE TEMPERATURE ADJUSTED;error surface temperature adjusted;Celsius degree;;-1.5;38;%6.3lf;99.999;;;;Error on adjusted Ocean temperature;
+SSTP_ADJUSTED_QC;DAYD;SEA SURFACE TEMPERATURE ADJUSTED QUALITY FLAG;quality flag on surface temperature adjusted;;;0;9;%1d;0;;;;Quality flag applied on adjusted Ocean temperature;
+SSTP_ADJUSTED_HIST;DAYD;ADJUSTED SEA SURFACE TEMPERATURE PROCESSING HISTORY;surface temperature adjusted processing history;;;;;;;;;;;
+SSTP_DEPH;N1;NOMINAL DEPTH OF WATER INTAKE FOR TEMPERATURE MEASUREMENT;depth surface temperature;meter;;0;100;%6.3lf;99999;;;;;
+SSTP_DEPH_MIN;N1;MINIMUM DEPTH OF WATER INTAKE FOR TEMPERATURE MEASUREMENT;min depth surface temperature;meter;;0;100;%6.3lf;99999;;;;;
+SSTP_DEPH_MAX;N1;MAXIMUM DEPTH OF WATER INTAKE FOR TEMPERATURE MEASUREMENT;max depth surface temperature;meter;;0;100;%6.3lf;99999;;;;;
+SSTP_CALCOEF;NCOEF_CAL;TEMPERATURE CALIBRATION COEFFICIENTS;;;a,b,c,d,f0;;;;99999.;;;;Temperature calibrated using linearization coefficient;
+SSTP_LINCOEF;NCOEF_LIN;TEMPERATURE LINEAR DRIFT CORRECTION COEFFICIENTS;;;a,b;;;;99999.;;;;Temperature linear drift correction coefficient;
+SSTP_EXT;DAYD_EXT;SEA SURFACE TEMPERATURE FROM EXTERNAL DATA;surface temperature;Celsius degree;;-1.5;38;%6.3lf;99.999;;;0.001;Sea Surface Temperature (SST) from external data instrument;
+SSTP_EXT_QC;DAYD_EXT;SEA SURFACE TEMPERATURE QUALITY FLAG;surface temperature quality;;;0;9;%1d;0;;;;Quality flag applied on external temperature data values;
+SSTP_EXT_TYPE;DAYD_EXT;SEA SURFACE TEMPERATURE EXTERNAL INSTRUMENT TYPE;surface temperature type instrument;;;;;;;;;;CTD,ARGO,XBT,...;
+SSPS_EXT;DAYD_EXT;SEA SURFACE PRACTICAL SALINIT FROM WATER SAMPLE;surface salinity;P.S.U.;;0;40;%6.3lf;99.999;;;0.001;Sea surface salinity from external instrument;
+SSPS_EXT_QC;DAYD_EXT;SEA SURFACE SALINITY QUALITY FLAG;surface salinity quality;;;0;9;%1d;0;;;;Quality flag applied on salinity values from external instrument;
+SSPS_EXT_TYPE;DAYD_EXT;SEA SURFACE SALINITY EXTERNAL INSTRUMENT TYPE;surface salinity type instrument;;;;;;;;;;CTD,ARGO,XBT,...;
-- 
GitLab