diff --git a/ancillary.c b/ancillary.c
index 74bfe08edf6bd26adfe10f3e4bce5f4a48211494..dab7e85234b53c0a5487bbb72addced24dedbb38 100644
--- a/ancillary.c
+++ b/ancillary.c
@@ -21,7 +21,7 @@
         ],
         "library_dirs": [
             "/opt/hdfeos2/2.20-gcc-8.3/lib",
-            "/opt/netcdf4/4.7.0fcc-8.3/lib"
+            "/opt/netcdf4/4.7.0-gcc-8.3/lib"
         ],
         "name": "ancillary_data",
         "sources": [
@@ -1278,7 +1278,7 @@ typedef npy_double __pyx_t_5numpy_double_t;
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
-/* "ancillary.pyx":22
+/* "ancillary.pyx":23
  * np.import_array()
  * 
  * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
@@ -2811,7 +2811,7 @@ static PyObject *__pyx_codeobj__34;
 static PyObject *__pyx_codeobj__41;
 /* Late includes */
 
-/* "ancillary.pyx":28
+/* "ancillary.pyx":29
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_Reynolds_SST(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
@@ -2866,35 +2866,35 @@ static PyObject *__pyx_pw_14ancillary_data_1py_get_Reynolds_SST(PyObject *__pyx_
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lon)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 1); __PYX_ERR(0, 28, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 1); __PYX_ERR(0, 29, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_res)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 2); __PYX_ERR(0, 28, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 2); __PYX_ERR(0, 29, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_anc_dir)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 3); __PYX_ERR(0, 28, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 3); __PYX_ERR(0, 29, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sst_file)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 4); __PYX_ERR(0, 28, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 4); __PYX_ERR(0, 29, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sst)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 5); __PYX_ERR(0, 28, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, 5); __PYX_ERR(0, 29, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_get_Reynolds_SST") < 0)) __PYX_ERR(0, 28, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_get_Reynolds_SST") < 0)) __PYX_ERR(0, 29, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -2909,20 +2909,20 @@ static PyObject *__pyx_pw_14ancillary_data_1py_get_Reynolds_SST(PyObject *__pyx_
     __pyx_v_lat = ((PyArrayObject *)values[0]);
     __pyx_v_lon = ((PyArrayObject *)values[1]);
     __pyx_v_res = values[2];
-    __pyx_v_anc_dir = __Pyx_PyObject_AsWritableString(values[3]); if (unlikely((!__pyx_v_anc_dir) && PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error)
-    __pyx_v_sst_file = __Pyx_PyObject_AsWritableString(values[4]); if (unlikely((!__pyx_v_sst_file) && PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error)
+    __pyx_v_anc_dir = __Pyx_PyObject_AsWritableString(values[3]); if (unlikely((!__pyx_v_anc_dir) && PyErr_Occurred())) __PYX_ERR(0, 31, __pyx_L3_error)
+    __pyx_v_sst_file = __Pyx_PyObject_AsWritableString(values[4]); if (unlikely((!__pyx_v_sst_file) && PyErr_Occurred())) __PYX_ERR(0, 31, __pyx_L3_error)
     __pyx_v_sst = values[5];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 28, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("py_get_Reynolds_SST", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 29, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("ancillary_data.py_get_Reynolds_SST", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat), __pyx_ptype_5numpy_ndarray, 1, "lat", 0))) __PYX_ERR(0, 28, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon), __pyx_ptype_5numpy_ndarray, 1, "lon", 0))) __PYX_ERR(0, 29, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat), __pyx_ptype_5numpy_ndarray, 1, "lat", 0))) __PYX_ERR(0, 29, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon), __pyx_ptype_5numpy_ndarray, 1, "lon", 0))) __PYX_ERR(0, 30, __pyx_L1_error)
   __pyx_r = __pyx_pf_14ancillary_data_py_get_Reynolds_SST(__pyx_self, __pyx_v_lat, __pyx_v_lon, __pyx_v_res, __pyx_v_anc_dir, __pyx_v_sst_file, __pyx_v_sst);
 
   /* function exit code */
@@ -2967,42 +2967,42 @@ static PyObject *__pyx_pf_14ancillary_data_py_get_Reynolds_SST(CYTHON_UNUSED PyO
   __pyx_pybuffernd_lon.rcbuffer = &__pyx_pybuffer_lon;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 28, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 29, __pyx_L1_error)
   }
   __pyx_pybuffernd_lat.diminfo[0].strides = __pyx_pybuffernd_lat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lat.diminfo[0].shape = __pyx_pybuffernd_lat.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 28, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 29, __pyx_L1_error)
   }
   __pyx_pybuffernd_lon.diminfo[0].strides = __pyx_pybuffernd_lon.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon.diminfo[0].shape = __pyx_pybuffernd_lon.rcbuffer->pybuffer.shape[0];
 
-  /* "ancillary.pyx":33
+  /* "ancillary.pyx":34
  * 
  *     # cdef np.ndarray sst = np.zeros((3232*3200, ), order='C', dtype=np.float32)
  *     if not sst.flags['C_CONTIGUOUS']:             # <<<<<<<<<<<<<<
  *         sst = np.ascontiguousarray(sst)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sst, __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sst, __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_C_CONTIGUOUS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_C_CONTIGUOUS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 34, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_4 = ((!__pyx_t_3) != 0);
   if (__pyx_t_4) {
 
-    /* "ancillary.pyx":34
+    /* "ancillary.pyx":35
  *     # cdef np.ndarray sst = np.zeros((3232*3200, ), order='C', dtype=np.float32)
  *     if not sst.flags['C_CONTIGUOUS']:
  *         sst = np.ascontiguousarray(sst)             # <<<<<<<<<<<<<<
  * 
  *     cdef float[::1] sst_mv = sst
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 35, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_1 = NULL;
@@ -3017,13 +3017,13 @@ static PyObject *__pyx_pf_14ancillary_data_py_get_Reynolds_SST(CYTHON_UNUSED PyO
     }
     __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_v_sst) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_sst);
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_sst, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "ancillary.pyx":33
+    /* "ancillary.pyx":34
  * 
  *     # cdef np.ndarray sst = np.zeros((3232*3200, ), order='C', dtype=np.float32)
  *     if not sst.flags['C_CONTIGUOUS']:             # <<<<<<<<<<<<<<
@@ -3032,19 +3032,19 @@ static PyObject *__pyx_pf_14ancillary_data_py_get_Reynolds_SST(CYTHON_UNUSED PyO
  */
   }
 
-  /* "ancillary.pyx":36
+  /* "ancillary.pyx":37
  *         sst = np.ascontiguousarray(sst)
  * 
  *     cdef float[::1] sst_mv = sst             # <<<<<<<<<<<<<<
  * 
  *     get_Reynolds_SST(&lat[0], &lon[0], res, anc_dir, sst_file, &sst_mv[0])
  */
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_v_sst, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 36, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_v_sst, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 37, __pyx_L1_error)
   __pyx_v_sst_mv = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "ancillary.pyx":38
+  /* "ancillary.pyx":39
  *     cdef float[::1] sst_mv = sst
  * 
  *     get_Reynolds_SST(&lat[0], &lon[0], res, anc_dir, sst_file, &sst_mv[0])             # <<<<<<<<<<<<<<
@@ -3053,11 +3053,11 @@ static PyObject *__pyx_pf_14ancillary_data_py_get_Reynolds_SST(CYTHON_UNUSED PyO
  */
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_res); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_res); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 39, __pyx_L1_error)
   __pyx_t_10 = 0;
   get_Reynolds_SST((&(*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_lat.rcbuffer->pybuffer.buf, __pyx_t_7, __pyx_pybuffernd_lat.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_lon.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_lon.diminfo[0].strides))), __pyx_t_9, __pyx_v_anc_dir, __pyx_v_sst_file, (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_sst_mv.data) + __pyx_t_10)) )))));
 
-  /* "ancillary.pyx":40
+  /* "ancillary.pyx":41
  *     get_Reynolds_SST(&lat[0], &lon[0], res, anc_dir, sst_file, &sst_mv[0])
  * 
  *     return sst             # <<<<<<<<<<<<<<
@@ -3069,7 +3069,7 @@ static PyObject *__pyx_pf_14ancillary_data_py_get_Reynolds_SST(CYTHON_UNUSED PyO
   __pyx_r = __pyx_v_sst;
   goto __pyx_L0;
 
-  /* "ancillary.pyx":28
+  /* "ancillary.pyx":29
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_Reynolds_SST(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
@@ -3104,7 +3104,7 @@ static PyObject *__pyx_pf_14ancillary_data_py_get_Reynolds_SST(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "ancillary.pyx":46
+/* "ancillary.pyx":47
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_NDVI_background(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
@@ -3159,35 +3159,35 @@ static PyObject *__pyx_pw_14ancillary_data_3py_get_NDVI_background(PyObject *__p
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lon)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 1); __PYX_ERR(0, 46, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 1); __PYX_ERR(0, 47, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_res)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 2); __PYX_ERR(0, 46, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 2); __PYX_ERR(0, 47, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_anc_dir)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 3); __PYX_ERR(0, 46, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 3); __PYX_ERR(0, 47, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ndvi_file)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 4); __PYX_ERR(0, 46, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 4); __PYX_ERR(0, 47, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ndvi)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 5); __PYX_ERR(0, 46, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, 5); __PYX_ERR(0, 47, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_get_NDVI_background") < 0)) __PYX_ERR(0, 46, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_get_NDVI_background") < 0)) __PYX_ERR(0, 47, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -3202,20 +3202,20 @@ static PyObject *__pyx_pw_14ancillary_data_3py_get_NDVI_background(PyObject *__p
     __pyx_v_lat = ((PyArrayObject *)values[0]);
     __pyx_v_lon = ((PyArrayObject *)values[1]);
     __pyx_v_res = values[2];
-    __pyx_v_anc_dir = __Pyx_PyObject_AsWritableString(values[3]); if (unlikely((!__pyx_v_anc_dir) && PyErr_Occurred())) __PYX_ERR(0, 48, __pyx_L3_error)
-    __pyx_v_ndvi_file = __Pyx_PyObject_AsWritableString(values[4]); if (unlikely((!__pyx_v_ndvi_file) && PyErr_Occurred())) __PYX_ERR(0, 48, __pyx_L3_error)
+    __pyx_v_anc_dir = __Pyx_PyObject_AsWritableString(values[3]); if (unlikely((!__pyx_v_anc_dir) && PyErr_Occurred())) __PYX_ERR(0, 49, __pyx_L3_error)
+    __pyx_v_ndvi_file = __Pyx_PyObject_AsWritableString(values[4]); if (unlikely((!__pyx_v_ndvi_file) && PyErr_Occurred())) __PYX_ERR(0, 49, __pyx_L3_error)
     __pyx_v_ndvi = values[5];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 46, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("py_get_NDVI_background", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 47, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("ancillary_data.py_get_NDVI_background", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat), __pyx_ptype_5numpy_ndarray, 1, "lat", 0))) __PYX_ERR(0, 46, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon), __pyx_ptype_5numpy_ndarray, 1, "lon", 0))) __PYX_ERR(0, 47, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat), __pyx_ptype_5numpy_ndarray, 1, "lat", 0))) __PYX_ERR(0, 47, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon), __pyx_ptype_5numpy_ndarray, 1, "lon", 0))) __PYX_ERR(0, 48, __pyx_L1_error)
   __pyx_r = __pyx_pf_14ancillary_data_2py_get_NDVI_background(__pyx_self, __pyx_v_lat, __pyx_v_lon, __pyx_v_res, __pyx_v_anc_dir, __pyx_v_ndvi_file, __pyx_v_ndvi);
 
   /* function exit code */
