From 281a15239724d3d21cb7cf2dab4e25abfd22be53 Mon Sep 17 00:00:00 2001
From: Robert Butora <robert.butora@inaf.it>
Date: Sat, 27 Apr 2024 17:47:14 +0200
Subject: [PATCH] implements GRID pixels coord-system to Pos Band Time

---
 .../engine/src/common/include/ast4vl.hpp      |   2 +
 data-access/engine/src/common/src/ast4vl.cpp  |  16 ++-
 .../engine/src/common/src/ast_frameset.cpp    | 129 +++++++++++++++---
 .../engine/src/common/src/ast_frameset.hpp    |   8 +-
 data-access/engine/src/common/src/cutout.cpp  |  57 ++++++--
 data-access/engine/src/vlkb/src/main.cpp      |   2 +-
 .../engine/src/vlkb/src/service_string.hpp    |   1 +
 .../src/main/java/cutout/CutoutImpl.java      |  79 ++++++++++-
 java-libs/lib/vlkb-volib-0.9.0.jar            | Bin 21531 -> 0 bytes
 java-libs/lib/vlkb-volib-0.9.1-SNAPSHOT.jar   | Bin 0 -> 22253 bytes
 10 files changed, 255 insertions(+), 39 deletions(-)
 delete mode 100644 java-libs/lib/vlkb-volib-0.9.0.jar
 create mode 100644 java-libs/lib/vlkb-volib-0.9.1-SNAPSHOT.jar

diff --git a/data-access/engine/src/common/include/ast4vl.hpp b/data-access/engine/src/common/include/ast4vl.hpp
index 46571ab..95d714e 100644
--- a/data-access/engine/src/common/include/ast4vl.hpp
+++ b/data-access/engine/src/common/include/ast4vl.hpp
@@ -25,12 +25,14 @@ struct uint_bounds
 {
    unsigned int pix1;
    unsigned int pix2;
+   unsigned char type;
 };
 
 struct double_xy
 {
    double x;
    double y;
+   unsigned char type;
 };
 
 struct overlap_ranges
diff --git a/data-access/engine/src/common/src/ast4vl.cpp b/data-access/engine/src/common/src/ast4vl.cpp
index a0da6e3..c436835 100644
--- a/data-access/engine/src/common/src/ast4vl.cpp
+++ b/data-access/engine/src/common/src/ast4vl.cpp
@@ -29,7 +29,7 @@ std::ostream& operator<<( std::ostream &out, struct Bounds const& p)
 
 std::ostream& operator<<( std::ostream &out, struct uint_bounds const& p)
 {
-      out << "(" << p.pix1 << ", " << p.pix2 << ")";
+      out << "(" << p.pix1 << ", " << p.pix2 << " " << p.type <<")";
          return out;
 }
 
