private CoverageCoordAxis makeCoordAxis(CoordinateEns ensCoord) { int n = ensCoord.getSize(); double[] values = new double[n]; for (int i = 0; i < n; i++) values[i] = ((EnsCoord.Coord) ensCoord.getValue(i)).getEnsMember(); AttributeContainerHelper atts = new AttributeContainerHelper(ensCoord.getName()); String units = ensCoord.getUnit(); atts.addAttribute(new Attribute(CDM.UNITS, units)); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(ensCoord.getName(), units, null, DataType.DOUBLE, AxisType.Ensemble, atts, CoverageCoordAxis.DependenceType.independent, null, null, ensCoord.getSize(), 0, 0, 0, values, this); builder.setSpacingFromValues(false); return new CoverageCoordAxis1D(builder); }
private CoverageCoordAxis makeCoordAxis(CoordinateVert vertCoord) { List<VertCoord.Level> levels = vertCoord.getLevelSorted(); int n = vertCoord.getSize(); double[] values; if (vertCoord.isLayer()) { int count = 0; values = new double[2 * n]; for (int i = 0; i < n; i++) { values[count++] = levels.get(i).getValue1(); values[count++] = levels.get(i).getValue2(); } } else { values = new double[n]; for (int i = 0; i < n; i++) values[i] = levels.get(i).getValue1(); } AttributeContainerHelper atts = new AttributeContainerHelper(vertCoord.getName()); String units = vertCoord.getUnit(); atts.addAttribute(new Attribute(CDM.UNITS, units)); AxisType axisType = AxisType.GeoZ; if (SimpleUnit.isCompatible("mbar", units)) axisType = AxisType.Pressure; else if (SimpleUnit.isCompatible("m", units)) axisType = AxisType.Height; String desc = vertCoord.getVertUnit().getDesc(); if (desc != null) atts.addAttribute(new Attribute(CDM.LONG_NAME, desc)); atts.addAttribute(new Attribute(CF.POSITIVE, vertCoord.isPositiveUp() ? CF.POSITIVE_UP : CF.POSITIVE_DOWN)); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(vertCoord.getName(), vertCoord.getUnit(), null, DataType.DOUBLE, axisType, atts, CoverageCoordAxis.DependenceType.independent, null, null, n, 0.0, 0.0, 0.0, values, this); builder.setSpacingFromValues(vertCoord.isLayer()); return new CoverageCoordAxis1D(builder); }
private CoverageCoordAxis makeCoordAxis(CoordinateTime time) { trackDateRange(time.makeCalendarDateRange(null)); // default calendar List<Integer> offsets = time.getOffsetSorted(); int n = offsets.size(); double[] values = new double[n]; int count = 0; for (int offset : offsets) values[count++] = offset; AttributeContainerHelper atts = new AttributeContainerHelper(time.getName()); atts.addAttribute(new Attribute(CDM.UNITS, time.getUnit())); atts.addAttribute(new Attribute(CF.STANDARD_NAME, CF.TIME)); atts.addAttribute(new Attribute(CDM.LONG_NAME, Grib.GRIB_VALID_TIME)); atts.addAttribute(new Attribute(CF.CALENDAR, ucar.nc2.time.Calendar.proleptic_gregorian.toString())); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(time.getName(), time.getTimeUdUnit(), Grib.GRIB_VALID_TIME, DataType.DOUBLE, AxisType.Time, atts, CoverageCoordAxis.DependenceType.independent, null, null, n, 0, 0, 0, values, this); builder.setSpacingFromValues(false); return new CoverageCoordAxis1D(builder); }
private CoverageCoordAxis1D makeRuntimeCoord(CoordinateRuntime runtime) { String units = runtime.getPeriodName() + " since " + gribCollection.getMasterFirstDate().toString(); List<Double> offsets = runtime.getOffsetsInTimeUnits(); int n = offsets.size(); // CoordinateRuntime master = gribCollection.getMasterRuntime(); boolean isScalar = (n == 1); // this is the case of runtime[1] CoverageCoordAxis.DependenceType dependence = isScalar ? CoverageCoordAxis.DependenceType.scalar : CoverageCoordAxis.DependenceType.independent; double[] values = new double[n]; int count = 0; for (Double offset : runtime.getOffsetsInTimeUnits()) values[count++] = offset; AttributeContainerHelper atts = new AttributeContainerHelper(runtime.getName()); atts.addAttribute(new Attribute(CDM.UNITS, units)); atts.addAttribute(new Attribute(CF.STANDARD_NAME, CF.TIME_REFERENCE)); atts.addAttribute(new Attribute(CDM.LONG_NAME, "GRIB reference time")); atts.addAttribute(new Attribute(CF.CALENDAR, ucar.nc2.time.Calendar.proleptic_gregorian.toString())); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(runtime.getName(), units, "GRIB reference time", DataType.DOUBLE, AxisType.RunTime, atts, dependence, null, null, n, 0.0, 0.0, 0.0, values, this); builder.setSpacingFromValues(false); return new CoverageCoordAxis1D(builder); }
private CoverageCoordAxis makeCoordAxis(CoordinateTimeIntv time) { trackDateRange(time.makeCalendarDateRange(null)); // default calendar List<TimeCoord.Tinv> offsets = time.getTimeIntervals(); int n = offsets.size(); double[] values = new double[2 * n]; int count = 0; for (TimeCoord.Tinv offset : offsets) { values[count++] = offset.getBounds1(); values[count++] = offset.getBounds2(); } AttributeContainerHelper atts = new AttributeContainerHelper(time.getName()); atts.addAttribute(new Attribute(CDM.UNITS, time.getUnit())); atts.addAttribute(new Attribute(CF.STANDARD_NAME, CF.TIME)); atts.addAttribute(new Attribute(CDM.LONG_NAME, Grib.GRIB_VALID_TIME)); atts.addAttribute(new Attribute(CF.CALENDAR, ucar.nc2.time.Calendar.proleptic_gregorian.toString())); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(time.getName(), time.getTimeUdUnit(), Grib.GRIB_VALID_TIME, DataType.DOUBLE, AxisType.Time, atts, CoverageCoordAxis.DependenceType.independent, null, null, n, 0, 0, 0, values, this); builder.setSpacingFromValues(true); return new CoverageCoordAxis1D(builder); }
private CoverageCoordAxis makeRuntimeAuxCoord(CoordinateTimeAbstract time) { if (time.getTime2runtime() == null) return null; String refName = "ref" + time.getName(); int length = time.getSize(); double[] data = new double[length]; for (int i = 0; i < length; i++) data[i] = Double.NaN; int count = 0; CoordinateRuntime master = gribCollection.getMasterRuntime(); List<Double> masterOffsets = master.getOffsetsInTimeUnits(); for (int masterIdx : time.getTime2runtime()) { data[count++] = masterOffsets.get(masterIdx - 1); } AttributeContainerHelper atts = new AttributeContainerHelper(time.getName()); atts.addAttribute(new Attribute(CDM.UNITS, time.getTimeUdUnit())); atts.addAttribute(new Attribute(CF.STANDARD_NAME, CF.TIME_REFERENCE)); atts.addAttribute(new Attribute(CDM.LONG_NAME, Grib.GRIB_RUNTIME)); atts.addAttribute(new Attribute(CF.CALENDAR, ucar.nc2.time.Calendar.proleptic_gregorian.toString())); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(refName, master.getUnit(), Grib.GRIB_RUNTIME, DataType.DOUBLE, AxisType.RunTime, atts, CoverageCoordAxis.DependenceType.dependent, time.getName(), null, length, 0, 0, 0, data, this); builder.setSpacingFromValues(false); return new CoverageCoordAxis1D(builder); }
private CoverageCoordAxis makeRuntimeAuxCoord(CoordinateTime2D time2D, int ntimes) { CoordinateRuntime runtimeU = time2D.getRuntimeCoordinate(); List<Double> runOffsets = runtimeU.getOffsetsInTimeUnits(); double[] values = new double[ntimes]; int count = 0; for (int run = 0; run < time2D.getNruns(); run++) { CoordinateTimeAbstract timeCoord = time2D.getTimeCoordinate(run); for (int time = 0; time < timeCoord.getNCoords(); time++) values[count++] = runOffsets.get(run); } boolean isScalar = (time2D.getNruns() == 1); // this is the case of runtime[1] CoverageCoordAxis.DependenceType dependence = isScalar ? CoverageCoordAxis.DependenceType.scalar : CoverageCoordAxis.DependenceType.dependent; String refName = "ref" + time2D.getName(); AttributeContainerHelper atts = new AttributeContainerHelper(time2D.getName()); atts.addAttribute(new Attribute(CDM.UNITS, time2D.getTimeUdUnit())); atts.addAttribute(new Attribute(CF.STANDARD_NAME, CF.TIME_REFERENCE)); atts.addAttribute(new Attribute(CDM.LONG_NAME, Grib.GRIB_RUNTIME)); atts.addAttribute(new Attribute(CF.CALENDAR, ucar.nc2.time.Calendar.proleptic_gregorian.toString())); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(refName, time2D.getTimeUdUnit(), Grib.GRIB_RUNTIME, DataType.DOUBLE, AxisType.RunTime, atts, dependence, time2D.getName(), null, ntimes, 0, 0, 0, values, this); builder.setSpacingFromValues(false); return new CoverageCoordAxis1D(builder); }
builder.setSpacingFromValues(time2D.isTimeInterval());
AxisType.TimeOffset, atts, CoverageCoordAxis.DependenceType.fmrcReg, dependsOn, null, nruns * ntimes, 0.0, 0.0, 0.0, values, this); builder.setSpacingFromValues(time2D.isTimeInterval());
builder.setSpacingFromValues(time2D.isTimeInterval());