@@ -3260,42 +3260,42 @@ static PyObject *__pyx_pf_14ancillary_data_2py_get_NDVI_background(CYTHON_UNUSED
   __pyx_pybuffernd_lon.rcbuffer = &__pyx_pybuffer_lon;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 46, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 47, __pyx_L1_error)
   }
   __pyx_pybuffernd_lat.diminfo[0].strides = __pyx_pybuffernd_lat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lat.diminfo[0].shape = __pyx_pybuffernd_lat.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 46, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 47, __pyx_L1_error)
   }
   __pyx_pybuffernd_lon.diminfo[0].strides = __pyx_pybuffernd_lon.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon.diminfo[0].shape = __pyx_pybuffernd_lon.rcbuffer->pybuffer.shape[0];
 
-  /* "ancillary.pyx":50
+  /* "ancillary.pyx":51
  *                            char *anc_dir, char *ndvi_file, ndvi):
  * 
  *     if not ndvi.flags['C_CONTIGUOUS']:             # <<<<<<<<<<<<<<
  *         ndvi = np.ascontiguousarray(ndvi)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ndvi, __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ndvi, __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_C_CONTIGUOUS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_C_CONTIGUOUS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 51, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_4 = ((!__pyx_t_3) != 0);
   if (__pyx_t_4) {
 
-    /* "ancillary.pyx":51
+    /* "ancillary.pyx":52
  * 
  *     if not ndvi.flags['C_CONTIGUOUS']:
  *         ndvi = np.ascontiguousarray(ndvi)             # <<<<<<<<<<<<<<
  * 
  *     cdef float[::1] ndvi_mv = ndvi
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 51, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 52, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_1 = NULL;
@@ -3310,13 +3310,13 @@ static PyObject *__pyx_pf_14ancillary_data_2py_get_NDVI_background(CYTHON_UNUSED
     }
     __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_v_ndvi) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_ndvi);
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_ndvi, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "ancillary.pyx":50
+    /* "ancillary.pyx":51
  *                            char *anc_dir, char *ndvi_file, ndvi):
  * 
  *     if not ndvi.flags['C_CONTIGUOUS']:             # <<<<<<<<<<<<<<
@@ -3325,19 +3325,19 @@ static PyObject *__pyx_pf_14ancillary_data_2py_get_NDVI_background(CYTHON_UNUSED
  */
   }
 
-  /* "ancillary.pyx":53
+  /* "ancillary.pyx":54
  *         ndvi = np.ascontiguousarray(ndvi)
  * 
  *     cdef float[::1] ndvi_mv = ndvi             # <<<<<<<<<<<<<<
  * 
  *     get_NDVI_background(&lat[0], &lon[0], res, anc_dir, ndvi_file, &ndvi_mv[0])
  */
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_v_ndvi, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 53, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_v_ndvi, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 54, __pyx_L1_error)
   __pyx_v_ndvi_mv = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "ancillary.pyx":55
+  /* "ancillary.pyx":56
  *     cdef float[::1] ndvi_mv = ndvi
  * 
  *     get_NDVI_background(&lat[0], &lon[0], res, anc_dir, ndvi_file, &ndvi_mv[0])             # <<<<<<<<<<<<<<
@@ -3346,11 +3346,11 @@ static PyObject *__pyx_pf_14ancillary_data_2py_get_NDVI_background(CYTHON_UNUSED
  */
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_res); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_res); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L1_error)
   __pyx_t_10 = 0;
   get_NDVI_background((&(*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_lat.rcbuffer->pybuffer.buf, __pyx_t_7, __pyx_pybuffernd_lat.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_lon.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_lon.diminfo[0].strides))), __pyx_t_9, __pyx_v_anc_dir, __pyx_v_ndvi_file, (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_ndvi_mv.data) + __pyx_t_10)) )))));
 
-  /* "ancillary.pyx":57
+  /* "ancillary.pyx":58
  *     get_NDVI_background(&lat[0], &lon[0], res, anc_dir, ndvi_file, &ndvi_mv[0])
  * 
  *     return ndvi             # <<<<<<<<<<<<<<
@@ -3362,7 +3362,7 @@ static PyObject *__pyx_pf_14ancillary_data_2py_get_NDVI_background(CYTHON_UNUSED
   __pyx_r = __pyx_v_ndvi;
   goto __pyx_L0;
 
-  /* "ancillary.pyx":46
+  /* "ancillary.pyx":47
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_NDVI_background(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
@@ -3397,7 +3397,7 @@ static PyObject *__pyx_pf_14ancillary_data_2py_get_NDVI_background(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "ancillary.pyx":63
+/* "ancillary.pyx":64
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_Olson_eco(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
@@ -3449,29 +3449,29 @@ static PyObject *__pyx_pw_14ancillary_data_5py_get_Olson_eco(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lon)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, 1); __PYX_ERR(0, 63, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, 1); __PYX_ERR(0, 64, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_res)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, 2); __PYX_ERR(0, 63, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, 2); __PYX_ERR(0, 64, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_anc_dir)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, 3); __PYX_ERR(0, 63, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, 3); __PYX_ERR(0, 64, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eco)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, 4); __PYX_ERR(0, 63, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, 4); __PYX_ERR(0, 64, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_get_Olson_eco") < 0)) __PYX_ERR(0, 63, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_get_Olson_eco") < 0)) __PYX_ERR(0, 64, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -3485,19 +3485,19 @@ static PyObject *__pyx_pw_14ancillary_data_5py_get_Olson_eco(PyObject *__pyx_sel
     __pyx_v_lat = ((PyArrayObject *)values[0]);
     __pyx_v_lon = ((PyArrayObject *)values[1]);
     __pyx_v_res = values[2];
-    __pyx_v_anc_dir = __Pyx_PyObject_AsWritableString(values[3]); if (unlikely((!__pyx_v_anc_dir) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error)
+    __pyx_v_anc_dir = __Pyx_PyObject_AsWritableString(values[3]); if (unlikely((!__pyx_v_anc_dir) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error)
     __pyx_v_eco = values[4];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 63, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("py_get_Olson_eco", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 64, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("ancillary_data.py_get_Olson_eco", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat), __pyx_ptype_5numpy_ndarray, 1, "lat", 0))) __PYX_ERR(0, 63, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon), __pyx_ptype_5numpy_ndarray, 1, "lon", 0))) __PYX_ERR(0, 64, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat), __pyx_ptype_5numpy_ndarray, 1, "lat", 0))) __PYX_ERR(0, 64, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon), __pyx_ptype_5numpy_ndarray, 1, "lon", 0))) __PYX_ERR(0, 65, __pyx_L1_error)
   __pyx_r = __pyx_pf_14ancillary_data_4py_get_Olson_eco(__pyx_self, __pyx_v_lat, __pyx_v_lon, __pyx_v_res, __pyx_v_anc_dir, __pyx_v_eco);
 
   /* function exit code */
@@ -3542,42 +3542,42 @@ static PyObject *__pyx_pf_14ancillary_data_4py_get_Olson_eco(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_lon.rcbuffer = &__pyx_pybuffer_lon;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 63, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 64, __pyx_L1_error)
   }
   __pyx_pybuffernd_lat.diminfo[0].strides = __pyx_pybuffernd_lat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lat.diminfo[0].shape = __pyx_pybuffernd_lat.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 63, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 64, __pyx_L1_error)
   }
   __pyx_pybuffernd_lon.diminfo[0].strides = __pyx_pybuffernd_lon.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon.diminfo[0].shape = __pyx_pybuffernd_lon.rcbuffer->pybuffer.shape[0];
 
-  /* "ancillary.pyx":67
+  /* "ancillary.pyx":68
  *                      char *anc_dir, eco):
  * 
  *     if not eco.flags['C_CONTIGUOUS']:             # <<<<<<<<<<<<<<
  *         eco = np.ascontiguousarray(eco)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_eco, __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_eco, __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_C_CONTIGUOUS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_n_u_C_CONTIGUOUS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 67, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 68, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_4 = ((!__pyx_t_3) != 0);
   if (__pyx_t_4) {
 
-    /* "ancillary.pyx":68
+    /* "ancillary.pyx":69
  * 
  *     if not eco.flags['C_CONTIGUOUS']:
  *         eco = np.ascontiguousarray(eco)             # <<<<<<<<<<<<<<
  * 
  *     cdef unsigned char[::1] eco_mv = eco
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 68, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 69, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_1 = NULL;
@@ -3592,13 +3592,13 @@ static PyObject *__pyx_pf_14ancillary_data_4py_get_Olson_eco(CYTHON_UNUSED PyObj
     }
     __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_v_eco) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_eco);
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 68, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_eco, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "ancillary.pyx":67
+    /* "ancillary.pyx":68
  *                      char *anc_dir, eco):
  * 
  *     if not eco.flags['C_CONTIGUOUS']:             # <<<<<<<<<<<<<<
@@ -3607,19 +3607,19 @@ static PyObject *__pyx_pf_14ancillary_data_4py_get_Olson_eco(CYTHON_UNUSED PyObj
  */
   }
 
-  /* "ancillary.pyx":70
+  /* "ancillary.pyx":71
  *         eco = np.ascontiguousarray(eco)
  * 
  *     cdef unsigned char[::1] eco_mv = eco             # <<<<<<<<<<<<<<
  * 
  *     get_Olson_eco(&lat[0], &lon[0], res, anc_dir, &eco_mv[0])
  */
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_v_eco, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 70, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_char(__pyx_v_eco, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 71, __pyx_L1_error)
   __pyx_v_eco_mv = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "ancillary.pyx":72
+  /* "ancillary.pyx":73
  *     cdef unsigned char[::1] eco_mv = eco
  * 
  *     get_Olson_eco(&lat[0], &lon[0], res, anc_dir, &eco_mv[0])             # <<<<<<<<<<<<<<
@@ -3628,11 +3628,11 @@ static PyObject *__pyx_pf_14ancillary_data_4py_get_Olson_eco(CYTHON_UNUSED PyObj
  */
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_res); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_res); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L1_error)
   __pyx_t_10 = 0;
   get_Olson_eco((&(*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_lat.rcbuffer->pybuffer.buf, __pyx_t_7, __pyx_pybuffernd_lat.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_lon.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_lon.diminfo[0].strides))), __pyx_t_9, __pyx_v_anc_dir, (&(*((unsigned char *) ( /* dim=0 */ ((char *) (((unsigned char *) __pyx_v_eco_mv.data) + __pyx_t_10)) )))));
 
