/** * * @param endpoint cdmrFeature:url, local GRIB data or index file, or NetcdfDataset location * @return FeatureDatasetCoverage or null on failure. use openCoverageDataset to get error message * @throws IOException */ static public FeatureDatasetCoverage open(String endpoint) throws IOException { Optional<FeatureDatasetCoverage> opt = openCoverageDataset(endpoint); return opt.isPresent() ? opt.get() : null; }
@Override public List<Dataset> getDatasetsLogical() { try { ucar.nc2.util.Optional<DatasetNode> opt = readCatref(); if (!opt.isPresent()) throw new RuntimeException(opt.getErrorMessage()); DatasetNode proxy = opt.get(); return proxy.getDatasets(); } catch (IOException e) { throw new RuntimeException(e); } }
@Override public Optional<CoverageCoordAxis> subset(SubsetParams params) { Optional<CoverageCoordAxisBuilder> buildero = subsetBuilder(params); return !buildero.isPresent() ? Optional.empty(buildero.getErrorMessage()) : Optional.of(new TimeOffsetAxis(buildero.get())); }
@Override public Optional<CoverageCoordAxis> subset(SubsetParams params) { Optional<CoverageCoordAxisBuilder> buildero = subsetBuilder(params); return !buildero.isPresent() ? Optional.empty(buildero.getErrorMessage()) : Optional.of(new CoverageCoordAxis1D(buildero.get())); }
if (llbb != null) { Optional<List<RangeIterator>> opt = computeBounds(llbb, horizStride); if (!opt.isPresent()) { errMessages.format("%s;%n", opt.getErrorMessage()); } else {
@Override public Optional<CoverageCoordAxis> subset(double minValue, double maxValue, int stride) throws InvalidRangeException { CoordAxisHelper helper = new CoordAxisHelper(this); Optional<CoverageCoordAxisBuilder> buildero = helper.subset(minValue, maxValue, stride); return !buildero.isPresent() ? Optional.empty(buildero.getErrorMessage()) : Optional.of(new CoverageCoordAxis1D(buildero.get())); }
@Override public Optional<CoverageCoordAxis> subset(double minValue, double maxValue, int stride) { CoordAxisHelper helper = new CoordAxisHelper(this); Optional<CoverageCoordAxisBuilder> buildero = helper.subset(minValue, maxValue, stride); return !buildero.isPresent() ? Optional.empty(buildero.getErrorMessage()) : Optional.of(new TimeOffsetAxis(buildero.get())); }
if (opt.isPresent()) result.featureDataset = opt.get(); else
if (opt.isPresent()) result.featureDataset = opt.get(); else
@Test public void TestCFWriterCoverageSize() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "ncss/GFS/CONUS_80km/GFS_CONUS_80km_20120227_0000.grib1"; logger.info("open {}", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { assert cc != null; Assert.assertEquals(1, cc.getCoverageCollections().size()); CoverageCollection gds = cc.getCoverageCollections().get(0); Assert.assertNotNull(endpoint, gds); Assert.assertEquals(FeatureType.GRID, gds.getCoverageType()); // CFGridCoverageWriter2 adds another (dependent) time coordinate, so we need to test this case ucar.nc2.util.Optional<Long> opt = CFGridCoverageWriter2.writeOrTestSize(gds, Lists.newArrayList("Temperature_isobaric"), new SubsetParams(), false, true, null); Assert.assertTrue(opt.isPresent()); long size = opt.get(); Assert.assertEquals(25245084, size); // Includes sizes of non-coverage variables. } }
public Optional<CoverageCoordAxis> subsetByIntervals(List<MAMath.MinMax> lonIntvs, int stride) { if (axisType != AxisType.Lon) return Optional.empty("subsetByIntervals only for longitude"); if (!isRegular()) return Optional.empty("subsetByIntervals only for regular longitude"); CoordAxisHelper helper = new CoordAxisHelper(this); double start = Double.NaN; boolean first = true; List<RangeIterator> ranges = new ArrayList<>(); for (MAMath.MinMax lonIntv : lonIntvs) { if (first) start = lonIntv.min; first = false; Optional<RangeIterator> opt = helper.makeRange(lonIntv.min, lonIntv.max, stride); if (!opt.isPresent()) return Optional.empty(opt.getErrorMessage()); ranges.add(opt.get()); } try { RangeComposite compositeRange = new RangeComposite(AxisType.Lon.toString(), ranges); int npts = compositeRange.length(); double end = start + npts * resolution; CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(this); // copy builder.subset(npts, start, end, resolution, null); builder.setRange(null); builder.setCompositeRange(compositeRange); return Optional.of(new CoverageCoordAxis1D(builder)); } catch (InvalidRangeException e) { return Optional.empty(e.getMessage()); } }
if (!estimatedSizeo.isPresent()) throw new InvalidRangeException("Request contains no data: " + estimatedSizeo.getErrorMessage());
@Test public void testReadGridCoverageSlice() throws IOException, InvalidRangeException { logger.debug("Test Dataset {} coverage {}", endpoint, covName); FeatureDatasetCoverage cc = null; try { Optional<FeatureDatasetCoverage> opt = CoverageDatasetFactory.openCoverageDataset(endpoint); Assert.assertTrue(opt.getErrorMessage(), opt.isPresent()); cc = opt.get(); Assert.assertNotNull(endpoint, cc); Assert.assertEquals(1, cc.getCoverageCollections().size()); CoverageCollection gcs = cc.getCoverageCollections().get(0); Assert.assertNotNull("gcs", gcs); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); readOne(cover, rt_val, time_val, time_offset, vert_level); } finally { if (cc != null) cc.close(); } }
@Test public void testFmrcStride() throws IOException, InvalidRangeException { try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { Assert.assertNotNull(endpoint, cc); CoverageCollection gcs = cc.findCoverageDataset(FeatureType.FMRC); if (gcs == null) return; // not all datasets have an Fmrc logger.debug("testFmrcStride {}", endpoint); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); CoverageCoordSys csys = cover.getCoordSys(); int[] csysShape = csys.getShape(); logger.debug("csys shape = {}", Misc.showInts(csysShape)); SubsetParams params = new SubsetParams().setHorizStride(2).set(SubsetParams.runtimeAll, true); Optional<CoverageCoordSys> opt = csys.subset(params); if (!opt.isPresent()) { logger.debug("err={}", opt.getErrorMessage()); assert false; } CoverageCoordSys subsetCoordSys = opt.get(); int[] subsetShape = subsetCoordSys.getShape(); logger.debug("csysSubset shape = {}", Misc.showInts(subsetShape)); int n = csysShape.length; csysShape[n-1] = (csysShape[n-1]+1)/2; csysShape[n-2] = (csysShape[n-2]+1)/2; Assert.assertArrayEquals(csysShape, subsetShape); } }
@Test public void testBestStride() throws IOException, InvalidRangeException { logger.debug("testBestStride {}", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { Assert.assertNotNull(endpoint, cc); CoverageCollection gcs = cc.findCoverageDataset(FeatureType.GRID); Assert.assertNotNull("gcs", gcs); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); CoverageCoordSys csys = cover.getCoordSys(); int[] csysShape = csys.getShape(); logger.debug("csys shape = {}", Misc.showInts(csysShape)); SubsetParams params = new SubsetParams().setHorizStride(2); Optional<CoverageCoordSys> opt = csys.subset(params); if (!opt.isPresent()) { logger.debug("err={}", opt.getErrorMessage()); assert false; } CoverageCoordSys subsetCoordSys = opt.get(); int[] subsetShape = subsetCoordSys.getShape(); logger.debug("csysSubset shape = {}", Misc.showInts(subsetShape)); int n = csysShape.length; csysShape[n-1] = (csysShape[n-1]+1)/2; csysShape[n-2] = (csysShape[n-2]+1)/2; Assert.assertArrayEquals(csysShape, subsetShape); } }
@Test public void testBestStride() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_2p5deg/gfs_2p5deg.ncx4"; String covName = "Ozone_Mixing_Ratio_isobaric"; System.out.printf("Test Dataset %s%n", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { Assert.assertNotNull(endpoint, cc); CoverageCollection gcs = cc.findCoverageDataset(FeatureType.GRID); Assert.assertNotNull("gcs", gcs); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); CoverageCoordSys csys = cover.getCoordSys(); int[] csysShape = csys.getShape(); System.out.printf("csys shape = %s%n", Misc.showInts(csysShape)); SubsetParams params = new SubsetParams().setHorizStride(2); Optional<CoverageCoordSys> opt = csys.subset(params); if (!opt.isPresent()) { System.out.printf("err=%s%n", opt.getErrorMessage()); assert false; } CoverageCoordSys subsetCoordSys = opt.get(); int[] subsetShape = subsetCoordSys.getShape(); System.out.printf("csysSubset shape = %s%n", Misc.showInts(subsetShape)); int n = csysShape.length; csysShape[n-1] = (csysShape[n-1]+1)/2; csysShape[n-2] = (csysShape[n-2]+1)/2; Assert.assertArrayEquals(csysShape, subsetShape); } }
Assert.assertTrue(opt.isPresent());
Assert.assertTrue(opt.isPresent());
public Optional<TimeOffsetAxis> subsetFromTime(SubsetParams params, CalendarDate runDate) { CoordAxisHelper helper = new CoordAxisHelper(this); CoverageCoordAxisBuilder builder = null; if (params.isTrue(SubsetParams.timePresent)) { double offset = getOffsetInTimeUnits(runDate, CalendarDate.present()); builder = helper.subsetClosest(offset); } CalendarDate dateWanted = (CalendarDate) params.get(SubsetParams.time); if (dateWanted != null) { // convertFrom, convertTo double offset = getOffsetInTimeUnits(runDate, dateWanted); builder = helper.subsetClosest(offset); } Integer stride = (Integer) params.get(SubsetParams.timeStride); if (stride == null || stride < 0) stride = 1; CalendarDateRange dateRange = (CalendarDateRange) params.get(SubsetParams.timeRange); if (dateRange != null) { double min = getOffsetInTimeUnits(runDate, dateRange.getStart()); double max = getOffsetInTimeUnits(runDate, dateRange.getEnd()); Optional<CoverageCoordAxisBuilder> buildero = helper.subset(min, max, stride); if (buildero.isPresent()) builder = buildero.get(); else return Optional.empty(buildero.getErrorMessage()); } assert (builder != null); // all the offsets are reletive to rundate builder.setReferenceDate(runDate); return Optional.of(new TimeOffsetAxis(builder)); }
Assert.assertTrue(opt.isPresent());