@@ -128,6 +128,11 @@ std::vector<uint_bounds> calc_overlap(const std::string header, const coordinate
 
    vector<uint_bounds> uint_bounds_vec;
 
+   LOG_STREAM << "uint_bounds: " << uint_bounds_vec.size()
+              << "  pix_ranges:: " << pix_ranges.pixel_ranges.size()
+              << endl;
+
+
    LOG_STREAM << "pix ranges[uint]:";
    for(double_xy dbl_range : pix_ranges.pixel_ranges)
    {
@@ -144,20 +149,23 @@ std::vector<uint_bounds> calc_overlap(const std::string header, const coordinate
       // FitsChan uses GRID Domain for FITS-pixel coords
       if(dbl_range.x <= dbl_range.y)
       {
-         uint_bounds ui_range{round(dbl_range.x), /*round*/(dbl_range.y)};
+         uint_bounds ui_range{round(dbl_range.x), /*round*/(dbl_range.y), dbl_range.type};
          uint_bounds_vec.push_back(ui_range);
          LOG_STREAM << " " << ui_range;
       }
       else
       {
-         uint_bounds ui_range{round(dbl_range.y), /*round*/(dbl_range.x)};
+         uint_bounds ui_range{round(dbl_range.y), /*round*/(dbl_range.x), dbl_range.type};
          uint_bounds_vec.push_back(ui_range);
          LOG_STREAM << " " << ui_range;
       }
-
    }
    LOG_STREAM << endl;
 
+   LOG_STREAM << "uint_bounds: " << uint_bounds_vec.size()
+              << "  pix_ranges:: " << pix_ranges.pixel_ranges.size()
+              << endl;
+
    return uint_bounds_vec;
 }
 
diff --git a/data-access/engine/src/common/src/ast_frameset.cpp b/data-access/engine/src/common/src/ast_frameset.cpp
index f08299b..6721561 100644
--- a/data-access/engine/src/common/src/ast_frameset.cpp
+++ b/data-access/engine/src/common/src/ast_frameset.cpp
@@ -58,6 +58,7 @@ ast::frameset::frameset(string header)
    ,m_has_specframe{false}
    ,m_has_stokes_axis{false}
    ,m_has_time_axis{false}
+   ,m_axis_type(AXES_CNT,' ')
 {
    LOG_trace(__func__);
 
@@ -89,7 +90,7 @@ ast::frameset::frameset(string header)
    int ix;
    for( ix = 0; ix < NAXIS; ix++ )
    {
-      char keyword[ 9 ];
+      char keyword[ 9 + 7 ];// +7 silence warning about ix being int can be too long
       sprintf( keyword, "NAXIS%d", ix + 1 );
 
       if( !astGetFitsI( fchan, keyword, &(NAXISn[ix]) ) )
@@ -137,7 +138,7 @@ ast::frameset::frameset(string header)
    LOG_STREAM << "m_has_specframe: " << boolalpha << m_has_specframe << endl;
    if(m_has_specframe) set_spec_axis();
 
-   set_pol_time_axis();
+   set_pol_time_sky_axis();
 
    assert_valid_state();
 
@@ -299,6 +300,7 @@ void ast::frameset::set_spec_axis(void)
             (domain_val.compare("DSBSPECTRUM") == 0))
       {
          m_spec_axis = axis;
+         m_axis_type[axis-1] = 'b';
          set_axis = true;
          break;
       }
@@ -312,7 +314,7 @@ void ast::frameset::set_spec_axis(void)
 
 
 
-void ast::frameset::set_pol_time_axis(void)
+void ast::frameset::set_pol_time_sky_axis(void)
 {
    LOG_trace(__func__);
 
@@ -323,6 +325,10 @@ void ast::frameset::set_pol_time_axis(void)
    LOG_STREAM << "m_NAXIS vs Naxes :" << m_NAXIS << " vs " << naxes << endl;
 
    LOG_STREAM << "Domains/Symbols in header FrameSet(CURRENT): ";
+
+   int has_n_sky_axis = 0;
+   int sky_axis[2];
+
    int axis;
    for(axis=1; axis<(naxes+1);axis++)
    {
@@ -341,17 +347,57 @@ void ast::frameset::set_pol_time_axis(void)
       if((domain_val.find("STOKES") != string::npos) && (symbol_val.compare("STOKES") == 0))
       {
          m_stokes_axis = axis;
+         m_axis_type[axis-1] = 'p';
          m_has_stokes_axis = true;
          //break;
       }
       else if(domain_val.compare("TIME") == 0)
       {
          m_time_axis = axis;
+         m_axis_type[axis-1] = 't';
          m_has_time_axis = true;
          //break;
       }
+      else if(domain_val.compare("SKY") == 0)
+      {
+         if(has_n_sky_axis >= 2)
+         {
+            LOG_STREAM << "too many sky axes found. Alread have: "
+               << has_n_sky_axis << " axes set" << endl; 
+         }
+         else
+         {
+            sky_axis[has_n_sky_axis] = axis;
+            has_n_sky_axis++;
+         }
+         //break;
+      }
    }
    LOG_STREAM << endl;
+
+   // identify Lon Lat:
+   // AST doc says Lon/LatAxis macros return 1,2 only
+   // unclear what it returns when applied to FrameSet
+   // and also IsLonAxis IsLatAxis is applicable to Frame only
+   if(has_n_sky_axis == 2)
+   {
+      int ix_lon = astGetI(m_hdr_fs,"LonAxis") - 1;
+      int ix_lat = astGetI(m_hdr_fs,"LatAxis") - 1;
+      if ( !astOK || (ix_lon == ix_lat))
+         throw runtime_error(failed_with_status(__FILE__,__LINE__,"astGetI( Lon/LatAxis ) or Lon equals Lat"));
+
+      bool lon_first = (ix_lon < ix_lat);
+      m_sky_lon_axis = lon_first ? sky_axis[0] : sky_axis[1];
+      m_sky_lat_axis = lon_first ? sky_axis[1] : sky_axis[0];
+      m_axis_type[m_sky_lon_axis-1] = 'o';
+      m_axis_type[m_sky_lat_axis-1] = 'a';
+      m_has_skyframe = true;
+   }
+   else
+   {
+      m_has_skyframe = false;
+      LOG_STREAM << "unexpected count of sky axes in frame set: " << has_n_sky_axis << endl; 
+   }
 }
 
 
@@ -718,7 +764,11 @@ void ast::frameset::set_bounds_to_rect(coordinates& coord)
             my_assert(coord.p_lon_deg.size()==coord.p_lat_deg.size(),
                   __FILE__,__LINE__,"coord::p_lon and p_lat sizes differ");
 
-            int npnt = coord.p_lon_deg.size();
+            constexpr int int_max_value {std::numeric_limits<int>::max()};
+            my_assert(coord.p_lon_deg.size() > int_max_value,
+                  __FILE__,__LINE__,"coord-polygon too long for astPolygon");
+
+            int npnt = (int)coord.p_lon_deg.size();
             int dim  = npnt;
             double points[2][dim];
             const double * pts = &(points[0][0]);
@@ -863,12 +913,13 @@ overlap_ranges ast::frameset::overlap(coordinates coord)
 
    /* overwrite bounds for sky-axis and spec axis if given by coord input */
 
-   int ix_lon = astGetI(m_hdr_fs,"LonAxis") - 1;
-   int ix_lat = astGetI(m_hdr_fs,"LatAxis") - 1;
-   if ( !astOK )
-      throw runtime_error(failed_with_status(__FILE__,__LINE__,"astGetI( Lon/LatAxis )"));
+   int ix_lon = m_sky_lon_axis - 1; //astGetI(m_hdr_fs,"LonAxis") - 1;
+   int ix_lat = m_sky_lat_axis - 1; //astGetI(m_hdr_fs,"LatAxis") - 1;
+   //if ( !astOK )
+   //   throw runtime_error(failed_with_status(__FILE__,__LINE__,"astGetI( Lon/LatAxis )"));
 
-   LOG_STREAM << "LonAxis LatAxis indeces (zero-based): " << to_string(ix_lon) << " " << to_string(ix_lat) << endl; 
+   LOG_STREAM << "lon/lat axes indeces (zero-based): "
+      << to_string(ix_lon) << " " << to_string(ix_lat) << endl; 
 
    set_bounds_to_rect(coord);
 
@@ -896,7 +947,7 @@ overlap_ranges ast::frameset::overlap(coordinates coord)
 
       /* FIXME  ast-overlap computation breaks if bands do not overlap - suspect AST bug ? */
       if((( up[m_spec_axis-1] < coord.vl_kmps) && ( up[m_spec_axis-1] < coord.vu_kmps)) ||
-           ((low[m_spec_axis-1] > coord.vl_kmps) && (low[m_spec_axis-1] > coord.vu_kmps)))
+            ((low[m_spec_axis-1] > coord.vl_kmps) && (low[m_spec_axis-1] > coord.vu_kmps)))
       {
          /* set values only to get correct debug print for client */
          low[m_spec_axis-1] = coord.vl_kmps;
@@ -981,7 +1032,7 @@ overlap_ranges ast::frameset::overlap(coordinates coord)
       int ix;
       for(ix=0; ix<m_NAXIS; ix++)
       {
-         pix_ranges.push_back({lbnd[ix],ubnd[ix]});
+         pix_ranges.push_back({lbnd[ix],ubnd[ix],m_axis_type[ix]});
       }
    }
 
@@ -1089,10 +1140,10 @@ std::vector<point2d> ast::frameset::sky_vertices(void)
       throw runtime_error(failed_with_status(__FILE__,__LINE__,"astTranP(pix -> wcs vertices)"));
 
 
-   const int ixlon = astGetI(m_hdr_fs,"LonAxis") - 1;
-   const int ixlat = astGetI(m_hdr_fs,"LatAxis") - 1;
-   if ( !astOK )
-      throw runtime_error(failed_with_status(__FILE__,__LINE__,"astGetI( Lon/LatAxis )"));
+   const int ixlon = m_sky_lon_axis - 1; //astGetI(m_hdr_fs,"LonAxis") - 1;
+   const int ixlat = m_sky_lat_axis - 1; //astGetI(m_hdr_fs,"LatAxis") - 1;
+   //if ( !astOK )
+   //   throw runtime_error(failed_with_status(__FILE__,__LINE__,"astGetI( Lon/LatAxis )"));
 
    LOG_STREAM << "VERT ix_lon ix_lat: " << ixlon  << " " << ixlat << endl;
 
@@ -1203,7 +1254,18 @@ void ast::frameset::assert_valid_state(void)
 
    if(m_has_specframe)
       my_assert( (m_spec_axis >= 1)/*&&(m_spec_axis <=m_NAXIS) FIXME should be Naxes of m_hdr_fs */,
-            __FILE__,__LINE__, ": m_spec_axis is " + to_string(m_spec_axis) + " and must be 1 .. " + to_string(m_NAXIS) );
+            __FILE__,__LINE__, ": m_spec_axis is " + to_string(m_spec_axis)
+            + " and must be 1 .. " + to_string(m_NAXIS) );
+
+   if(m_has_skyframe)
+   {
+      my_assert( (m_sky_lon_axis >= 1),
+            __FILE__,__LINE__, ": m_sky_lon_axis is " + to_string(m_sky_lon_axis)
+            + " and must be 1 .. " + to_string(m_NAXIS) );
+      my_assert( (m_sky_lat_axis >= 1),
+            __FILE__,__LINE__, ": m_sky_lat_axis is " + to_string(m_sky_lat_axis)
+            + " and must be 1 .. " + to_string(m_NAXIS) );
+   }
 
    /* check AstFrameSet */
 
