public SubsetParams setTime(CalendarDate date) { set(time, date); return this; } public CalendarDate getTime() { return (CalendarDate) get(time);}
private void addAdjustedTimeCoords(SubsetParams result, CoverageCoordAxis1D axis, int coordIdx, CalendarDate runtime) { // this must be adjusted to be offset from the runtime. // adjust = end - start // axisCoordOffset + axis.reftime = offset + runtime // offset = axisCoordOffset + axis.reftime - runtime // offset = axisCoordOffset + adjust // offset = axisCoordOffset + end - start = axisCoordOffset + axis.reftime - runtime // therefore: end = reftime, start = runtime double adjust = axis.getOffsetInTimeUnits(runtime, axis.getRefDate()); if (axis.isInterval()) { double[] adjustVal = new double[] {axis.getCoordEdge1(coordIdx)+adjust, axis.getCoordEdge2(coordIdx)+adjust}; result.setTimeOffsetIntv(adjustVal); double mid = (adjustVal[0]+adjustVal[1]) / 2.0; result.set(SubsetParams.timeOffsetUnit, axis.makeDateInTimeUnits(runtime, mid)); // validation result.set(SubsetParams.timeOffsetUnit, axis.getCalendarDateUnit()); // validation } else { double adjustVal = axis.getCoordMidpoint(coordIdx) + adjust; result.setTimeOffset(adjustVal); result.set(SubsetParams.timeOffsetDate, axis.makeDateInTimeUnits(runtime, adjustVal)); // validation result.set(SubsetParams.timeOffsetUnit, axis.getCalendarDateUnit()); // validation } }
public SubsetParams setTimePresent() { set(timePresent, true); return this; }
public SubsetParams setVertCoord(double coord) { set(vertCoord, coord); return this; }
public SubsetParams setProjectionRect(ProjectionRect projRect) { set(projBB, projRect); return this; }
public SubsetParams setTimeRange(CalendarDateRange dateRange) { set(timeRange, dateRange); return this; }
public SubsetParams setTimeOffset(double offset) { set(timeOffset, offset); return this; } public Double getTimeOffset() { return (Double) get(timeOffset); }
public SubsetParams setEnsCoord(double coord) { set(ensCoord, coord); return this; }
public SubsetParams setVertCoordIntv(double [] vertCoordIntv) { set(vertIntv, vertCoordIntv); return this; } public double[] getVertCoordIntv() { return (double[]) get(vertIntv);}
public SubsetParams setTimeOffsetIntv(double [] timeCoordIntv) { set(timeOffsetIntv, timeCoordIntv); return this; } public double [] getTimeOffsetIntv() { return (double []) get(timeOffsetIntv); }
public SubsetParams setLatLonBoundingBox(LatLonRect llbb) { set(latlonBB, llbb); return this; }
public SubsetParams setVariables(List<String> vars) { set(variables, vars); return this; }
public SubsetParams setRunTime(CalendarDate date) { set(runtime, date); return this; }
public SubsetParams setHorizStride(int stride) { set(horizStride, stride); return this; }
public SubsetParams setLatLonPoint(LatLonPointImpl pt) { set(latlonPoint, pt); return this; }
public SubsetParams setStations(List<String> stns) { set(stations, stns); return this; }
@Parameterized.Parameters(name = "{0}") public static List<Object[]> getTestParameters() { List<Object[]> result = new ArrayList<>(); // SRC result.add(new Object[]{TestDir.cdmUnitTestDir + "ncss/GFS/CONUS_80km/GFS_CONUS_80km_20120227_0000.grib1", FeatureType.GRID, Lists.newArrayList("Temperature_isobaric"), new SubsetParams().set(SubsetParams.timePresent, true), NetcdfFileWriter.Version.netcdf3}); result.add(new Object[]{TestDir.cdmUnitTestDir + "ft/coverage/03061219_ruc.nc", FeatureType.GRID, Lists.newArrayList("P_sfc", "P_trop"), null, NetcdfFileWriter.Version.netcdf3}); result.add(new Object[]{TestDir.cdmUnitTestDir + "ft/coverage/03061219_ruc.nc", FeatureType.GRID, Lists.newArrayList("P_sfc", "P_trop"), null, NetcdfFileWriter.Version.netcdf4}); result.add(new Object[]{TestDir.cdmUnitTestDir + "ft/coverage/03061219_ruc.nc", FeatureType.GRID, Lists.newArrayList("P_sfc", "P_trop", "T"), null, NetcdfFileWriter.Version.netcdf3}); result.add(new Object[]{TestDir.cdmUnitTestDir + "ft/coverage/ECME_RIZ_201201101200_00600_GB", FeatureType.GRID, Lists.newArrayList("Surface_pressure_surface"), null, NetcdfFileWriter.Version.netcdf3}); // scalar runtime, ens coord result.add(new Object[]{TestDir.cdmUnitTestDir + "ft/coverage/testCFwriter.nc", FeatureType.GRID, Lists.newArrayList("PS", "Temperature"), null, NetcdfFileWriter.Version.netcdf3}); // both x,y and lat,lon result.add(new Object[]{TestDir.cdmUnitTestDir + "gribCollections/gfs_2p5deg/gfs_2p5deg.ncx4", FeatureType.GRID, Lists.newArrayList("Soil_temperature_depth_below_surface_layer"), null, NetcdfFileWriter.Version.netcdf4}); // TwoD Best // */ return result; }
private void readAndTestGrib(GridDatatype gdt, int rtIndex, int tIndex, int zIndex) throws IOException { countReadsForVariable++; if (MAX_READS > 0 && countReadsForVariable > MAX_READS) return; GribDataReader.currentDataRecord = null; gdt.readDataSlice(rtIndex, -1, tIndex, zIndex, -1, -1); dtCoords.set("rtIndex", rtIndex); dtCoords.set("tIndex", tIndex); dtCoords.set("zIndex", zIndex); if (isGrib1) readAndTestGrib1(gdt.getName(), dtCoords); else readAndTestGrib2(gdt.getName(), dtCoords); grid = null; }
@Test // there is no interval with offset value = 51 public void testNoIntervalFound() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_2p5deg/gfs_2p5deg.ncx4"; String covName = "Momentum_flux_u-component_surface_Mixed_intervals_Average"; logger.debug("test1Runtime1TimeOffset Dataset {} coverage {}", endpoint, covName); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { Assert.assertNotNull(endpoint, cc); CoverageCollection gcs = cc.findCoverageDataset(FeatureType.FMRC); Assert.assertNotNull("gcs", gcs); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); SubsetParams params = new SubsetParams(); CalendarDate runtime = CalendarDate.parseISOformat(null, "2015-03-01T12:00:00Z"); params.set(SubsetParams.runtime, runtime); double offsetVal = 51.0; // should fail params.set(SubsetParams.timeOffset, offsetVal); logger.debug(" subset {}", params); GeoReferencedArray geo = cover.readData(params); testGeoArray(geo, runtime, null, offsetVal); // should be empty, but instead its a bunch of NaNs assert Float.isNaN(geo.getData().getFloat(0)); } }
@Test // 1 runtime, 1 time (Time2DCoordSys case 1b) public void test1Runtime1Time() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_2p5deg/gfs_2p5deg.ncx4"; String covName = "Total_ozone_entire_atmosphere_single_layer"; logger.debug("test1Runtime1Time Dataset {} coverage {}", endpoint, covName); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { Assert.assertNotNull(endpoint, cc); CoverageCollection gcs = cc.findCoverageDataset(FeatureType.FMRC); Assert.assertNotNull("gcs", gcs); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); SubsetParams params = new SubsetParams(); CalendarDate runtime = CalendarDate.parseISOformat(null, "2015-03-01T06:00:00Z"); params.set(SubsetParams.runtime, runtime); CalendarDate time = CalendarDate.parseISOformat(null, "2015-03-01T12:00:00Z"); params.set(SubsetParams.time, time); logger.debug(" subset {}", params); GeoReferencedArray geo = cover.readData(params); testGeoArray(geo, runtime, time, null); Array data = geo.getData(); Index ai = data.getIndex(); float testValue = data.getFloat(ai.set(0,0,1,0)); Assert2.assertNearlyEquals(371.5, testValue); } }