-  /* "ancillary.pyx":74
+  /* "ancillary.pyx":75
  *     get_Olson_eco(&lat[0], &lon[0], res, anc_dir, &eco_mv[0])
  * 
  *     return eco             # <<<<<<<<<<<<<<
@@ -3644,7 +3644,7 @@ static PyObject *__pyx_pf_14ancillary_data_4py_get_Olson_eco(CYTHON_UNUSED PyObj
   __pyx_r = __pyx_v_eco;
   goto __pyx_L0;
 
-  /* "ancillary.pyx":63
+  /* "ancillary.pyx":64
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_Olson_eco(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
@@ -3679,7 +3679,7 @@ static PyObject *__pyx_pf_14ancillary_data_4py_get_Olson_eco(CYTHON_UNUSED PyObj
   return __pyx_r;
 }
 
-/* "ancillary.pyx":80
+/* "ancillary.pyx":81
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_GEOS(np.ndarray[float, ndim=1] lat, np.ndarray[float, ndim=1] lon, int res, char *startTime,             # <<<<<<<<<<<<<<
@@ -3749,65 +3749,65 @@ static PyObject *__pyx_pw_14ancillary_data_7py_get_GEOS(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lon)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 1); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 1); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_res)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 2); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 2); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_startTime)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 3); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 3); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_anc_dir)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 4); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 4); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_geos1)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 5); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 5); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  6:
         if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_geos2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 6); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 6); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  7:
         if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_geos_lnd)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 7); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 7); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  8:
         if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_geos_ocn)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 8); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 8); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  9:
         if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_geos_cnst)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 9); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 9); __PYX_ERR(0, 81, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case 10:
         if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_geos_data)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 10); __PYX_ERR(0, 80, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, 10); __PYX_ERR(0, 81, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_get_GEOS") < 0)) __PYX_ERR(0, 80, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_get_GEOS") < 0)) __PYX_ERR(0, 81, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 11) {
       goto __pyx_L5_argtuple_error;
@@ -3826,26 +3826,26 @@ static PyObject *__pyx_pw_14ancillary_data_7py_get_GEOS(PyObject *__pyx_self, Py
     }
     __pyx_v_lat = ((PyArrayObject *)values[0]);
     __pyx_v_lon = ((PyArrayObject *)values[1]);
-    __pyx_v_res = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_res == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error)
-    __pyx_v_startTime = __Pyx_PyObject_AsWritableString(values[3]); if (unlikely((!__pyx_v_startTime) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error)
-    __pyx_v_anc_dir = __Pyx_PyObject_AsWritableString(values[4]); if (unlikely((!__pyx_v_anc_dir) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L3_error)
-    __pyx_v_geos1 = __Pyx_PyObject_AsWritableString(values[5]); if (unlikely((!__pyx_v_geos1) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L3_error)
-    __pyx_v_geos2 = __Pyx_PyObject_AsWritableString(values[6]); if (unlikely((!__pyx_v_geos2) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L3_error)
-    __pyx_v_geos_lnd = __Pyx_PyObject_AsWritableString(values[7]); if (unlikely((!__pyx_v_geos_lnd) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L3_error)
-    __pyx_v_geos_ocn = __Pyx_PyObject_AsWritableString(values[8]); if (unlikely((!__pyx_v_geos_ocn) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L3_error)
-    __pyx_v_geos_cnst = __Pyx_PyObject_AsWritableString(values[9]); if (unlikely((!__pyx_v_geos_cnst) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L3_error)
+    __pyx_v_res = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_res == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L3_error)
+    __pyx_v_startTime = __Pyx_PyObject_AsWritableString(values[3]); if (unlikely((!__pyx_v_startTime) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L3_error)
+    __pyx_v_anc_dir = __Pyx_PyObject_AsWritableString(values[4]); if (unlikely((!__pyx_v_anc_dir) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)
+    __pyx_v_geos1 = __Pyx_PyObject_AsWritableString(values[5]); if (unlikely((!__pyx_v_geos1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)
+    __pyx_v_geos2 = __Pyx_PyObject_AsWritableString(values[6]); if (unlikely((!__pyx_v_geos2) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)
+    __pyx_v_geos_lnd = __Pyx_PyObject_AsWritableString(values[7]); if (unlikely((!__pyx_v_geos_lnd) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)
+    __pyx_v_geos_ocn = __Pyx_PyObject_AsWritableString(values[8]); if (unlikely((!__pyx_v_geos_ocn) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)
+    __pyx_v_geos_cnst = __Pyx_PyObject_AsWritableString(values[9]); if (unlikely((!__pyx_v_geos_cnst) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)
     __pyx_v_geos_data = values[10];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 80, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("py_get_GEOS", 1, 11, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 81, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("ancillary_data.py_get_GEOS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat), __pyx_ptype_5numpy_ndarray, 1, "lat", 0))) __PYX_ERR(0, 80, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon), __pyx_ptype_5numpy_ndarray, 1, "lon", 0))) __PYX_ERR(0, 80, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat), __pyx_ptype_5numpy_ndarray, 1, "lat", 0))) __PYX_ERR(0, 81, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon), __pyx_ptype_5numpy_ndarray, 1, "lon", 0))) __PYX_ERR(0, 81, __pyx_L1_error)
   __pyx_r = __pyx_pf_14ancillary_data_6py_get_GEOS(__pyx_self, __pyx_v_lat, __pyx_v_lon, __pyx_v_res, __pyx_v_startTime, __pyx_v_anc_dir, __pyx_v_geos1, __pyx_v_geos2, __pyx_v_geos_lnd, __pyx_v_geos_ocn, __pyx_v_geos_cnst, __pyx_v_geos_data);
 
   /* function exit code */
@@ -3904,16 +3904,16 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
   __pyx_pybuffernd_lon.rcbuffer = &__pyx_pybuffer_lon;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 80, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 81, __pyx_L1_error)
   }
   __pyx_pybuffernd_lat.diminfo[0].strides = __pyx_pybuffernd_lat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lat.diminfo[0].shape = __pyx_pybuffernd_lat.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 80, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 81, __pyx_L1_error)
   }
   __pyx_pybuffernd_lon.diminfo[0].strides = __pyx_pybuffernd_lon.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon.diminfo[0].shape = __pyx_pybuffernd_lon.rcbuffer->pybuffer.shape[0];
 
-  /* "ancillary.pyx":84
+  /* "ancillary.pyx":85
  *                 geos_data):
  * 
  *     for v in geos_data:             # <<<<<<<<<<<<<<
@@ -3924,26 +3924,26 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
     __pyx_t_1 = __pyx_v_geos_data; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
     __pyx_t_3 = NULL;
   } else {
-    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_geos_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error)
+    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_geos_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error)
+    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 85, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_3)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 84, __pyx_L1_error)
+        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 85, __pyx_L1_error)
         #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error)
+        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 85, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         #endif
       } else {
         if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 84, __pyx_L1_error)
+        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 85, __pyx_L1_error)
         #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error)
+        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 85, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         #endif
       }
@@ -3953,7 +3953,7 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 84, __pyx_L1_error)
+          else __PYX_ERR(0, 85, __pyx_L1_error)
         }
         break;
       }
@@ -3962,39 +3962,39 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
     __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "ancillary.pyx":85
+    /* "ancillary.pyx":86
  * 
  *     for v in geos_data:
  *         if not geos_data[v].flags['C_CONTIGUOUS']:             # <<<<<<<<<<<<<<
  *             geos_data[v] = np.ascontiguousarray(geos_data[v])
  * 
  */
-    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_geos_data, __pyx_v_v); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 85, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_geos_data, __pyx_v_v); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 85, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_C_CONTIGUOUS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 85, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_C_CONTIGUOUS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 86, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 85, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 86, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_7 = ((!__pyx_t_6) != 0);
     if (__pyx_t_7) {
 
-      /* "ancillary.pyx":86
+      /* "ancillary.pyx":87
  *     for v in geos_data:
  *         if not geos_data[v].flags['C_CONTIGUOUS']:
  *             geos_data[v] = np.ascontiguousarray(geos_data[v])             # <<<<<<<<<<<<<<
  * 
  *     cdef float[::1] tpw_mv = geos_data['tpw']
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 86, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 86, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 87, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_geos_data, __pyx_v_v); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 86, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_geos_data, __pyx_v_v); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_9 = NULL;
       if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
@@ -4009,13 +4009,13 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
       __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_5);
       __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 86, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      if (unlikely(PyObject_SetItem(__pyx_v_geos_data, __pyx_v_v, __pyx_t_4) < 0)) __PYX_ERR(0, 86, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(__pyx_v_geos_data, __pyx_v_v, __pyx_t_4) < 0)) __PYX_ERR(0, 87, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "ancillary.pyx":85
+      /* "ancillary.pyx":86
  * 
  *     for v in geos_data:
  *         if not geos_data[v].flags['C_CONTIGUOUS']:             # <<<<<<<<<<<<<<
@@ -4024,7 +4024,7 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
  */
     }
 
-    /* "ancillary.pyx":84
+    /* "ancillary.pyx":85
  *                 geos_data):
  * 
  *     for v in geos_data:             # <<<<<<<<<<<<<<
@@ -4034,97 +4034,97 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "ancillary.pyx":88
+  /* "ancillary.pyx":89
  *             geos_data[v] = np.ascontiguousarray(geos_data[v])
  * 
  *     cdef float[::1] tpw_mv = geos_data['tpw']             # <<<<<<<<<<<<<<
  *     cdef float[::1] snowfr_mv = geos_data['snowfr']
  *     cdef float[::1] icefr_mv = geos_data['icefr']
  */
-  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_tpw); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_tpw); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 88, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 89, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_tpw_mv = __pyx_t_10;
   __pyx_t_10.memview = NULL;
   __pyx_t_10.data = NULL;
 
-  /* "ancillary.pyx":89
+  /* "ancillary.pyx":90
  * 
  *     cdef float[::1] tpw_mv = geos_data['tpw']
  *     cdef float[::1] snowfr_mv = geos_data['snowfr']             # <<<<<<<<<<<<<<
  *     cdef float[::1] icefr_mv = geos_data['icefr']
  *     cdef float[::1] ocnfr_mv = geos_data['ocnfr']
  */
-  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_snowfr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_snowfr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 89, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 90, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_snowfr_mv = __pyx_t_10;
   __pyx_t_10.memview = NULL;
   __pyx_t_10.data = NULL;
 
-  /* "ancillary.pyx":90
+  /* "ancillary.pyx":91
  *     cdef float[::1] tpw_mv = geos_data['tpw']
  *     cdef float[::1] snowfr_mv = geos_data['snowfr']
  *     cdef float[::1] icefr_mv = geos_data['icefr']             # <<<<<<<<<<<<<<
  *     cdef float[::1] ocnfr_mv = geos_data['ocnfr']
  *     cdef float[::1] landicefr_mv = geos_data['landicefr']
  */
-  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_icefr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_icefr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 90, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 91, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_icefr_mv = __pyx_t_10;
   __pyx_t_10.memview = NULL;
   __pyx_t_10.data = NULL;
 
-  /* "ancillary.pyx":91
+  /* "ancillary.pyx":92
  *     cdef float[::1] snowfr_mv = geos_data['snowfr']
  *     cdef float[::1] icefr_mv = geos_data['icefr']
  *     cdef float[::1] ocnfr_mv = geos_data['ocnfr']             # <<<<<<<<<<<<<<
  *     cdef float[::1] landicefr_mv = geos_data['landicefr']
  *     cdef float[::1] sfct_mv = geos_data['sfct']
  */
