From 9332be828c4de2e4eceadf807507462318751a05 Mon Sep 17 00:00:00 2001
From: Jacques Grelet <jacques.grelet@ird.fr>
Date: Fri, 6 Jul 2018 08:32:42 +0000
Subject: [PATCH] v1.48.5rc1 improve map climatology  with ship track over
 International Date Line (pacific)

---
 tsg_tools/climatology/test_m_map.m | 31 +++++++++++++++----------
 tsg_util/plot_map.m                | 37 ++++++++++++++++++++++--------
 tsgqc.m                            |  4 ++--
 3 files changed, 48 insertions(+), 24 deletions(-)

diff --git a/tsg_tools/climatology/test_m_map.m b/tsg_tools/climatology/test_m_map.m
index cc515d3..d6740c4 100644
--- a/tsg_tools/climatology/test_m_map.m
+++ b/tsg_tools/climatology/test_m_map.m
@@ -1,14 +1,21 @@
 % test plot climato with m_map
 
+clear all
+% climato file are under: ftp \us191\oceano\lib\matlab
 %ncdisp('woa13_annual_surf.nc'
-SSTP = ncread('woa13_annual_surf.nc', 'WOA_MEAN_SSTP');
-SSPS = ncread('woa13_annual_surf.nc', 'WOA_MEAN_SSPS');
-LATX = ncread('woa13_annual_surf.nc', 'WOA_LATX');
-LONX = ncread('woa13_annual_surf.nc', 'WOA_LONX');
+%mainpath = '/mnt/irdbrest_ftp/us191/oceano/lib/matlab/';
+mainpath = '';
+file = 'woa05';
+%file = 'woa13';
 
-%latMin = -50; latMax = 65; lonMin = 40; lonMax = 280;
+SSTP = ncread([mainpath file '_annual_surf.nc'], 'WOA_MEAN_SSTP');
+SSPS = ncread([mainpath file '_annual_surf.nc'], 'WOA_MEAN_SSPS');
+LATX = ncread([mainpath file '_annual_surf.nc'], 'WOA_LATX');
+LONX = ncread([mainpath file '_annual_surf.nc'], 'WOA_LONX');
+
+latMin = -50; latMax = 65; lonMin = 40; lonMax = 280;
 %latMin = -50; latMax = 65; lonMin = 180; lonMax = 360;
-latMin = -50; latMax = 65; lonMin = 179; lonMax = 181;
+%latMin = -50; latMax = 65; lonMin = 179; lonMax = 181;
 
 m_proj('Mercator','lat',[latMin latMax],'long',[lonMin lonMax]);
 
@@ -18,13 +25,13 @@ climato = permute(climato, fliplr(1:4));
 climato = squeeze(climato(1, 1,:,:));
 
 indLat = find(LATX > latMin & LATX < latMax);  
-%LONX = wrapTo360_p(LONX);
-%LONX = wrapTo180_p(LONX);
-indn = find(LONX < 0);
-indp = find(LONX >= 0);
-LONX = LONX(indn)
 
-%LONX = mod(LONX+180,360)-180;
+% swap negative value (west) to 180-360
+LONX(find(LONX < 0)) = LONX(find(LONX < 0)) + 360;
+
+[val, indval] = sort(LONX);
+LONX          = LONX(indval);
+climato       = climato(:,indval);
 
 indLon = find(LONX > lonMin & LONX < lonMax);
 lon = LONX(indLon);
diff --git a/tsg_util/plot_map.m b/tsg_util/plot_map.m
index 51b17bc..82590c7 100644
--- a/tsg_util/plot_map.m
+++ b/tsg_util/plot_map.m
@@ -95,18 +95,27 @@ if ~isempty( ind )
     % get last selected climatology structure
     s = get(findobj('Tag', 'TAG_UIMENU_CLIMATO_MAIN'), 'Userdata');
     level = tsg.preference.levitus_depth_value;
-    % extract the matrix 
+    % extract the matrix
     climato = squeeze(climato(s.time, level,:,:));
-    indLat = find(tsg.levitus.data.WOA_LATX > latMin-border & ...
-      tsg.levitus.data.WOA_LATX <latMax+border);
+    % use local var for quick access
+    LATX = tsg.levitus.data.WOA_LATX;
+    LONX = tsg.levitus.data.WOA_LONX;
+    
+    % swap negative value (west) to 180-360
     if ~isempty(tsg.indcross)
-      tsg.levitus.data.WOA_LONX = mod(tsg.levitus.data.WOA_LONX+180,360)-180;
+      LONX(LONX < 0) = LONX(LONX < 0) + 360;
+      [val, indval] = sort(LONX);
+      LONX          = LONX(indval);
+      climato       = climato(:,indval);
     end
- 
-    indLon = find(tsg.levitus.data.WOA_LONX > lonMin-border & ...
-      tsg.levitus.data.WOA_LONX <lonMax+border);
-    lon = tsg.levitus.data.WOA_LONX(indLon);
-    lat = tsg.levitus.data.WOA_LATX(indLat);
+    
+    % find  indices for the selected area
+    indLat = find(LATX > latMin-border & LATX <latMax+border);
+    indLon = find(LONX > lonMin-border & LONX <lonMax+border);
+    lon = LONX(indLon);
+    lat = LATX(indLat);
+    
+    % plot climatogogy
     m_pcolor(lon, lat, climato(indLat, indLon));
     shading flat;
     %colormap(m_colmap('jet','step',10));
@@ -115,7 +124,7 @@ if ~isempty( ind )
     colorbar('off');
   end
   
-  % select map type and resolution 
+  % select map type and resolution
   % ------------------------------
   switch tsg.preference.map_resolution
     
@@ -182,6 +191,14 @@ if ~isempty( ind )
   if tsg.preference.map_patch_value == 1
     x = s.ncst(:,1);
     y = s.ncst(:,2);
+    % swap negative value (west) to 180-360
+    if ~isempty(tsg.indcross)
+      x(x < 0) = x(x < 0) + 360;
+      % remove line horizontal lines
+      x(x == 0) = nan;
+    end
+    
+    % plot coast
     m_line(x,y, 'color','k');
   end
   
diff --git a/tsgqc.m b/tsgqc.m
index 1d3c29e..4c7de2f 100644
--- a/tsgqc.m
+++ b/tsgqc.m
@@ -43,8 +43,8 @@ global GOSUD_FORMAT_VERSION
 % 0.90x -> 1.0RCx
 % -------------------------------------------------------------------
 VERSION      = 1.485;  % -> 1.44
-CHAR_VERSION = '1.48.5b2';
-DATE_VERSION = '03/07/2018';
+CHAR_VERSION = '1.48.5rc1';
+DATE_VERSION = '06/07/2018';
 
 % netcdf file version, see DATA FORMAT TSG document:
 % CORTSG_format_gosud.doc
-- 
GitLab