private void serializeTime(ITemporalExtent time, List<Dimension> dims) throws KlabException { if (time.getMultiplicity() > 1) { defineMode(true); Dimension tDim = _ncfile.addUnlimitedDimension("time"); _time = _ncfile.addVariable(null, "time", DataType.DOUBLE, "time"); // TODO should probably use natural step in scale when appropriate, assuming // we carry over the // unit and resolution. _time.addAttribute(new Attribute("units", "milliseconds since EPOCH")); defineMode(false); dims.add(tDim); } }
private void createProfiles(List<String> profileNames) throws IOException { int nprofiles = profileNames.size(); // find string lengths for (String name : profileNames) { name_strlen = Math.max(name_strlen, name.length()); } // add the dimensions writer.addUnlimitedDimension(recordDimName); List<Dimension> profileDims = new ArrayList<Dimension>(1); Dimension profileDim = writer.addDimension(null, profileDimName, nprofiles); profileDims.add(profileDim); // add the profile Variables using the profile dimension id = writer.addStringVariable(null, idName, profileDims, name_strlen); writer.addVariableAttribute(id, new Attribute(CDM.LONG_NAME, "profile identifier")); writer.addVariableAttribute(id, new Attribute(CF.CF_ROLE, CF.PROFILE_ID)); Variable lat = writer.addVariable(null, latName, DataType.DOUBLE, profileDimName); writer.addVariableAttribute(lat, new Attribute(CDM.UNITS, CDM.LAT_UNITS)); writer.addVariableAttribute(lat, new Attribute(CDM.LONG_NAME, "profile latitude")); Variable lon = writer.addVariable(null, lonName, DataType.DOUBLE, profileDimName); writer.addVariableAttribute(lon, new Attribute(CDM.UNITS, CDM.LON_UNITS)); writer.addVariableAttribute(lon, new Attribute(CDM.LONG_NAME, "profile longitude")); if (altUnits != null) { Variable alt = writer.addVariable(null, altName, DataType.DOUBLE, profileDimName); writer.addVariableAttribute(alt, new Attribute(CDM.UNITS, altUnits)); writer.addVariableAttribute(alt, new Attribute(CDM.LONG_NAME, "profile altitude")); } }
@Test public void testUnlimitedDimension() throws IOException, InvalidRangeException { String location = tempFolder.newFile().getAbsolutePath(); File f = new File(location); assert f.delete(); Variable time; try (NetcdfFileWriter writer = NetcdfFileWriter.createNew(NetcdfFileWriter.Version.netcdf4, location)) { logger.debug("write to file = {}", new File(location).getAbsolutePath()); Dimension timeDim = writer.addUnlimitedDimension("time"); List<Dimension> dims = new ArrayList<>(); dims.add(timeDim); time = writer.addVariable(null, "time", DataType.DOUBLE, dims); writer.create(); Array data = Array.makeFromJavaArray(new double[]{0, 1, 2, 3}); writer.write(time, data); writer.close(); try (NetcdfFileWriter writer2 = NetcdfFileWriter.openExisting(location)) { time = writer2.findVariable("time"); int[] origin = new int[1]; origin[0] = (int) time.getSize(); writer2.write(time, origin, data); } try (NetcdfFile file = NetcdfFile.open(location)) { time = file.findVariable("time"); assert time.getSize() == 8 : "failed to append to unlimited dimension"; } } }
private NetcdfFileWriter createTimeLatLonDataCube(String filename, double[] latitudes, double[] longitudes) throws IOException { NetcdfFileWriter writeableFile = NetcdfFileWriter.createNew(filename, true); // define dimensions, including unlimited Dimension latDim = writeableFile.addDimension(latVar, latitudes.length); Dimension lonDim = writeableFile.addDimension(lonVar, longitudes.length); Dimension timeDim = writeableFile.addUnlimitedDimension(timeVar); // define Variables defineHeader(writeableFile, timeVar, latVar, lonVar, timeVar+" "+latVar+" "+lonVar); // create the file writeableFile.create(); writeableFile.close(); return writeableFile; }
try (NetcdfFileWriter ncfile = NetcdfFileWriter.createNew(filename, true)) { Dimension Time_dim = ncfile.addUnlimitedDimension("Time"); Dimension DateStrLen_dim = ncfile.addDimension("DateStrLen", DateStrLen_len);
writer.addUnlimitedDimension("time"); writer.addGroupAttribute(null, new Attribute("name", "value"));
protected void writeHeader(List<VariableSimpleIF> obsCoords, StructureData featureData, StructureData obsData, String coordNames) throws IOException { this.recordDim = writer.addUnlimitedDimension(recordDimName); addExtraVariables(); if (writer.getVersion().isExtendedModel()) { makeFeatureVariables(featureData, true); record = (Structure) writer.addVariable(null, recordName, DataType.STRUCTURE, recordDimName); addCoordinatesExtended(record, obsCoords); addDataVariablesExtended(obsData, coordNames); writer.create(); } else { makeFeatureVariables(featureData, false); addCoordinatesClassic(recordDim, obsCoords, dataMap); addDataVariablesClassic(recordDim, obsData, dataMap, coordNames); writer.create(); record = writer.addRecordStructure(); // for netcdf3 } writeExtraVariables(); }
protected void writeHeader(List<VariableSimpleIF> obsCoords, StructureData featureData, StructureData obsData, String coordNames) throws IOException { this.recordDim = writer.addUnlimitedDimension(recordDimName); addExtraVariables(); if (writer.getVersion().isExtendedModel()) { makeFeatureVariables(featureData, true); record = (Structure) writer.addVariable(null, recordName, DataType.STRUCTURE, recordDimName); addCoordinatesExtended(record, obsCoords); addDataVariablesExtended(obsData, coordNames); record.calcElementSize(); writer.create(); } else { makeFeatureVariables(featureData, false); addCoordinatesClassic(recordDim, obsCoords, dataMap); addDataVariablesClassic(recordDim, obsData, dataMap, coordNames); writer.create(); record = writer.addRecordStructure(); // for netcdf3 } writeExtraVariables(); }
protected void writeHeader2(List<VariableSimpleIF> obsCoords, StructureData featureData, StructureData middleData, StructureData obsData, String coordNames) throws IOException { this.recordDim = writer.addUnlimitedDimension(recordDimName); addExtraVariables(); if (writer.getVersion().isExtendedModel()) { makeFeatureVariables(featureData, true); makeMiddleVariables(middleData, true); record = (Structure) writer.addVariable(null, recordName, DataType.STRUCTURE, recordDimName); addCoordinatesExtended(record, obsCoords); addDataVariablesExtended(obsData, coordNames); writer.create(); } else { makeFeatureVariables(featureData, false); makeMiddleVariables(middleData, false); addCoordinatesClassic(recordDim, obsCoords, dataMap); addDataVariablesClassic(recordDim, obsData, dataMap, coordNames); writer.create(); record = writer.addRecordStructure(); // for netcdf3 } writeExtraVariables(); }
protected void writeHeader2(List<VariableSimpleIF> obsCoords, StructureData featureData, StructureData middleData, StructureData obsData, String coordNames) throws IOException { this.recordDim = writer.addUnlimitedDimension(recordDimName); addExtraVariables(); if (writer.getVersion().isExtendedModel()) { makeFeatureVariables(featureData, true); makeMiddleVariables(middleData, true); record = (Structure) writer.addVariable(null, recordName, DataType.STRUCTURE, recordDimName); addCoordinatesExtended(record, obsCoords); addDataVariablesExtended(obsData, coordNames); record.calcElementSize(); writer.create(); } else { makeFeatureVariables(featureData, false); makeMiddleVariables(middleData, false); addCoordinatesClassic(recordDim, obsCoords, dataMap); addDataVariablesClassic(recordDim, obsData, dataMap, coordNames); writer.create(); record = writer.addRecordStructure(); // for netcdf3 } writeExtraVariables(); }
private NetcdfFileWriter createLatLonTimeDataCube(String filename) throws IOException, InvalidRangeException { NetcdfFileWriter writeableFile = NetcdfFileWriter.createNew(NetcdfFileWriter.Version.netcdf3, filename); writeableFile.setLargeFile(true); writeableFile.setFill(false); //writeableFile.setLength((long) 16 * 1000 * 1000 * 1000); // 16 gigs - prealloate // define dimensions Dimension timeDim = writeableFile.addDimension(null, timeVarName, TIME_LEN); Dimension latDim = writeableFile.addUnlimitedDimension(latVarName); Dimension lonDim = writeableFile.addDimension(null, lonVarName, LON_LEN); // define Variables defineHeader(writeableFile, timeVarName, latVarName, lonVarName); // create the file writeableFile.create(); System.out.printf("file=%s%n", writeableFile); // write out the non-record variables float[] longitudes = new float[LON_LEN]; int[] times = new int[TIME_LEN]; for (int i = 0; i < times.length; i++) { times[i] = i; } for (int i = 0; i < longitudes.length; i++) { longitudes[i] = (float) i; } writeableFile.write(lonVarName, ucar.ma2.Array.makeFromJavaArray(longitudes, false)); writeableFile.write(timeVarName, ucar.ma2.Array.makeFromJavaArray(times, false)); return writeableFile; }
private void createCoordinates(DateUnit timeUnit) throws IOException { writer.addUnlimitedDimension(recordDimName); // time variable time = writer.addVariable(null, timeName, DataType.DOUBLE, recordDimName); writer.addVariableAttribute(time, new Attribute(CDM.UNITS, timeUnit.getUnitsString())); writer.addVariableAttribute(time, new Attribute(CDM.LONG_NAME, "time of measurement")); // add the station Variables using the station dimension lat = writer.addVariable(null, latName, DataType.DOUBLE, recordDimName); writer.addVariableAttribute(lat, new Attribute(CDM.UNITS, CDM.LAT_UNITS)); writer.addVariableAttribute(lat, new Attribute(CDM.LONG_NAME, "station latitude")); lon = writer.addVariable(null, lonName, DataType.DOUBLE, recordDimName); writer.addVariableAttribute(lon, new Attribute(CDM.UNITS, CDM.LON_UNITS)); writer.addVariableAttribute(lon, new Attribute(CDM.LONG_NAME, "station longitude")); if (altUnits != null) { alt = writer.addVariable(null, altName, DataType.DOUBLE, recordDimName); writer.addVariableAttribute(alt, new Attribute(CDM.UNITS, altUnits)); // ncfile.addVariableAttribute(v, new Attribute("positive", "up")); writer.addVariableAttribute(alt, new Attribute(CDM.LONG_NAME, "altitude")); } }
Dimension timeDim = ncWriteable.addUnlimitedDimension("time"); ncWriteable.addVariable("time", DataType.INT, "time"); ncWriteable.addVariableAttribute("time", "units", "hours since 1990-01-01");
@Test public void checkPaddingOnWriteReadOneDimCharArrayOnlyRecordVar() throws IOException, InvalidRangeException { File tmpDataDir = tempFolder.newFolder(); File testFile = new File(tmpDataDir, "file.nc"); try(NetcdfFileWriter ncfWriteable = NetcdfFileWriter.createNew(testFile.getPath(), true)) { Dimension recDim = ncfWriteable.addUnlimitedDimension("v"); Variable var = ncfWriteable.addVariable("v", DataType.CHAR, "v"); assertEquals(1, var.getElementSize()); ncfWriteable.create(); N3header.Vinfo vinfo = (N3header.Vinfo) var.getSPobject(); assertTrue(vinfo.isRecord); assertEquals(1, vinfo.vsize); char[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50}; Array dataArray = Array.factory(DataType.CHAR, new int[]{data.length}, data); ncfWriteable.write(var.getFullNameEscaped(), dataArray); ncfWriteable.close(); NetcdfFile ncf = NetcdfFile.open(testFile.getPath()); Variable readVar = ncf.findVariable("v"); assertEquals(readVar.getDataType(), DataType.CHAR); assertEquals(1, readVar.getElementSize()); vinfo = (N3header.Vinfo) readVar.getSPobject(); assertTrue(vinfo.isRecord); assertEquals(1, vinfo.vsize); int[] org = {0}; char[] readdata = (char[]) readVar.read(org, readVar.getShape()).copyTo1DJavaArray(); assertArrayEquals(data, readdata); } }
@Test public void checkPaddingOnWriteReadOneDimByteArrayOnlyRecordVar() throws IOException, InvalidRangeException { File tmpDataDir = tempFolder.newFolder(); File testFile = new File(tmpDataDir, "file.nc"); try( NetcdfFileWriter ncfWriteable = NetcdfFileWriter.createNew(testFile.getPath(), true)) { Dimension recDim = ncfWriteable.addUnlimitedDimension("v"); Variable var = ncfWriteable.addVariable("v", DataType.BYTE, "v"); assertEquals(1, var.getElementSize()); ncfWriteable.create(); N3header.Vinfo vinfo = (N3header.Vinfo) var.getSPobject(); assertTrue(vinfo.isRecord); assertEquals(1, vinfo.vsize); byte[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -2, -3, -4, -5, -6, -7, -8, -9}; Array dataArray = Array.factory(DataType.BYTE, new int[]{data.length}, data); ncfWriteable.write(var.getFullNameEscaped(), dataArray); ncfWriteable.close(); NetcdfFile ncf = NetcdfFile.open(testFile.getPath()); Variable readVar = ncf.findVariable("v"); assertEquals(readVar.getDataType(), DataType.BYTE); assertEquals(1, readVar.getElementSize()); vinfo = (N3header.Vinfo) readVar.getSPobject(); assertTrue(vinfo.isRecord); assertEquals(1, vinfo.vsize); int[] org = {0}; byte[] readdata = (byte[]) readVar.read(org, readVar.getShape()).copyTo1DJavaArray(); assertArrayEquals(data, readdata); } }
@Test public void checkPaddingOnWriteReadOneDimShortArrayOnlyRecordVar() throws IOException, InvalidRangeException { File tmpDataDir = tempFolder.newFolder(); File testFile = new File(tmpDataDir, "file.nc"); try(NetcdfFileWriter ncfWriteable = NetcdfFileWriter.createNew(testFile.getPath(), true)) { Dimension recDim = ncfWriteable.addUnlimitedDimension("v"); Variable var = ncfWriteable.addVariable("v", DataType.SHORT, "v"); assertEquals(2, var.getElementSize()); ncfWriteable.create(); N3header.Vinfo vinfo = (N3header.Vinfo) var.getSPobject(); assertTrue(vinfo.isRecord); assertEquals(2, vinfo.vsize); short[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -2, -3, -4, -5, -6, -7, -8, -9}; Array dataArray = Array.factory(DataType.SHORT, new int[]{data.length}, data); ncfWriteable.write(var.getFullNameEscaped(), dataArray); ncfWriteable.close(); NetcdfFile ncf = NetcdfFile.open(testFile.getPath()); Variable readVar = ncf.findVariable("v"); assertEquals(readVar.getDataType(), DataType.SHORT); assertEquals(2, readVar.getElementSize()); vinfo = (N3header.Vinfo) readVar.getSPobject(); assertTrue(vinfo.isRecord); assertEquals(2, vinfo.vsize); int[] org = {0}; short[] readdata = (short[]) readVar.read(org, readVar.getShape()).copyTo1DJavaArray(); assertArrayEquals(data, readdata); } }
@Test public void checkPaddingOnWriteReadTwoDimByteArrayOnlyRecordVar() throws IOException, InvalidRangeException { File tmpDataDir = tempFolder.newFolder(); File testFile = new File(tmpDataDir, "file.nc"); try( NetcdfFileWriter ncfWriteable = NetcdfFileWriter.createNew(testFile.getPath(), true)) { Dimension recDim = ncfWriteable.addUnlimitedDimension("v"); Dimension secondDim = ncfWriteable.addDimension("s", 3); Variable var = ncfWriteable.addVariable("v", DataType.BYTE, "v s"); assertEquals(1, var.getElementSize()); ncfWriteable.create(); N3header.Vinfo vinfo = (N3header.Vinfo) var.getSPobject(); assertTrue(vinfo.isRecord); assertEquals(3, vinfo.vsize); byte[] data = {1, 2, 3, 11, 12, 13, 21, 22, 23, -1, -2, -3}; Array dataArray = Array.factory(DataType.BYTE, new int[]{4, 3}, data); ncfWriteable.write(var.getFullNameEscaped(), dataArray); ncfWriteable.close(); NetcdfFile ncf = NetcdfFile.open(testFile.getPath()); Variable readVar = ncf.findVariable("v"); assertEquals(readVar.getDataType(), DataType.BYTE); assertEquals(1, readVar.getElementSize()); vinfo = (N3header.Vinfo) readVar.getSPobject(); assertTrue(vinfo.isRecord); assertEquals(3, vinfo.vsize); int[] org = {0, 0}; byte[] readdata = (byte[]) readVar.read(org, readVar.getShape()).copyTo1DJavaArray(); assertArrayEquals(data, readdata); } }
Dimension d = ncfWriteable.addUnlimitedDimension("D"); Variable v0 = ncfWriteable.addVariable("X", DataType.DOUBLE, "X"); Variable v = ncfWriteable.addVariable("V", DataType.BYTE, "D");
writer.addUnlimitedDimension("time"); writer.addGroupAttribute(null, new Attribute("name", "value"));
Dimension recDim = ncfWriteable.addUnlimitedDimension("v"); Variable var = ncfWriteable.addVariable("v", DataType.BYTE, "v"); assertEquals(1, var.getElementSize());