-  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_ocnfr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_ocnfr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 91, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 92, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_ocnfr_mv = __pyx_t_10;
   __pyx_t_10.memview = NULL;
   __pyx_t_10.data = NULL;
 
-  /* "ancillary.pyx":92
+  /* "ancillary.pyx":93
  *     cdef float[::1] icefr_mv = geos_data['icefr']
  *     cdef float[::1] ocnfr_mv = geos_data['ocnfr']
  *     cdef float[::1] landicefr_mv = geos_data['landicefr']             # <<<<<<<<<<<<<<
  *     cdef float[::1] sfct_mv = geos_data['sfct']
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_landicefr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_landicefr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 92, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 93, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_landicefr_mv = __pyx_t_10;
   __pyx_t_10.memview = NULL;
   __pyx_t_10.data = NULL;
 
-  /* "ancillary.pyx":93
+  /* "ancillary.pyx":94
  *     cdef float[::1] ocnfr_mv = geos_data['ocnfr']
  *     cdef float[::1] landicefr_mv = geos_data['landicefr']
  *     cdef float[::1] sfct_mv = geos_data['sfct']             # <<<<<<<<<<<<<<
  * 
  *     get_GEOS(&lat[0], &lon[0], res, startTime, anc_dir, geos1, geos2, geos_lnd, geos_ocn, geos_cnst,
  */
-  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_sfct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_sfct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 93, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 94, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_sfct_mv = __pyx_t_10;
   __pyx_t_10.memview = NULL;
   __pyx_t_10.data = NULL;
 
-  /* "ancillary.pyx":95
+  /* "ancillary.pyx":96
  *     cdef float[::1] sfct_mv = geos_data['sfct']
  * 
  *     get_GEOS(&lat[0], &lon[0], res, startTime, anc_dir, geos1, geos2, geos_lnd, geos_ocn, geos_cnst,             # <<<<<<<<<<<<<<
@@ -4134,7 +4134,7 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
   __pyx_t_11 = 0;
   __pyx_t_12 = 0;
 
-  /* "ancillary.pyx":96
+  /* "ancillary.pyx":97
  * 
  *     get_GEOS(&lat[0], &lon[0], res, startTime, anc_dir, geos1, geos2, geos_lnd, geos_ocn, geos_cnst,
  *              &tpw_mv[0], &snowfr_mv[0], &icefr_mv[0], &ocnfr_mv[0], &landicefr_mv[0], &sfct_mv[0])             # <<<<<<<<<<<<<<
@@ -4148,7 +4148,7 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
   __pyx_t_17 = 0;
   __pyx_t_18 = 0;
 
-  /* "ancillary.pyx":95
+  /* "ancillary.pyx":96
  *     cdef float[::1] sfct_mv = geos_data['sfct']
  * 
  *     get_GEOS(&lat[0], &lon[0], res, startTime, anc_dir, geos1, geos2, geos_lnd, geos_ocn, geos_cnst,             # <<<<<<<<<<<<<<
@@ -4157,83 +4157,83 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
  */
   get_GEOS((&(*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_lat.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_lat.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_lon.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_lon.diminfo[0].strides))), __pyx_v_res, __pyx_v_startTime, __pyx_v_anc_dir, __pyx_v_geos1, __pyx_v_geos2, __pyx_v_geos_lnd, __pyx_v_geos_ocn, __pyx_v_geos_cnst, (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_tpw_mv.data) + __pyx_t_13)) )))), (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_snowfr_mv.data) + __pyx_t_14)) )))), (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_icefr_mv.data) + __pyx_t_15)) )))), (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_ocnfr_mv.data) + __pyx_t_16)) )))), (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_landicefr_mv.data) + __pyx_t_17)) )))), (&(*((float *) ( /* dim=0 */ ((char *) (((float *) __pyx_v_sfct_mv.data) + __pyx_t_18)) )))));
 
-  /* "ancillary.pyx":98
+  /* "ancillary.pyx":99
  *              &tpw_mv[0], &snowfr_mv[0], &icefr_mv[0], &ocnfr_mv[0], &landicefr_mv[0], &sfct_mv[0])
  * 
  *     geos_dict = {'tpw': geos_data['tpw'],             # <<<<<<<<<<<<<<
  *                  'snowfr': geos_data['snowfr'],
  *                  'icefr': geos_data['icefr'],
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_tpw); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_tpw); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 99, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tpw, __pyx_t_4) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tpw, __pyx_t_4) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "ancillary.pyx":99
+  /* "ancillary.pyx":100
  * 
  *     geos_dict = {'tpw': geos_data['tpw'],
  *                  'snowfr': geos_data['snowfr'],             # <<<<<<<<<<<<<<
  *                  'icefr': geos_data['icefr'],
  *                  'ocnfr': geos_data['ocnfr'],
  */
-  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_snowfr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 99, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_snowfr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_snowfr, __pyx_t_4) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_snowfr, __pyx_t_4) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "ancillary.pyx":100
+  /* "ancillary.pyx":101
  *     geos_dict = {'tpw': geos_data['tpw'],
  *                  'snowfr': geos_data['snowfr'],
  *                  'icefr': geos_data['icefr'],             # <<<<<<<<<<<<<<
  *                  'ocnfr': geos_data['ocnfr'],
  *                  'landicefr': geos_data['landicefr'],
  */
-  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_icefr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 100, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_icefr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_icefr, __pyx_t_4) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_icefr, __pyx_t_4) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "ancillary.pyx":101
+  /* "ancillary.pyx":102
  *                  'snowfr': geos_data['snowfr'],
  *                  'icefr': geos_data['icefr'],
  *                  'ocnfr': geos_data['ocnfr'],             # <<<<<<<<<<<<<<
  *                  'landicefr': geos_data['landicefr'],
  *                  'sfct': geos_data['sfct']
  */
-  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_ocnfr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 101, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_ocnfr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_ocnfr, __pyx_t_4) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_ocnfr, __pyx_t_4) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "ancillary.pyx":102
+  /* "ancillary.pyx":103
  *                  'icefr': geos_data['icefr'],
  *                  'ocnfr': geos_data['ocnfr'],
  *                  'landicefr': geos_data['landicefr'],             # <<<<<<<<<<<<<<
  *                  'sfct': geos_data['sfct']
  *                  }
  */
-  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_landicefr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_landicefr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_landicefr, __pyx_t_4) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_landicefr, __pyx_t_4) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "ancillary.pyx":103
+  /* "ancillary.pyx":104
  *                  'ocnfr': geos_data['ocnfr'],
  *                  'landicefr': geos_data['landicefr'],
  *                  'sfct': geos_data['sfct']             # <<<<<<<<<<<<<<
  *                  }
  * 
  */
-  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_sfct); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 103, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_geos_data, __pyx_n_u_sfct); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_sfct, __pyx_t_4) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_sfct, __pyx_t_4) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_geos_dict = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "ancillary.pyx":106
+  /* "ancillary.pyx":107
  *                  }
  * 
  *     return geos_dict             # <<<<<<<<<<<<<<
@@ -4245,7 +4245,7 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
   __pyx_r = __pyx_v_geos_dict;
   goto __pyx_L0;
 
-  /* "ancillary.pyx":80
+  /* "ancillary.pyx":81
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_GEOS(np.ndarray[float, ndim=1] lat, np.ndarray[float, ndim=1] lon, int res, char *startTime,             # <<<<<<<<<<<<<<
@@ -4288,7 +4288,7 @@ static PyObject *__pyx_pf_14ancillary_data_6py_get_GEOS(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "ancillary.pyx":112
+/* "ancillary.pyx":113
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_snow_mask(char *satname, unsigned char lsf):             # <<<<<<<<<<<<<<
@@ -4331,11 +4331,11 @@ static PyObject *__pyx_pw_14ancillary_data_9py_snow_mask(PyObject *__pyx_self, P
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lsf)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_snow_mask", 1, 2, 2, 1); __PYX_ERR(0, 112, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_snow_mask", 1, 2, 2, 1); __PYX_ERR(0, 113, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_snow_mask") < 0)) __PYX_ERR(0, 112, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_snow_mask") < 0)) __PYX_ERR(0, 113, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4343,12 +4343,12 @@ static PyObject *__pyx_pw_14ancillary_data_9py_snow_mask(PyObject *__pyx_self, P
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_satname = __Pyx_PyObject_AsWritableString(values[0]); if (unlikely((!__pyx_v_satname) && PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
-    __pyx_v_lsf = __Pyx_PyInt_As_unsigned_char(values[1]); if (unlikely((__pyx_v_lsf == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
+    __pyx_v_satname = __Pyx_PyObject_AsWritableString(values[0]); if (unlikely((!__pyx_v_satname) && PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
+    __pyx_v_lsf = __Pyx_PyInt_As_unsigned_char(values[1]); if (unlikely((__pyx_v_lsf == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("py_snow_mask", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 112, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("py_snow_mask", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 113, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("ancillary_data.py_snow_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4373,7 +4373,7 @@ static PyObject *__pyx_pf_14ancillary_data_8py_snow_mask(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "ancillary.pyx":121
+/* "ancillary.pyx":122
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_cithr(int key, np.ndarray[float, ndim=1] sec_vza, np.ndarray[float, ndim=1] bt11):             # <<<<<<<<<<<<<<
@@ -4419,17 +4419,17 @@ static PyObject *__pyx_pw_14ancillary_data_11py_cithr(PyObject *__pyx_self, PyOb
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sec_vza)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_cithr", 1, 3, 3, 1); __PYX_ERR(0, 121, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_cithr", 1, 3, 3, 1); __PYX_ERR(0, 122, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bt11)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_cithr", 1, 3, 3, 2); __PYX_ERR(0, 121, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_cithr", 1, 3, 3, 2); __PYX_ERR(0, 122, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_cithr") < 0)) __PYX_ERR(0, 121, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_cithr") < 0)) __PYX_ERR(0, 122, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -4438,20 +4438,20 @@ static PyObject *__pyx_pw_14ancillary_data_11py_cithr(PyObject *__pyx_self, PyOb
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_key = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_key == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 121, __pyx_L3_error)
+    __pyx_v_key = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_key == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 122, __pyx_L3_error)
     __pyx_v_sec_vza = ((PyArrayObject *)values[1]);
     __pyx_v_bt11 = ((PyArrayObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("py_cithr", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 121, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("py_cithr", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 122, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("ancillary_data.py_cithr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec_vza), __pyx_ptype_5numpy_ndarray, 1, "sec_vza", 0))) __PYX_ERR(0, 121, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bt11), __pyx_ptype_5numpy_ndarray, 1, "bt11", 0))) __PYX_ERR(0, 121, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec_vza), __pyx_ptype_5numpy_ndarray, 1, "sec_vza", 0))) __PYX_ERR(0, 122, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bt11), __pyx_ptype_5numpy_ndarray, 1, "bt11", 0))) __PYX_ERR(0, 122, __pyx_L1_error)
   __pyx_r = __pyx_pf_14ancillary_data_10py_cithr(__pyx_self, __pyx_v_key, __pyx_v_sec_vza, __pyx_v_bt11);
 
   /* function exit code */
