<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Mar. Sci.</journal-id>
<journal-title>Frontiers in Marine Science</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Mar. Sci.</abbrev-journal-title>
<issn pub-type="epub">2296-7745</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fmars.2019.00738</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Marine Science</subject>
<subj-group>
<subject>Technology and Code</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>GliderTools: A Python Toolbox for Processing Underwater Glider Data</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Gregor</surname> <given-names>Luke</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
<xref ref-type="corresp" rid="c001"><sup>&#x002A;</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/632652/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Ryan-Keogh</surname> <given-names>Thomas J.</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/582167/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Nicholson</surname> <given-names>Sarah-Anne</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/739534/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>du Plessis</surname> <given-names>Marcel</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/820472/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Giddy</surname> <given-names>Isabelle</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<xref ref-type="aff" rid="aff4"><sup>4</sup></xref>
<xref ref-type="aff" rid="aff5"><sup>5</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/820429/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Swart</surname> <given-names>Sebastiaan</given-names></name>
<xref ref-type="aff" rid="aff4"><sup>4</sup></xref>
<xref ref-type="aff" rid="aff5"><sup>5</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/411409/overview"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>Institute of Biogeochemistry and Pollutant Dynamics, ETH Z&#x00FC;rich</institution>, <addr-line>Zurich</addr-line>, <country>Switzerland</country></aff>
<aff id="aff2"><sup>2</sup><institution>Southern Ocean Carbon &#x0026; Climate Observatory (SOCCO), Smart Places</institution>, <addr-line>CSIR, Cape Town</addr-line>, <country>South Africa</country></aff>
<aff id="aff3"><sup>3</sup><institution>Marine Research Institute, University of Cape Town</institution>, <addr-line>Rondebosch</addr-line>, <country>South Africa</country></aff>
<aff id="aff4"><sup>4</sup><institution>Department of Oceanography, University of Cape Town</institution>, <addr-line>Rondebosch</addr-line>, <country>South Africa</country></aff>
<aff id="aff5"><sup>5</sup><institution>Department of Marine Sciences, University of Gothenburg</institution>, <addr-line>Gothenburg</addr-line>, <country>Sweden</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Ananda Pascual, Instituto Mediterr&#x00E1;neo de Estudios Avanzados (IMEDEA), Spain</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Lucas Merckelbach, Helmholtz Centre for Materials and Coastal Research (HZG), Germany; Christoph Waldmann, University of Bremen, Germany</p></fn>
<corresp id="c001">&#x002A;Correspondence: Luke Gregor, <email>luke.gregor@usys.ethz.ch</email></corresp>
<fn fn-type="other" id="fn004"><p>This article was submitted to Ocean Observation, a section of the journal Frontiers in Marine Science</p></fn>
</author-notes>
<pub-date pub-type="epub">
<day>03</day>
<month>12</month>
<year>2019</year>
</pub-date>
<pub-date pub-type="collection">
<year>2019</year>
</pub-date>
<volume>6</volume>
<elocation-id>738</elocation-id>
<history>
<date date-type="received">
<day>23</day>
<month>08</month>
<year>2019</year>
</date>
<date date-type="accepted">
<day>13</day>
<month>11</month>
<year>2019</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x00A9; 2019 Gregor, Ryan-Keogh, Nicholson, du Plessis, Giddy and Swart.</copyright-statement>
<copyright-year>2019</copyright-year>
<copyright-holder>Gregor, Ryan-Keogh, Nicholson, du Plessis, Giddy and Swart</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract>
<p>Underwater gliders have become widely used in the last decade. This has led to a proliferation of data and the concomitant development of tools to process the data. These tools are focused primarily on converting the data from its raw form to more accessible formats and often rely on proprietary programing languages. This has left a gap in the processing of glider data for academics, who often need to perform secondary quality control (QC), calibrate, correct, interpolate and visualize data. Here, we present GliderTools, an open-source Python package that addresses these needs of the glider user community. The tool is designed to change the focus from the processing to the data. GliderTools does not aim to replace existing software that converts raw data and performs automatic first-order QC. In this paper, we present a set of tools, that includes secondary cleaning and calibration, calibration procedures for bottle samples, fluorescence quenching correction, photosynthetically available radiation (PAR) corrections and data interpolation in the vertical and horizontal dimensions. Many of these processes have been described in several other studies, but do not exist in a collated package designed for underwater glider data. Importantly, we provide potential users with guidelines on how these tools are used so that they can be easily and rapidly accessible to a wide range of users that span the student to the experienced researcher. We recognize that this package may not be all-encompassing for every user and we thus welcome community contributions and promote GliderTools as a community-driven project for scientists.</p>
</abstract>
<kwd-group>
<kwd>python</kwd>
<kwd>software</kwd>
<kwd>glider</kwd>
<kwd>fluorescence</kwd>
<kwd>backscatter</kwd>
<kwd>gridding</kwd>
<kwd>interpolation</kwd>
</kwd-group>
<contract-num rid="cn001">WAF 2015.0186</contract-num>
<contract-num rid="cn002">SNA14071475720</contract-num>
<contract-sponsor id="cn001">Knut och Alice Wallenbergs Stiftelse<named-content content-type="fundref-id">10.13039/501100004063</named-content></contract-sponsor>
<contract-sponsor id="cn002">National Research Foundation<named-content content-type="fundref-id">10.13039/100011512</named-content></contract-sponsor>
<counts>
<fig-count count="6"/>
<table-count count="0"/>
<equation-count count="0"/>
<ref-count count="40"/>
<page-count count="13"/>
<word-count count="0"/>
</counts>
</article-meta>
</front>
<body>
<sec id="S1">
<title>Introduction</title>
<p>Over the past decade, there has been a large uptake of underwater glider technology by various communities (academia, government agencies and managers and the industrial sector), yet fairly recent emergence leads to a lack of clear consensus on higher-order processing of this data, particularly for academic purposes. Here, we present an open-source tool for scientists to easily process, clean, interpolate and visualize underwater glider data.</p>
<p>Underwater gliders are autonomous sampling platforms that profile the water column by altering the volume of the glider&#x2019;s hull to control ascent and descent. Pitch and steerage are enabled by adding wings and altering the center of mass by shifting the battery on the horizontal plane inside the hull (<xref ref-type="bibr" rid="B27">Rudnick et al., 2004</xref>). In standard open-ocean use, gliders profile the water column from the surface to 1000 m depth and back in a see-saw pattern. Each dive takes approximately 5&#x2013;6 h to complete, covering a horizontal distance of approximately 5&#x2013;6 km. After each dive, the glider surfaces and sends its science and engineering data &#x201C;home&#x201D; via satellite telemetry, whilst being capable of receiving updated navigation commands from the land-based glider pilot. A major advantage of gliders is their low power consumption, meaning gliders can undertake multi-month deployments (up to approximately a year depending on sampling mode and sensors used). Their lightweight and compact design make them deployable from small boats and large research vessels. As a result, gliders have been deployed in a wide range of environments: from continental boundary currents to the polar seas, to study aspects ranging from long-term climate variability to fine-scale submesoscale processes, thereby providing a key component to current and future ocean observing systems (see <xref ref-type="bibr" rid="B32">Testor et al., 2019</xref> for a full list of studies and their references). Gliders are optimized for collecting continuous, high-resolution data of the water column, which leads to the production of large, multi-variable datasets for which the tools to process this data have not been standardized. Moreover, profiling glider data is increasingly available from public data repositories<sup><xref ref-type="fn" rid="footnote1">1</xref></sup> <sup>,<xref ref-type="fn" rid="footnote2">2</xref></sup> <sup>,<xref ref-type="fn" rid="footnote3">3</xref></sup> <sup>,<xref ref-type="fn" rid="footnote4">4</xref></sup>, yet potential users of these data do not have access to easy-to-use tools to process this data for scientific use.</p>
<p>In the last 5 years, a number of open-source user-written glider-specific software products have become available for processing glider data. Notable open access examples include the Coriolis toolbox (<xref ref-type="bibr" rid="B8">EGO gliders data management team, 2017</xref>), UEA toolbox<sup><xref ref-type="fn" rid="footnote5">5</xref></sup>, and SOCIB (<xref ref-type="bibr" rid="B36">Troupin et al., 2015</xref>) packages. These software packages provide methods to process data from a raw state (engineering and log files) into a more widely used data format (netCDF) and perform automated quality control (QC) for several variables. More specifically, the Coriolis tool formats data from multiple glider platforms into the standardized EGO netCDF format (Everyone&#x2019;s Gliding Observatories; <xref ref-type="bibr" rid="B8">EGO gliders data management team, 2017</xref>). The SOCIB and UEA packages offer improved thermal lag corrections compared to the Kongsberg&#x2019;s Basestation software for Seagliders. While these packages have provided great utility for the community by improving the accessibility to working with glider data, there are still limitations. Few of the open-source packages offer more than the automated QC for CTD variables (temperature, salinity, and pressure). In practice, glider data often requires a second round of user-guided QC to remove sensor spikes and gridding before it can be used for scientific research.</p>
<p>We chose to develop GliderTools as an open-source package in Python (v3.6+) which has a fast-growing scientific community that is seeking an open-source alternative to proprietary software such as MATLAB. GliderTools is designed for scientific use to process data that has already been processed by software that performs first-order QC and provides functions for secondary QC (cleaning), calibrating to bottle samples, vertical gridding and two-dimensional interpolation of the data. The processing steps provided by GliderTools reflect on current best practices and recommendations by the user community (<xref ref-type="bibr" rid="B32">Testor et al., 2019</xref>). Moreover, through rapid development with version control (<italic>git</italic>), it is frequently updated with new recommendations, whilst also allowing community users to contribute to its development and keep it up-to-date.</p>
<p>One of the most useful aspects of this tool is its user-friendliness. Essentially, it is designed for anyone, from a student or long-term glider user, to be able to quickly install the required packages and process the glider data. The tools are well documented and designed to be as straightforward as possible. This paper, combined with clear annotation of the code, is key to avoid misinterpretations and, therefore, provides the most appropriate processing to the data (e.g., to as best possible avoid &#x201C;black box&#x201D; usability of the tools that leads to the user not knowing the way the data has been handled).</p>
<p>In detail, GliderTools provides the following unique developments for processing glider data: (1) user-guided QC for profile processing (while maintaining a record of changes in the metadata), (2) processing bio-optical data, including published fluorescence quenching approaches, photosynthetically active radiation correction (including calculation of euphotic depth and diffuse attenuation coefficient) and backscatter data cleaning including derivation of spikes for calculation of export (<xref ref-type="bibr" rid="B6">Briggs et al., 2011</xref>), (3) provides functions (with careful guidelines and referencing) on vertical gridding and two dimensional interpolation of glider data, (4) plotting functionality, and (5) is a completely open-source tool for processing and saving glider data. By providing a series of standardized operating procedures and open-source tools to both process and archive data, we aim to expand the global user group for underwater gliders, enabling non-specialized users to deploy highly sophisticated methods.</p>
<p>In this paper, we present an open-source tool currently used by the Southern Ocean Carbon and Climate Observatory (SOCCO) and the University of Gothenburg to process data that has undergone initial processing (by the aforementioned tools) to being publication-ready. This paper presents the detailed methods of GliderTools, uses an example glider dataset from the Southern Ocean to demonstrate the various GliderTools packages and processes, discusses key processing steps, usability and guidance on how to implement and interpret. Lastly, we recommend steps toward glider data storage and discoverability and highlight future steps to be taken to further enhance GliderTools for the users.</p>
</sec>
<sec id="S2">
<title>The Glidertools Package</title>
<sec id="S2.SS1">
<title>Installation and Requirements</title>
<p>The GliderTools package is created and tested for Python 3.7 and is designed to be used in an interactive programing environment such as IPython or Jupyter Notebooks. GliderTools has been built primarily with the following open-source packages: <italic>numpy</italic>, <italic>pandas</italic>, <italic>xarray</italic>, <italic>scipy</italic>, <italic>seawater</italic>, <italic>pykrige</italic>, <italic>gsw</italic>, <italic>matplotlib</italic>, <italic>plotly</italic> (in order: <xref ref-type="bibr" rid="B18">Jones et al., 2001</xref>; <xref ref-type="bibr" rid="B16">Hunter, 2007</xref>; <xref ref-type="bibr" rid="B20">Mckinney, 2010</xref>; <xref ref-type="bibr" rid="B19">McDougall and Barker, 2011</xref>; <xref ref-type="bibr" rid="B37">Van Der Walt et al., 2011</xref>; <xref ref-type="bibr" rid="B10">Fernandes, 2014</xref>; <xref ref-type="bibr" rid="B24">Plotly Technologies Inc, 2015</xref>; <xref ref-type="bibr" rid="B15">Hoyer and Hamman, 2017</xref>; <xref ref-type="bibr" rid="B25">PyKrige Developers, 2018</xref>). The source code with example data is available at <ext-link ext-link-type="uri" xlink:href="https://gitlab.com/socco/GliderTools">gitlab.com/socco/GliderTools</ext-link> and comprehensive online documentation can be found at glidertools.readthedocs.io. We recommend that GliderTools should be imported as <italic>gt</italic> as this is consistent with the documentation and will be used from now on.</p>
</sec>
<sec id="S2.SS2">
<title>Package Structure and Overview of Modules</title>
<p>GliderTools was designed to be adaptable to various datasets and scenarios, as it is recognized that the observational nature of profiling glider data means that a &#x201C;one size fits all&#x201D; approach often does not work. The majority of the tools accept column input variables where dives are concatenated in a head-to-tail manner (i.e., chronologically). This data structure (ungridded) is maintained throughout processing until the very end when data is binned or interpolated. The structure of the package is summarized in <xref ref-type="fig" rid="F1">Figure 1</xref> and the utility of the functions is described in the paragraphs below and summarized in <xref ref-type="fig" rid="F2">Figure 2</xref>.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption><p>Package structure of GliderTools with arrows showing function calls, where solid lines show dependencies that are always called by a function and dashed lines show functions that are only called when specified by the user. Blue rectangles are nested functions in a python module (as grouped by gray boxes e.g., <italic>cleaning.py</italic>). Green rectangles are functions hidden from the user, while yellow functions are accessible to the user under the main GliderTools namespace. Note that some functions are simplified for brevity (e.g., <italic>seaglider.py</italic>).</p></caption>
<graphic xlink:href="fmars-06-00738-g001.tif"/>
</fig>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption><p>The GliderTools &#x201C;cheat sheet,&#x201D; a quick reference guide to using and implementing the tool. The boxes represent the various modules within the package. Details for each of these functions can be found in the online documentation (<ext-link ext-link-type="uri" xlink:href="http://glidertools.readthedocs.org/">glidertools.readthedocs.org/</ext-link>).</p></caption>
<graphic xlink:href="fmars-06-00738-g002.tif"/>
</fig>
<p>We have provided functions under the <italic>gt.load</italic> module to explore and import data that are EGO-formatted netCDF files or have been processed by the Seaglider<sup>TM</sup> base-station software. For the latter, loading data has been automated as much as possible, with coordinate variables, specifically time, being imported with associated variables to ensure that variables can be joined based on the sampling timestamp. While we focus on the Seaglider platform, there is room for other platforms (e.g., Slocum glider and other profiling platforms) to be incorporated, provided that the output is in a concatenated format.</p>
<p>Once in the standard concatenated format, any function can be applied to the data. GliderTools provides five high-level functions that automatically implement cleaning, calibration and correction procedures by applying the appropriate low-level functions in the sequence used by the SOCCO group (<xref ref-type="fig" rid="F1">Figure 1</xref>). These high-level functions have a <italic>calc</italic> prefix followed by the variable name, e.g., <italic>gt.calc_backscatter</italic>.</p>
<p>The <italic>gt.cleaning</italic> module provides functions to filter erroneous data, remove spikes (when applicable) and smooth data once bad measurements and profiles have been removed. The tools were designed to be as objective as possible by finding thresholds from data vertically along the time axis, horizontally comparing dives, or globally considering all values. These tools can be applied to any profiled variable in any particular order. A data density filter (based on a two-dimensional histogram) can be applied to the data for any two variables (e.g., temperature and salinity), but values have to be tailored by the user for the specific case, making the tool a subjective approach.</p>
<p>GliderTools incorporates a <italic>gt.physics</italic> module to calculate derived physical variables, allowing users to calculate mixed-layer depth (MLD), potential density and the Brunt V&#x00E4;is&#x00E4;l&#x00E4; frequency. The latter two functions use the Gibbs Seawater (GSW) toolbox with the added convenience to format output to match the input data and ensuring the use of absolute salinity and potential temperature when calculating potential density (<xref ref-type="bibr" rid="B19">McDougall and Barker, 2011</xref>).</p>
<p>The <italic>gt.optics</italic> module contains functions to process photosynthetically available radiation (PAR), backscatter, and fluorescence. The module provides functions to scale these variables from raw counts or voltages to factory calibrated units and perform <italic>in situ</italic> dark count corrections on each variable. Backscatter corrections are made using the methodology of <xref ref-type="bibr" rid="B40">Zhang et al. (2009)</xref> which is implemented in the <italic>flo_functions</italic> tools by the Ocean Observatory Initiative (Copyright&#x00A9; 2010, 2011 The Regents of the University of California; used under a free license). Further individual corrections to PAR, backscatter and fluorescence will be discussed in the following section. Notably, the <italic>gt.optics</italic> module also contains an updated version of the quenching correction method described by <xref ref-type="bibr" rid="B33">Thomalla et al. (2018)</xref>, where corrections are now possible without PAR.</p>
<p>General utilities to process glider data are stored in the <italic>gt.utils</italic> module and include functions to merge datasets sampled at different intervals or manually define up and down dives or dive phase (as defined by the <xref ref-type="bibr" rid="B8">EGO gliders data management team, 2017</xref>). T can be applied automatically on import.</p>
<p>The <italic>gt.mapping</italic> module allows users to grid data in discrete bins or interpolate data two-dimensionally. The default bin sizes are based on the sampling frequency of the data to minimize the aliasing per depth bin in the <italic>gt.mapping.grid_data</italic> function. Alternatively, depth bins can be defined manually. The function can also be used to calculate any other aggregated statistical value; <italic>e.g.</italic>, show the standard deviation per bin. Data can also be interpolated along any two dimensions with an objective mapping method (based on <italic>gt.mapping.objmap</italic><sup><xref ref-type="fn" rid="footnote6">6</xref></sup>). Note that the <italic>objmap and grid_data</italic> functions have been made available under the main namespace (as shown in <xref ref-type="fig" rid="F1">Figure 1</xref>).</p>
<p>Lastly, the <italic>gt.plot</italic> module is designed to quickly represent gridded or ungridded data in a section format. The capability of this module will be demonstrated throughout this manual.</p>
</sec>
</sec>
<sec id="S3">
<title>Workflow Examples</title>
<p>In this section, we have selected four examples that showcase the capability and methods of GliderTools. We first introduce the data we use in the examples. We then look at the secondary QC or cleaning functions that are available for, but not limited to physics data. The third part shows how raw fluorescence units are cleaned and converted to chlorophyll concentrations using bottle calibrations. In part four, we show how PAR is corrected and euphotic depth is calculated. Lastly, see section &#x201C;Vertical Binning and Two-Dimensional Interpolation&#x201D; shows how data is gridded vertically or interpolated over the vertical and horizontal dimensions.</p>
<sec id="S3.SS1">
<title>Example Glider Dataset</title>
<p>The data represented here was collected from a Seaglider deployed in the South Atlantic sub-Antarctic region (43&#x00B0;S, 8.52&#x00B0;E) as part of the third Southern Ocean Seasonal Cycle Experiment (SOSCEx III; <xref ref-type="bibr" rid="B31">Swart et al., 2012</xref>; <xref ref-type="bibr" rid="B7">du Plessis et al., 2019</xref>). Seaglider (SG) 542 was deployed on 8th December 2015 and retrieved on 8th February 2016. A total of 344 dives are used in the example dataset containing data on temperature, conductivity, pressure, fluorescence, dissolved oxygen; PAR. The raw glider engineering and log files have undergone Kongsberg Basestation processing in which raw data is initially processed and quality controlled upon the glider data being received by the land-based server. The automated QC is done according to procedures modeled after the Argo data processing scheme (<xref ref-type="bibr" rid="B29">Schmid et al., 2007</xref>). The Basestation software returns netCDF formatted files for each dive. In this study, GliderTools applies processing on this netCDF output. Data are available at <ext-link ext-link-type="uri" xlink:href="ftp://socco.chpc.ac.za/GliderTools/SOSCEx3">ftp://socco.chpc.ac.za/GliderTools/SOSCEx3</ext-link>.</p>
</sec>
<sec id="S3.SS2">
<title>Secondary QC for Physics Data: Filters and Smoothing</title>
<p>The <italic>gt.cleaning</italic> module offers methods that can either filter out erroneous data or smooth noisy data. The package provides three filters to remove outliers which we discuss briefly. Both <italic>gt.cleaning.outlier_bounds_iqr</italic> and <italic>gt.cleaning.outlier_bounds_std</italic> are global filters that remove outliers by interquartile and standard deviation limits, respectively. <italic>gt.cleaning.horizontal_diff_outliers</italic> compares horizontal adjacent values, masking a dive when a specified number of measurements exceed a threshold &#x2013; data are automatically gridded to achieve this but the function returns the results as ungridded data. More details about these filters can be found in the online documentation.</p>
<p>The package includes three different smoothing procedures which are described below. We show the effect that smoothing has on an individual profile and suggest cases where these smoothing functions can be used. We have chosen a salinity profile (140.5, i.e., the up-cast) that demonstrates the effect of these smoothing functions. Note that these functions are applied along the time dimension.</p>
<list list-type="simple">
<list-item>
<label>1.</label>
<p>The <italic>gt.cleaning.despike</italic> function is an adaptation of the approach used by <xref ref-type="bibr" rid="B6">Briggs et al. (2011)</xref> to remove spikes in backscatter data with the intention of preserving these points. In the case of optics variables, it is often the case that spikes are not erroneous data, but particles that could be used to calculate downward flux or export (<xref ref-type="bibr" rid="B6">Briggs et al., 2011</xref>). This is achieved by applying a rolling minimum window, followed by a rolling maximum window over the data. This extracts the baseline, with the residuals being returned as spikes. This filter is useful for data where the sampling noise is not normally distributed but rather positively distributed. The application to salinity (<xref ref-type="fig" rid="F3">Figure 3</xref>) is thus only for demonstration and should not be applied in practice. A median filter can also be applied when it is expected that spikes are normally distributed. This produces a similar outcome to a rolling window over which a median function is applied.</p>
</list-item>
<list-item>
<label>2.</label>
<p><italic>gt.cleaning.rolling_window</italic> allows any aggregating function (<italic>mean, median, standard deviation, percentile</italic>) to be applied to the data allowing users to create further filters if needed. However, the tool can also be used to simply smooth data with <italic>mean</italic> or <italic>median</italic> functions.</p>
</list-item>
<list-item>
<label>3.</label>
<p>Lastly, <italic>gt.cleaning.savitzky_golay</italic> fits a polynomial function to a rolling window of the data (<xref ref-type="bibr" rid="B28">Savitzky and Golay, 1964</xref>). The order of the polynomial can be determined by the user, thus more complex curves can be fit by the curve while smoothing the data.</p>
</list-item>
</list>
<p>Here, these three filters are applied individually to the raw profile (<xref ref-type="fig" rid="F3">Figure 3</xref>), but these methods can be applied sequentially if required. We show that the despiking method has the largest impact on the data, with the selected minimum baseline clearly shown, with all spikes being positive. The Savitzky-Golay function and the rolling average window have similar effects on the profile with the latter having a stronger effect to smooth the data. The Savitzky-Golay method keeps the profile shape while removing high-frequency spikes in the data.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption><p>A comparison of the impact of the smoothing functions on a &#x201C;noisy&#x201D; part of profile 140.5 (up-cast). Note that a 9-point rolling window is applied in all cases. <bold>(A)</bold> A single depth profile of raw salinity in black overlaid by three cleaning methods applied to the raw salinity, namely despiked (red) with a rolling min-max window, rolling average (green) and second-order Savitzky-Golay smoothing (blue). The gray shading marks the region of the profile that is enlarged in panel <bold>(B)</bold>. <bold>(C)</bold> The difference between the cleaned and raw salinity for each of the applied functions.</p></caption>
<graphic xlink:href="fmars-06-00738-g003.tif"/>
</fig>
</sec>
<sec id="S3.SS3">
<title>Fluorescence QC and Calibration</title>
<p>Fluorescence data provides useful information on phytoplankton biomass and bloom phenology, however, <italic>in vivo</italic> fluorescence is suppressed during periods of high irradiance due to a process termed non-photochemical quenching (<xref ref-type="bibr" rid="B39">Yentsch and Ryther, 1957</xref>; <xref ref-type="bibr" rid="B30">Slovacek and Hannan, 1977</xref>; <xref ref-type="bibr" rid="B23">Owens et al., 1980</xref>; <xref ref-type="bibr" rid="B1">Abbott et al., 1982</xref>; <xref ref-type="bibr" rid="B9">Falkowski and Kolber, 1995</xref>; <xref ref-type="bibr" rid="B21">Milligan et al., 2012</xref>). The ability to correct this has been successfully demonstrated, where GliderTools uses the method proposed in <xref ref-type="bibr" rid="B33">Thomalla et al. (2018)</xref>. The full procedure including the cleaning steps is described below.</p>
<list list-type="simple">
<list-item>
<label>1.</label>
<p>Raw fluorescence data is processed as follows:</p>
<list list-type="simple">
<list-item>
<label>(a)</label>
<p>Bad fluorescence profiles are identified with <italic>gt.optics.find_bad_profiles</italic>. Using a reference depth of 300 m, fluorescence is averaged below 300 m and profiles identified as outliers, where their depth specific values are greater than the global mean profile multiplied by a user defined value (e.g., a factor of 3).</p>
</list-item>
<list-item>
<label>(b)</label>
<p>An <italic>in situ</italic> dark-count is calculated with <italic>gt.optics.fluorescence_dark_count</italic>. The dark count is calculated from the 95th percentile between 300 and 400 m and then removed from the data.</p>
</list-item>
<list-item>
<label>(c)</label>
<p>The data is despiked using <italic>gt.cleaning.despike</italic> (the function described in see section &#x201C;Secondary QC for Physics Data: Filters and Smoothing&#x201D;) where an 11-point rolling minimum is applied to the dataset. Thereafter an 11-point rolling maximum is applied. This forms the baseline, where the spikes are the difference from the baseline.</p>
</list-item>
<list-item>
<label>(d)</label>
<p>Quenched data is corrected using <italic>gt.optics.quenching_correction</italic>, as described in <xref ref-type="bibr" rid="B33">Thomalla et al. (2018)</xref> and shown in <xref ref-type="fig" rid="F4">Figures 4A,B</xref>.</p>
<list list-type="simple">
<list-item>
<label>i.</label>
<p>The quenching depth is determined as the minimum depth of the five smallest differences between daytime fluorescence and average night-time fluorescence.</p>
</list-item>
<list-item>
<label>ii.</label>
<p>The night-time backscattering ratio to fluorescence is used to correct the daytime fluorescence profile.</p>
</list-item>
<list-item>
<label>iii.</label>
<p>The current method is set to use the night before (<italic>night_day_group</italic> = <italic>False</italic>) but can use the night after (<italic>night_day_group</italic> = <italic>True</italic>).</p>
</list-item>
<list-item>
<label>iv.</label>
<p>Daytime is defined as local sunrise and sunset, using <italic>gt.optics.sunset_sunrise</italic>, with the addition of the <italic>sunrise_sunset_offset</italic>, which is defined as 2 h here.</p>
</list-item>
</list>
</list-item>
</list>
</list-item>
<list-item>
<label>2.</label>
<p>Fluorescence data is converted into chlorophyll as follows:</p>
<list list-type="simple">
<list-item>
<label>(a)</label>
<p>The calibration data is matched to the glider within user-defined limits of 5 m in the depth dimension and 120 min in the time dimension. Note that the bottle calibration function (<italic>gt.calibration.bottle_matchup</italic>) does not take longitude and latitude into consideration, therefore the user must use only bottle samples that coincide with the glider data.</p>
</list-item>
<list-item>
<label>(b)</label>
<p>A Huber Linear Regression algorithm is applied to the matched bottle data. Huber regression is more robust than standard linear regression as outliers can be excluded from the fit based on a user-selected threshold (<italic>epsilon</italic>, 1.5 in this case). Additionally, for fluorescence, the <italic>y</italic>-intercept is forced to zero (<xref ref-type="fig" rid="F4">Figure 4C</xref>).</p>
</list-item>
<list-item>
<label>(c)</label>
<p>This equation is then applied to the glider fluorescence to produce glider chlorophyll (mg m<sup>&#x2013;3</sup>) (<xref ref-type="fig" rid="F4">Figure 4D</xref>).</p>
</list-item>
</list>
</list-item>
</list>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption><p><bold>(A)</bold> Depth profiles of quenched and quenching-corrected fluorescence (unitless raw count), <bold>(B)</bold> Section plot of quenched fluorescence (no units), <bold>(C)</bold> Huber linear regression of glider fluorescence (no units) and <italic>in situ</italic> chlorophyll-a (mg m<sup>&#x2013;3</sup>), and <bold>(D)</bold> section of glider chlorophyll (mg m<sup>&#x2013;3</sup>).</p></caption>
<graphic xlink:href="fmars-06-00738-g004.tif"/>
</fig>
</sec>
<sec id="S3.SS4">
<title>PAR Quality Control and Derivations</title>
<p>Photosynthetically available radiation data provides valuable information on the photic environment of the surface ocean &#x2013; key to understanding the phytoplankton light status, including the derivation of the euphotic zone thickness (euphotic depth) and the diffuse attenuation coefficient (k<sub>d</sub>). The accurate characterization of the photic environment is important if this data is to be integrated into primary production models. The processing steps for PAR within GliderTools are discussed below.</p>
<list list-type="simple">
<list-item>
<label>1.</label>
<p>Raw PAR data is processed as follows:</p>
<list list-type="simple">
<list-item>
<label>(a)</label>
<p>PAR (&#x03BC;V) is scaled to &#x03BC;E m<sup>&#x2013;2</sup> s<sup>&#x2013;1</sup> and corrected for factory dark count (<italic>gt.optics.par_scaling</italic>).</p>
</list-item>
<list-item>
<label>(b)</label>
<p>PAR is corrected for an <italic>in situ</italic> dark-count using <italic>gt.optics.par_dark_count</italic> (median PAR value at night, values excluded before 23:01 local time and outside the 90th percentile).</p>
</list-item>
<list-item>
<label>(c)</label>
<p>Top 5 m is removed and then the profile is algebraically recalculated using an exponential equation using <italic>gt.optics.par_fill_surface</italic> (<xref ref-type="fig" rid="F5">Figures 5A,B</xref>).</p>
</list-item>
</list>
</list-item>
<list-item>
<label>2.</label>
<p>The euphotic depth and k<sub>d</sub> can be calculated from this corrected PAR using <italic>gt.optics.photic_depth</italic>.</p>
<list list-type="simple">
<list-item>
<label>(a)</label>
<p>Euphotic depth defined as 1% of surface PAR (<xref ref-type="fig" rid="F5">Figure 5C</xref>).</p>
</list-item>
<list-item>
<label>(b)</label>
<p>k<sub>d</sub> defined as the slope of the linear fit of depth and ln(PAR) (<xref ref-type="fig" rid="F5">Figure 5D</xref>).</p>
</list-item>
</list>
</list-item>
</list>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption><p><bold>(A)</bold> Profiles of dark corrected (factory and <italic>in situ</italic> dark corrected) PAR (&#x03BC;E m<sup>&#x2013;2</sup> s<sup>&#x2013;1</sup>) and surface corrected PAR (algebraic correction), <bold>(B)</bold> the difference between dark corrected and surface corrected PAR, <bold>(C)</bold> the euphotic depth (m) calculated from PAR for the glider section and <bold>(D)</bold> the diffuse attenuation coefficient, k<sub>d</sub>, (m<sup>&#x2013;1</sup>) calculated from PAR for the glider section.</p></caption>
<graphic xlink:href="fmars-06-00738-g005.tif"/>
</fig>
</sec>
<sec id="S3.SS5">
<title>Vertical Binning and Two-Dimensional Interpolation</title>
<p>Throughout the cleaning and calibration processing, GliderTools prioritizes maintaining the structure of the data, i.e., data are not gridded. However, it is often more convenient, computationally efficient and required for certain calculations to work with data that is on a regular grid. GliderTools offers two methods to place data on a regular grid. The first is by binning only the vertical coordinate of the data. The second approach is a two-dimensional optimal interpolation. The processing and additional information are discussed in the steps below.</p>
<list list-type="simple">
<list-item>
<label>1.</label>
<p>Vertical data binning is described below:</p>
<list list-type="simple">
<list-item>
<label>(a)</label>
<p>The vertical binning procedure of GliderTools (<italic>gt.grid_data</italic>) requires a pseudo-discrete x-coordinate. The profile number can typically be used, but there is also a function to calculate the average time stamp for each profile (<italic>gt.utils.time_average_per_dive</italic>).</p>
</list-item>
<list-item>
<label>(b)</label>
<p>If vertical gridding bins are not defined manually <italic>gt.grid_data</italic> automatically assigns bins according to the average sampling density per 50 m, as demonstrated in <xref ref-type="fig" rid="F6">Figure 6A</xref> with the gridded output shown in <xref ref-type="fig" rid="F6">Figure 6C</xref>. The bins are rounded up to the nearest 0.5 m, meaning that &#x201C;full&#x201D; bins are preferred over &#x201C;sparse&#x201D; bins. Binning data at the optimal sampling frequency is important if the user wants to preserve as much of the vertical structure as possible without creating a sparse dataset. It becomes clear that the lack of horizontal interpolation becomes limiting, with the discrete bins clearly visible in the zoomed in section.</p>
</list-item>
</list>
</list-item>
<list-item>
<label>2.</label>
<p>Two-dimensional interpolation is perhaps a better approach when, for example, comparing gradients over shorter time-scales. Past studies have used a MATLAB implementation of objective mapping (objmap in the MATLAB toolbox<sup><xref ref-type="fn" rid="footnote7">7</xref></sup>, <xref ref-type="bibr" rid="B34">Thompson et al., 2016</xref>; <xref ref-type="bibr" rid="B35">Todd et al., 2016</xref>; <xref ref-type="bibr" rid="B38">Viglione et al., 2018</xref>; <xref ref-type="bibr" rid="B7">du Plessis et al., 2019</xref>). GliderTools offers a Pythonic implementation of the MATLAB objective interpolation function (<italic>gt.interp_obj</italic>). Because of its statistical foundation, objective mapping is also able to calculate interpolation errors. In practice, objective mapping is a form of inverse distance weighted interpolation, where the weight of observations decreases as calculated by a radial kernel (Gaussian in this case). However, calculating the weights of the model does not scale well computationally due to large memory requirements. The problem is thus broken into smaller, parallelizable subsets using a quadtree approach and interpolation is performed for each quadrant and its neighbors.</p>
<list list-type="simple">
<list-item>
<label>(a)</label>
<p>As with vertical gridding, an interpolation grid has to be created for the interpolation. GliderTools does not offer assistance in deciding on the size and frequency of this grid. The demonstration below uses a 1 m vertical grid with a 30-min horizontal grid. Details on how these are created are in the online documentation.</p>
</list-item>
<list-item>
<label>(b)</label>
<p>The user must manually estimate the anisotropy of the horizontal and vertical length-scales of the coordinates. This can be determined using a variogram (<italic>gt.mapping.variogram</italic>, <xref ref-type="fig" rid="F6">Figure 6E</xref>); however, we find that manual estimates of the length scales often result in better interpolation, especially when interpolating data over the thermocline. The variogram function automatically scales the <italic>x</italic> and <italic>y</italic> coordinates so that the range is one. This means that the user only needs to find the anisotropy (ratio between <italic>x</italic> and <italic>y</italic> length scales). It may also be helpful to mask out the deeper, homogeneous parts of the section to estimate the more variable length scales in the surface waters. The variogram function is also used to find the <italic>nugget</italic> (error estimate of sampling) and <italic>sill</italic> (maximum semivariance of the model). The following have been used in <xref ref-type="fig" rid="F6">Figure 6E</xref>: 70 m in the vertical and 60 h on the horizontal; a partial sill of 0.02 (<italic>sill &#x2013; nugget</italic>) and a nugget of 0.004.</p>
</list-item>
<list-item>
<label>(c)</label>
<p>As mentioned, the <italic>gt.interp_obj</italic> function can also calculate interpolation errors for a particular interpolation scheme. It is important to consider interpolation errors when there are large gaps in the dataset &#x2013; as in the first few dives in <xref ref-type="fig" rid="F6">Figures 6B,D</xref>. Regions with large errors can be used to mask regions with low interpolation confidence.</p>
</list-item>
</list>
</list-item>
</list>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption><p><bold>(A)</bold> A two-dimensional histogram of the vertical sampling frequency at various depths. The orange line shows the algorithmically estimated bin sizes for each 50 m block (median vertical sampling frequency rounded down to the nearest 0.5 m). <bold>(B)</bold> A scatter plot of ungridded salinity that has been quality controlled using the <italic>calc_physics</italic> function. <bold>(C)</bold> The salinity data from <bold>(B)</bold> gridded vertically according to the sampling frequencies shown in <bold>(A)</bold> with the average time per dive as the <italic>x</italic>-axis coordinate. The black box shows the subset of data that was used to calculate the semivariance in panel <bold>(D)</bold>. <bold>(D)</bold> The semivariance (black dots) of salinity scaled anisotropically so that the range (gray) is equal to one. The blue line shows a gaussian model fit to the semivariance with the sill (orange) and nugget (red) shown by the dashed lines. <bold>(E)</bold> shows the objectively interpolated data using the sill (0.02), nugget (0.004) and coordinate length-scales (70 h and 60 m for <italic>x</italic> and <italic>y</italic>, respectively), from <bold>(D)</bold>. Regions with large interpolation errors have been masked (nugget + 5% of nugget).</p></caption>
<graphic xlink:href="fmars-06-00738-g006.tif"/>
</fig>
</sec>
</sec>
<sec id="S4">
<title>Discussion</title>
<sec id="S4.SS1">
<title>Recommendations for Processing and Data Management</title>
<p>One of the advantages of GliderTools, in comparison to existing packages, is the ability to clean and despike the raw data, with complete user control of the strict QC procedure. This is important when cleaning physics data in comparison to cleaning bio-optical data. A spike in either the salinity or temperature is more than likely a technical failure of the sensor i.e., power surges, whereas a spike in either the backscatter or fluorescence is aggregated biological matter, i.e., marine snow or fecal pellets (<xref ref-type="bibr" rid="B11">Fischer et al., 1996</xref>; <xref ref-type="bibr" rid="B3">Bishop et al., 1999</xref>; <xref ref-type="bibr" rid="B13">Gardner et al., 2000</xref>; <xref ref-type="bibr" rid="B2">Bishop and Wood, 2008</xref>). <xref ref-type="bibr" rid="B33">Thomalla et al. (2018)</xref> built upon the work of <xref ref-type="bibr" rid="B6">Briggs et al. (2011)</xref> to distinguish spikes from both backscatter and fluorescence sensors in order to develop a new optimized approach for correcting fluorescence quenching. This approach was required as large spikes in the backscatter data would significantly alter the fluorescence to backscatter ratio, invalidating their approach of using the nighttime ratio to correct daytime quenching. Whilst the technique of removing spikes is appropriate for correcting quenched fluorescence, it does not hold true for estimating carbon flux and export from backscatter. As such, GliderTools removes the spikes to accurately correct fluorescence quenching but it also retains the spikes as a variable that can be reincorporated back into the backscatter.</p>
<p>For the calculation of vertical and horizontal (temporal and spatial) gradients of physical properties in the ocean, GliderTools performs optimal interpolation/objective mapping to the raw data, providing data gridded to a monotonically increasing grid. This approach is particularly useful for studies investigating the evolution of submeso- to mesoscale processes (<xref ref-type="bibr" rid="B34">Thompson et al., 2016</xref>; <xref ref-type="bibr" rid="B35">Todd et al., 2016</xref>; <xref ref-type="bibr" rid="B38">Viglione et al., 2018</xref>; <xref ref-type="bibr" rid="B7">du Plessis et al., 2019</xref>) as it negates the bias in the calculation which may arise due to non-uniform horizontal gridding. Note this does not remove the challenge of distinguishing variations in the given property as spatial or temporal, or some combination of these, but provides the user with robust method of along-track interpolation which is currently only available in a MATLAB implementation.</p>
<p>GliderTools encourages best practices in terms of post-data collection efforts in data distribution, storage and open-source, which is detailed further in <xref ref-type="bibr" rid="B32">Testor et al. (2019)</xref>. GliderTools has implemented, where possible, best practise in terms of development and provision of metadata. We advocate for glider data storage and dissemination through regional and global data repositories (e.g., NCEI, PODAAC, BODC and discoverable through sites such as SOOSmap; <xref ref-type="bibr" rid="B22">Newman et al., 2019</xref>). GliderTools should continue to strive toward common glider data formatting and standardization in order to conform to the community agreed requirements (such as protocols and recommendations coming from OceanGliders). This will, of course, be an iterative process &#x2013; i.e., when glider users and managers convene and provide guidelines on data management, including the implementation of Findable-Accessible-Interoperable-Reusable (FAIR) data principles. GliderTools&#x2019; open code viewpoint will, therefore, facilitate best practise of data formatting and QC procedures to evolve and keep up-to-date with internationally agreed practices. The rapid acceleration of glider use by the research and operational community means that coordination and standardization will become an ever-important aspect for glider data in the coming years.</p>
</sec>
<sec id="S4.SS2">
<title>Limitations and Potential Developments</title>
<p>In the development of GliderTools, we have attempted to provide a package that addresses our own needs and thus recognize that it will not be comprehensive for each and every user. However, we encourage the community-driven development of packages that incorporate or integrate with GliderTools.</p>
<p>Perhaps the clearest limitation is the lack of support for multiple glider platforms, e.g., the Slocum glider by Teledyne Marine<sup><xref ref-type="fn" rid="footnote8">8</xref></sup> and the Spray glider by Bluefin Robotics<sup><xref ref-type="fn" rid="footnote9">9</xref></sup>. At its core, GliderTools was written to support head-to-tail concatenated column data, thus making the addition of platform-specific functions simple (though we recommend the use of <italic>xarray</italic> to make full use of metadata preservation in GliderTools). The glider community (EGO &#x2013; Everyone&#x2019;s Glider Observations) is making a concerted effort to standardize data processing and storage to streamline access of first-order processed data. GliderTools thus includes a function to load this community standard netCDF format. Improving the support for other data formats will likely be the next step forward in the development of GliderTools.</p>
<p>The presence of thermal lag in conductivity data can introduce false signals in salinity and density, especially at the thermocline, thus the absence of thermal lag correction function in GliderTools may be perceived as a shortcoming. However, this problem has been addressed to various degrees by the Basestation, SOCIB and UEA glider packages. In principle, these packages model the glider speed through the water to apply a temporal lag correction to conductivity relative to temperature measurements (<xref ref-type="bibr" rid="B12">Garau et al., 2011</xref>). We encourage the creators of the thermal lag correction functions to produce a Python implementation of the corrections that could be implemented into GliderTools.</p>
<p>Continuing work has shown that open and coastal ocean oxygen concentrations have decreased due to the imprint left in the atmosphere due to fossil fuel burning and eutrophication (<xref ref-type="bibr" rid="B5">Breitburg et al., 2018</xref>). Gliders are thus often fitted with oxygen sensors (e.g., Aanderaa oxygen optodes) to measure these important changes (<xref ref-type="bibr" rid="B4">Bittig et al., 2018</xref>; <xref ref-type="bibr" rid="B26">Queste et al., 2018</xref>). In its current state, GilderTools offers only data filtering, smoothing, unit conversion and the calculation of theoretical oxygen saturation and apparent oxygen utilization. <xref ref-type="bibr" rid="B4">Bittig et al. (2018)</xref> present a comprehensive overview of best practices in dissolved oxygen processing, which should be used as a guideline for the development of more comprehensive oxygen processing. We thus invite the community to contribute to the development of tools to process glider measured variables currently not supported by GliderTools (see the contribution guidelines in our code repository).</p>
<p>The quenching correction of <xref ref-type="bibr" rid="B33">Thomalla et al. (2018)</xref> implemented in GliderTools is created and tested for open-ocean waters and thus cannot be applied with confidence to glider data collected in coastal waters. The approach assumes that all backscatter is due to biological material &#x2013; the backscatter of sedimentary material in coastal and shelf waters invalidates this. Future fluorescence quenching correction methods will need to be developed to specifically handle data from coastal and shelf regions and we hope these to be incorporated into GliderTools in time.</p>
<p>Further, the current approach of estimating chlorophyll from a linear relationship with fluorescence is based upon two assumptions, that sensor excitation energy is constant, and saturating and that chlorophyll absorption and fluorescence quantum yield are linearly related to fluorescence. This is not always the case <italic>in situ</italic> due to pigment packaging, cell size, community structure, light history and nutritional status. In recent studies, <xref ref-type="bibr" rid="B14">Ha&#x00EB;ntjens et al. (2017)</xref> and <xref ref-type="bibr" rid="B17">Johnson et al. (2017)</xref> used a power-law regression between high-performance liquid chromatography estimated chlorophyll-a and profiling float fluorescence, which reduced the errors and improved the correlation coefficient. The current approach provided within GliderTools requires the user to not fit the intercept as doing so will result in anomalously high (&#x223C;0.1 mg m<sup>&#x2013;3</sup>) chlorophyll values at depth (&#x003E;200 m); a power-law approach will not require this assumption to be made.</p>
</sec>
</sec>
<sec id="S5">
<title>Conclusion</title>
<p>We present GliderTools, an open-source Python software package for processing underwater glider data for scientific use. Previously available packages are focussed on processing raw glider output, usually limited to only temperature and salinity data and are, in many cases, reliant on proprietary scientific programing languages. The tools we provide will allow users to focus more on the science by removing the barrier of technical programing. This barrier is further reduced with the high-level functions we provide for more complex variables such as backscatter and fluorescence, that apply multiple processing steps.</p>
<p>Lastly, GliderTools was developed to address the needs of the research groups involved in this study and thus, we recognize that it will not address the needs of all scientists using glider data. We invite other users to suggest improvements and contribute toward the further development of the tool. We also encourage users to contribute to or suggest changes toward the documentation of GliderTools, which is key to the usability of the package. With GliderTools we advocate that as the glider community moves toward open-source data, so should the programs that handle and process the data.</p>
</sec>
<sec id="S6">
<title>Data Availability Statement</title>
<p>The datasets for this study can be found in the SOCCO data server at <ext-link ext-link-type="uri" xlink:href="ftp://socco.chpc.ac.za/GliderTools/SOSCEx3">ftp://socco.chpc.ac.za/GliderTools/SOSCEx3</ext-link>.</p>
</sec>
<sec id="S7">
<title>Author Contributions</title>
<p>LG conceptualized the manuscript and was the primary contributor to the code for the GliderTools package. TR-K wrote the majority of the code and text relating to bio-optics. S-AN, MP, and IG contributed to the conceptual development and testing of GliderTools as well as writing the manuscript. SS contributed to the manuscript as well as the addition of certain functions to GliderTools. All authors revised and approved the manuscript.</p>
</sec>
<sec id="conf1">
<title>Conflict of Interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
</body>
<back>
<fn-group>
<fn fn-type="financial-disclosure">
<p><bold>Funding.</bold> Initial development of this project was funded by the NRF-SANAP Grant SNA170524232726. SS acknowledges support from a Wallenberg Academy Fellowship (WAF 2015.0186). S-AN acknowledges the CSIR Parliamentary Grant, Young Researchers Establishment Fund (YREF 2019 0000007361). S-AN and SS were supported by the NRF-SANAP Grant SNA170522231782.</p>
</fn>
</fn-group>
<ack>
<p>We would like to acknowledge Christopher Wingard, Craig Risien, and Russell Desiderio for the use of the <italic>flo_functions</italic> package. LG was employed by the ETH Z&#x00FC;rich during manuscript preparation and would like to thank the group leader, Nicolas Gruber, for allowing time to complete this project. We would like to thank Pedro Monteiro for supporting the initial code development. We thank SANAP and the captain and crew of the S. A. Agulhas II for their assistance in the deployment and retrieval of gliders used to obtain the data for this paper. We also acknowledge the work of STS for housing, managing, and piloting the gliders and for the IOP hosting provided by Geoff Shilling and Craig Lee of the Applied Physics Laboratory, University of Washington.</p>
</ack>
<ref-list>
<title>References</title>
<ref id="B1"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Abbott</surname> <given-names>M. R.</given-names></name> <name><surname>Richerson</surname> <given-names>P. J.</given-names></name> <name><surname>Powell</surname> <given-names>T. M.</given-names></name></person-group> (<year>1982</year>). <article-title>In situ response of phytoplankton fluorescence to rapid variations in light.</article-title> <source><italic>Limnol. Oceanogr.</italic></source> <volume>27</volume> <fpage>218</fpage>&#x2013;<lpage>225</lpage>. <pub-id pub-id-type="doi">10.4319/lo.1982.27.2.0218</pub-id></citation></ref>
<ref id="B2"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bishop</surname> <given-names>J. K. B.</given-names></name> <name><surname>Wood</surname> <given-names>T. J.</given-names></name></person-group> (<year>2008</year>). <article-title>Particulate matter chemistry and dynamics in the twilight zone at VERTIGO ALOHA and K2 sites.</article-title> <source><italic>Deep Sea Res. Part I</italic></source> <volume>55</volume> <fpage>1684</fpage>&#x2013;<lpage>1706</lpage>. <pub-id pub-id-type="doi">10.1016/j.dsr.2008.07.012</pub-id></citation></ref>
<ref id="B3"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bishop</surname> <given-names>K. B. J.</given-names></name> <name><surname>Calvert</surname> <given-names>S. E.</given-names></name> <name><surname>Soon</surname> <given-names>M. Y. S.</given-names></name></person-group> (<year>1999</year>). <article-title>Spatial and temporal variability of POC in the northeast subarctic Pacific.</article-title> <source><italic>Deep Sea Res. Part II</italic></source> <volume>46</volume> <fpage>2699</fpage>&#x2013;<lpage>2733</lpage>. <pub-id pub-id-type="doi">10.1016/S0967-0645(99)00081-8</pub-id></citation></ref>
<ref id="B4"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bittig</surname> <given-names>H. C.</given-names></name> <name><surname>K&#x00F6;rtzinger</surname> <given-names>A.</given-names></name> <name><surname>Neill</surname> <given-names>C.</given-names></name> <name><surname>van Ooijen</surname> <given-names>E.</given-names></name> <name><surname>Plant</surname> <given-names>J. N.</given-names></name> <name><surname>Hahn</surname> <given-names>J.</given-names></name><etal/></person-group> (<year>2018</year>). <article-title>Oxygen optode sensors: principle, characterization, calibration, and application in the ocean.</article-title> <source><italic>Front. Mar. Sci.</italic></source> <volume>4</volume>:<issue>429</issue>. <pub-id pub-id-type="doi">10.3389/fmars.2017.00429</pub-id></citation></ref>
<ref id="B5"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Breitburg</surname> <given-names>D.</given-names></name> <name><surname>Levin</surname> <given-names>L. A.</given-names></name> <name><surname>Oschlies</surname> <given-names>A.</given-names></name> <name><surname>Gr&#x00E9;goire</surname> <given-names>M.</given-names></name> <name><surname>Chavez</surname> <given-names>F. P.</given-names></name> <name><surname>Conley</surname> <given-names>D. J.</given-names></name><etal/></person-group> (<year>2018</year>). <article-title>Declining oxygen in the global ocean and coastal waters.</article-title> <source><italic>Science</italic></source> <volume>359</volume>:<issue>eaam7240</issue>. <pub-id pub-id-type="doi">10.1126/science.aam7240</pub-id> <pub-id pub-id-type="pmid">31585991</pub-id></citation></ref>
<ref id="B6"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Briggs</surname> <given-names>N.</given-names></name> <name><surname>Perry</surname> <given-names>M. J.</given-names></name> <name><surname>Cetini&#x0107;</surname> <given-names>I.</given-names></name> <name><surname>Lee</surname> <given-names>C.</given-names></name> <name><surname>D&#x2019;Asaro</surname> <given-names>E.</given-names></name> <name><surname>Gray</surname> <given-names>A. M.</given-names></name><etal/></person-group> (<year>2011</year>). <article-title>High-resolution observations of aggregate flux during a sub-polar North Atlantic spring bloom.</article-title> <source><italic>Deep Sea Res. Part I</italic></source> <volume>58</volume> <fpage>1031</fpage>&#x2013;<lpage>1039</lpage>. <pub-id pub-id-type="doi">10.1016/j.dsr.2011.07.007</pub-id></citation></ref>
<ref id="B7"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>du Plessis</surname> <given-names>M.</given-names></name> <name><surname>Swart</surname> <given-names>S.</given-names></name> <name><surname>Ansorge</surname> <given-names>I. J.</given-names></name> <name><surname>Mahadevan</surname> <given-names>A.</given-names></name> <name><surname>Thompson</surname> <given-names>A. F.</given-names></name></person-group> (<year>2019</year>). <article-title>Southern ocean seasonal restratification delayed by submesoscale wind&#x2013;front interactions.</article-title> <source><italic>J. Phys. Oceanogr.</italic></source> <volume>49</volume> <fpage>1035</fpage>&#x2013;<lpage>1053</lpage>. <pub-id pub-id-type="doi">10.1175/jpo-d-18-0136.1</pub-id></citation></ref>
<ref id="B8"><citation citation-type="journal"><collab>EGO gliders data management team,</collab> (<year>2017</year>). in <source><italic>EGO Gliders NetCDF Format Reference Manual</italic></source>, <role>eds</role> <person-group person-group-type="editor"><name><surname>Carval</surname> <given-names>T.</given-names></name> <name><surname>Gourcuff</surname> <given-names>C.</given-names></name> <name><surname>Rannou</surname> <given-names>J.-P.</given-names></name> <name><surname>Buck</surname> <given-names>J. J. H.</given-names></name> <name><surname>Garau</surname> <given-names>B.</given-names></name></person-group> <publisher-loc>Paris</publisher-loc>: <publisher-name>Ifremer</publisher-name>, <pub-id pub-id-type="doi">10.13155/34980</pub-id></citation></ref>
<ref id="B9"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Falkowski</surname> <given-names>Z.</given-names></name> <name><surname>Kolber</surname> <given-names>P. G.</given-names></name></person-group> (<year>1995</year>). <article-title>Variations in Chlorophyll fluorescence yields in phytoplankton in the World Oceans.</article-title> <source><italic>Aust. J. Plant Physiol.</italic></source> <volume>22</volume> <fpage>341</fpage>&#x2013;<lpage>355</lpage>.</citation></ref>
<ref id="B10"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fernandes</surname> <given-names>F.</given-names></name></person-group> (<year>2014</year>). <source><italic>python-seawater v3.3.2.</italic></source> <publisher-loc>Switzerland</publisher-loc>: <publisher-name>Zenodo</publisher-name>, <pub-id pub-id-type="doi">10.5281/zenodo.11395</pub-id></citation></ref>
<ref id="B11"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fischer</surname> <given-names>G.</given-names></name> <name><surname>Neuer</surname> <given-names>S.</given-names></name> <name><surname>Wefer</surname> <given-names>G.</given-names></name> <name><surname>Krause</surname> <given-names>G.</given-names></name></person-group> (<year>1996</year>). <article-title>Short-term sedimentation pulses recorded with a chlorophyll sensor and sediment traps in 900 m water depth in the Canary Basin.</article-title> <source><italic>Limnol. Oceanogr.</italic></source> <volume>41</volume> <fpage>1354</fpage>&#x2013;<lpage>1359</lpage>. <pub-id pub-id-type="doi">10.4319/lo.1996.41.6.1354</pub-id></citation></ref>
<ref id="B12"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Garau</surname> <given-names>B.</given-names></name> <name><surname>Ruiz</surname> <given-names>S.</given-names></name> <name><surname>Zhang</surname> <given-names>W. G.</given-names></name> <name><surname>Pascual</surname> <given-names>A.</given-names></name> <name><surname>Heslop</surname> <given-names>E.</given-names></name> <name><surname>Kerfoot</surname> <given-names>J.</given-names></name><etal/></person-group> (<year>2011</year>). <article-title>Thermal lag correction on slocum CTD glider data.</article-title> <source><italic>J. Atmos. Ocean. Technol.</italic></source> <volume>28</volume> <fpage>1065</fpage>&#x2013;<lpage>1071</lpage>. <pub-id pub-id-type="doi">10.1175/JTECH-D-10-05030.1</pub-id></citation></ref>
<ref id="B13"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gardner</surname> <given-names>W. D.</given-names></name> <name><surname>Richardson</surname> <given-names>M. J.</given-names></name> <name><surname>Smith</surname> <given-names>W. O.</given-names></name></person-group> (<year>2000</year>). <article-title>Seasonal patterns of water column particulate organic carbon and fluxes in the ross sea, antarctica.</article-title> <source><italic>Deep-Sea Res. Part II</italic></source> <volume>47</volume> <fpage>3423</fpage>&#x2013;<lpage>3449</lpage>. <pub-id pub-id-type="doi">10.1016/S0967-0645(00)00074-6</pub-id></citation></ref>
<ref id="B14"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ha&#x00EB;ntjens</surname> <given-names>N.</given-names></name> <name><surname>Boss</surname> <given-names>E.</given-names></name> <name><surname>Talley</surname> <given-names>L. D.</given-names></name></person-group> (<year>2017</year>). <article-title>Revisiting Ocean Color algorithms for chlorophyll a and particulate organic carbon in the Southern Ocean using biogeochemical floats.</article-title> <source><italic>J. Geophys. Res.</italic></source> <volume>122</volume> <fpage>6583</fpage>&#x2013;<lpage>6593</lpage>. <pub-id pub-id-type="doi">10.1002/2017JC012844</pub-id></citation></ref>
<ref id="B15"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hoyer</surname> <given-names>S.</given-names></name> <name><surname>Hamman</surname> <given-names>J. J.</given-names></name></person-group> (<year>2017</year>). <article-title>xarray: N-D labeled arrays and datasets in python.</article-title> <source><italic>J. Open Res. Softw.</italic></source> <volume>5</volume> <fpage>1</fpage>&#x2013;<lpage>6</lpage>. <pub-id pub-id-type="doi">10.5334/jors.148</pub-id></citation></ref>
<ref id="B16"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hunter</surname> <given-names>J. D.</given-names></name></person-group> (<year>2007</year>). <article-title>Matplotlib: a 2D graphics environment.</article-title> <source><italic>Comput. Sci. Eng.</italic></source> <volume>9</volume> <fpage>99</fpage>&#x2013;<lpage>104</lpage>. <pub-id pub-id-type="doi">10.1109/MCSE.2007.55</pub-id></citation></ref>
<ref id="B17"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Johnson</surname> <given-names>K. S.</given-names></name> <name><surname>Plant</surname> <given-names>J. N.</given-names></name> <name><surname>Coletti</surname> <given-names>L. J.</given-names></name> <name><surname>Jannasch</surname> <given-names>H. W.</given-names></name> <name><surname>Sakamoto</surname> <given-names>C. M.</given-names></name> <name><surname>Riser</surname> <given-names>S. C.</given-names></name><etal/></person-group> (<year>2017</year>). <article-title>Biogeochemical sensor performance in the SOCCOM profiling float array.</article-title> <source><italic>J. Geophys. Res.</italic></source> <volume>122</volume> <fpage>6416</fpage>&#x2013;<lpage>6436</lpage>. <pub-id pub-id-type="doi">10.1002/2017JC012838</pub-id></citation></ref>
<ref id="B18"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Jones</surname> <given-names>E.</given-names></name> <name><surname>Oliphant</surname> <given-names>T.</given-names></name> <name><surname>Peterson</surname> <given-names>P.</given-names></name></person-group> (<year>2001</year>). <source><italic>SciPy: Open Source Scientific Tools for Python.</italic></source> Available at: <ext-link ext-link-type="uri" xlink:href="http://www.scipy.org/">http://www.scipy.org/</ext-link></citation></ref>
<ref id="B19"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>McDougall</surname> <given-names>T. J.</given-names></name> <name><surname>Barker</surname> <given-names>P. M.</given-names></name></person-group> (<year>2011</year>). <source><italic>Getting started with TEOS-10 and the Gibbs Seawater (GSW) Oceanographic Toolbox, 28 SCOR/IAPSO WG127.</italic></source> Available at: <ext-link ext-link-type="uri" xlink:href="http://www.TEOS-10.org">www.TEOS-10.org</ext-link> <comment>(accessed February 04, 2018)</comment>.</citation></ref>
<ref id="B20"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mckinney</surname> <given-names>W.</given-names></name></person-group> (<year>2010</year>). &#x201C;<article-title>Data structures for statistical computing in python</article-title>,&#x201D; in <source><italic>Proceedings of the 9th Python in Science Conference, 1697900(Scipy), 51</italic></source>, <publisher-loc>Austin</publisher-loc>.</citation></ref>
<ref id="B21"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Milligan</surname> <given-names>A. J.</given-names></name> <name><surname>Aparicio</surname> <given-names>U. A.</given-names></name> <name><surname>Behrenfeld</surname> <given-names>M. J.</given-names></name></person-group> (<year>2012</year>). <article-title>Fluorescence and nonphotochemical quenching responses to simulated vertical mixing in the marine diatom <italic>Thalassiosira weissflogii</italic>.</article-title> <source><italic>Mar. Ecol. Progr. Ser.</italic></source> <volume>448</volume> <fpage>67</fpage>&#x2013;<lpage>78</lpage>. <pub-id pub-id-type="doi">10.3354/meps09544</pub-id></citation></ref>
<ref id="B22"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Newman</surname> <given-names>L.</given-names></name> <name><surname>Heil</surname> <given-names>P.</given-names></name> <name><surname>Trebilco</surname> <given-names>R.</given-names></name> <name><surname>Katsumata</surname> <given-names>K.</given-names></name> <name><surname>Constable</surname> <given-names>A.</given-names></name> <name><surname>van Wijk</surname> <given-names>E.</given-names></name><etal/></person-group> (<year>2019</year>). <article-title>Delivering sustained, coordinated, and integrated observations of the southern ocean for global impact.</article-title> <source><italic>Front. Mar. Sci.</italic></source> <volume>6</volume>:<issue>433</issue>. <pub-id pub-id-type="doi">10.3389/fmars.2019.00433</pub-id></citation></ref>
<ref id="B23"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Owens</surname> <given-names>T. G.</given-names></name> <name><surname>Falkowski</surname> <given-names>P. G.</given-names></name> <name><surname>Whitledge</surname> <given-names>T. E.</given-names></name></person-group> (<year>1980</year>). <article-title>Diel periodicity in cellular chlorophyll content in marine diatoms.</article-title> <source><italic>Mar. Biol.</italic></source> <volume>59</volume> <fpage>71</fpage>&#x2013;<lpage>77</lpage>. <pub-id pub-id-type="doi">10.1007/BF00405456</pub-id></citation></ref>
<ref id="B24"><citation citation-type="journal"><collab>Plotly Technologies Inc</collab> (<year>2015</year>). <source><italic>Collaborative Data Science.</italic></source> <publisher-loc>Montr&#x00E9;al, QC</publisher-loc>: <publisher-name>Plotly Technologies Inc</publisher-name>.</citation></ref>
<ref id="B25"><citation citation-type="journal"><collab>PyKrige Developers</collab> (<year>2018</year>). <source><italic>PyKrige: Kriging Toolkit for Python (Version 1.4.1) [Computer Software].</italic></source> Available at: <ext-link ext-link-type="uri" xlink:href="https://github.com/bsmurphy/PyKrige">https://github.com/bsmurphy/PyKrige</ext-link> <comment>(accessed April 02, 2019)</comment>.</citation></ref>
<ref id="B26"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Queste</surname> <given-names>B. Y.</given-names></name> <name><surname>Vic</surname> <given-names>C.</given-names></name> <name><surname>Heywood</surname> <given-names>K. J.</given-names></name> <name><surname>Piontkovski</surname> <given-names>S. A.</given-names></name></person-group> (<year>2018</year>). <article-title>Physical controls on oxygen distribution and denitrification potential in the North West Arabian Sea.</article-title> <source><italic>Geophys. Res. Lett.</italic></source> <volume>45</volume> <fpage>4143</fpage>&#x2013;<lpage>4152</lpage>. <pub-id pub-id-type="doi">10.1029/2017GL076666</pub-id></citation></ref>
<ref id="B27"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rudnick</surname> <given-names>D. L.</given-names></name> <name><surname>Davis</surname> <given-names>R. E.</given-names></name> <name><surname>Eriksen</surname> <given-names>C. C.</given-names></name> <name><surname>Fratantoni</surname> <given-names>D. M.</given-names></name> <name><surname>Perry</surname> <given-names>M. J.</given-names></name></person-group> (<year>2004</year>). <article-title>Underwater gliders for ocean research.</article-title> <source><italic>Mar. Technol. Soc. J.</italic></source> <volume>38</volume> <fpage>73</fpage>&#x2013;<lpage>84</lpage>. <pub-id pub-id-type="doi">10.4031/002533204787522703</pub-id></citation></ref>
<ref id="B28"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Savitzky</surname> <given-names>A.</given-names></name> <name><surname>Golay</surname> <given-names>M. J. E.</given-names></name></person-group> (<year>1964</year>). <article-title>Smoothing and differentiation of data by simplified least squares procedures.</article-title> <source><italic>Anal. Chem.</italic></source> <volume>36</volume> <fpage>1627</fpage>&#x2013;<lpage>1639</lpage>. <pub-id pub-id-type="doi">10.1021/ac60214a047</pub-id> <pub-id pub-id-type="pmid">21322220</pub-id></citation></ref>
<ref id="B29"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Schmid</surname> <given-names>C.</given-names></name> <name><surname>Molinari</surname> <given-names>R. L.</given-names></name> <name><surname>Sabina</surname> <given-names>R.</given-names></name> <name><surname>Daneshzadeh</surname> <given-names>Y. H.</given-names></name> <name><surname>Xia</surname> <given-names>X.</given-names></name> <name><surname>Forteza</surname> <given-names>E.</given-names></name><etal/></person-group> (<year>2007</year>). <article-title>The real-time data management of system for argo profiling float observations.</article-title> <source><italic>J. Atmos. Ocean. Technol.</italic></source> <volume>24</volume> <fpage>1608</fpage>&#x2013;<lpage>1628</lpage>. <pub-id pub-id-type="doi">10.1175/JTECH2070.1</pub-id></citation></ref>
<ref id="B30"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Slovacek</surname> <given-names>R. E.</given-names></name> <name><surname>Hannan</surname> <given-names>P. J.</given-names></name></person-group> (<year>1977</year>). <article-title>In vivo fluorescence determinations of phytoplankton chlorophyll a.</article-title> <source><italic>Limnol. Oceanogr.</italic></source> <volume>22</volume> <fpage>919</fpage>&#x2013;<lpage>925</lpage>. <pub-id pub-id-type="doi">10.4319/lo.1977.22.5.0919</pub-id></citation></ref>
<ref id="B31"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Swart</surname> <given-names>S.</given-names></name> <name><surname>Chang</surname> <given-names>N.</given-names></name> <name><surname>Fauchereau</surname> <given-names>N.</given-names></name> <name><surname>Joubert</surname> <given-names>W.</given-names></name> <name><surname>Lucas</surname> <given-names>M.</given-names></name> <name><surname>Mtshali</surname> <given-names>T.</given-names></name><etal/></person-group> (<year>2012</year>). <article-title>Southern ocean seasonal cycle experiment 2012: seasonal scale climate and carbon cycle links.</article-title> <source><italic>South Afr. J. Sci.</italic></source> <volume>108</volume> <fpage>3</fpage>&#x2013;<lpage>5</lpage>. <pub-id pub-id-type="doi">10.4102/sajs.v108i3/4.1089</pub-id></citation></ref>
<ref id="B32"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Testor</surname> <given-names>P.</given-names></name> <name><surname>Turpin</surname> <given-names>V.</given-names></name> <name><surname>DeYoung</surname> <given-names>B.</given-names></name> <name><surname>Rudnick</surname> <given-names>D. L.</given-names></name> <name><surname>Glenn</surname> <given-names>S.</given-names></name> <name><surname>Kohut</surname> <given-names>J.</given-names></name><etal/></person-group> (<year>2019</year>). <article-title>OceanGliders: a component of the integrated GOOS.</article-title> <source><italic>Front. Mar. Sci.</italic></source> <volume>6</volume>:<issue>422</issue>. <pub-id pub-id-type="doi">10.3389/fmars.2019.00422</pub-id></citation></ref>
<ref id="B33"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Thomalla</surname> <given-names>S. J.</given-names></name> <name><surname>Moutier</surname> <given-names>W.</given-names></name> <name><surname>Ryan-Keogh</surname> <given-names>T. J.</given-names></name> <name><surname>Gregor</surname> <given-names>L.</given-names></name> <name><surname>Sch&#x00FC;tt</surname> <given-names>J.</given-names></name></person-group> (<year>2018</year>). <article-title>An optimized method for correcting fluorescence quenching using optical backscattering on autonomous platforms.</article-title> <source><italic>Limnol. Oceanogr.</italic></source> <volume>16</volume> <fpage>132</fpage>&#x2013;<lpage>144</lpage>. <pub-id pub-id-type="doi">10.1002/lom3.10234</pub-id></citation></ref>
<ref id="B34"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Thompson</surname> <given-names>A. F.</given-names></name> <name><surname>Lazar</surname> <given-names>A.</given-names></name> <name><surname>Buckingham</surname> <given-names>C.</given-names></name> <name><surname>Naveira Garabato</surname> <given-names>A. C.</given-names></name> <name><surname>Damerell</surname> <given-names>G. M.</given-names></name> <name><surname>Heywood</surname> <given-names>K. J.</given-names></name></person-group> (<year>2016</year>). <article-title>Open-ocean submesoscale motions: a full seasonal cycle of mixed layer instabilities from gliders.</article-title> <source><italic>J. Phys. Oceanogr.</italic></source> <volume>46</volume> <fpage>1285</fpage>&#x2013;<lpage>1307</lpage>. <pub-id pub-id-type="doi">10.1175/JPO-D-15-0170.1</pub-id></citation></ref>
<ref id="B35"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Todd</surname> <given-names>R. E.</given-names></name> <name><surname>Owens</surname> <given-names>W. B.</given-names></name> <name><surname>Rudnick</surname> <given-names>D. L.</given-names></name></person-group> (<year>2016</year>). <article-title>Potential vorticity structure in the north atlantic western boundary current from underwater glider observations.</article-title> <source><italic>J. Phys. Oceanogr.</italic></source> <volume>46</volume> <fpage>327</fpage>&#x2013;<lpage>348</lpage>. <pub-id pub-id-type="doi">10.1175/jpo-d-15-0112.1</pub-id></citation></ref>
<ref id="B36"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Troupin</surname> <given-names>C.</given-names></name> <name><surname>Beltran</surname> <given-names>J. P.</given-names></name> <name><surname>Heslop</surname> <given-names>E.</given-names></name> <name><surname>Torner</surname> <given-names>M.</given-names></name> <name><surname>Garau</surname> <given-names>B.</given-names></name> <name><surname>Allen</surname> <given-names>J.</given-names></name><etal/></person-group> (<year>2015</year>). <article-title>A toolbox for glider data processing and management.</article-title> <source><italic>Methods Oceanogr.</italic></source> <volume>1</volume> <fpage>13</fpage>&#x2013;<lpage>23</lpage>. <pub-id pub-id-type="doi">10.1016/j.mio.2016.01.001</pub-id></citation></ref>
<ref id="B37"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Van Der Walt</surname> <given-names>S.</given-names></name> <name><surname>Colbert</surname> <given-names>S. C.</given-names></name> <name><surname>Varoquaux</surname> <given-names>G.</given-names></name></person-group> (<year>2011</year>). <article-title>The NumPy array: a structure for efficient numerical computation.</article-title> <source><italic>Comput. Sci. Eng.</italic></source> <volume>13</volume> <fpage>22</fpage>&#x2013;<lpage>30</lpage>. <pub-id pub-id-type="doi">10.1109/MCSE.2011.37</pub-id></citation></ref>
<ref id="B38"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Viglione</surname> <given-names>G. A.</given-names></name> <name><surname>Thompson</surname> <given-names>A. F.</given-names></name> <name><surname>Flexas</surname> <given-names>M. M.</given-names></name> <name><surname>Sprintall</surname> <given-names>J.</given-names></name> <name><surname>Swart</surname> <given-names>S.</given-names></name></person-group> (<year>2018</year>). <article-title>Abrupt transitions in submesoscale structure in southern drake passage: glider observations and model results.</article-title> <source><italic>J. Phys. Oceanogr.</italic></source> <volume>48</volume> <fpage>2011</fpage>&#x2013;<lpage>2027</lpage>. <pub-id pub-id-type="doi">10.1175/jpo-d-17-0192.1</pub-id></citation></ref>
<ref id="B39"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Yentsch</surname> <given-names>C. S.</given-names></name> <name><surname>Ryther</surname> <given-names>J. H.</given-names></name></person-group> (<year>1957</year>). <article-title>Short-term variations in phytoplankton and their significance.</article-title> <source><italic>Limnol. Oceanogr.</italic></source> <volume>2</volume> <fpage>140</fpage>&#x2013;<lpage>142</lpage>. <pub-id pub-id-type="doi">10.1111/gcb.14392</pub-id> <pub-id pub-id-type="pmid">29999582</pub-id></citation></ref>
<ref id="B40"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Zhang</surname> <given-names>X.</given-names></name> <name><surname>Hu</surname> <given-names>L.</given-names></name> <name><surname>He</surname> <given-names>M.</given-names></name></person-group> (<year>2009</year>). <article-title>Scattering by pure seawater: effect of salinity.</article-title> <source><italic>Optics Exp.</italic></source> <volume>17</volume>:<issue>5698</issue>. <pub-id pub-id-type="doi">10.1364/OE.17.005698</pub-id> <pub-id pub-id-type="pmid">19333338</pub-id></citation></ref>
</ref-list>
<fn-group>
<fn id="footnote1">
<label>1</label>
<p><ext-link ext-link-type="uri" xlink:href="https://podaac.jpl.nasa.gov">https://podaac.jpl.nasa.gov</ext-link></p></fn>
<fn id="footnote2">
<label>2</label>
<p><ext-link ext-link-type="uri" xlink:href="https://www.nodc.noaa.gov">https://www.nodc.noaa.gov</ext-link></p></fn>
<fn id="footnote3">
<label>3</label>
<p><ext-link ext-link-type="uri" xlink:href="https://gliders.ioos.us">https://gliders.ioos.us</ext-link></p></fn>
<fn id="footnote4">
<label>4</label>
<p><ext-link ext-link-type="uri" xlink:href="http://www.ifremer.fr/co/ego/ego/v2/">http://www.ifremer.fr/co/ego/ego/v2/</ext-link></p></fn>
<fn id="footnote5">
<label>5</label>
<p><ext-link ext-link-type="uri" xlink:href="http://www.byqueste.com/toolbox.html">http://www.byqueste.com/toolbox.html</ext-link></p></fn>
<fn id="footnote6">
<label>6</label>
<p><ext-link ext-link-type="uri" xlink:href="http://mooring.ucsd.edu/index.html?/software/matlab/matlab_intro.html">http://mooring.ucsd.edu/index.html?/software/matlab/matlab_intro.html</ext-link></p></fn>
<fn id="footnote7">
<label>7</label>
<p><ext-link ext-link-type="uri" xlink:href="http://mooring.ucsd.edu/software/matlab/doc/toolbox/">http://mooring.ucsd.edu/software/matlab/doc/toolbox/</ext-link></p></fn>
<fn id="footnote8">
<label>8</label>
<p><ext-link ext-link-type="uri" xlink:href="http://www.teledynemarine.com/slocum-glider">http://www.teledynemarine.com/slocum-glider</ext-link></p></fn>
<fn id="footnote9">
<label>9</label>
<p><ext-link ext-link-type="uri" xlink:href="https://auvac.org/platforms/view/120">https://auvac.org/platforms/view/120</ext-link></p></fn>
</fn-group>
</back>
</article>