@Override public CoverageCoordAxis copy() { return new LatLonAxis2D(new CoverageCoordAxisBuilder(this)); }
@Override public CoverageCoordAxis copy() { return new CoverageCoordAxis1D(new CoverageCoordAxisBuilder(this)); }
@Override public CoverageCoordAxis copy() { return new TimeAxis2DFmrc(new CoverageCoordAxisBuilder(this)); }
@Override public CoverageCoordAxis copy() { return new TimeAxis2DFmrcReg(new CoverageCoordAxisBuilder(this)); }
@Override public CoverageCoordAxis copy() { return new TimeAxis2DSwath(new CoverageCoordAxisBuilder(this)); }
@Override public CoverageCoordAxis copy() { return new TimeOffsetAxis(new CoverageCoordAxisBuilder(this)); }
@Override public Optional<CoverageCoordAxis> subset(double minValue, double maxValue, int stride) { // LOOK not implemented, maybe illegal ?? return Optional.of(new TimeAxis2DSwath(new CoverageCoordAxisBuilder(this))); }
@Override public Optional<CoverageCoordAxis> subset(double minValue, double maxValue, int stride) { // LOOK not implemented, maybe illegal ?? return Optional.of(new TimeAxis2DFmrc(new CoverageCoordAxisBuilder(this))); }
@Nonnull private CoverageCoordAxisBuilder subsetValuesLatest() { int last = axis.getNcoords() - 1; double val = axis.getCoordMidpoint(last); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(axis); builder.subset(1, val, val, 0.0, makeValues(last)); try { builder.setRange(new Range(last, last)); } catch (InvalidRangeException e) { throw new RuntimeException(e); // cant happen } return builder; }
private static CoverageCoordAxis makeCoordAxisFromDimension(Dimension dim) { CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(); builder.name = dim.getFullName(); builder.dataType = DataType.INT; builder.axisType = AxisType.Dimension; builder.dependenceType = CoverageCoordAxis.DependenceType.dimension; builder.spacing = CoverageCoordAxis.Spacing.regularPoint; builder.ncoords = dim.getLength(); builder.startValue = 0; builder.endValue = dim.getLength()-1; builder.resolution = 1; return new CoverageCoordAxis1D(builder); }
public LatLonAxis2D subset(RangeIterator rangex, RangeIterator rangey) { CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(this); // subset the values double[] values = getValues(); int nx = rangex.length(); int ny = rangey.length(); double[] svalues = new double[nx * ny]; int count = 0; for (int y : rangey) for (int x : rangex) svalues[count++] = values[y * nx + x]; builder.values = svalues; builder.isSubset = true; builder.ncoords = nx * ny; builder.shape = new int[]{ny, nx}; return new LatLonAxis2D(builder); }
Optional<CoverageCoordAxisBuilder> subsetContaining(double want) { int index = findCoordElement(want, false); // not bounded, may not be valid index if (index < 0 || index >= axis.getNcoords()) return Optional.empty(String.format("value %f not in axis %s", want, axis.getName())); double val = axis.getCoordMidpoint(index); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(axis); builder.subset(1, val, val, 0.0, makeValues(index)); try { builder.setRange(new Range(index, index)); } catch (InvalidRangeException e) { throw new RuntimeException(e); // cant happen } return Optional.of(builder); }
@Nonnull private CoverageCoordAxisBuilder subsetValuesClosest(double[] want) { int closest_index = findCoordElement(want, true); // bounded, always valid index if (closest_index < 0) findCoordElement(want, true); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(axis); if (axis.spacing == CoverageCoordAxis.Spacing.regularInterval) { double val1 = axis.getCoordEdge1(closest_index); double val2 = axis.getCoordEdge2(closest_index); builder.subset(1, val1, val2, val2-val1, null); } else { builder.subset(1, 0, 0, 0.0, makeValues(closest_index)); } try { builder.setRange(new Range(closest_index, closest_index)); } catch (InvalidRangeException e) { throw new RuntimeException(e); // cant happen } return builder; }
@Nonnull private CoverageCoordAxisBuilder subsetValuesClosest(double want) { int closest_index = findCoordElement(want, true); // bounded, always valid index CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(axis); if (axis.spacing == CoverageCoordAxis.Spacing.regularPoint) { double val = axis.getCoordMidpoint(closest_index); builder.subset(1, val, val, 0.0, null); } else if (axis.spacing == CoverageCoordAxis.Spacing.regularInterval) { double val1 = axis.getCoordEdge1(closest_index); double val2 = axis.getCoordEdge2(closest_index); builder.subset(1, val1, val2, val2-val1, null); } else { builder.subset(1, 0, 0, 0.0, makeValues(closest_index)); } try { builder.setRange(new Range(closest_index, closest_index)); } catch (InvalidRangeException e) { throw new RuntimeException(e); // cant happen } return builder; }
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 makeScalarTimeCoord(double val, CoverageCoordAxis1D runAxisSubset) { String name = "constantForecastTime"; String desc = "forecast time"; AttributeContainerHelper atts = new AttributeContainerHelper(name); atts.addAttribute(new Attribute(CDM.UNITS, runAxisSubset.getUnits())); atts.addAttribute(new Attribute(CF.STANDARD_NAME, CF.TIME)); atts.addAttribute(new Attribute(CDM.LONG_NAME, desc)); atts.addAttribute(new Attribute(CF.CALENDAR, runAxisSubset.getCalendar().toString())); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(name, runAxisSubset.getUnits(), desc, DataType.DOUBLE, AxisType.Time, atts, CoverageCoordAxis.DependenceType.scalar, null, CoverageCoordAxis.Spacing.regularPoint, 1, val, val, 0.0, null, null); builder.setIsSubset(true); return new CoverageCoordAxis1D(builder); }
private CoverageCoordAxis makeScalarTimeCoord(double val, CoverageCoordAxis1D runAxisSubset) { String name = "constantForecastTime"; String desc = "forecast time"; AttributeContainerHelper atts = new AttributeContainerHelper(name); atts.addAttribute(new Attribute(CDM.UNITS, runAxisSubset.getUnits())); atts.addAttribute(new Attribute(CF.STANDARD_NAME, CF.TIME)); atts.addAttribute(new Attribute(CDM.LONG_NAME, desc)); atts.addAttribute(new Attribute(CF.CALENDAR, runAxisSubset.getCalendar().toString())); CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(name, runAxisSubset.getUnits(), desc, DataType.DOUBLE, AxisType.Time, atts, CoverageCoordAxis.DependenceType.scalar, null, CoverageCoordAxis.Spacing.regularPoint, 1, val, val, 0.0, null, null); builder.setIsSubset(true); 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); }