@@ -4496,59 +4496,59 @@ static PyObject *__pyx_pf_14ancillary_data_10py_cithr(CYTHON_UNUSED PyObject *__
   __pyx_pybuffernd_bt11.rcbuffer = &__pyx_pybuffer_bt11;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sec_vza.rcbuffer->pybuffer, (PyObject*)__pyx_v_sec_vza, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 121, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sec_vza.rcbuffer->pybuffer, (PyObject*)__pyx_v_sec_vza, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 122, __pyx_L1_error)
   }
   __pyx_pybuffernd_sec_vza.diminfo[0].strides = __pyx_pybuffernd_sec_vza.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sec_vza.diminfo[0].shape = __pyx_pybuffernd_sec_vza.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bt11.rcbuffer->pybuffer, (PyObject*)__pyx_v_bt11, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 121, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bt11.rcbuffer->pybuffer, (PyObject*)__pyx_v_bt11, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 122, __pyx_L1_error)
   }
   __pyx_pybuffernd_bt11.diminfo[0].strides = __pyx_pybuffernd_bt11.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bt11.diminfo[0].shape = __pyx_pybuffernd_bt11.rcbuffer->pybuffer.shape[0];
 
-  /* "ancillary.pyx":123
+  /* "ancillary.pyx":124
  * def py_cithr(int key, np.ndarray[float, ndim=1] sec_vza, np.ndarray[float, ndim=1] bt11):
  * 
  *     cdef np.ndarray tci_thr = np.zeros((bt11.shape[0], ), order='C', dtype=np.float)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(bt11.shape[0]):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_bt11->dimensions[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_bt11->dimensions[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 123, __pyx_L1_error)
-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 123, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 124, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 123, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 123, __pyx_L1_error)
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 124, __pyx_L1_error)
   __pyx_v_tci_thr = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "ancillary.pyx":125
+  /* "ancillary.pyx":126
  *     cdef np.ndarray tci_thr = np.zeros((bt11.shape[0], ), order='C', dtype=np.float)
  * 
  *     for i in range(bt11.shape[0]):             # <<<<<<<<<<<<<<
@@ -4560,7 +4560,7 @@ static PyObject *__pyx_pf_14ancillary_data_10py_cithr(CYTHON_UNUSED PyObject *__
   for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
     __pyx_v_i = __pyx_t_8;
 
-    /* "ancillary.pyx":126
+    /* "ancillary.pyx":127
  * 
  *     for i in range(bt11.shape[0]):
  *         tci_thr[i] = cithr(key, sec_vza[i], bt11[i])             # <<<<<<<<<<<<<<
@@ -4569,13 +4569,13 @@ static PyObject *__pyx_pf_14ancillary_data_10py_cithr(CYTHON_UNUSED PyObject *__
  */
     __pyx_t_9 = __pyx_v_i;
     __pyx_t_10 = __pyx_v_i;
-    __pyx_t_5 = PyFloat_FromDouble(cithr(__pyx_v_key, (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_sec_vza.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_sec_vza.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_bt11.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_bt11.diminfo[0].strides)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 126, __pyx_L1_error)
+    __pyx_t_5 = PyFloat_FromDouble(cithr(__pyx_v_key, (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_sec_vza.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_sec_vza.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_bt11.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_bt11.diminfo[0].strides)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (unlikely(__Pyx_SetItemInt(((PyObject *)__pyx_v_tci_thr), __pyx_v_i, __pyx_t_5, npy_intp, 1, __Pyx_PyInt_From_Py_intptr_t, 0, 0, 0) < 0)) __PYX_ERR(0, 126, __pyx_L1_error)
+    if (unlikely(__Pyx_SetItemInt(((PyObject *)__pyx_v_tci_thr), __pyx_v_i, __pyx_t_5, npy_intp, 1, __Pyx_PyInt_From_Py_intptr_t, 0, 0, 0) < 0)) __PYX_ERR(0, 127, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "ancillary.pyx":128
+  /* "ancillary.pyx":129
  *         tci_thr[i] = cithr(key, sec_vza[i], bt11[i])
  * 
  *     return tci_thr             # <<<<<<<<<<<<<<
@@ -4587,7 +4587,7 @@ static PyObject *__pyx_pf_14ancillary_data_10py_cithr(CYTHON_UNUSED PyObject *__
   __pyx_r = ((PyObject *)__pyx_v_tci_thr);
   goto __pyx_L0;
 
-  /* "ancillary.pyx":121
+  /* "ancillary.pyx":122
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_cithr(int key, np.ndarray[float, ndim=1] sec_vza, np.ndarray[float, ndim=1] bt11):             # <<<<<<<<<<<<<<
@@ -4622,7 +4622,7 @@ static PyObject *__pyx_pf_14ancillary_data_10py_cithr(CYTHON_UNUSED PyObject *__
   return __pyx_r;
 }
 
-/* "ancillary.pyx":134
+/* "ancillary.pyx":135
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_check_reg_uniformity(np.ndarray[unsigned char, ndim=2] eco_type, np.ndarray[unsigned char, ndim=2] eco,             # <<<<<<<<<<<<<<
@@ -4674,29 +4674,29 @@ static PyObject *__pyx_pw_14ancillary_data_13py_check_reg_uniformity(PyObject *_
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eco)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, 1); __PYX_ERR(0, 134, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, 1); __PYX_ERR(0, 135, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_snowfr)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, 2); __PYX_ERR(0, 134, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, 2); __PYX_ERR(0, 135, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_icefr)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, 3); __PYX_ERR(0, 134, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, 3); __PYX_ERR(0, 135, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lsf)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, 4); __PYX_ERR(0, 134, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, 4); __PYX_ERR(0, 135, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_check_reg_uniformity") < 0)) __PYX_ERR(0, 134, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "py_check_reg_uniformity") < 0)) __PYX_ERR(0, 135, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -4715,17 +4715,17 @@ static PyObject *__pyx_pw_14ancillary_data_13py_check_reg_uniformity(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 134, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("py_check_reg_uniformity", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 135, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("ancillary_data.py_check_reg_uniformity", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eco_type), __pyx_ptype_5numpy_ndarray, 1, "eco_type", 0))) __PYX_ERR(0, 134, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eco), __pyx_ptype_5numpy_ndarray, 1, "eco", 0))) __PYX_ERR(0, 134, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_snowfr), __pyx_ptype_5numpy_ndarray, 1, "snowfr", 0))) __PYX_ERR(0, 135, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_icefr), __pyx_ptype_5numpy_ndarray, 1, "icefr", 0))) __PYX_ERR(0, 136, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lsf), __pyx_ptype_5numpy_ndarray, 1, "lsf", 0))) __PYX_ERR(0, 136, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eco_type), __pyx_ptype_5numpy_ndarray, 1, "eco_type", 0))) __PYX_ERR(0, 135, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eco), __pyx_ptype_5numpy_ndarray, 1, "eco", 0))) __PYX_ERR(0, 135, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_snowfr), __pyx_ptype_5numpy_ndarray, 1, "snowfr", 0))) __PYX_ERR(0, 136, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_icefr), __pyx_ptype_5numpy_ndarray, 1, "icefr", 0))) __PYX_ERR(0, 137, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lsf), __pyx_ptype_5numpy_ndarray, 1, "lsf", 0))) __PYX_ERR(0, 137, __pyx_L1_error)
   __pyx_r = __pyx_pf_14ancillary_data_12py_check_reg_uniformity(__pyx_self, __pyx_v_eco_type, __pyx_v_eco, __pyx_v_snowfr, __pyx_v_icefr, __pyx_v_lsf);
 
   /* function exit code */
@@ -4818,47 +4818,47 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
   __pyx_pybuffernd_lsf.rcbuffer = &__pyx_pybuffer_lsf;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_eco_type.rcbuffer->pybuffer, (PyObject*)__pyx_v_eco_type, &__Pyx_TypeInfo_unsigned_char, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 134, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_eco_type.rcbuffer->pybuffer, (PyObject*)__pyx_v_eco_type, &__Pyx_TypeInfo_unsigned_char, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 135, __pyx_L1_error)
   }
   __pyx_pybuffernd_eco_type.diminfo[0].strides = __pyx_pybuffernd_eco_type.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_eco_type.diminfo[0].shape = __pyx_pybuffernd_eco_type.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_eco_type.diminfo[1].strides = __pyx_pybuffernd_eco_type.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_eco_type.diminfo[1].shape = __pyx_pybuffernd_eco_type.rcbuffer->pybuffer.shape[1];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_eco.rcbuffer->pybuffer, (PyObject*)__pyx_v_eco, &__Pyx_TypeInfo_unsigned_char, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 134, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_eco.rcbuffer->pybuffer, (PyObject*)__pyx_v_eco, &__Pyx_TypeInfo_unsigned_char, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 135, __pyx_L1_error)
   }
   __pyx_pybuffernd_eco.diminfo[0].strides = __pyx_pybuffernd_eco.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_eco.diminfo[0].shape = __pyx_pybuffernd_eco.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_eco.diminfo[1].strides = __pyx_pybuffernd_eco.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_eco.diminfo[1].shape = __pyx_pybuffernd_eco.rcbuffer->pybuffer.shape[1];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_snowfr.rcbuffer->pybuffer, (PyObject*)__pyx_v_snowfr, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 134, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_snowfr.rcbuffer->pybuffer, (PyObject*)__pyx_v_snowfr, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 135, __pyx_L1_error)
   }
   __pyx_pybuffernd_snowfr.diminfo[0].strides = __pyx_pybuffernd_snowfr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_snowfr.diminfo[0].shape = __pyx_pybuffernd_snowfr.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_snowfr.diminfo[1].strides = __pyx_pybuffernd_snowfr.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_snowfr.diminfo[1].shape = __pyx_pybuffernd_snowfr.rcbuffer->pybuffer.shape[1];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_icefr.rcbuffer->pybuffer, (PyObject*)__pyx_v_icefr, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 134, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_icefr.rcbuffer->pybuffer, (PyObject*)__pyx_v_icefr, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 135, __pyx_L1_error)
   }
   __pyx_pybuffernd_icefr.diminfo[0].strides = __pyx_pybuffernd_icefr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_icefr.diminfo[0].shape = __pyx_pybuffernd_icefr.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_icefr.diminfo[1].strides = __pyx_pybuffernd_icefr.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_icefr.diminfo[1].shape = __pyx_pybuffernd_icefr.rcbuffer->pybuffer.shape[1];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lsf.rcbuffer->pybuffer, (PyObject*)__pyx_v_lsf, &__Pyx_TypeInfo_unsigned_char, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 134, __pyx_L1_error)
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lsf.rcbuffer->pybuffer, (PyObject*)__pyx_v_lsf, &__Pyx_TypeInfo_unsigned_char, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 135, __pyx_L1_error)
   }
   __pyx_pybuffernd_lsf.diminfo[0].strides = __pyx_pybuffernd_lsf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lsf.diminfo[0].shape = __pyx_pybuffernd_lsf.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_lsf.diminfo[1].strides = __pyx_pybuffernd_lsf.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_lsf.diminfo[1].shape = __pyx_pybuffernd_lsf.rcbuffer->pybuffer.shape[1];
 
