private void addSequence(Structure parent, DataDescriptor dataDesc) { //String seqName = ftype == (FeatureType.STATION_PROFILE) ? "profile" : "seq"; String seqName = "seq" + seqNum; seqNum++; Sequence seq = new Sequence(ncfile, null, parent, seqName); seq.setDimensions(""); // scalar for (DataDescriptor dkey : dataDesc.getSubKeys()) addMember(seq, dkey); parent.addMemberVariable(seq); seq.setSPobject(dataDesc); dataDesc.name = seqName; dataDesc.refersTo = seq; }
private void addSequence(Structure parent, BufrConfig.FieldConverter fld) { DataDescriptor dkey = fld.dds; String uname = findUniqueName(parent, fld.getName(), "seq"); dkey.name = uname; // name may need to be changed for uniqueness //String seqName = ftype == (FeatureType.STATION_PROFILE) ? "profile" : "seq"; //String seqName = dataDesc.name != null ? dataDesc.name : "seq" + seqNum++; Sequence seq = new Sequence(ncfile, null, parent, uname); seq.setDimensions(""); // scalar for (BufrConfig.FieldConverter subKey : fld.flds) addMember(seq, subKey); parent.addMemberVariable(seq); seq.setSPobject(fld); dkey.refersTo = seq; }
static Structure decodeStructure(NetcdfFile ncfile, Group g, Structure parent, NcStreamProto.Structure s) { Structure ncvar = (s.getDataType() == ucar.nc2.stream.NcStreamProto.DataType.SEQUENCE) ? new Sequence(ncfile, g, parent, s.getName()) : new Structure(ncfile, g, parent, s.getName()); ncvar.setDataType(decodeDataType(s.getDataType())); List<Dimension> dims = new ArrayList<Dimension>(6); for (ucar.nc2.stream.NcStreamProto.Dimension dim : s.getShapeList()) { Dimension ncdim = decodeDim(dim); if (!ncdim.isShared()) dims.add(ncdim); else { Dimension d = g.findDimension(ncdim.getShortName()); if (d == null) throw new IllegalStateException("Can find shared dimension " + dim.getName()); dims.add(d); } } ncvar.setDimensions(dims); for (ucar.nc2.stream.NcStreamProto.Attribute att : s.getAttsList()) ncvar.addAttribute(decodeAtt(att)); for (ucar.nc2.stream.NcStreamProto.Variable vp : s.getVarsList()) ncvar.addMemberVariable(decodeVar(ncfile, g, ncvar, vp)); for (NcStreamProto.Structure sp : s.getStructsList()) ncvar.addMemberVariable(decodeStructure(ncfile, g, ncvar, sp)); return ncvar; }
static Structure decodeStructure(NetcdfFile ncfile, Group g, Structure parent, NcStreamProto.Structure s) { Structure ncvar = (s.getDataType() == ucar.nc2.stream.NcStreamProto.DataType.SEQUENCE) ? new Sequence(ncfile, g, parent, s.getName()) : new Structure(ncfile, g, parent, s.getName()); ncvar.setDataType(convertDataType(s.getDataType())); List<Dimension> dims = new ArrayList<>(6); for (ucar.nc2.stream.NcStreamProto.Dimension dim : s.getShapeList()) { Dimension ncdim = decodeDim(dim); if (!ncdim.isShared()) dims.add(ncdim); else { Dimension d = g.findDimension(ncdim.getShortName()); if (d == null) throw new IllegalStateException("Can find shared dimension " + dim.getName()); dims.add(d); } } ncvar.setDimensions(dims); for (ucar.nc2.stream.NcStreamProto.Attribute att : s.getAttsList()) ncvar.addAttribute(decodeAtt(att)); for (ucar.nc2.stream.NcStreamProto.Variable vp : s.getVarsList()) ncvar.addMemberVariable(decodeVar(ncfile, g, ncvar, vp)); for (NcStreamProto.Structure sp : s.getStructsList()) ncvar.addMemberVariable(decodeStructure(ncfile, g, ncvar, sp)); return ncvar; }
private void makeObsRecord() throws IOException { recordStructure = new Sequence(ncfile, null, null, BufrIosp.obsRecord); ncfile.addVariable(null, recordStructure);
static Structure decodeStructure(NetcdfFile ncfile, Group g, Structure parent, NcStreamProto.Structure s) { Structure ncvar = (s.getDataType() == ucar.nc2.stream.NcStreamProto.DataType.SEQUENCE) ? new Sequence(ncfile, g, parent, s.getName()) : new Structure(ncfile, g, parent, s.getName()); ncvar.setDataType(decodeDataType(s.getDataType())); List<Dimension> dims = new ArrayList<Dimension>(6); for (ucar.nc2.stream.NcStreamProto.Dimension dim : s.getShapeList()) { if (dim.getIsPrivate() || dim.getIsVlen()) dims.add(new Dimension(dim.getName(), (int) dim.getLength(), false, dim.getIsUnlimited(), dim.getIsVlen())); else { Dimension d = g.findDimension(dim.getName()); if (d == null) throw new IllegalStateException("Can find shared dimension " + dim.getName()); dims.add(d); } } ncvar.setDimensions(dims); for (ucar.nc2.stream.NcStreamProto.Attribute att : s.getAttsList()) ncvar.addAttribute(decodeAtt(att)); for (ucar.nc2.stream.NcStreamProto.Variable vp : s.getVarsList()) ncvar.addMemberVariable(decodeVar(ncfile, g, ncvar, vp)); for (NcStreamProto.Structure sp : s.getStructsList()) ncvar.addMemberVariable(decodeStructure(ncfile, g, ncvar, sp)); return ncvar; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "otherData"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[8])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "data", DataType.INT, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "additional data specified in table 101.1")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "table101code", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "code figure from table 101")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "indicatorFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=data, 1=form")); v.setSPobject(new Vinfo(pos)); return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "otherData"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[8])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "data", DataType.INT, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "additional data specified in table 101.1")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "table101code", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "code figure from table 101")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "indicatorFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=data, 1=form")); v.setSPobject(new Vinfo(pos)); pos += 2; return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "otherData"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[8])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "data", DataType.INT, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "additional data specified in table 101.1")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "table101code", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "code figure from table 101")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "indicatorFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=data, 1=form")); v.setSPobject(new Vinfo(pos)); return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "clouds"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[7])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "pressure", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "mbars")); v.addAttribute(new Attribute(CDM.LONG_NAME, "pressure level")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "percentClouds", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "amount of cloudiness (%)")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=pressure, 1=percentClouds")); v.setSPobject(new Vinfo(pos)); return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "clouds"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[7])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "pressure", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "mbars")); v.addAttribute(new Attribute(CDM.LONG_NAME, "pressure level")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "percentClouds", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "amount of cloudiness (%)")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=pressure, 1=percentClouds")); v.setSPobject(new Vinfo(pos)); return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "clouds"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[7])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "pressure", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "mbars")); v.addAttribute(new Attribute(CDM.LONG_NAME, "pressure level")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "percentClouds", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "")); v.addAttribute(new Attribute(CDM.LONG_NAME, "amount of cloudiness (%)")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=pressure, 1=percentClouds")); v.setSPobject(new Vinfo(pos)); pos += 2; return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "windHeightLevels"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[4])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "geopotential", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "meter")); v.addAttribute(new Attribute(CDM.LONG_NAME, "geopotential")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, 99999.0f)); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windDir", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "degrees")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind direction")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windSpeed", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "knots")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind speed")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=geopot, 1=wind")); v.setSPobject(new Vinfo(pos)); return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "windHeightLevels"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[4])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "geopotential", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "meter")); v.addAttribute(new Attribute(CDM.LONG_NAME, "geopotential")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, 99999.0f)); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windDir", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "degrees")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind direction")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windSpeed", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "knots")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind speed")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=geopot, 1=wind")); v.setSPobject(new Vinfo(pos)); return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "windHeightLevels"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[4])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "geopotential", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "meter")); v.addAttribute(new Attribute(CDM.LONG_NAME, "geopotential")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, 99999.0f)); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windDir", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "degrees")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind direction")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windSpeed", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "knots")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind speed")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=geopot, 1=wind")); v.setSPobject(new Vinfo(pos)); pos += 2; return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "windPressureLevels"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[3])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "pressure", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "mbars")); v.addAttribute(new Attribute(CDM.LONG_NAME, "pressure level")); v.addAttribute(new Attribute("accuracy", "mbar/10")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windDir", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "degrees")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind direction")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windSpeed", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "knots")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind speed")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=pressure, 1=wind")); v.setSPobject(new Vinfo(pos)); return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "windPressureLevels"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[3])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "pressure", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "mbars")); v.addAttribute(new Attribute(CDM.LONG_NAME, "pressure level")); v.addAttribute(new Attribute("accuracy", "mbar/10")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windDir", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "degrees")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind direction")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windSpeed", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "knots")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind speed")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=pressure, 1=wind")); v.setSPobject(new Vinfo(pos)); return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "windPressureLevels"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[3])); int pos = 0; Variable v = seq.addMemberVariable(new Variable(ncfile, null, parent, "pressure", DataType.FLOAT, "")); v.addAttribute(new Attribute(CDM.UNITS, "mbars")); v.addAttribute(new Attribute(CDM.LONG_NAME, "pressure level")); v.addAttribute(new Attribute("accuracy", "mbar/10")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString())); v.setSPobject(new Vinfo(pos)); pos += 4; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windDir", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "degrees")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind direction")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "windSpeed", DataType.SHORT, "")); v.addAttribute(new Attribute(CDM.UNITS, "knots")); v.addAttribute(new Attribute(CDM.LONG_NAME, "wind speed")); v.addAttribute(new Attribute(CDM.MISSING_VALUE, (short) 999)); v.setSPobject(new Vinfo(pos)); pos += 2; v = seq.addMemberVariable(new Variable(ncfile, null, parent, "qualityFlags", DataType.CHAR, "")); v.setDimensionsAnonymous(new int[]{2}); v.addAttribute(new Attribute(CDM.LONG_NAME, "quality marks: 0=pressure, 1=wind")); v.setSPobject(new Vinfo(pos)); pos += 2; return seq; }
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "tempPressureLevels"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[2]));
Structure makeStructure(Structure parent) throws InvalidRangeException { Sequence seq = new Sequence(ncfile, null, parent, "tempPressureLevels"); seq.addAttribute(new Attribute(CDM.LONG_NAME, catNames[2]));