@@ -1331,6 +1393,41 @@ std::ostream& ast::frameset::serialize(std::ostream& ostrm) const
       LOG_STREAM << "TimeUnit(" << unit << ") ";
    }
 
+   ostrm << " | ";
+
+   ostrm << "has skyframe: " << m_has_skyframe;
+   if(m_has_skyframe)
+   {
+      ostrm << " [lon,lat] at axes (one-based) ["
+         << to_string(m_sky_lon_axis) << ","
+         << to_string(m_sky_lat_axis) << "] ";
+
+      string system_key_lon{"System("+to_string(m_sky_lon_axis)+")"};
+      const char * csystem_lon = astGetC(m_hdr_fs, system_key_lon.c_str());
+      string system_lon(csystem_lon);
+      LOG_STREAM << "System[Lon](" << system_lon << ") ";
+
+      string system_key_lat{"System("+to_string(m_sky_lat_axis)+")"};
+      const char * csystem_lat = astGetC(m_hdr_fs, system_key_lat.c_str());
+      string system_lat(csystem_lat);
+      LOG_STREAM << "System[Lat](" << system_lat << ") ";
+ 
+      string unit_key_lon{"Unit("+to_string(m_sky_lon_axis)+")"};
+      const char * cunit_lon = astGetC(m_hdr_fs, unit_key_lon.c_str());
+      string unit_lon(cunit_lon);
+      LOG_STREAM << "Unit[Lon](" << unit_lon << ") ";
+
+      string unit_key_lat{"Unit("+to_string(m_sky_lat_axis)+")"};
+      const char * cunit_lat = astGetC(m_hdr_fs, unit_key_lat.c_str());
+      string unit_lat(cunit_lat);
+      LOG_STREAM << "Unit[Lat](" << unit_lat << ") ";
+   }
+
+   ostrm << " axes types: >";
+   //for(char cc : m_axis_type) ostrm << cc;
+   for(int ix=0; ix<AXES_CNT;ix++) ostrm << m_axis_type[ix];
+   ostrm << "<";
+
    ostrm << endl; 
 
    return ostrm;