-  /* "ancillary.pyx":141
+  /* "ancillary.pyx":142
  *     cdef int i, j
  * 
  *     cdef np.ndarray coast_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray land_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef np.ndarray water_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
@@ -4866,47 +4866,47 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
   __pyx_t_1 = 0;
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 142, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 141, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 141, __pyx_L1_error)
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 142, __pyx_L1_error)
   __pyx_v_coast_r = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "ancillary.pyx":142
+  /* "ancillary.pyx":143
  * 
  *     cdef np.ndarray coast_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef np.ndarray land_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray water_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef np.ndarray loc_uniform_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_5);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
@@ -4914,47 +4914,47 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
   __pyx_t_5 = 0;
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 142, __pyx_L1_error)
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 142, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 142, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 143, __pyx_L1_error)
   __pyx_v_land_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "ancillary.pyx":143
+  /* "ancillary.pyx":144
  *     cdef np.ndarray coast_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef np.ndarray land_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef np.ndarray water_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray loc_uniform_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef int[:, ::1] coast_mv = coast_r
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
@@ -4962,47 +4962,47 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
   __pyx_t_1 = 0;
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 144, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 143, __pyx_L1_error)
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 144, __pyx_L1_error)
   __pyx_v_water_r = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "ancillary.pyx":144
+  /* "ancillary.pyx":145
  *     cdef np.ndarray land_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef np.ndarray water_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef np.ndarray loc_uniform_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)             # <<<<<<<<<<<<<<
  *     cdef int[:, ::1] coast_mv = coast_r
  *     cdef int[:, ::1] land_mv = land_r
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_eco_type->dimensions[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_5);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
@@ -5010,79 +5010,79 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
   __pyx_t_5 = 0;
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 144, __pyx_L1_error)
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 144, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 144, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 144, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 145, __pyx_L1_error)
   __pyx_v_loc_uniform_r = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "ancillary.pyx":145
+  /* "ancillary.pyx":146
  *     cdef np.ndarray water_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef np.ndarray loc_uniform_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef int[:, ::1] coast_mv = coast_r             # <<<<<<<<<<<<<<
  *     cdef int[:, ::1] land_mv = land_r
  *     cdef int[:, ::1] water_mv = water_r
  */
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_coast_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 145, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_coast_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 146, __pyx_L1_error)
   __pyx_v_coast_mv = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "ancillary.pyx":146
+  /* "ancillary.pyx":147
  *     cdef np.ndarray loc_uniform_r = np.zeros((eco_type.shape[0], eco_type.shape[1]), order='C', dtype=np.int32)
  *     cdef int[:, ::1] coast_mv = coast_r
  *     cdef int[:, ::1] land_mv = land_r             # <<<<<<<<<<<<<<
  *     cdef int[:, ::1] water_mv = water_r
  *     cdef int[:, ::1] loc_uniform_mv = loc_uniform_r
  */
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_land_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 146, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_land_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 147, __pyx_L1_error)
   __pyx_v_land_mv = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "ancillary.pyx":147
+  /* "ancillary.pyx":148
  *     cdef int[:, ::1] coast_mv = coast_r
  *     cdef int[:, ::1] land_mv = land_r
  *     cdef int[:, ::1] water_mv = water_r             # <<<<<<<<<<<<<<
  *     cdef int[:, ::1] loc_uniform_mv = loc_uniform_r
  * 
  */
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_water_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 147, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_water_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 148, __pyx_L1_error)
   __pyx_v_water_mv = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "ancillary.pyx":148
+  /* "ancillary.pyx":149
  *     cdef int[:, ::1] land_mv = land_r
  *     cdef int[:, ::1] water_mv = water_r
  *     cdef int[:, ::1] loc_uniform_mv = loc_uniform_r             # <<<<<<<<<<<<<<
  * 
  *     lines = eco_type.shape[0]
  */
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_loc_uniform_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 148, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(((PyObject *)__pyx_v_loc_uniform_r), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 149, __pyx_L1_error)
   __pyx_v_loc_uniform_mv = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "ancillary.pyx":150
+  /* "ancillary.pyx":151
  *     cdef int[:, ::1] loc_uniform_mv = loc_uniform_r
  * 
  *     lines = eco_type.shape[0]             # <<<<<<<<<<<<<<
@@ -5091,7 +5091,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
  */
   __pyx_v_lines = (__pyx_v_eco_type->dimensions[0]);
 
-  /* "ancillary.pyx":151
+  /* "ancillary.pyx":152
  * 
  *     lines = eco_type.shape[0]
  *     eles = eco_type.shape[1]             # <<<<<<<<<<<<<<
@@ -5100,7 +5100,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
  */
   __pyx_v_eles = (__pyx_v_eco_type->dimensions[1]);
 
-  /* "ancillary.pyx":152
+  /* "ancillary.pyx":153
  *     lines = eco_type.shape[0]
  *     eles = eco_type.shape[1]
  *     for i in range(lines):             # <<<<<<<<<<<<<<
@@ -5112,7 +5112,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "ancillary.pyx":153
+    /* "ancillary.pyx":154
  *     eles = eco_type.shape[1]
  *     for i in range(lines):
  *         for j in range(eles):             # <<<<<<<<<<<<<<
@@ -5124,7 +5124,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
     for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
       __pyx_v_j = __pyx_t_12;
 
-      /* "ancillary.pyx":154
+      /* "ancillary.pyx":155
  *     for i in range(lines):
  *         for j in range(eles):
  *             if (i == 0 or i == lines):             # <<<<<<<<<<<<<<
@@ -5142,7 +5142,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
       __pyx_L8_bool_binop_done:;
       if (__pyx_t_13) {
 
-        /* "ancillary.pyx":155
+        /* "ancillary.pyx":156
  *         for j in range(eles):
  *             if (i == 0 or i == lines):
  *                 line_edge = 1             # <<<<<<<<<<<<<<
@@ -5151,7 +5151,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
  */
         __pyx_v_line_edge = 1;
 
-        /* "ancillary.pyx":154
+        /* "ancillary.pyx":155
  *     for i in range(lines):
  *         for j in range(eles):
  *             if (i == 0 or i == lines):             # <<<<<<<<<<<<<<
@@ -5161,7 +5161,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
         goto __pyx_L7;
       }
 
-      /* "ancillary.pyx":157
+      /* "ancillary.pyx":158
  *                 line_edge = 1
  *             else:
  *                 line_edge = 0             # <<<<<<<<<<<<<<
@@ -5173,7 +5173,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
       }
       __pyx_L7:;
 
-      /* "ancillary.pyx":158
+      /* "ancillary.pyx":159
  *             else:
  *                 line_edge = 0
  *             if (j == 0 or j == eles):             # <<<<<<<<<<<<<<
@@ -5191,7 +5191,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
       __pyx_L11_bool_binop_done:;
       if (__pyx_t_13) {
 
-        /* "ancillary.pyx":159
+        /* "ancillary.pyx":160
  *                 line_edge = 0
  *             if (j == 0 or j == eles):
  *                 elem_edge = 1             # <<<<<<<<<<<<<<
@@ -5200,7 +5200,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
  */
         __pyx_v_elem_edge = 1;
 
-        /* "ancillary.pyx":158
+        /* "ancillary.pyx":159
  *             else:
  *                 line_edge = 0
  *             if (j == 0 or j == eles):             # <<<<<<<<<<<<<<
@@ -5210,7 +5210,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
         goto __pyx_L10;
       }
 
-      /* "ancillary.pyx":161
+      /* "ancillary.pyx":162
  *                 elem_edge = 1
  *             else:
  *                 elem_edge = 0             # <<<<<<<<<<<<<<
@@ -5222,22 +5222,22 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
       }
       __pyx_L10:;
 
-      /* "ancillary.pyx":162
+      /* "ancillary.pyx":163
  *             else:
  *                 elem_edge = 0
  *             check_reg_uniformity(eles, line_edge, elem_edge, i, j, eco_type[i][j],             # <<<<<<<<<<<<<<
  *                                 &eco[0, 0], &snowfr[0, 0], &icefr[0, 0], &lsf[0, 0],
  *                                 &coast, &land, &water, &loc_uniform)
  */
-      __pyx_t_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_eco_type), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_eco_type), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_j, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_j, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __pyx_t_15 = __Pyx_PyInt_As_unsigned_char(__pyx_t_2); if (unlikely((__pyx_t_15 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 162, __pyx_L1_error)
+      __pyx_t_15 = __Pyx_PyInt_As_unsigned_char(__pyx_t_2); if (unlikely((__pyx_t_15 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 163, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "ancillary.pyx":163
+      /* "ancillary.pyx":164
  *                 elem_edge = 0
  *             check_reg_uniformity(eles, line_edge, elem_edge, i, j, eco_type[i][j],
  *                                 &eco[0, 0], &snowfr[0, 0], &icefr[0, 0], &lsf[0, 0],             # <<<<<<<<<<<<<<
@@ -5253,7 +5253,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
       __pyx_t_22 = 0;
       __pyx_t_23 = 0;
 
-      /* "ancillary.pyx":162
+      /* "ancillary.pyx":163
  *             else:
  *                 elem_edge = 0
  *             check_reg_uniformity(eles, line_edge, elem_edge, i, j, eco_type[i][j],             # <<<<<<<<<<<<<<
@@ -5262,7 +5262,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
  */
       check_reg_uniformity(__pyx_v_eles, __pyx_v_line_edge, __pyx_v_elem_edge, __pyx_v_i, __pyx_v_j, __pyx_t_15, (&(*__Pyx_BufPtrStrided2d(unsigned char *, __pyx_pybuffernd_eco.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_eco.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_eco.diminfo[1].strides))), (&(*__Pyx_BufPtrStrided2d(float *, __pyx_pybuffernd_snowfr.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_snowfr.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_snowfr.diminfo[1].strides))), (&(*__Pyx_BufPtrStrided2d(float *, __pyx_pybuffernd_icefr.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_icefr.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_icefr.diminfo[1].strides))), (&(*__Pyx_BufPtrStrided2d(unsigned char *, __pyx_pybuffernd_lsf.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_lsf.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_lsf.diminfo[1].strides))), (&__pyx_v_coast), (&__pyx_v_land), (&__pyx_v_water), (&__pyx_v_loc_uniform));
 
-      /* "ancillary.pyx":166
+      /* "ancillary.pyx":167
  *                                 &coast, &land, &water, &loc_uniform)
  * 
  *             coast_mv[i][j] = coast             # <<<<<<<<<<<<<<
@@ -5273,7 +5273,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
       __pyx_t_22 = __pyx_v_j;
       *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_coast_mv.data + __pyx_t_23 * __pyx_v_coast_mv.strides[0]) )) + __pyx_t_22)) )) = __pyx_v_coast;
 
-      /* "ancillary.pyx":167
+      /* "ancillary.pyx":168
  * 
  *             coast_mv[i][j] = coast
  *             land_mv[i][j] = land             # <<<<<<<<<<<<<<
@@ -5284,7 +5284,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
       __pyx_t_23 = __pyx_v_j;
       *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_land_mv.data + __pyx_t_22 * __pyx_v_land_mv.strides[0]) )) + __pyx_t_23)) )) = __pyx_v_land;
 
-      /* "ancillary.pyx":168
+      /* "ancillary.pyx":169
  *             coast_mv[i][j] = coast
  *             land_mv[i][j] = land
  *             water_mv[i][j] = water             # <<<<<<<<<<<<<<
@@ -5295,7 +5295,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
       __pyx_t_22 = __pyx_v_j;
       *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_water_mv.data + __pyx_t_23 * __pyx_v_water_mv.strides[0]) )) + __pyx_t_22)) )) = __pyx_v_water;
 
-      /* "ancillary.pyx":169
+      /* "ancillary.pyx":170
  *             land_mv[i][j] = land
  *             water_mv[i][j] = water
  *             loc_uniform_mv[i][j] = loc_uniform             # <<<<<<<<<<<<<<
@@ -5308,47 +5308,47 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
     }
   }
 
-  /* "ancillary.pyx":171
+  /* "ancillary.pyx":172
  *             loc_uniform_mv[i][j] = loc_uniform
  * 
  *     scene_uniformity = {'coast': coast_r,             # <<<<<<<<<<<<<<
  *                         'land': land_r,
  *                         'water': water_r,
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_coast, ((PyObject *)__pyx_v_coast_r)) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_coast, ((PyObject *)__pyx_v_coast_r)) < 0) __PYX_ERR(0, 172, __pyx_L1_error)
 
-  /* "ancillary.pyx":172
+  /* "ancillary.pyx":173
  * 
  *     scene_uniformity = {'coast': coast_r,
  *                         'land': land_r,             # <<<<<<<<<<<<<<
  *                         'water': water_r,
  *                         'loc_uniform': loc_uniform_r}
  */
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_land, ((PyObject *)__pyx_v_land_r)) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_land, ((PyObject *)__pyx_v_land_r)) < 0) __PYX_ERR(0, 172, __pyx_L1_error)
 
-  /* "ancillary.pyx":173
+  /* "ancillary.pyx":174
  *     scene_uniformity = {'coast': coast_r,
  *                         'land': land_r,
  *                         'water': water_r,             # <<<<<<<<<<<<<<
  *                         'loc_uniform': loc_uniform_r}
  * 
  */
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_water, ((PyObject *)__pyx_v_water_r)) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_water, ((PyObject *)__pyx_v_water_r)) < 0) __PYX_ERR(0, 172, __pyx_L1_error)
 
