From 9f4d3c046285522adcf3c05aa95fae2c2a9e5fd5 Mon Sep 17 00:00:00 2001 From: Chris John Date: Wed, 3 Dec 2025 15:56:57 -0500 Subject: [PATCH] Add support for EDDGridFromNcFiles to have variables with different dimensions. --- .../pfel/erddap/dataset/EDDGridFromNcLow.java | 4 +- .../pfel/erddap/dataset/GridDataAccessor.java | 22 +- pom.xml | 2 +- .../dataset/EDDGridFromNcFilesTests.java | 1642 +++++++++++++++++ src/test/java/jetty/JettyTests.java | 30 + src/test/java/testDataset/EDDTestDataset.java | 563 ++++++ 6 files changed, 2254 insertions(+), 9 deletions(-) diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcLow.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcLow.java index 1b2e288d..a3ed1373 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcLow.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcLow.java @@ -331,7 +331,9 @@ private boolean hasDimensionByName(List dims, EDVGridAxis axis, List< if ((var.getFullName().equals(axis.sourceName()) || var.getFullName().equals(axis.destinationName())) && var.getDimensions().size() == 1) { - return true; + if (dims.indexOf(var.getDimension(0)) != -1) { + return true; + } } } return false; diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/GridDataAccessor.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/GridDataAccessor.java index 6aa0a4ce..4d51f3bf 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/GridDataAccessor.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/GridDataAccessor.java @@ -802,9 +802,11 @@ public PAOne getAxisValueAsPAOne(int av, PAOne paOne) { * @return paOne, for convenience */ public PAOne getDataValueAsPAOne(int dv, PAOne paOne) { - return paOne.readFrom( - partialDataValues[dv], - (int) partialIndex.getIndex()); // safe since partialIndex size checked when constructed + int index = (int) partialIndex.getIndex(); + if (partialDataValues[dv].size() <= index) { + return paOne.readFrom(partialDataValues[dv].missingValue()); + } + return paOne.readFrom(partialDataValues[dv], index); } /** @@ -815,8 +817,11 @@ public PAOne getDataValueAsPAOne(int dv, PAOne paOne) { * @return the data value */ public double getDataValueAsDouble(int dv) { - return partialDataValues[dv].getDouble( - (int) partialIndex.getIndex()); // safe since partialIndex size checked when constructed + int index = (int) partialIndex.getIndex(); + if (partialDataValues[dv].size() <= index) { + return partialDataValues[dv].missingValue().getDouble(); + } + return partialDataValues[dv].getDouble(index); } /** @@ -827,8 +832,11 @@ public double getDataValueAsDouble(int dv) { * @return the data value */ public String getDataValueAsString(int dv) { - return partialDataValues[dv].getString( - (int) partialIndex.getIndex()); // safe since partialIndex size checked when constructed + int index = (int) partialIndex.getIndex(); + if (partialDataValues[dv].size() <= index) { + return partialDataValues[dv].missingValue().getString(); + } + return partialDataValues[dv].getString(index); } /** diff --git a/pom.xml b/pom.xml index 0b4a02b4..7e336451 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ content1.0.1 1.0.0 5.9.1 - test1.05 + test1.06 12.1.3 2.41.0 1.4.1 diff --git a/src/test/java/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFilesTests.java b/src/test/java/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFilesTests.java index c7d5bf79..31d4b670 100644 --- a/src/test/java/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFilesTests.java +++ b/src/test/java/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFilesTests.java @@ -23950,4 +23950,1646 @@ void testAwsPublicBucket() throws Throwable { """; Test.ensureEqual(results, expected, "\nresults=\n" + results); } + + /** + * This tests reading NetCDF .nc files with variables with varying dimensions. + * + * @throws Throwable if trouble + */ + @org.junit.jupiter.api.Test + void testNcMultidimGrid() throws Throwable { + String tName, results, expected, userDapQuery; + int language = 0; + EDDGrid eddGrid = (EDDGrid) EDDTestDataset.getGrid_NC_1D_2D(); + + // *** test getting dds for entire dataset + tName = + eddGrid.makeNewFileForDapQuery( + language, + null, + null, + "", + EDStatic.config.fullTestCacheDirectory, + eddGrid.className() + "_Entire", + ".dds"); + results = File2.directReadFrom88591File(EDStatic.config.fullTestCacheDirectory + tName); + expected = +""" +Dataset { + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + GRID { + ARRAY: + Float64 heading[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } heading; + GRID { + ARRAY: + Float64 pitch[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } pitch; + GRID { + ARRAY: + Float64 roll[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } roll; + GRID { + ARRAY: + Float64 waypoint_latitude[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } waypoint_latitude; + GRID { + ARRAY: + Float64 waypoint_longitude[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } waypoint_longitude; + GRID { + ARRAY: + Float64 conductivity[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } conductivity; + GRID { + ARRAY: + Float64 temperature[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } temperature; + GRID { + ARRAY: + Float64 pressure[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } pressure; + GRID { + ARRAY: + Float64 chlorophyll[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } chlorophyll; + GRID { + ARRAY: + Float64 cdom[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } cdom; + GRID { + ARRAY: + Float64 backscatter_700[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } backscatter_700; + GRID { + ARRAY: + Float64 distance_over_ground[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } distance_over_ground; + GRID { + ARRAY: + Float64 salinity[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } salinity; + GRID { + ARRAY: + Float64 potential_density[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } potential_density; + GRID { + ARRAY: + Float64 density[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } density; + GRID { + ARRAY: + Float64 potential_temperature[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } potential_temperature; + GRID { + ARRAY: + Float64 profile_index[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } profile_index; + GRID { + ARRAY: + Float64 profile_direction[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } profile_direction; + GRID { + ARRAY: + Float64 profile[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } profile; + GRID { + ARRAY: + Float64 longitude[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } longitude; + GRID { + ARRAY: + Float64 latitude[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } latitude; + GRID { + ARRAY: + Float64 profile_time_start[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } profile_time_start; + GRID { + ARRAY: + Float64 profile_time_end[depth = 110][time = 1017]; + MAPS: + Float64 depth[depth = 110]; + Float64 time[time = 1017]; + } profile_time_end; +} Grid_NC_1D_2D; +"""; + Test.ensureEqual(results, expected, "\nresults=\n" + results); + + userDapQuery = + "depth%5B(5.0):1:(1095)%5D,time%5B(2025-09-25T20:56:41Z):1:(2025-11-27T23:54:18Z)%5D"; + tName = + eddGrid.makeNewFileForDapQuery( + language, + null, + null, + userDapQuery, + EDStatic.config.fullTestCacheDirectory, + eddGrid.className() + "_Data1", + ".csv"); + results = File2.directReadFrom88591File(EDStatic.config.fullTestCacheDirectory + tName); + expected = +""" +depth,time +m,UTC +5.0,2025-09-25T20:56:41Z +15.0,2025-09-25T21:09:47Z +25.0,2025-09-25T21:14:51Z +35.0,2025-09-25T21:24:48Z +45.0,2025-09-25T21:32:56Z +55.0,2025-09-25T21:44:34Z +65.0,2025-09-25T21:55:22Z +75.0,2025-09-25T22:14:50Z +85.0,2025-09-25T22:22:58Z +95.0,2025-09-25T22:30:05Z +105.0,2025-09-25T22:36:11Z +115.0,2025-09-25T22:42:17Z +125.0,2025-09-25T22:48:23Z +135.0,2025-09-25T22:54:29Z +145.0,2025-09-25T23:00:35Z +155.0,2025-09-25T23:07:42Z +165.0,2025-09-25T23:14:49Z +175.0,2025-09-25T23:20:55Z +185.0,2025-09-25T23:27:01Z +195.0,2025-09-25T23:33:07Z +205.0,2025-09-25T23:39:13Z +215.0,2025-09-25T23:45:19Z +225.0,2025-09-25T23:52:26Z +235.0,2025-09-25T23:59:33Z +245.0,2025-09-26T00:06:40Z +255.0,2025-09-26T00:13:47Z +265.0,2025-09-26T00:20:54Z +275.0,2025-09-26T00:30:01Z +285.0,2025-09-26T00:38:09Z +295.0,2025-09-26T00:45:16Z +305.0,2025-09-26T00:53:24Z +315.0,2025-09-26T01:01:32Z +325.0,2025-09-26T01:08:39Z +335.0,2025-09-26T01:15:46Z +345.0,2025-09-26T01:23:54Z +355.0,2025-09-26T01:32:02Z +365.0,2025-09-26T01:40:10Z +375.0,2025-09-26T01:48:18Z +385.0,2025-09-26T01:56:26Z +395.0,2025-09-26T02:03:33Z +405.0,2025-09-26T02:10:40Z +415.0,2025-09-26T02:18:48Z +425.0,2025-09-26T02:26:56Z +435.0,2025-09-26T02:35:04Z +445.0,2025-09-26T02:43:11Z +455.0,2025-09-26T02:51:19Z +465.0,2025-09-26T03:01:29Z +475.0,2025-09-26T03:12:39Z +485.0,2025-09-26T03:21:48Z +495.0,2025-09-26T03:30:57Z +505.0,2025-09-26T03:40:06Z +515.0,2025-09-26T03:48:14Z +525.0,2025-09-26T03:56:22Z +535.0,2025-09-26T04:04:30Z +545.0,2025-09-26T04:13:39Z +555.0,2025-09-26T04:22:48Z +565.0,2025-09-26T04:30:56Z +575.0,2025-09-26T04:40:05Z +585.0,2025-09-26T04:49:14Z +595.0,2025-09-26T04:58:23Z +605.0,2025-09-26T05:07:32Z +615.0,2025-09-26T05:16:41Z +625.0,2025-09-26T05:25:50Z +635.0,2025-09-26T05:34:59Z +645.0,2025-09-26T05:45:09Z +655.0,2025-09-26T05:54:18Z +665.0,2025-09-26T06:05:29Z +675.0,2025-09-26T06:17:40Z +685.0,2025-09-26T06:27:50Z +695.0,2025-09-26T06:36:59Z +705.0,2025-09-26T06:46:08Z +715.0,2025-09-26T06:56:18Z +725.0,2025-09-26T07:06:28Z +735.0,2025-09-26T07:16:38Z +745.0,2025-09-26T07:26:48Z +755.0,2025-09-26T07:36:58Z +765.0,2025-09-26T07:47:08Z +775.0,2025-09-26T07:57:18Z +785.0,2025-09-26T08:07:28Z +795.0,2025-09-26T08:17:38Z +805.0,2025-09-26T08:27:48Z +815.0,2025-09-26T08:37:58Z +825.0,2025-09-26T08:48:07Z +835.0,2025-09-26T08:58:17Z +845.0,2025-09-26T09:08:27Z +855.0,2025-09-26T09:19:38Z +865.0,2025-09-26T09:32:51Z +875.0,2025-09-26T09:46:04Z +885.0,2025-09-26T09:57:15Z +895.0,2025-09-26T10:08:26Z +905.0,2025-09-26T10:19:37Z +915.0,2025-09-26T10:30:48Z +925.0,2025-09-26T10:41:59Z +935.0,2025-09-26T10:53:10Z +945.0,2025-09-26T11:05:22Z +955.0,2025-09-26T11:16:33Z +965.0,2025-09-26T11:27:44Z +975.0,2025-09-26T11:38:55Z +985.0,2025-09-26T11:50:06Z +995.0,2025-09-26T12:02:18Z +1005.0,2025-09-26T12:13:29Z +1015.0,2025-09-26T12:24:40Z +1025.0,2025-09-26T12:36:52Z +1035.0,2025-09-26T12:48:02Z +1045.0,2025-09-26T12:59:13Z +1055.0,2025-09-26T13:11:25Z +1065.0,2025-09-26T13:23:37Z +1075.0,2025-09-26T13:37:50Z +1085.0,2025-09-26T13:51:03Z +1095.0,2025-09-26T14:02:14Z +NaN,2025-09-26T14:14:26Z +NaN,2025-09-26T14:27:39Z +NaN,2025-09-26T14:40:52Z +NaN,2025-09-26T14:53:04Z +NaN,2025-09-26T15:04:15Z +NaN,2025-09-26T15:11:22Z +NaN,2025-09-26T15:18:29Z +NaN,2025-09-26T15:38:53Z +NaN,2025-09-26T15:53:57Z +NaN,2025-09-26T16:06:09Z +NaN,2025-09-26T16:18:21Z +NaN,2025-09-26T16:30:33Z +NaN,2025-09-26T16:42:45Z +NaN,2025-09-26T16:55:58Z +NaN,2025-09-26T17:09:11Z +NaN,2025-09-26T17:21:22Z +NaN,2025-09-26T17:34:35Z +NaN,2025-09-26T18:05:50Z +NaN,2025-09-26T18:20:04Z +NaN,2025-09-26T18:33:17Z +NaN,2025-09-26T18:46:30Z +NaN,2025-09-26T18:59:43Z +NaN,2025-09-26T19:12:56Z +NaN,2025-09-26T19:26:09Z +NaN,2025-09-26T19:39:22Z +NaN,2025-09-26T19:52:35Z +NaN,2025-09-26T20:08:51Z +NaN,2025-09-26T20:26:09Z +NaN,2025-09-26T20:41:24Z +NaN,2025-09-26T20:56:39Z +NaN,2025-09-26T21:12:55Z +NaN,2025-09-26T21:29:10Z +NaN,2025-09-26T21:45:26Z +NaN,2025-09-26T22:02:42Z +NaN,2025-09-26T22:21:00Z +NaN,2025-09-26T22:39:18Z +NaN,2025-09-26T22:57:36Z +NaN,2025-09-26T23:17:56Z +NaN,2025-09-26T23:38:16Z +NaN,2025-09-26T23:58:35Z +NaN,2025-09-27T00:20:57Z +NaN,2025-09-27T00:44:20Z +NaN,2025-09-27T01:07:43Z +NaN,2025-09-27T01:32:07Z +NaN,2025-09-27T01:59:34Z +NaN,2025-09-27T02:29:03Z +NaN,2025-09-27T03:00:34Z +NaN,2025-09-27T03:35:11Z +NaN,2025-09-27T04:11:46Z +NaN,2025-09-27T04:51:25Z +NaN,2025-09-27T05:35:08Z +NaN,2025-09-27T06:10:43Z +NaN,2025-09-27T06:37:09Z +NaN,2025-09-27T07:31:02Z +NaN,2025-09-27T08:51:21Z +NaN,2025-09-27T10:10:38Z +NaN,2025-09-27T11:30:57Z +NaN,2025-09-27T12:21:46Z +NaN,2025-09-27T12:40:04Z +NaN,2025-09-27T13:11:35Z +NaN,2025-09-27T13:57:20Z +NaN,2025-09-27T15:00:21Z +NaN,2025-09-27T16:19:39Z +NaN,2025-09-27T17:37:56Z +NaN,2025-09-27T18:55:12Z +NaN,2025-09-27T20:12:27Z +NaN,2025-09-27T21:31:44Z +NaN,2025-09-27T23:10:15Z +NaN,2025-09-28T00:32:09Z +NaN,2025-09-28T01:52:27Z +NaN,2025-09-28T03:15:49Z +NaN,2025-09-28T04:40:12Z +NaN,2025-09-28T06:07:38Z +NaN,2025-09-28T07:45:19Z +NaN,2025-09-28T09:14:57Z +NaN,2025-09-28T10:44:25Z +NaN,2025-09-28T12:18:58Z +NaN,2025-09-28T13:55:33Z +NaN,2025-09-28T15:35:11Z +NaN,2025-09-28T17:27:46Z +NaN,2025-09-28T19:12:37Z +NaN,2025-09-28T20:56:19Z +NaN,2025-09-28T22:41:02Z +NaN,2025-09-29T00:27:47Z +NaN,2025-09-29T02:15:33Z +NaN,2025-09-29T04:11:15Z +NaN,2025-09-29T05:57:12Z +NaN,2025-09-29T07:38:52Z +NaN,2025-09-29T09:20:32Z +NaN,2025-09-29T11:01:11Z +NaN,2025-09-29T12:43:51Z +NaN,2025-09-29T14:35:34Z +NaN,2025-09-29T16:18:24Z +NaN,2025-09-29T17:58:01Z +NaN,2025-09-29T19:37:39Z +NaN,2025-09-29T21:20:20Z +NaN,2025-09-29T23:05:03Z +NaN,2025-09-30T00:58:55Z +NaN,2025-09-30T02:42:37Z +NaN,2025-09-30T04:22:15Z +NaN,2025-09-30T06:01:53Z +NaN,2025-09-30T07:43:33Z +NaN,2025-09-30T09:27:15Z +NaN,2025-09-30T11:24:54Z +NaN,2025-09-30T13:05:56Z +NaN,2025-09-30T14:51:17Z +NaN,2025-09-30T16:31:37Z +NaN,2025-09-30T18:11:57Z +NaN,2025-09-30T19:57:17Z +NaN,2025-09-30T21:49:05Z +NaN,2025-09-30T23:29:43Z +NaN,2025-10-01T01:10:03Z +NaN,2025-10-01T02:55:24Z +NaN,2025-10-01T04:35:44Z +NaN,2025-10-01T06:21:05Z +NaN,2025-10-01T08:11:29Z +NaN,2025-10-01T09:56:50Z +NaN,2025-10-01T11:37:10Z +NaN,2025-10-01T13:17:30Z +NaN,2025-10-01T15:07:57Z +NaN,2025-10-01T16:58:50Z +NaN,2025-10-01T18:49:10Z +NaN,2025-10-01T20:34:31Z +NaN,2025-10-01T22:14:51Z +NaN,2025-10-02T00:00:12Z +NaN,2025-10-02T01:45:33Z +NaN,2025-10-02T03:30:54Z +NaN,2025-10-02T05:28:23Z +NaN,2025-10-02T07:14:04Z +NaN,2025-10-02T08:54:24Z +NaN,2025-10-02T10:39:45Z +NaN,2025-10-02T12:25:06Z +NaN,2025-10-02T14:10:27Z +NaN,2025-10-02T15:55:48Z +NaN,2025-10-02T17:36:08Z +NaN,2025-10-02T19:21:29Z +NaN,2025-10-02T21:01:49Z +NaN,2025-10-02T22:42:09Z +NaN,2025-10-03T00:27:30Z +NaN,2025-10-03T02:18:45Z +NaN,2025-10-03T04:04:22Z +NaN,2025-10-03T05:49:43Z +NaN,2025-10-03T07:35:04Z +NaN,2025-10-03T09:15:24Z +NaN,2025-10-03T11:00:45Z +NaN,2025-10-03T12:54:57Z +NaN,2025-10-03T14:40:41Z +NaN,2025-10-03T16:21:01Z +NaN,2025-10-03T18:01:21Z +NaN,2025-10-03T19:46:42Z +NaN,2025-10-03T21:32:03Z +NaN,2025-10-03T23:17:24Z +NaN,2025-10-04T01:02:45Z +NaN,2025-10-04T02:43:05Z +NaN,2025-10-04T04:23:25Z +NaN,2025-10-04T06:12:39Z +NaN,2025-10-04T08:03:24Z +NaN,2025-10-04T09:50:24Z +NaN,2025-10-04T11:35:50Z +NaN,2025-10-04T13:21:11Z +NaN,2025-10-04T15:01:31Z +NaN,2025-10-04T16:46:52Z +NaN,2025-10-04T18:37:14Z +NaN,2025-10-04T20:33:34Z +NaN,2025-10-04T22:19:12Z +NaN,2025-10-05T00:04:33Z +NaN,2025-10-05T01:49:54Z +NaN,2025-10-05T03:30:14Z +NaN,2025-10-05T05:15:35Z +NaN,2025-10-05T07:07:17Z +NaN,2025-10-05T08:52:58Z +NaN,2025-10-05T10:38:19Z +NaN,2025-10-05T12:18:39Z +NaN,2025-10-05T14:04:00Z +NaN,2025-10-05T15:49:21Z +NaN,2025-10-05T17:34:41Z +NaN,2025-10-05T19:25:03Z +NaN,2025-10-05T21:10:24Z +NaN,2025-10-05T22:50:44Z +NaN,2025-10-06T00:36:05Z +NaN,2025-10-06T02:26:27Z +NaN,2025-10-06T04:22:40Z +NaN,2025-10-06T06:08:18Z +NaN,2025-10-06T07:53:39Z +NaN,2025-10-06T09:39:00Z +NaN,2025-10-06T11:24:21Z +NaN,2025-10-06T13:14:43Z +NaN,2025-10-06T15:07:45Z +NaN,2025-10-06T16:48:29Z +NaN,2025-10-06T18:28:49Z +NaN,2025-10-06T20:09:09Z +NaN,2025-10-06T21:54:30Z +NaN,2025-10-06T23:39:51Z +NaN,2025-10-07T01:28:54Z +NaN,2025-10-07T03:09:24Z +NaN,2025-10-07T04:49:44Z +NaN,2025-10-07T06:35:05Z +NaN,2025-10-07T08:15:25Z +NaN,2025-10-07T09:55:45Z +NaN,2025-10-07T11:47:51Z +NaN,2025-10-07T13:33:52Z +NaN,2025-10-07T15:19:13Z +NaN,2025-10-07T17:04:34Z +NaN,2025-10-07T18:49:55Z +NaN,2025-10-07T20:40:17Z +NaN,2025-10-07T22:29:42Z +NaN,2025-10-08T00:15:16Z +NaN,2025-10-08T02:00:37Z +NaN,2025-10-08T03:40:57Z +NaN,2025-10-08T05:26:17Z +NaN,2025-10-08T07:16:39Z +NaN,2025-10-08T09:07:01Z +NaN,2025-10-08T10:52:22Z +NaN,2025-10-08T12:32:42Z +NaN,2025-10-08T14:18:03Z +NaN,2025-10-08T16:03:24Z +NaN,2025-10-08T17:48:45Z +NaN,2025-10-08T19:42:10Z +NaN,2025-10-08T21:27:56Z +NaN,2025-10-08T23:13:17Z +NaN,2025-10-09T00:53:37Z +NaN,2025-10-09T02:38:58Z +NaN,2025-10-09T04:29:20Z +NaN,2025-10-09T06:18:03Z +NaN,2025-10-09T07:58:34Z +NaN,2025-10-09T09:43:55Z +NaN,2025-10-09T11:29:16Z +NaN,2025-10-09T13:09:36Z +NaN,2025-10-09T14:54:57Z +NaN,2025-10-09T16:48:58Z +NaN,2025-10-09T18:29:28Z +NaN,2025-10-09T20:09:48Z +NaN,2025-10-09T21:55:09Z +NaN,2025-10-09T23:35:29Z +NaN,2025-10-10T01:15:49Z +NaN,2025-10-10T03:08:06Z +NaN,2025-10-10T04:54:09Z +NaN,2025-10-10T06:34:29Z +NaN,2025-10-10T08:14:49Z +NaN,2025-10-10T10:00:10Z +NaN,2025-10-10T11:45:31Z +NaN,2025-10-10T13:34:50Z +NaN,2025-10-10T15:20:35Z +NaN,2025-10-10T17:00:55Z +NaN,2025-10-10T18:41:15Z +NaN,2025-10-10T20:26:36Z +NaN,2025-10-10T22:11:57Z +NaN,2025-10-10T23:57:27Z +NaN,2025-10-11T01:43:04Z +NaN,2025-10-11T03:28:25Z +NaN,2025-10-11T05:13:46Z +NaN,2025-10-11T06:59:07Z +NaN,2025-10-11T08:44:28Z +NaN,2025-10-11T10:34:51Z +NaN,2025-10-11T12:20:12Z +NaN,2025-10-11T14:05:33Z +NaN,2025-10-11T15:45:53Z +NaN,2025-10-11T17:26:13Z +NaN,2025-10-11T19:21:36Z +NaN,2025-10-11T21:11:58Z +NaN,2025-10-11T22:52:18Z +NaN,2025-10-12T00:37:39Z +NaN,2025-10-12T02:23:00Z +NaN,2025-10-12T04:03:20Z +NaN,2025-10-12T05:48:41Z +NaN,2025-10-12T07:39:02Z +NaN,2025-10-12T09:14:21Z +NaN,2025-10-12T10:54:15Z +NaN,2025-10-12T12:45:04Z +NaN,2025-10-12T14:30:25Z +NaN,2025-10-12T16:15:46Z +NaN,2025-10-12T18:12:46Z +NaN,2025-10-12T19:58:46Z +NaN,2025-10-12T21:44:07Z +NaN,2025-10-12T23:29:28Z +NaN,2025-10-13T01:14:49Z +NaN,2025-10-13T03:00:10Z +NaN,2025-10-13T04:51:39Z +NaN,2025-10-13T06:37:37Z +NaN,2025-10-13T08:17:57Z +NaN,2025-10-13T09:58:17Z +NaN,2025-10-13T11:38:37Z +NaN,2025-10-13T13:23:58Z +NaN,2025-10-13T15:17:22Z +NaN,2025-10-13T17:03:01Z +NaN,2025-10-13T18:43:21Z +NaN,2025-10-13T20:23:41Z +NaN,2025-10-13T22:04:01Z +NaN,2025-10-13T23:49:22Z +NaN,2025-10-14T01:39:43Z +NaN,2025-10-14T03:25:04Z +NaN,2025-10-14T05:05:24Z +NaN,2025-10-14T06:45:44Z +NaN,2025-10-14T08:26:04Z +NaN,2025-10-14T10:11:25Z +NaN,2025-10-14T12:03:13Z +NaN,2025-10-14T13:43:53Z +NaN,2025-10-14T15:29:14Z +NaN,2025-10-14T17:14:35Z +NaN,2025-10-14T18:54:55Z +NaN,2025-10-14T20:40:16Z +NaN,2025-10-14T22:25:38Z +NaN,2025-10-15T00:05:58Z +NaN,2025-10-15T01:51:19Z +NaN,2025-10-15T03:36:40Z +NaN,2025-10-15T05:17:00Z +NaN,2025-10-15T07:02:21Z +NaN,2025-10-15T08:53:32Z +NaN,2025-10-15T10:34:10Z +NaN,2025-10-15T12:19:31Z +NaN,2025-10-15T14:04:52Z +NaN,2025-10-15T15:50:13Z +NaN,2025-10-15T17:35:34Z +NaN,2025-10-15T19:25:40Z +NaN,2025-10-15T21:06:28Z +NaN,2025-10-15T22:46:48Z +NaN,2025-10-16T00:32:09Z +NaN,2025-10-16T02:12:29Z +NaN,2025-10-16T03:57:50Z +NaN,2025-10-16T05:48:12Z +NaN,2025-10-16T07:33:33Z +NaN,2025-10-16T09:13:53Z +NaN,2025-10-16T10:54:13Z +NaN,2025-10-16T12:39:34Z +NaN,2025-10-16T14:24:55Z +NaN,2025-10-16T16:16:02Z +NaN,2025-10-16T18:01:58Z +NaN,2025-10-16T19:42:18Z +NaN,2025-10-16T21:22:38Z +NaN,2025-10-16T23:02:58Z +NaN,2025-10-17T00:48:19Z +NaN,2025-10-17T02:38:42Z +NaN,2025-10-17T04:24:03Z +NaN,2025-10-17T06:04:23Z +NaN,2025-10-17T07:44:43Z +NaN,2025-10-17T09:25:03Z +NaN,2025-10-17T11:05:23Z +NaN,2025-10-17T12:58:59Z +NaN,2025-10-17T14:45:09Z +NaN,2025-10-17T16:30:30Z +NaN,2025-10-17T18:15:51Z +NaN,2025-10-17T19:56:11Z +NaN,2025-10-17T21:41:32Z +NaN,2025-10-17T23:31:55Z +NaN,2025-10-18T01:17:16Z +NaN,2025-10-18T02:57:36Z +NaN,2025-10-18T04:37:56Z +NaN,2025-10-18T06:23:17Z +NaN,2025-10-18T08:08:38Z +NaN,2025-10-18T10:01:52Z +NaN,2025-10-18T11:42:35Z +NaN,2025-10-18T13:22:55Z +NaN,2025-10-18T15:08:16Z +NaN,2025-10-18T16:48:36Z +NaN,2025-10-18T18:28:56Z +NaN,2025-10-18T20:21:37Z +NaN,2025-10-18T22:07:42Z +NaN,2025-10-18T23:48:02Z +NaN,2025-10-19T01:28:22Z +NaN,2025-10-19T03:13:43Z +NaN,2025-10-19T04:59:04Z +NaN,2025-10-19T06:48:42Z +NaN,2025-10-19T08:34:15Z +NaN,2025-10-19T10:14:35Z +NaN,2025-10-19T11:54:55Z +NaN,2025-10-19T13:35:15Z +NaN,2025-10-19T15:15:35Z +NaN,2025-10-19T17:07:57Z +NaN,2025-10-19T18:54:00Z +NaN,2025-10-19T20:34:20Z +NaN,2025-10-19T22:14:40Z +NaN,2025-10-19T23:55:00Z +NaN,2025-10-20T01:40:21Z +NaN,2025-10-20T03:28:40Z +NaN,2025-10-20T05:09:09Z +NaN,2025-10-20T06:54:30Z +NaN,2025-10-20T08:39:51Z +NaN,2025-10-20T10:20:11Z +NaN,2025-10-20T12:00:31Z +NaN,2025-10-20T13:50:07Z +NaN,2025-10-20T15:35:53Z +NaN,2025-10-20T17:21:14Z +NaN,2025-10-20T19:01:34Z +NaN,2025-10-20T20:41:54Z +NaN,2025-10-20T22:27:15Z +NaN,2025-10-21T00:15:21Z +NaN,2025-10-21T01:56:06Z +NaN,2025-10-21T03:36:26Z +NaN,2025-10-21T05:16:46Z +NaN,2025-10-21T07:02:07Z +NaN,2025-10-21T08:47:28Z +NaN,2025-10-21T10:38:58Z +NaN,2025-10-21T12:19:53Z +NaN,2025-10-21T14:05:14Z +NaN,2025-10-21T15:50:35Z +NaN,2025-10-21T17:30:55Z +NaN,2025-10-21T19:11:15Z +NaN,2025-10-21T20:59:15Z +NaN,2025-10-21T22:44:51Z +NaN,2025-10-22T00:25:11Z +NaN,2025-10-22T02:10:32Z +NaN,2025-10-22T03:55:53Z +NaN,2025-10-22T05:41:14Z +NaN,2025-10-22T07:36:01Z +NaN,2025-10-22T09:21:49Z +NaN,2025-10-22T11:07:10Z +NaN,2025-10-22T12:52:31Z +NaN,2025-10-22T14:37:52Z +NaN,2025-10-22T16:28:14Z +NaN,2025-10-22T18:19:36Z +NaN,2025-10-22T20:04:57Z +NaN,2025-10-22T21:50:18Z +NaN,2025-10-22T23:35:39Z +NaN,2025-10-23T01:21:00Z +NaN,2025-10-23T03:01:20Z +NaN,2025-10-23T04:54:49Z +NaN,2025-10-23T06:46:00Z +NaN,2025-10-23T08:31:21Z +NaN,2025-10-23T10:11:41Z +NaN,2025-10-23T11:57:02Z +NaN,2025-10-23T13:42:23Z +NaN,2025-10-23T15:34:18Z +NaN,2025-10-23T17:20:18Z +NaN,2025-10-23T19:00:38Z +NaN,2025-10-23T20:40:58Z +NaN,2025-10-23T22:26:19Z +NaN,2025-10-24T00:11:40Z +NaN,2025-10-24T01:57:01Z +NaN,2025-10-24T03:42:22Z +NaN,2025-10-24T05:27:43Z +NaN,2025-10-24T07:08:03Z +NaN,2025-10-24T08:48:23Z +NaN,2025-10-24T10:33:44Z +NaN,2025-10-24T12:16:09Z +NaN,2025-10-24T14:01:37Z +NaN,2025-10-24T15:51:59Z +NaN,2025-10-24T17:37:20Z +NaN,2025-10-24T19:22:41Z +NaN,2025-10-24T21:08:02Z +NaN,2025-10-24T23:00:16Z +NaN,2025-10-25T00:46:18Z +NaN,2025-10-25T02:31:39Z +NaN,2025-10-25T04:17:00Z +NaN,2025-10-25T05:57:20Z +NaN,2025-10-25T07:42:41Z +NaN,2025-10-25T09:37:57Z +NaN,2025-10-25T11:23:32Z +NaN,2025-10-25T13:03:52Z +NaN,2025-10-25T14:49:13Z +NaN,2025-10-25T16:34:34Z +NaN,2025-10-25T18:19:55Z +NaN,2025-10-25T20:16:02Z +NaN,2025-10-25T22:01:39Z +NaN,2025-10-25T23:41:59Z +NaN,2025-10-26T01:27:20Z +NaN,2025-10-26T03:17:42Z +NaN,2025-10-26T05:08:04Z +NaN,2025-10-26T06:58:26Z +NaN,2025-10-26T08:43:47Z +NaN,2025-10-26T10:29:08Z +NaN,2025-10-26T12:14:29Z +NaN,2025-10-26T13:54:49Z +NaN,2025-10-26T15:40:10Z +NaN,2025-10-26T17:32:10Z +NaN,2025-10-26T19:17:52Z +NaN,2025-10-26T21:08:14Z +NaN,2025-10-26T22:53:35Z +NaN,2025-10-27T00:33:55Z +NaN,2025-10-27T02:19:16Z +NaN,2025-10-27T04:13:18Z +NaN,2025-10-27T05:59:01Z +NaN,2025-10-27T07:44:22Z +NaN,2025-10-27T09:29:43Z +NaN,2025-10-27T11:15:04Z +NaN,2025-10-27T13:05:26Z +NaN,2025-10-27T15:01:03Z +NaN,2025-10-27T16:46:39Z +NaN,2025-10-27T18:32:00Z +NaN,2025-10-27T20:17:21Z +NaN,2025-10-27T22:02:42Z +NaN,2025-10-27T23:53:04Z +NaN,2025-10-28T01:56:43Z +NaN,2025-10-28T03:42:04Z +NaN,2025-10-28T05:27:25Z +NaN,2025-10-28T07:12:46Z +NaN,2025-10-28T08:58:07Z +NaN,2025-10-28T10:48:29Z +NaN,2025-10-28T12:37:06Z +NaN,2025-10-28T14:22:37Z +NaN,2025-10-28T16:07:58Z +NaN,2025-10-28T17:48:18Z +NaN,2025-10-28T19:33:39Z +NaN,2025-10-28T21:19:00Z +NaN,2025-10-28T23:08:12Z +NaN,2025-10-29T00:53:56Z +NaN,2025-10-29T02:39:17Z +NaN,2025-10-29T04:24:38Z +NaN,2025-10-29T06:04:58Z +NaN,2025-10-29T07:50:19Z +NaN,2025-10-29T09:40:40Z +NaN,2025-10-29T11:26:01Z +NaN,2025-10-29T13:11:22Z +NaN,2025-10-29T14:56:43Z +NaN,2025-10-29T16:37:03Z +NaN,2025-10-29T18:17:23Z +NaN,2025-10-29T20:09:09Z +NaN,2025-10-29T21:55:08Z +NaN,2025-10-29T23:40:29Z +NaN,2025-10-30T01:25:50Z +NaN,2025-10-30T03:06:10Z +NaN,2025-10-30T04:51:31Z +NaN,2025-10-30T06:45:06Z +NaN,2025-10-30T08:25:35Z +NaN,2025-10-30T10:05:55Z +NaN,2025-10-30T11:51:16Z +NaN,2025-10-30T13:31:36Z +NaN,2025-10-30T15:16:57Z +NaN,2025-10-30T17:10:36Z +NaN,2025-10-30T18:51:05Z +NaN,2025-10-30T20:31:25Z +NaN,2025-10-30T22:16:46Z +NaN,2025-10-30T23:57:06Z +NaN,2025-10-31T01:37:26Z +NaN,2025-10-31T03:24:47Z +NaN,2025-10-31T05:10:20Z +NaN,2025-10-31T06:50:40Z +NaN,2025-10-31T08:31:00Z +NaN,2025-10-31T10:11:20Z +NaN,2025-10-31T11:56:41Z +NaN,2025-10-31T13:42:01Z +NaN,2025-10-31T15:22:21Z +NaN,2025-10-31T17:02:41Z +NaN,2025-10-31T18:43:01Z +NaN,2025-10-31T20:23:21Z +NaN,2025-10-31T22:03:41Z +NaN,2025-10-31T23:49:03Z +NaN,2025-11-01T01:34:24Z +NaN,2025-11-01T03:14:44Z +NaN,2025-11-01T04:55:04Z +NaN,2025-11-01T05:50:15Z +NaN,2025-11-01T06:00:17Z +NaN,2025-11-01T07:03:15Z +NaN,2025-11-01T08:53:45Z +NaN,2025-11-01T10:44:07Z +NaN,2025-11-01T12:29:28Z +NaN,2025-11-01T14:14:49Z +NaN,2025-11-01T16:00:10Z +NaN,2025-11-01T17:45:31Z +NaN,2025-11-01T19:35:53Z +NaN,2025-11-01T21:26:16Z +NaN,2025-11-01T23:06:36Z +NaN,2025-11-02T00:46:53Z +NaN,2025-11-02T02:32:14Z +NaN,2025-11-02T04:12:34Z +NaN,2025-11-02T05:57:55Z +NaN,2025-11-02T07:48:17Z +NaN,2025-11-02T09:38:38Z +NaN,2025-11-02T11:23:59Z +NaN,2025-11-02T13:04:19Z +NaN,2025-11-02T14:49:40Z +NaN,2025-11-02T16:30:00Z +NaN,2025-11-02T18:12:29Z +NaN,2025-11-02T19:52:55Z +NaN,2025-11-02T21:33:15Z +NaN,2025-11-02T23:13:35Z +NaN,2025-11-03T00:53:55Z +NaN,2025-11-03T02:39:16Z +NaN,2025-11-03T04:25:59Z +NaN,2025-11-03T06:06:39Z +NaN,2025-11-03T07:52:00Z +NaN,2025-11-03T09:32:20Z +NaN,2025-11-03T11:12:40Z +NaN,2025-11-03T12:58:01Z +NaN,2025-11-03T14:47:33Z +NaN,2025-11-03T16:33:19Z +NaN,2025-11-03T18:13:39Z +NaN,2025-11-03T19:53:59Z +NaN,2025-11-03T21:39:20Z +NaN,2025-11-03T23:24:41Z +NaN,2025-11-04T01:10:02Z +NaN,2025-11-04T02:55:23Z +NaN,2025-11-04T04:35:43Z +NaN,2025-11-04T06:16:03Z +NaN,2025-11-04T08:01:24Z +NaN,2025-11-04T09:46:45Z +NaN,2025-11-04T11:33:37Z +NaN,2025-11-04T13:14:18Z +NaN,2025-11-04T14:59:39Z +NaN,2025-11-04T16:39:59Z +NaN,2025-11-04T18:20:19Z +NaN,2025-11-04T20:10:41Z +NaN,2025-11-04T22:04:38Z +NaN,2025-11-04T23:50:09Z +NaN,2025-11-05T01:35:30Z +NaN,2025-11-05T03:20:51Z +NaN,2025-11-05T05:06:12Z +NaN,2025-11-05T06:51:33Z +NaN,2025-11-05T08:41:50Z +NaN,2025-11-05T10:32:42Z +NaN,2025-11-05T12:23:04Z +NaN,2025-11-05T14:08:25Z +NaN,2025-11-05T15:48:45Z +NaN,2025-11-05T17:34:06Z +NaN,2025-11-05T19:27:55Z +NaN,2025-11-05T21:13:36Z +NaN,2025-11-05T22:58:57Z +NaN,2025-11-06T00:44:18Z +NaN,2025-11-06T02:29:39Z +NaN,2025-11-06T04:15:00Z +NaN,2025-11-06T06:06:08Z +NaN,2025-11-06T07:57:05Z +NaN,2025-11-06T09:42:26Z +NaN,2025-11-06T11:22:46Z +NaN,2025-11-06T13:08:07Z +NaN,2025-11-06T14:58:29Z +NaN,2025-11-06T16:49:24Z +NaN,2025-11-06T18:35:03Z +NaN,2025-11-06T20:20:24Z +NaN,2025-11-06T22:00:44Z +NaN,2025-11-06T23:46:05Z +NaN,2025-11-07T01:36:27Z +NaN,2025-11-07T03:25:47Z +NaN,2025-11-07T05:11:21Z +NaN,2025-11-07T06:56:42Z +NaN,2025-11-07T08:37:02Z +NaN,2025-11-07T10:22:23Z +NaN,2025-11-07T12:12:45Z +NaN,2025-11-07T14:01:26Z +NaN,2025-11-07T15:41:57Z +NaN,2025-11-07T17:27:18Z +NaN,2025-11-07T19:12:39Z +NaN,2025-11-07T20:52:59Z +NaN,2025-11-07T22:38:20Z +NaN,2025-11-08T00:28:42Z +NaN,2025-11-08T02:14:03Z +NaN,2025-11-08T03:54:23Z +NaN,2025-11-08T05:34:43Z +NaN,2025-11-08T07:20:04Z +NaN,2025-11-08T09:05:25Z +NaN,2025-11-08T10:52:04Z +NaN,2025-11-08T12:32:44Z +NaN,2025-11-08T14:13:04Z +NaN,2025-11-08T15:53:24Z +NaN,2025-11-08T17:33:44Z +NaN,2025-11-08T19:19:05Z +NaN,2025-11-08T21:07:54Z +NaN,2025-11-08T22:48:25Z +NaN,2025-11-09T00:28:45Z +NaN,2025-11-09T02:09:05Z +NaN,2025-11-09T03:54:26Z +NaN,2025-11-09T05:44:48Z +NaN,2025-11-09T07:40:34Z +NaN,2025-11-09T09:26:10Z +NaN,2025-11-09T11:11:31Z +NaN,2025-11-09T12:56:52Z +NaN,2025-11-09T14:37:12Z +NaN,2025-11-09T16:22:33Z +NaN,2025-11-09T18:15:21Z +NaN,2025-11-09T20:00:57Z +NaN,2025-11-09T21:46:18Z +NaN,2025-11-09T23:31:39Z +NaN,2025-11-10T01:17:00Z +NaN,2025-11-10T03:07:22Z +NaN,2025-11-10T04:57:28Z +NaN,2025-11-10T06:43:04Z +NaN,2025-11-10T08:28:25Z +NaN,2025-11-10T10:13:46Z +NaN,2025-11-10T11:59:07Z +NaN,2025-11-10T13:44:28Z +NaN,2025-11-10T15:36:57Z +NaN,2025-11-10T17:22:31Z +NaN,2025-11-10T19:07:52Z +NaN,2025-11-10T20:53:13Z +NaN,2025-11-10T22:33:33Z +NaN,2025-11-11T00:18:54Z +NaN,2025-11-11T02:07:19Z +NaN,2025-11-11T03:47:49Z +NaN,2025-11-11T05:28:09Z +NaN,2025-11-11T07:13:30Z +NaN,2025-11-11T08:58:51Z +NaN,2025-11-11T10:44:12Z +NaN,2025-11-11T12:33:41Z +NaN,2025-11-11T14:19:15Z +NaN,2025-11-11T16:09:37Z +NaN,2025-11-11T17:54:58Z +NaN,2025-11-11T19:40:19Z +NaN,2025-11-11T21:30:41Z +NaN,2025-11-11T23:20:20Z +NaN,2025-11-12T01:05:54Z +NaN,2025-11-12T02:51:15Z +NaN,2025-11-12T04:36:36Z +NaN,2025-11-12T06:26:58Z +NaN,2025-11-12T08:12:19Z +NaN,2025-11-12T10:01:52Z +NaN,2025-11-12T11:47:38Z +NaN,2025-11-12T13:27:58Z +NaN,2025-11-12T15:13:19Z +NaN,2025-11-12T16:58:40Z +NaN,2025-11-12T18:39:00Z +NaN,2025-11-12T20:31:04Z +NaN,2025-11-12T22:17:05Z +NaN,2025-11-12T23:57:25Z +NaN,2025-11-13T01:37:45Z +NaN,2025-11-13T03:18:05Z +NaN,2025-11-13T05:03:26Z +NaN,2025-11-13T07:00:24Z +NaN,2025-11-13T08:46:04Z +NaN,2025-11-13T10:31:25Z +NaN,2025-11-13T12:16:46Z +NaN,2025-11-13T13:57:06Z +NaN,2025-11-13T15:47:28Z +NaN,2025-11-13T17:37:50Z +NaN,2025-11-13T19:23:11Z +NaN,2025-11-13T21:08:32Z +NaN,2025-11-13T22:53:53Z +NaN,2025-11-14T00:39:14Z +NaN,2025-11-14T02:24:35Z +NaN,2025-11-14T04:15:41Z +NaN,2025-11-14T06:01:04Z +NaN,2025-11-14T07:41:24Z +NaN,2025-11-14T09:26:45Z +NaN,2025-11-14T11:12:06Z +NaN,2025-11-14T12:52:26Z +NaN,2025-11-14T14:43:09Z +NaN,2025-11-14T16:29:02Z +NaN,2025-11-14T18:09:22Z +NaN,2025-11-14T19:49:42Z +NaN,2025-11-14T21:30:02Z +NaN,2025-11-14T23:15:23Z +NaN,2025-11-15T01:10:40Z +NaN,2025-11-15T02:51:14Z +NaN,2025-11-15T04:31:34Z +NaN,2025-11-15T06:16:55Z +NaN,2025-11-15T08:02:16Z +NaN,2025-11-15T09:52:38Z +NaN,2025-11-15T11:41:54Z +NaN,2025-11-15T13:27:27Z +NaN,2025-11-15T15:17:49Z +NaN,2025-11-15T17:03:10Z +NaN,2025-11-15T18:48:31Z +NaN,2025-11-15T20:33:52Z +NaN,2025-11-15T22:21:12Z +NaN,2025-11-16T00:06:55Z +NaN,2025-11-16T01:52:16Z +NaN,2025-11-16T03:32:36Z +NaN,2025-11-16T05:17:57Z +NaN,2025-11-16T07:03:18Z +NaN,2025-11-16T08:52:04Z +NaN,2025-11-16T10:37:45Z +NaN,2025-11-16T12:18:05Z +NaN,2025-11-16T13:58:25Z +NaN,2025-11-16T15:43:46Z +NaN,2025-11-16T17:29:07Z +NaN,2025-11-16T19:15:08Z +NaN,2025-11-16T20:55:46Z +NaN,2025-11-16T22:41:07Z +NaN,2025-11-17T00:26:28Z +NaN,2025-11-17T02:11:49Z +NaN,2025-11-17T04:02:11Z +NaN,2025-11-17T05:50:23Z +NaN,2025-11-17T07:35:53Z +NaN,2025-11-17T09:21:14Z +NaN,2025-11-17T11:06:35Z +NaN,2025-11-17T12:51:56Z +NaN,2025-11-17T14:37:17Z +NaN,2025-11-17T16:25:44Z +NaN,2025-11-17T18:06:14Z +NaN,2025-11-17T19:51:35Z +NaN,2025-11-17T21:36:56Z +NaN,2025-11-17T23:17:16Z +NaN,2025-11-18T00:57:36Z +NaN,2025-11-18T02:51:11Z +NaN,2025-11-18T04:39:35Z +NaN,2025-11-18T06:19:55Z +NaN,2025-11-18T08:00:15Z +NaN,2025-11-18T09:40:35Z +NaN,2025-11-18T11:20:55Z +NaN,2025-11-18T13:12:49Z +NaN,2025-11-18T14:58:29Z +NaN,2025-11-18T16:43:50Z +NaN,2025-11-18T18:29:11Z +NaN,2025-11-18T20:14:32Z +NaN,2025-11-18T21:59:53Z +NaN,2025-11-18T23:51:07Z +NaN,2025-11-19T01:42:04Z +NaN,2025-11-19T03:27:25Z +NaN,2025-11-19T05:12:46Z +NaN,2025-11-19T06:58:07Z +NaN,2025-11-19T08:43:28Z +NaN,2025-11-19T10:33:24Z +NaN,2025-11-19T12:19:00Z +NaN,2025-11-19T14:04:21Z +NaN,2025-11-19T15:49:42Z +NaN,2025-11-19T17:35:03Z +NaN,2025-11-19T19:20:24Z +NaN,2025-11-19T21:14:18Z +NaN,2025-11-19T22:59:49Z +NaN,2025-11-20T00:45:10Z +NaN,2025-11-20T02:30:31Z +NaN,2025-11-20T04:15:52Z +NaN,2025-11-20T06:06:14Z +NaN,2025-11-20T07:51:35Z +NaN,2025-11-20T09:36:56Z +NaN,2025-11-20T11:22:17Z +NaN,2025-11-20T13:07:38Z +NaN,2025-11-20T14:52:59Z +NaN,2025-11-20T16:38:20Z +NaN,2025-11-20T18:33:24Z +NaN,2025-11-20T20:18:58Z +NaN,2025-11-20T22:04:19Z +NaN,2025-11-20T23:49:40Z +NaN,2025-11-21T01:35:01Z +NaN,2025-11-21T03:20:22Z +NaN,2025-11-21T05:10:25Z +NaN,2025-11-21T06:56:14Z +NaN,2025-11-21T08:41:35Z +NaN,2025-11-21T10:31:57Z +NaN,2025-11-21T12:17:18Z +NaN,2025-11-21T14:02:39Z +NaN,2025-11-21T15:53:01Z +NaN,2025-11-21T17:58:26Z +NaN,2025-11-21T20:03:51Z +NaN,2025-11-21T21:54:13Z +NaN,2025-11-21T23:44:35Z +NaN,2025-11-22T01:29:56Z +NaN,2025-11-22T03:22:46Z +NaN,2025-11-22T05:08:28Z +NaN,2025-11-22T06:53:49Z +NaN,2025-11-22T08:39:10Z +NaN,2025-11-22T10:24:31Z +NaN,2025-11-22T12:14:53Z +NaN,2025-11-22T14:03:16Z +NaN,2025-11-22T15:48:47Z +NaN,2025-11-22T17:34:08Z +NaN,2025-11-22T19:19:29Z +NaN,2025-11-22T21:04:50Z +NaN,2025-11-22T22:50:11Z +NaN,2025-11-23T00:40:05Z +NaN,2025-11-23T02:20:39Z +NaN,2025-11-23T04:06:00Z +NaN,2025-11-23T05:51:21Z +NaN,2025-11-23T07:36:42Z +NaN,2025-11-23T09:22:03Z +NaN,2025-11-23T11:07:50Z +NaN,2025-11-23T12:48:28Z +NaN,2025-11-23T14:33:49Z +NaN,2025-11-23T16:14:09Z +NaN,2025-11-23T17:54:29Z +NaN,2025-11-23T19:39:50Z +NaN,2025-11-23T21:24:15Z +NaN,2025-11-23T23:05:02Z +NaN,2025-11-24T00:50:23Z +NaN,2025-11-24T02:35:44Z +NaN,2025-11-24T04:21:05Z +NaN,2025-11-24T06:06:26Z +NaN,2025-11-24T07:57:15Z +NaN,2025-11-24T09:48:10Z +NaN,2025-11-24T11:33:31Z +NaN,2025-11-24T13:18:52Z +NaN,2025-11-24T15:04:13Z +NaN,2025-11-24T16:49:34Z +NaN,2025-11-24T18:39:56Z +NaN,2025-11-24T20:25:17Z +NaN,2025-11-24T22:10:38Z +NaN,2025-11-24T23:50:58Z +NaN,2025-11-25T01:36:34Z +NaN,2025-11-25T03:27:27Z +NaN,2025-11-25T05:17:22Z +NaN,2025-11-25T07:02:57Z +NaN,2025-11-25T08:48:18Z +NaN,2025-11-25T10:28:38Z +NaN,2025-11-25T12:13:59Z +NaN,2025-11-25T13:59:20Z +NaN,2025-11-25T15:50:01Z +NaN,2025-11-25T17:35:54Z +NaN,2025-11-25T19:16:14Z +NaN,2025-11-25T20:56:34Z +NaN,2025-11-25T22:41:55Z +NaN,2025-11-26T00:27:16Z +NaN,2025-11-26T02:19:48Z +NaN,2025-11-26T04:00:28Z +NaN,2025-11-26T05:40:48Z +NaN,2025-11-26T07:26:09Z +NaN,2025-11-26T09:06:29Z +NaN,2025-11-26T10:46:49Z +NaN,2025-11-26T12:37:09Z +NaN,2025-11-26T14:23:00Z +NaN,2025-11-26T16:03:20Z +NaN,2025-11-26T17:43:40Z +NaN,2025-11-26T19:29:01Z +NaN,2025-11-26T21:14:22Z +NaN,2025-11-26T22:59:42Z +NaN,2025-11-27T00:45:03Z +NaN,2025-11-27T02:25:23Z +NaN,2025-11-27T03:20:34Z +NaN,2025-11-27T05:03:20Z +NaN,2025-11-27T06:43:40Z +NaN,2025-11-27T08:24:00Z +NaN,2025-11-27T10:04:20Z +NaN,2025-11-27T11:44:40Z +NaN,2025-11-27T13:25:00Z +NaN,2025-11-27T15:14:38Z +NaN,2025-11-27T17:00:25Z +NaN,2025-11-27T18:40:45Z +NaN,2025-11-27T20:21:05Z +NaN,2025-11-27T22:06:26Z +NaN,2025-11-27T23:54:18Z + """; + Test.ensureEqual(results, expected, "\nresults=\n" + results); + + userDapQuery = + "profile%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,longitude%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,latitude%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,profile_time_start%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,profile_time_end%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D"; + tName = + eddGrid.makeNewFileForDapQuery( + language, + null, + null, + userDapQuery, + EDStatic.config.fullTestCacheDirectory, + eddGrid.className() + "_Data1", + ".csv"); + results = File2.directReadFrom88591File(EDStatic.config.fullTestCacheDirectory + tName); + expected = +""" +depth,time,profile,longitude,latitude,profile_time_start,profile_time_end +m,UTC,,degrees_east,degrees_north,UTC,UTC +5.0,2025-11-26T12:37:09Z,996.0,-126.76124405832194,48.617126481729,2025-11-26T11:39:30Z,2025-11-26T13:30:20Z +5.0,2025-11-26T14:23:00Z,997.0,-126.73713609010197,48.61532125192833,2025-11-26T13:35:21Z,2025-11-26T15:10:40Z +5.0,2025-11-26T16:03:20Z,998.0,-126.71413468758155,48.61353626302052,2025-11-26T15:15:41Z,2025-11-26T16:51:00Z +5.0,2025-11-26T17:43:40Z,999.0,-126.69113328849964,48.61175127437956,2025-11-26T16:56:01Z,2025-11-26T18:31:20Z +5.0,2025-11-26T19:29:01Z,1000.0,-126.66698181946363,48.609877036306536,2025-11-26T18:36:21Z,2025-11-26T20:21:42Z +5.0,2025-11-26T21:14:22Z,1001.0,-126.64283035042763,48.60800279823352,2025-11-26T20:26:43Z,2025-11-26T22:02:02Z +5.0,2025-11-26T22:59:42Z,1002.0,-126.62889599388328,48.59932254885236,2025-11-26T22:07:03Z,2025-11-26T23:52:23Z +5.0,2025-11-27T00:45:03Z,1003.0,-126.62469301071947,48.579976936074694,2025-11-26T23:57:24Z,2025-11-27T01:32:43Z +15.0,2025-11-26T12:37:09Z,NaN,NaN,NaN,, +15.0,2025-11-26T14:23:00Z,NaN,NaN,NaN,, +15.0,2025-11-26T16:03:20Z,NaN,NaN,NaN,, +15.0,2025-11-26T17:43:40Z,NaN,NaN,NaN,, +15.0,2025-11-26T19:29:01Z,NaN,NaN,NaN,, +15.0,2025-11-26T21:14:22Z,NaN,NaN,NaN,, +15.0,2025-11-26T22:59:42Z,NaN,NaN,NaN,, +15.0,2025-11-27T00:45:03Z,NaN,NaN,NaN,, + """; + Test.ensureEqual(results, expected, "\nresults=\n" + results); + + userDapQuery = + "heading%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,pitch%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,roll%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,waypoint_latitude%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,waypoint_longitude%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,conductivity%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,temperature%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,pressure%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,chlorophyll%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,cdom%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,backscatter_700%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,distance_over_ground%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,salinity%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,potential_density%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,density%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,potential_temperature%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,profile_index%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,profile_direction%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,profile%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,longitude%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,latitude%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,profile_time_start%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D,profile_time_end%5B(5.0):1:(15)%5D%5B(2025-11-26T12:37:09Z):1:(2025-11-27T00:45:03Z)%5D"; + tName = + eddGrid.makeNewFileForDapQuery( + language, + null, + null, + userDapQuery, + EDStatic.config.fullTestCacheDirectory, + eddGrid.className() + "_Data1", + ".csv"); + results = File2.directReadFrom88591File(EDStatic.config.fullTestCacheDirectory + tName); + expected = +""" +depth,time,heading,pitch,roll,waypoint_latitude,waypoint_longitude,conductivity,temperature,pressure,chlorophyll,cdom,backscatter_700,distance_over_ground,salinity,potential_density,density,potential_temperature,profile_index,profile_direction,profile,longitude,latitude,profile_time_start,profile_time_end +m,UTC,rad,rad,rad,degrees_north,degrees_east,S m-1,degree_C,dbar,mg m-3,ppb,1,km,1e-3,kg m-3,kg m-3,degree_C,1,1,,degrees_east,degrees_north,UTC,UTC +5.0,2025-11-26T12:37:09Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,996.0,-126.76124405832194,48.617126481729,2025-11-26T11:39:30Z,2025-11-26T13:30:20Z +5.0,2025-11-26T14:23:00Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,997.0,-126.73713609010197,48.61532125192833,2025-11-26T13:35:21Z,2025-11-26T15:10:40Z +5.0,2025-11-26T16:03:20Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,998.0,-126.71413468758155,48.61353626302052,2025-11-26T15:15:41Z,2025-11-26T16:51:00Z +5.0,2025-11-26T17:43:40Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,999.0,-126.69113328849964,48.61175127437956,2025-11-26T16:56:01Z,2025-11-26T18:31:20Z +5.0,2025-11-26T19:29:01Z,0.7824843349114188,-0.045511060029923556,-0.03353268873546507,48.26913768363337,-126.63719280324315,3.65024995803833,11.383600234985352,8.496000170707703,NaN,NaN,NaN,1574.331896898886,32.135017188321804,1024.4827314199144,1024.4105129782542,11.382573428517329,1000.0,1.0,1000.0,-126.66698181946363,48.609877036306536,2025-11-26T18:36:21Z,2025-11-26T20:21:42Z +5.0,2025-11-26T21:14:22Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,1001.0,-126.64283035042763,48.60800279823352,2025-11-26T20:26:43Z,2025-11-26T22:02:02Z +5.0,2025-11-26T22:59:42Z,2.9939294994159567,0.44426693316645177,-0.01065052500923868,48.25221666666666,-126.63588333333333,3.648163398106893,11.3599001566569,2.4715000585032008,0.6179450569207984,2.459700107574463,1.816534157327681E-4,1577.843150566178,32.13771982912523,1024.489030277056,1024.3896966982809,11.359601894937683,1002.0,1.0,1002.0,-126.62889599388328,48.59932254885236,2025-11-26T22:07:03Z,2025-11-26T23:52:23Z +5.0,2025-11-27T00:45:03Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,1003.0,-126.62469301071947,48.579976936074694,2025-11-26T23:57:24Z,2025-11-27T01:32:43Z +15.0,2025-11-26T12:37:09Z,0.9603844799067527,0.438414221815016,-0.003645957758887732,48.42395495376065,-126.64917367632837,3.642519950866699,11.294099807739258,18.701000213623047,NaN,NaN,NaN,1567.2671751687158,32.13294125232407,1024.4972364754071,1024.4706846955266,11.291850878382617,996.0,1.0,NaN,NaN,NaN,, +15.0,2025-11-26T14:23:00Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,, +15.0,2025-11-26T16:03:20Z,0.781979881187501,0.4088207352784031,-0.01950625590165061,48.344619668705086,-126.64303414176192,3.6494200229644775,11.3681001663208,14.84570026397705,NaN,NaN,NaN,1570.8415971153856,32.13773718463135,1024.487709207802,1024.4439194820052,11.36630703947057,998.0,1.0,NaN,NaN,NaN,, +15.0,2025-11-26T17:43:40Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,, +15.0,2025-11-26T19:29:01Z,0.7847676959938636,0.10084423709701448,-0.031491908194296606,48.269751358308746,-126.63724029380022,3.6503732999165854,11.381800015767416,16.118300358454388,NaN,NaN,NaN,1574.3035194883382,32.13462148459861,1024.4828675519045,1024.44480520243,11.379851057164053,1000.0,1.0,NaN,NaN,NaN,, +15.0,2025-11-26T21:14:22Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,, +15.0,2025-11-26T22:59:42Z,2.999996276285387,0.35714096960257224,-0.009340467389870538,48.25221666666666,-126.63588333333333,3.6160978343751697,10.909116797977024,13.630049741542383,NaN,NaN,NaN,1577.8583455485164,32.211821323088714,1024.6214871285986,1024.5716915953285,10.907692861939445,1002.0,1.0,NaN,NaN,NaN,, +15.0,2025-11-27T00:45:03Z,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,, + """; + Test.ensureEqual(results, expected, "\nresults=\n" + results); + + eddGrid = (EDDGrid) EDDTestDataset.getbinnedCUGN90(); + + // *** test getting dds for entire dataset + tName = + eddGrid.makeNewFileForDapQuery( + language, + null, + null, + "", + EDStatic.config.fullTestCacheDirectory, + eddGrid.className() + "_BINNED_Entire", + ".dds"); + results = File2.directReadFrom88591File(EDStatic.config.fullTestCacheDirectory + tName); + expected = +""" +Dataset { + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + GRID { + ARRAY: + Float64 time_column[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } time_column; + GRID { + ARRAY: + Int32 mission[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } mission; + GRID { + ARRAY: + Float64 latitude[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } latitude; + GRID { + ARRAY: + Float64 longitude[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } longitude; + GRID { + ARRAY: + Float64 temperature[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } temperature; + GRID { + ARRAY: + Float64 salinity[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } salinity; + GRID { + ARRAY: + Float64 chlorophyll[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } chlorophyll; + GRID { + ARRAY: + Float64 doxy[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } doxy; + GRID { + ARRAY: + Float64 acoustic_backscatter[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } acoustic_backscatter; + GRID { + ARRAY: + Float64 acoustic_backscatter_flag[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } acoustic_backscatter_flag; + GRID { + ARRAY: + Float64 u[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } u; + GRID { + ARRAY: + Float64 v[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } v; + GRID { + ARRAY: + Float64 time_uv[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } time_uv; + GRID { + ARRAY: + Float64 lat_uv[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } lat_uv; + GRID { + ARRAY: + Float64 lon_uv[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } lon_uv; + GRID { + ARRAY: + Float64 u_depth_mean[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } u_depth_mean; + GRID { + ARRAY: + Float64 v_depth_mean[depth = 50][profile = 61305]; + MAPS: + Int32 depth[depth = 50]; + Int32 profile[profile = 61305]; + } v_depth_mean; +} binnedCUGN90; +"""; + ; + Test.ensureEqual(results, expected, "\nresults=\n" + results); + + userDapQuery = "depth%5B(10.0):1:(500.0)%5D,profile%5B(33400):1:(33500)%5D"; + tName = + eddGrid.makeNewFileForDapQuery( + language, + null, + null, + userDapQuery, + EDStatic.config.fullTestCacheDirectory, + eddGrid.className() + "_BINNED_Data1", + ".csv"); + results = File2.directReadFrom88591File(EDStatic.config.fullTestCacheDirectory + tName); + expected = +""" +depth,profile +m, +10,33400 +20,33401 +30,33402 +40,33403 +50,33404 +60,33405 +70,33406 +80,33407 +90,33408 +100,33409 +110,33410 +120,33411 +130,33412 +140,33413 +150,33414 +160,33415 +170,33416 +180,33417 +190,33418 +200,33419 +210,33420 +220,33421 +230,33422 +240,33423 +250,33424 +260,33425 +270,33426 +280,33427 +290,33428 +300,33429 +310,33430 +320,33431 +330,33432 +340,33433 +350,33434 +360,33435 +370,33436 +380,33437 +390,33438 +400,33439 +410,33440 +420,33441 +430,33442 +440,33443 +450,33444 +460,33445 +470,33446 +480,33447 +490,33448 +500,33449 +NaN,33450 +NaN,33451 +NaN,33452 +NaN,33453 +NaN,33454 +NaN,33455 +NaN,33456 +NaN,33457 +NaN,33458 +NaN,33459 +NaN,33460 +NaN,33461 +NaN,33462 +NaN,33463 +NaN,33464 +NaN,33465 +NaN,33466 +NaN,33467 +NaN,33468 +NaN,33469 +NaN,33470 +NaN,33471 +NaN,33472 +NaN,33473 +NaN,33474 +NaN,33475 +NaN,33476 +NaN,33477 +NaN,33478 +NaN,33479 +NaN,33480 +NaN,33481 +NaN,33482 +NaN,33483 +NaN,33484 +NaN,33485 +NaN,33486 +NaN,33487 +NaN,33488 +NaN,33489 +NaN,33490 +NaN,33491 +NaN,33492 +NaN,33493 +NaN,33494 +NaN,33495 +NaN,33496 +NaN,33497 +NaN,33498 +NaN,33499 +NaN,33500 + """; + Test.ensureEqual(results, expected, "\nresults=\n" + results); + + userDapQuery = + "time_column%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,mission%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,latitude%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,longitude%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,time_uv%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,lat_uv%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,lon_uv%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,u_depth_mean%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,v_depth_mean%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D"; + tName = + eddGrid.makeNewFileForDapQuery( + language, + null, + null, + userDapQuery, + EDStatic.config.fullTestCacheDirectory, + eddGrid.className() + "_BINNED_Data1", + ".csv"); + results = File2.directReadFrom88591File(EDStatic.config.fullTestCacheDirectory + tName); + expected = +""" +depth,profile,time_column,mission,latitude,longitude,time_uv,lat_uv,lon_uv,u_depth_mean,v_depth_mean +m,,UTC,,degrees_north,degrees_east,UTC,degrees_north,degrees_east,m s-1,m s-1 +10,33490,2017-05-20T12:15:55Z,43,32.512955000000005,-119.63327,2017-05-20T11:34:40Z,32.5086,-119.63542,-0.03206891941184341,-0.04349959071933791 +10,33491,2017-05-20T15:17:47Z,43,32.527992499999996,-119.61837750000001,2017-05-20T14:34:04Z,32.524175,-119.622625,-0.007037644331198292,-0.044792960561126416 +10,33492,2017-05-20T18:14:50Z,43,32.5444975,-119.60252750000001,2017-05-20T17:31:56Z,32.540065,-119.605975,0.014234868481062661,-0.034139441208194586 +10,33493,2017-05-20T21:08:23Z,43,32.560415,-119.5917725,2017-05-20T20:26:22Z,32.555930000000004,-119.59391500000001,0.006762008855396907,-0.028364576339620654 +10,33494,2017-05-20T23:58:21Z,43,32.5749925,-119.58758,2017-05-20T23:16:57Z,32.571175,-119.58814,-0.06881383716259214,-0.0564056728805038 +10,33495,2017-05-21T02:44:38Z,43,32.58895750000001,-119.57937,2017-05-21T02:04:04Z,32.585185,-119.58197,-0.06117929072555283,-0.027162370246794198 +10,33496,2017-05-21T05:31:32Z,43,32.602945,-119.567525,2017-05-21T04:50:32Z,32.599270000000004,-119.57072,-0.05581133874286994,-0.020192212572642174 +10,33497,2017-05-21T08:08:33Z,43,32.611737500000004,-119.5519875,2017-05-21T07:32:48Z,32.609705000000005,-119.556345,-0.017082248168141946,-0.03481536192460433 +10,33498,2017-05-21T10:56:38Z,43,32.6240325,-119.53391500000001,2017-05-21T10:13:35Z,32.620495,-119.53849,-0.021440157731995712,-0.02985286450122003 +10,33499,2017-05-21T13:45:57Z,43,32.63722,-119.51559750000001,2017-05-21T13:05:27Z,32.63401,-119.520205,-0.03324010208694092,-0.037871540851972335 +10,33500,2017-05-21T16:38:28Z,43,32.650752499999996,-119.4977275,2017-05-21T15:57:32Z,32.647115,-119.502235,-0.03308678551452424,-0.002597188736094276 +20,33490,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33491,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33492,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33493,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33494,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33495,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33496,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33497,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33498,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33499,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN +20,33500,,2147483647,NaN,NaN,,NaN,NaN,NaN,NaN + """; + Test.ensureEqual(results, expected, "\nresults=\n" + results); + + userDapQuery = + "time_column%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,mission%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,latitude%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,longitude%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,temperature%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,salinity%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,chlorophyll%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,doxy%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,acoustic_backscatter%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,acoustic_backscatter_flag%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,u%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,v%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,time_uv%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,lat_uv%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,lon_uv%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,u_depth_mean%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D,v_depth_mean%5B(10.0):1:(20)%5D%5B(33490):1:(33500)%5D"; + tName = + eddGrid.makeNewFileForDapQuery( + language, + null, + null, + userDapQuery, + EDStatic.config.fullTestCacheDirectory, + eddGrid.className() + "_BINNED_Data1", + ".csv"); + results = File2.directReadFrom88591File(EDStatic.config.fullTestCacheDirectory + tName); + expected = +""" +depth,profile,time_column,mission,latitude,longitude,temperature,salinity,chlorophyll,doxy,acoustic_backscatter,acoustic_backscatter_flag,u,v,time_uv,lat_uv,lon_uv,u_depth_mean,v_depth_mean +m,,UTC,,degrees_north,degrees_east,degree_C,1,mg m-3,micromol kg-1,dB,,m s-1,m s-1,UTC,degrees_north,degrees_east,m s-1,m s-1 +10,33490,2017-05-20T12:15:55Z,43,32.512955000000005,-119.63327,14.504818181818179,33.52063636363636,0.7658227922754075,251.89549043987535,76.8958737954893,1.0,0.09833576639254202,-0.019085685218998463,2017-05-20T11:34:40Z,32.5086,-119.63542,-0.03206891941184341,-0.04349959071933791 +10,33491,2017-05-20T15:17:47Z,43,32.527992499999996,-119.61837750000001,14.680800000000001,33.5195,0.696319788878198,253.08949136898485,76.76483739398073,1.0,0.2327242712938018,-0.14141115227865894,2017-05-20T14:34:04Z,32.524175,-119.622625,-0.007037644331198292,-0.044792960561126416 +10,33492,2017-05-20T18:14:50Z,43,32.5444975,-119.60252750000001,14.629333333333332,33.514,0.5872805781235153,257.4754860971322,78.287638459482,1.0,0.24257882900701663,-0.29389332121341316,2017-05-20T17:31:56Z,32.540065,-119.605975,0.014234868481062661,-0.034139441208194586 +10,33493,2017-05-20T21:08:23Z,43,32.560415,-119.5917725,14.859888888888893,33.51322222222222,0.8375252712865331,263.15831667474333,78.62648079786419,1.0,0.04543969325598961,-0.39289428196923093,2017-05-20T20:26:22Z,32.555930000000004,-119.59391500000001,0.006762008855396907,-0.028364576339620654 +10,33494,2017-05-20T23:58:21Z,43,32.5749925,-119.58758,14.779818181818182,33.52977777777778,1.8977830428583473,264.4926607340789,80.71281299006296,1.0,-0.19855806338768162,-0.4869272199133772,2017-05-20T23:16:57Z,32.571175,-119.58814,-0.06881383716259214,-0.0564056728805038 +10,33495,2017-05-21T02:44:38Z,43,32.58895750000001,-119.57937,14.550833333333335,33.54116666666667,1.8240059924386556,260.81182324686205,NaN,1.0,-0.14242431939220374,-0.2682413700456722,2017-05-21T02:04:04Z,32.585185,-119.58197,-0.06117929072555283,-0.027162370246794198 +10,33496,2017-05-21T05:31:32Z,43,32.602945,-119.567525,14.984,33.51350000000001,0.9378255783631891,254.04729298319995,76.26811867422727,1.0,-0.13789561649770565,-0.12312164526134897,2017-05-21T04:50:32Z,32.599270000000004,-119.57072,-0.05581133874286994,-0.020192212572642174 +10,33497,2017-05-21T08:08:33Z,43,32.611737500000004,-119.5519875,15.237200000000001,33.481700000000004,0.9955832099151116,256.2274094775991,NaN,1.0,-0.062147188226229416,-0.008405503575321743,2017-05-21T07:32:48Z,32.609705000000005,-119.556345,-0.017082248168141946,-0.03481536192460433 +10,33498,2017-05-21T10:56:38Z,43,32.6240325,-119.53391500000001,15.227090909090911,33.4800909090909,0.8178641655129468,252.8151065894969,73.65397318912727,1.0,-0.02594927457642392,0.07571137848676565,2017-05-21T10:13:35Z,32.620495,-119.53849,-0.021440157731995712,-0.02985286450122003 +10,33499,2017-05-21T13:45:57Z,43,32.63722,-119.51559750000001,15.021666666666668,33.510444444444445,0.5617792566666749,250.6972748533616,73.81154349053112,1.0,0.04423309786016795,0.0022151487531942085,2017-05-21T13:05:27Z,32.63401,-119.520205,-0.03324010208694092,-0.037871540851972335 +10,33500,2017-05-21T16:38:28Z,43,32.650752499999996,-119.4977275,14.932750000000002,33.524625,0.36644869805004204,253.80656017330438,73.13030129939803,1.0,0.14989316336902844,-0.002650263139479731,2017-05-21T15:57:32Z,32.647115,-119.502235,-0.03308678551452424,-0.002597188736094276 +20,33490,,2147483647,NaN,NaN,14.050909090909094,33.50845454545455,1.2818367013663166,250.42054768624766,78.04777909024305,1.0,0.11471167059715227,-0.02167542855641772,,NaN,NaN,NaN,NaN +20,33491,,2147483647,NaN,NaN,14.459666666666669,33.519416666666665,0.6404366888781979,254.35485777081135,74.99512161226994,1.0,0.24350961705383117,-0.1335800113430226,,NaN,NaN,NaN,NaN +20,33492,,2147483647,NaN,NaN,14.237416666666668,33.514083333333325,2.236569244790182,257.0073270037834,78.95053075867267,1.0,0.14899835580671217,-0.2607374786980359,,NaN,NaN,NaN,NaN +20,33493,,2147483647,NaN,NaN,14.2429,33.5104,2.7109278046198666,255.4187424721912,78.73496175463215,1.0,0.05064762918486037,-0.3016332597998584,,NaN,NaN,NaN,NaN +20,33494,,2147483647,NaN,NaN,14.039363636363635,33.54490909090909,2.860148133767438,256.7689632332348,80.6729153761968,1.0,-0.181139189161171,-0.3477669998350658,,NaN,NaN,NaN,NaN +20,33495,,2147483647,NaN,NaN,14.512200000000002,33.53900000000001,1.5499171424386557,259.62492689503216,78.21561919122088,1.0,-0.1280558840721935,-0.23721406854742338,,NaN,NaN,NaN,NaN +20,33496,,2147483647,NaN,NaN,14.9535,33.5133,0.8630655783631891,253.60135013401091,77.50658098239707,1.0,-0.18397172246594914,-0.10971218143833489,,NaN,NaN,NaN,NaN +20,33497,,2147483647,NaN,NaN,14.3847,33.4862,1.1043590099151117,249.05357470067557,76.91097396301693,1.0,-0.03166368941611913,-0.018448150725391327,,NaN,NaN,NaN,NaN +20,33498,,2147483647,NaN,NaN,14.485750000000001,33.485166666666665,0.9863998246038562,247.1304781290071,77.00547151366962,1.0,-0.0250434664253219,0.06530984334856509,,NaN,NaN,NaN,NaN +20,33499,,2147483647,NaN,NaN,14.961181818181819,33.508,0.5957988324242507,248.85756536951604,75.74141983363387,1.0,-0.02430323176656768,-0.0157950656645654,,NaN,NaN,NaN,NaN +20,33500,,2147483647,NaN,NaN,14.905916666666664,33.523250000000004,0.439573323050042,252.89512484848524,75.20584671264554,1.0,0.14234735661168763,0.011912184060236804,,NaN,NaN,NaN,NaN + """; + Test.ensureEqual(results, expected, "\nresults=\n" + results); + } } diff --git a/src/test/java/jetty/JettyTests.java b/src/test/java/jetty/JettyTests.java index 080d4419..7db894e6 100644 --- a/src/test/java/jetty/JettyTests.java +++ b/src/test/java/jetty/JettyTests.java @@ -6641,6 +6641,11 @@ void testJsonld(boolean generateCroissantSchema) throws Throwable { + " },\n" + " {\n" + " \"@type\": \"Dataset\",\n" + + " \"name\": \"California Underwater Glider Network - Line 90\",\n" + + " \"sameAs\": \"http://localhost:8080/erddap/info/binnedCUGN90/index.html\"\n" + + " },\n" + + " {\n" + + " \"@type\": \"Dataset\",\n" + " \"name\": \"Channel Islands, Kelp Forest Monitoring, Sea Temperature, 1993-2007\",\n" + " \"sameAs\": \"http://localhost:8080/erddap/info/erdCinpKfmT/index.html\"\n" + " },\n" @@ -6756,6 +6761,11 @@ void testJsonld(boolean generateCroissantSchema) throws Throwable { + " },\n" + " {\n" + " \"@type\": \"Dataset\",\n" + + " \"name\": \"dfo-marvin1003-20250925T1927\",\n" + + " \"sameAs\": \"http://localhost:8080/erddap/info/Grid_NC_1D_2D/index.html\"\n" + + " },\n" + + " {\n" + + " \"@type\": \"Dataset\",\n" + " \"name\": \"ECMWF (RSMC) data from a local source., Lon+/-180\",\n" + " \"sameAs\": \"http://localhost:8080/erddap/info/ECMWF-FIXED/index.html\"\n" + " },\n" @@ -6926,6 +6936,11 @@ void testJsonld(boolean generateCroissantSchema) throws Throwable { + " },\n" + " {\n" + " \"@type\": \"Dataset\",\n" + + " \"name\": \"NOAA GOES-17 ABI L1b Radiances CONUS\",\n" + + " \"sameAs\": \"http://localhost:8080/erddap/info/noaa_goes17_abi_l1b_radc/index.html\"\n" + + " },\n" + + " {\n" + + " \"@type\": \"Dataset\",\n" + " \"name\": \"NOAA Highly Reflective Clouds, 25N-25S (noaa hrc, hrc.nmissdays), 1.0°, 1971-1985\",\n" + " \"sameAs\": \"http://localhost:8080/erddap/info/testActualRange2/index.html\"\n" + " },\n" @@ -7336,6 +7351,11 @@ void testJsonld(boolean generateCroissantSchema) throws Throwable { + " },\n" + " {\n" + " \"@type\": \"Dataset\",\n" + + " \"name\": \"California Underwater Glider Network - Line 90\",\n" + + " \"sameAs\": \"http://localhost:8080/erddap/info/binnedCUGN90/index.html\"\n" + + " },\n" + + " {\n" + + " \"@type\": \"Dataset\",\n" + " \"name\": \"Channel Islands, Kelp Forest Monitoring, Sea Temperature, 1993-2007\",\n" + " \"sameAs\": \"http://localhost:8080/erddap/info/erdCinpKfmT/index.html\"\n" + " },\n" @@ -7451,6 +7471,11 @@ void testJsonld(boolean generateCroissantSchema) throws Throwable { + " },\n" + " {\n" + " \"@type\": \"Dataset\",\n" + + " \"name\": \"dfo-marvin1003-20250925T1927\",\n" + + " \"sameAs\": \"http://localhost:8080/erddap/info/Grid_NC_1D_2D/index.html\"\n" + + " },\n" + + " {\n" + + " \"@type\": \"Dataset\",\n" + " \"name\": \"ECMWF (RSMC) data from a local source., Lon+/-180\",\n" + " \"sameAs\": \"http://localhost:8080/erddap/info/ECMWF-FIXED/index.html\"\n" + " },\n" @@ -7621,6 +7646,11 @@ void testJsonld(boolean generateCroissantSchema) throws Throwable { + " },\n" + " {\n" + " \"@type\": \"Dataset\",\n" + + " \"name\": \"NOAA GOES-17 ABI L1b Radiances CONUS\",\n" + + " \"sameAs\": \"http://localhost:8080/erddap/info/noaa_goes17_abi_l1b_radc/index.html\"\n" + + " },\n" + + " {\n" + + " \"@type\": \"Dataset\",\n" + " \"name\": \"NOAA Highly Reflective Clouds, 25N-25S (noaa hrc, hrc.nmissdays), 1.0°, 1971-1985\",\n" + " \"sameAs\": \"http://localhost:8080/erddap/info/testActualRange2/index.html\"\n" + " },\n" diff --git a/src/test/java/testDataset/EDDTestDataset.java b/src/test/java/testDataset/EDDTestDataset.java index 732230a0..d5af435d 100644 --- a/src/test/java/testDataset/EDDTestDataset.java +++ b/src/test/java/testDataset/EDDTestDataset.java @@ -314,6 +314,10 @@ public static void generateDatasetsXml() throws URISyntaxException, FileNotFound datasetsXml.append(xmlFragment_testParquet()); datasetsXml.append(xmlFragment_TableAggregateRows_nceiPH53sst()); + datasetsXml.append(xmlFragment_publicAWSGridFromFiles()); + datasetsXml.append(xmlFragment_Grid_NC_1D_2D()); + datasetsXml.append(xmlFragment_binnedCUGN90()); + datasetsXml.append( " + + Funded by National Oceanic and Atmospheric Administration (NOAA): Ocean Observing and Monitoring Division, and Integrated Ocean Observing System. Supported by Instrument Development Group - Scripps Institution of Oceanography + TrajectoryProfile + time_uv,lat_uv,lon_uv,u_depth_mean,v_depth_mean,profile,time,latitude,longitude + mission + CF-1.6, ACDD-1.3, COARDS + https://spraydata.ucsd.edu/projects/CUGN + California Underwater Glider Network - Line 90 + mission + + + depth + depth + double + + 8000.0 + -8000.0 + TopographyDepth + Location + + + + profile + profile + int + + Identifier + Profile + + + + time + time_column + double + + Time + + + + mission + mission + int + + Identifier + trajectory_id + + + + + lat + latitude + double + + 90.0 + -90.0 + Location + + + + lon + longitude + double + + 180.0 + -180.0 + Location + + + + temperature + temperature + double + + 32.0 + 0.0 + null + Temperature + Sea Water Temperature + degree_C + + + + salinity + salinity + double + + 37.0 + 32.0 + null + Salinity + Sea Water Practical Salinity + + + + chlorophyll_a + chlorophyll + double + + 15.0 + 0.0 + null + Ocean Color + Chlorophyll FLuorescence + + + + doxy + doxy + double + + Dissolved O2 + NaN + + + + acoustic_backscatter + acoustic_backscatter + double + + null + NaN + Unknown + + + + acoustic_backscatter_flag + acoustic_backscatter_flag + double + + null + NaN + Identifier + + + + u + u + double + + 0.5 + -0.5 + null + Currents + NaN + + + + v + v + double + + 0.5 + -0.5 + null + Currents + NaN + + + + time_uv + time_uv + double + + Time + + + + lat_uv + lat_uv + double + + 90.0 + -90.0 + Location + + + + lon_uv + lon_uv + double + + 180.0 + -180.0 + Location + + + + u_depth_mean + u_depth_mean + double + + 0.5 + -0.5 + null + Currents + + + + v_depth_mean + v_depth_mean + double + + 0.5 + -0.5 + null + Currents + + """; }