diff --git a/data-access/engine/src/common/src/ast_frameset.hpp b/data-access/engine/src/common/src/ast_frameset.hpp
index 23caabe..413c926 100644
--- a/data-access/engine/src/common/src/ast_frameset.hpp
+++ b/data-access/engine/src/common/src/ast_frameset.hpp
@@ -46,7 +46,7 @@ class frameset
 
       AstRegion * create_header_region(void);
       void set_spec_axis(void);
-      void set_pol_time_axis(void);
+      void set_pol_time_sky_axis(void);
       void log_NAXISn(void);
 
       void* find_skyframe(void);
@@ -68,6 +68,12 @@ class frameset
 
       bool m_has_time_axis;
       int m_time_axis;
+
+      bool m_has_skyframe;
+      int m_sky_lon_axis;
+      int m_sky_lat_axis;
+
+      std::vector<char> m_axis_type;//[ AXES_CNT ]; // o=lon a=lat b=spec/band t=time p=pol/stokes
 };
 
 }
diff --git a/data-access/engine/src/common/src/cutout.cpp b/data-access/engine/src/common/src/cutout.cpp
index 3651f26..b1875b3 100644
--- a/data-access/engine/src/common/src/cutout.cpp
+++ b/data-access/engine/src/common/src/cutout.cpp
@@ -147,29 +147,62 @@ int to_v_type(enum specsystem specsys)
 
 int to_v_valid(enum specsystem specsys)
 {
-	return specsys == specsystem::NONE ? 0 : 1;
+   return specsys == specsystem::NONE ? 0 : 1;
 }
 
 
 
 string to_cfitsio_format(vector<uint_bounds> bounds)
 {
-	my_assert(!bounds.empty(),__FILE__,__LINE__,"bounds vector is empty" );
+   my_assert(!bounds.empty(),__FILE__,__LINE__,"bounds vector is empty" );
 
-	stringstream ss;
-	ss << "[";
-	ss << bounds[0].pix1 << ":" << bounds[0].pix2;
-	for(unsigned int i = 1; i < bounds.size(); i++)
-	{
-		ss << " " << bounds[i].pix1 << ":" << bounds[i].pix2;
-	}
-	ss << "]";
-	return ss.str();
+   stringstream ss;
+   ss <<"[";
+   ss << bounds[0].pix1 << ":" << bounds[0].pix2;
+   for(unsigned int i = 1; i < bounds.size(); i++)
+   {
+      ss << " " << bounds[i].pix1 << ":" << bounds[i].pix2;
+   }
+   ss << "]";
+   return ss.str();
 }
 