-  /* "ancillary.pyx":174
+  /* "ancillary.pyx":175
  *                         'land': land_r,
  *                         'water': water_r,
  *                         'loc_uniform': loc_uniform_r}             # <<<<<<<<<<<<<<
  * 
  *     return scene_uniformity
  */
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_loc_uniform, ((PyObject *)__pyx_v_loc_uniform_r)) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_loc_uniform, ((PyObject *)__pyx_v_loc_uniform_r)) < 0) __PYX_ERR(0, 172, __pyx_L1_error)
   __pyx_v_scene_uniformity = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "ancillary.pyx":176
+  /* "ancillary.pyx":177
  *                         'loc_uniform': loc_uniform_r}
  * 
  *     return scene_uniformity             # <<<<<<<<<<<<<<
@@ -5360,7 +5360,7 @@ static PyObject *__pyx_pf_14ancillary_data_12py_check_reg_uniformity(CYTHON_UNUS
   __pyx_r = __pyx_v_scene_uniformity;
   goto __pyx_L0;
 
-  /* "ancillary.pyx":134
+  /* "ancillary.pyx":135
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_check_reg_uniformity(np.ndarray[unsigned char, ndim=2] eco_type, np.ndarray[unsigned char, ndim=2] eco,             # <<<<<<<<<<<<<<
@@ -20395,7 +20395,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 125, __pyx_L1_error)
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 126, __pyx_L1_error)
   __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 945, __pyx_L1_error)
   __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(2, 133, __pyx_L1_error)
   __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(2, 148, __pyx_L1_error)
@@ -20627,89 +20627,89 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__20);
   __Pyx_GIVEREF(__pyx_tuple__20);
 
-  /* "ancillary.pyx":28
+  /* "ancillary.pyx":29
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_Reynolds_SST(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
  *                         np.ndarray[float, ndim=1] lon, res,
  *                         char *anc_dir, char *sst_file, sst):
  */
-  __pyx_tuple__21 = PyTuple_Pack(7, __pyx_n_s_lat, __pyx_n_s_lon, __pyx_n_s_res, __pyx_n_s_anc_dir, __pyx_n_s_sst_file, __pyx_n_s_sst, __pyx_n_s_sst_mv); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __pyx_tuple__21 = PyTuple_Pack(7, __pyx_n_s_lat, __pyx_n_s_lon, __pyx_n_s_res, __pyx_n_s_anc_dir, __pyx_n_s_sst_file, __pyx_n_s_sst, __pyx_n_s_sst_mv); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__21);
   __Pyx_GIVEREF(__pyx_tuple__21);
-  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(6, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_get_Reynolds_SST, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(6, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_get_Reynolds_SST, 29, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 29, __pyx_L1_error)
 
-  /* "ancillary.pyx":46
+  /* "ancillary.pyx":47
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_NDVI_background(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
  *                            np.ndarray[float, ndim=1] lon, res,
  *                            char *anc_dir, char *ndvi_file, ndvi):
  */
-  __pyx_tuple__23 = PyTuple_Pack(7, __pyx_n_s_lat, __pyx_n_s_lon, __pyx_n_s_res, __pyx_n_s_anc_dir, __pyx_n_s_ndvi_file, __pyx_n_s_ndvi, __pyx_n_s_ndvi_mv); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 46, __pyx_L1_error)
+  __pyx_tuple__23 = PyTuple_Pack(7, __pyx_n_s_lat, __pyx_n_s_lon, __pyx_n_s_res, __pyx_n_s_anc_dir, __pyx_n_s_ndvi_file, __pyx_n_s_ndvi, __pyx_n_s_ndvi_mv); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__23);
   __Pyx_GIVEREF(__pyx_tuple__23);
-  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(6, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_get_NDVI_background, 46, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 46, __pyx_L1_error)
+  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(6, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_get_NDVI_background, 47, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 47, __pyx_L1_error)
 
-  /* "ancillary.pyx":63
+  /* "ancillary.pyx":64
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_Olson_eco(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
  *                      np.ndarray[float, ndim=1] lon, res,
  *                      char *anc_dir, eco):
  */
-  __pyx_tuple__25 = PyTuple_Pack(6, __pyx_n_s_lat, __pyx_n_s_lon, __pyx_n_s_res, __pyx_n_s_anc_dir, __pyx_n_s_eco, __pyx_n_s_eco_mv); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 63, __pyx_L1_error)
+  __pyx_tuple__25 = PyTuple_Pack(6, __pyx_n_s_lat, __pyx_n_s_lon, __pyx_n_s_res, __pyx_n_s_anc_dir, __pyx_n_s_eco, __pyx_n_s_eco_mv); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__25);
   __Pyx_GIVEREF(__pyx_tuple__25);
-  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_get_Olson_eco, 63, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 63, __pyx_L1_error)
+  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_get_Olson_eco, 64, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 64, __pyx_L1_error)
 
-  /* "ancillary.pyx":80
+  /* "ancillary.pyx":81
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_GEOS(np.ndarray[float, ndim=1] lat, np.ndarray[float, ndim=1] lon, int res, char *startTime,             # <<<<<<<<<<<<<<
  *                 char *anc_dir, char *geos1, char *geos2, char *geos_lnd, char *geos_ocn, char *geos_cnst,
  *                 geos_data):
  */
-  __pyx_tuple__27 = PyTuple_Pack(19, __pyx_n_s_lat, __pyx_n_s_lon, __pyx_n_s_res, __pyx_n_s_startTime, __pyx_n_s_anc_dir, __pyx_n_s_geos1, __pyx_n_s_geos2, __pyx_n_s_geos_lnd, __pyx_n_s_geos_ocn, __pyx_n_s_geos_cnst, __pyx_n_s_geos_data, __pyx_n_s_v, __pyx_n_s_tpw_mv, __pyx_n_s_snowfr_mv, __pyx_n_s_icefr_mv, __pyx_n_s_ocnfr_mv, __pyx_n_s_landicefr_mv, __pyx_n_s_sfct_mv, __pyx_n_s_geos_dict); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __pyx_tuple__27 = PyTuple_Pack(19, __pyx_n_s_lat, __pyx_n_s_lon, __pyx_n_s_res, __pyx_n_s_startTime, __pyx_n_s_anc_dir, __pyx_n_s_geos1, __pyx_n_s_geos2, __pyx_n_s_geos_lnd, __pyx_n_s_geos_ocn, __pyx_n_s_geos_cnst, __pyx_n_s_geos_data, __pyx_n_s_v, __pyx_n_s_tpw_mv, __pyx_n_s_snowfr_mv, __pyx_n_s_icefr_mv, __pyx_n_s_ocnfr_mv, __pyx_n_s_landicefr_mv, __pyx_n_s_sfct_mv, __pyx_n_s_geos_dict); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__27);
   __Pyx_GIVEREF(__pyx_tuple__27);
-  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(11, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_get_GEOS, 80, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(11, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_get_GEOS, 81, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 81, __pyx_L1_error)
 
-  /* "ancillary.pyx":112
+  /* "ancillary.pyx":113
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_snow_mask(char *satname, unsigned char lsf):             # <<<<<<<<<<<<<<
  *     # need to have for loop here to compute all the pixels since the function, as with everything else,
  *     # is run per pixel.
  */
-  __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_satname, __pyx_n_s_lsf); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 112, __pyx_L1_error)
+  __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_satname, __pyx_n_s_lsf); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__29);
   __Pyx_GIVEREF(__pyx_tuple__29);
-  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_snow_mask, 112, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 112, __pyx_L1_error)
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_snow_mask, 113, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 113, __pyx_L1_error)
 
-  /* "ancillary.pyx":121
+  /* "ancillary.pyx":122
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_cithr(int key, np.ndarray[float, ndim=1] sec_vza, np.ndarray[float, ndim=1] bt11):             # <<<<<<<<<<<<<<
  * 
  *     cdef np.ndarray tci_thr = np.zeros((bt11.shape[0], ), order='C', dtype=np.float)
  */
-  __pyx_tuple__31 = PyTuple_Pack(5, __pyx_n_s_key, __pyx_n_s_sec_vza, __pyx_n_s_bt11, __pyx_n_s_tci_thr, __pyx_n_s_i); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 121, __pyx_L1_error)
+  __pyx_tuple__31 = PyTuple_Pack(5, __pyx_n_s_key, __pyx_n_s_sec_vza, __pyx_n_s_bt11, __pyx_n_s_tci_thr, __pyx_n_s_i); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__31);
   __Pyx_GIVEREF(__pyx_tuple__31);
-  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_cithr, 121, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 121, __pyx_L1_error)
+  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_cithr, 122, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 122, __pyx_L1_error)
 