+string axistype2string(unsigned char cc)
+{
+   switch(cc)
+   {
+      case 'o': return "LON"; break;
+      case 'a': return "LAT"; break;
+      case 'b': return "BAND"; break;
+      case 't': return "TIME"; break;
+      case 'p': return "POL"; break;
+      default:
+         throw invalid_argument(cc + " is not a valid axis type");
+   }
+}
+
+
+
+string to_cfitsio_format_with_axis_type(vector<uint_bounds> bounds)
+{
+   my_assert(!bounds.empty(),__FILE__,__LINE__,"bounds vector is empty" );
+
+   stringstream ss;
+   ss << to_cfitsio_format(bounds);
+   ss << " AXES ";
+
+   for(unsigned int i = 0; i < bounds.size(); i++)
+   {
+      ss << " " << axistype2string(bounds[i].type);
+   }
+
+   return ss.str();
+}
+
+
 coordinates to_coordinates(const position pos, const band bnd, const time_axis time, const std::vector<std::string> pol)
 {
-coordinates coord;
+   coordinates coord;
    coord.skysys = pos.sys;
 
    if(pos.shape == area::RANGE)
diff --git a/data-access/engine/src/vlkb/src/main.cpp b/data-access/engine/src/vlkb/src/main.cpp
index af3e0f0..52b41da 100644
--- a/data-access/engine/src/vlkb/src/main.cpp
+++ b/data-access/engine/src/vlkb/src/main.cpp
@@ -384,7 +384,7 @@ int cmd_overlap(int argc, char * argv[])
       if((ov_code >= 2) && (ov_code <= 5))
       {
          rc = EXIT_SUCCESS;
-         cout << to_cfitsio_format(bnds) << endl;
+         cout << to_cfitsio_format_with_axis_type(bnds) << endl;
       }
       else if((ov_code == 1) || (ov_code == 6))
       {
diff --git a/data-access/engine/src/vlkb/src/service_string.hpp b/data-access/engine/src/vlkb/src/service_string.hpp
index 416dc21..2ce27c9 100644
--- a/data-access/engine/src/vlkb/src/service_string.hpp
+++ b/data-access/engine/src/vlkb/src/service_string.hpp
@@ -11,5 +11,6 @@ skysystem to_skysystem(std::string str);
 specsystem to_specsystem(std::string str);
 specsystem to_specsystem(int i);
 std::string to_cfitsio_format(std::vector<uint_bounds> bounds);
+std::string to_cfitsio_format_with_axis_type(std::vector<uint_bounds> bounds);
 
 #endif
diff --git a/data-access/servlet/src/main/java/cutout/CutoutImpl.java b/data-access/servlet/src/main/java/cutout/CutoutImpl.java
index f22075e..dbcb5e3 100644
--- a/data-access/servlet/src/main/java/cutout/CutoutImpl.java
+++ b/data-access/servlet/src/main/java/cutout/CutoutImpl.java
@@ -112,7 +112,6 @@ class CutoutImpl implements Cutout
          if(bos == null)
             throw new AssertionError("byte output stream for bounds was not created, is null");
 
-         //String coordString = genRegionForVlkbOverlapCmd(pos, band);
          JsonEncoder jReq = new JsonEncoder();
          jReq.add(pos);
          jReq.add(band);
@@ -139,10 +138,8 @@ class CutoutImpl implements Cutout
          {
             boundsString = new String(bos.toByteArray());
 
-            // remove end-of-line (was added by vlkb_ast.cpp: cout << ... << endl)
-            String lineSeparator = System.lineSeparator();
-            boundsString = boundsString.replace(lineSeparator, "");
-            LOGGER.info("BOUNDS: " + boundsString);
+            boundsString = replaceWithGrid(boundsString, pos, band, time, pol);
+            LOGGER.info("boundsString(with GRID): " + boundsString);
 
             has_overlap = !((boundsString != null) && boundsString.trim().isEmpty());
 
@@ -199,6 +196,78 @@ class CutoutImpl implements Cutout
 
 
 
+   private String replaceWithGrid(String wcsBounds, Pos pos, Band band, Time time, Pol pol)
+   {
+      // remove end-of-line (was added by vlkb_ast.cpp: cout << ... << endl)
+      String lineSeparator = System.lineSeparator();
+      wcsBounds = wcsBounds.replace(lineSeparator, "");
+      LOGGER.info("BOUNDS: " + wcsBounds);
+
+      // replace in wcsBounds those bounds where pos,band,time or pol has system=GRID
+
+      String[] substr = wcsBounds.split("(?=AXES)", 2);
+      for(String ss : substr) LOGGER.info("boundsResult: " + ss);
+
+      String boundsString = substr[0];
+      boolean noOverlap = ((boundsString != null) && boundsString.trim().isEmpty());
+      if(noOverlap)
+      {
+         boundsString = ""; // no overlap
+      }
+      else
+      {
+         String axesTypes = "";
+         if(substr.length > 1)
+         {
+            axesTypes = substr[1].replace("AXES"," ").trim();
+            LOGGER.info("AXES TYPES: " + axesTypes);
+
+            String[] bnds  = normalize(boundsString);
+            String[] types = normalize(axesTypes);
+            // assert: bnds.length == types.length
+            LOGGER.info("boundsCount: " + bnds.length  + " typesCount: " + types.length);
+
+            if(bnds.length == types.length)
+               boundsString = replaceBounds(bnds, types, pos, band);
+         }
+      }
+      return boundsString;
+   }
+
+   private String replaceBounds(String[] bnds, String[] types, Pos pos, Band band)
+   {
+      int ix;
+      for(ix=0; ix<bnds.length; ix++)
+      {
+         if(types[ix].equals("LON") && (pos.system == Pos.System.GRID))
+         {
+            bnds[ix] = pos.lonBoundsString();
+         }
+         else if(types[ix].equals("LAT") && (pos.system == Pos.System.GRID))
+         {
+            bnds[ix] = pos.latBoundsString();
+         }
+         else if(types[ix].equals("BAND") && (band.system == Band.System.GRID))
+         {
+            bnds[ix] = band.boundsString();
+         }
+      }
+
+      LOGGER.info("replaced: " + String.join(" ", bnds)) ;
+
+      return "[" + String.join(" ", bnds)  + "]";
+   }
+
+   // MAKE SURE vlkb overlap returns space delimited bounds: [ a:b c:d ]
+   // normalize: strip [,] if any, and split into array by space
+   private String[] normalize(String spaceStr)
+   {
+      String other = spaceStr.replace("[","").replace("]","");
+      LOGGER.info("normalize: " + other);
+      return other.split("\\s+");
+   }
+
+
    private NullValueCount doCountNullValues(String absPathname, int hdunum)
          throws IOException, InterruptedException
       {
diff --git a/java-libs/lib/vlkb-volib-0.9.0.jar b/java-libs/lib/vlkb-volib-0.9.0.jar
deleted file mode 100644
index 7a469173ef91db8367fb58af748e1f668e405fe3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21531
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
L*cce3eL*|`A5BYI

diff --git a/java-libs/lib/vlkb-volib-0.9.1-SNAPSHOT.jar b/java-libs/lib/vlkb-volib-0.9.1-SNAPSHOT.jar
new file mode 100644
index 0000000000000000000000000000000000000000..554db77940832d36d03f0cad3addef64dfa3fdc8
GIT binary patch
literal 22253
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

literal 0
HcmV?d00001

-- 
GitLab