-  /* "ancillary.pyx":134
+  /* "ancillary.pyx":135
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_check_reg_uniformity(np.ndarray[unsigned char, ndim=2] eco_type, np.ndarray[unsigned char, ndim=2] eco,             # <<<<<<<<<<<<<<
  *                             np.ndarray[float, ndim=2] snowfr,
  *                             np.ndarray[float, ndim=2] icefr, np.ndarray[unsigned char, ndim=2] lsf):
  */
-  __pyx_tuple__33 = PyTuple_Pack(24, __pyx_n_s_eco_type, __pyx_n_s_eco, __pyx_n_s_snowfr, __pyx_n_s_icefr, __pyx_n_s_lsf, __pyx_n_s_coast, __pyx_n_s_land, __pyx_n_s_water, __pyx_n_s_loc_uniform, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_coast_r, __pyx_n_s_land_r, __pyx_n_s_water_r, __pyx_n_s_loc_uniform_r, __pyx_n_s_coast_mv, __pyx_n_s_land_mv, __pyx_n_s_water_mv, __pyx_n_s_loc_uniform_mv, __pyx_n_s_lines, __pyx_n_s_eles, __pyx_n_s_line_edge, __pyx_n_s_elem_edge, __pyx_n_s_scene_uniformity); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 134, __pyx_L1_error)
+  __pyx_tuple__33 = PyTuple_Pack(24, __pyx_n_s_eco_type, __pyx_n_s_eco, __pyx_n_s_snowfr, __pyx_n_s_icefr, __pyx_n_s_lsf, __pyx_n_s_coast, __pyx_n_s_land, __pyx_n_s_water, __pyx_n_s_loc_uniform, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_coast_r, __pyx_n_s_land_r, __pyx_n_s_water_r, __pyx_n_s_loc_uniform_r, __pyx_n_s_coast_mv, __pyx_n_s_land_mv, __pyx_n_s_water_mv, __pyx_n_s_loc_uniform_mv, __pyx_n_s_lines, __pyx_n_s_eles, __pyx_n_s_line_edge, __pyx_n_s_elem_edge, __pyx_n_s_scene_uniformity); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__33);
   __Pyx_GIVEREF(__pyx_tuple__33);
-  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(5, 0, 24, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_check_reg_uniformity, 134, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 134, __pyx_L1_error)
+  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(5, 0, 24, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_ancillary_pyx, __pyx_n_s_py_check_reg_uniformity, 135, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 135, __pyx_L1_error)
 
   /* "View.MemoryView":286
  *         return self.name
@@ -21174,124 +21174,124 @@ if (!__Pyx_RefNanny) {
   if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
 
-  /* "ancillary.pyx":17
+  /* "ancillary.pyx":18
  * from cython.view cimport array as cvarray
  * 
  * import numpy as np             # <<<<<<<<<<<<<<
  * cimport numpy as np
  * 
  */
-  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "ancillary.pyx":20
+  /* "ancillary.pyx":21
  * cimport numpy as np
  * 
  * np.import_array()             # <<<<<<<<<<<<<<
  * 
  * ctypedef np.float_t DTYPE_t
  */
-  __pyx_t_2 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 20, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 21, __pyx_L1_error)
 
-  /* "ancillary.pyx":23
+  /* "ancillary.pyx":24
  * 
  * ctypedef np.float_t DTYPE_t
  * DTYPE = np.float             # <<<<<<<<<<<<<<
  * 
  * @cython.boundscheck(False)
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_3) < 0) __PYX_ERR(0, 23, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_3) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "ancillary.pyx":28
+  /* "ancillary.pyx":29
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_Reynolds_SST(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
  *                         np.ndarray[float, ndim=1] lon, res,
  *                         char *anc_dir, char *sst_file, sst):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_1py_get_Reynolds_SST, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_1py_get_Reynolds_SST, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_get_Reynolds_SST, __pyx_t_3) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_get_Reynolds_SST, __pyx_t_3) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "ancillary.pyx":46
+  /* "ancillary.pyx":47
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_NDVI_background(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
  *                            np.ndarray[float, ndim=1] lon, res,
  *                            char *anc_dir, char *ndvi_file, ndvi):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_3py_get_NDVI_background, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error)
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_3py_get_NDVI_background, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_get_NDVI_background, __pyx_t_3) < 0) __PYX_ERR(0, 46, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_get_NDVI_background, __pyx_t_3) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "ancillary.pyx":63
+  /* "ancillary.pyx":64
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_Olson_eco(np.ndarray[float, ndim=1] lat,             # <<<<<<<<<<<<<<
  *                      np.ndarray[float, ndim=1] lon, res,
  *                      char *anc_dir, eco):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_5py_get_Olson_eco, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_5py_get_Olson_eco, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 64, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_get_Olson_eco, __pyx_t_3) < 0) __PYX_ERR(0, 63, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_get_Olson_eco, __pyx_t_3) < 0) __PYX_ERR(0, 64, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "ancillary.pyx":80
+  /* "ancillary.pyx":81
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_get_GEOS(np.ndarray[float, ndim=1] lat, np.ndarray[float, ndim=1] lon, int res, char *startTime,             # <<<<<<<<<<<<<<
  *                 char *anc_dir, char *geos1, char *geos2, char *geos_lnd, char *geos_ocn, char *geos_cnst,
  *                 geos_data):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_7py_get_GEOS, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_7py_get_GEOS, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_get_GEOS, __pyx_t_3) < 0) __PYX_ERR(0, 80, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_get_GEOS, __pyx_t_3) < 0) __PYX_ERR(0, 81, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "ancillary.pyx":112
+  /* "ancillary.pyx":113
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_snow_mask(char *satname, unsigned char lsf):             # <<<<<<<<<<<<<<
  *     # need to have for loop here to compute all the pixels since the function, as with everything else,
  *     # is run per pixel.
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_9py_snow_mask, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error)
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_9py_snow_mask, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_snow_mask, __pyx_t_3) < 0) __PYX_ERR(0, 112, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_snow_mask, __pyx_t_3) < 0) __PYX_ERR(0, 113, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "ancillary.pyx":121
+  /* "ancillary.pyx":122
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_cithr(int key, np.ndarray[float, ndim=1] sec_vza, np.ndarray[float, ndim=1] bt11):             # <<<<<<<<<<<<<<
  * 
  *     cdef np.ndarray tci_thr = np.zeros((bt11.shape[0], ), order='C', dtype=np.float)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_11py_cithr, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 121, __pyx_L1_error)
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_11py_cithr, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_cithr, __pyx_t_3) < 0) __PYX_ERR(0, 121, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_cithr, __pyx_t_3) < 0) __PYX_ERR(0, 122, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "ancillary.pyx":134
+  /* "ancillary.pyx":135
  * @cython.wraparound(False)
  * @cython.initializedcheck(False)
  * def py_check_reg_uniformity(np.ndarray[unsigned char, ndim=2] eco_type, np.ndarray[unsigned char, ndim=2] eco,             # <<<<<<<<<<<<<<
  *                             np.ndarray[float, ndim=2] snowfr,
  *                             np.ndarray[float, ndim=2] icefr, np.ndarray[unsigned char, ndim=2] lsf):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_13py_check_reg_uniformity, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error)
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_14ancillary_data_13py_check_reg_uniformity, NULL, __pyx_n_s_ancillary_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_check_reg_uniformity, __pyx_t_3) < 0) __PYX_ERR(0, 134, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_check_reg_uniformity, __pyx_t_3) < 0) __PYX_ERR(0, 135, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "ancillary.pyx":1
diff --git a/ancillary.pyx b/ancillary.pyx
index 0e95ec641fb64cdb679c2b51e5223bdd9cdbafa9..9d49b14410c0d5ee8e172691bd67a3e72da42419 100644
--- a/ancillary.pyx
+++ b/ancillary.pyx
@@ -10,6 +10,7 @@ cdef extern void snow_mask(char *, unsigned char)
 cdef extern float cithr(int, float, float)
 cdef extern void check_reg_uniformity(int, int, int, int, int, unsigned char, unsigned char *,
                                       float *, float *, unsigned char *, int *, int *, int *, int *)
+#cdef extern int get_b1_thresholds(float *, float *, float *, float *)
 
 import cython
 from cython.view cimport array as cvarray
@@ -176,3 +177,29 @@ def py_check_reg_uniformity(np.ndarray[unsigned char, ndim=2] eco_type, np.ndarr
     return scene_uniformity
 
 
+#@cython.boundscheck(False)
+#@cython.wraparound(False)
+#@cython.initializedcheck(False)
+#def py_get_b1_thresholds(np.ndarray[float, ndim=2] locut, np.ndarray[float, ndim=2] midpt,
+#                         np.ndarray[float, ndim=2] hicut, np.ndarray[float, ndim=2] power):
+#
+#    cdef int i, j
+#
+#    cdef np.ndarray_locut_r = np.zeros((), order='C', dtype=np.float32)
+#
+#    cdef float[:, ::1] locut_mv = locut
+#    cdef float[:, ::1] midpt_mv = midpt
+#    cdef float[:, ::1] hicut_mv = hicut
+#    cdef float[:, ::1] power_mv = power
+#    lines = 0
+#    eles = 0
+#
+#    for i in range(lines):
+#        for j in range(eles):
+#
+#            get_b1_thresholds(&locut[0, 0], &midpt[0, 0], &hicut[0, 0], &power[0, 0])
+#
+#            locut_mv[i][j] = locut
+#            midpt_mv[i][j] = midpt
+#            hicut_mv[i][j] = hicut
+#            power_mv[i][j] = power
diff --git a/hires_module.py b/hires_module.py
index 97936bf954781de905162640552fe2092efe6fc2..7355511feebaac687007a35bd664d1ac359331b0 100644
--- a/hires_module.py
+++ b/hires_module.py
@@ -183,9 +183,9 @@ def main(*,
                     longitude=(['number_of_lines', 'number_of_pixels'], viirs_data.longitude.values),
                     )
                 )
-
-    # out_xr.to_netcdf(f'hires_MVCM.{date}.{time}.nc')
-    out_xr.to_netcdf(out_fname)
+    out_path = '/ships19/hercules/pveglio/mvcm_viirs_hires/outputs'
+    out_xr.to_netcdf(f'{out_path}/hires_MVCM.{date}.{time}.nc')
+    # out_xr.to_netcdf(out_fname)
 
 #    # np.savez(f'{data_path}/pyMVCM_{date}.{time}',
 #    np.savez(f'{data_path}/outputs/pyMVCM_{date}.{time}',
diff --git a/setup.py b/setup.py
index b55c6ff3189e25684ed8d3d0fffa8a2e080b07a8..2d1cc3206e30bfad7bb7cc129d914fe853019356 100644
--- a/setup.py
+++ b/setup.py
@@ -31,7 +31,7 @@ include_dirs = ['include',
                 numpy.get_include(), ]
 
 library_dirs = ['/opt/hdfeos2/2.20-gcc-8.3/lib',
-                '/opt/netcdf4/4.7.0fcc-8.3/lib']
+                '/opt/netcdf4/4.7.0-gcc-8.3/lib']
 
 extensions = [Extension('ancillary_data', sourcefiles,
                         include_dirs=include_dirs,