protected CoverageCoordAxis(CoverageCoordAxisBuilder builder) { this.name = builder.name; this.units = builder.units; this.description = builder.description; this.dataType = builder.dataType; this.axisType = builder.axisType; this.attributes = builder.attributes; this.dependenceType = builder.dependenceType; this.spacing = builder.spacing; this.values = builder.values; this.reader = builder.reader; // used only if values == null this.dependsOn = builder.dependsOn == null ? Collections.emptyList() : builder.dependsOn; this.startValue = builder.startValue; this.endValue = builder.endValue; this.resolution = builder.resolution; this.ncoords = builder.ncoords; this.isSubset = builder.isSubset; if (builder.timeHelper != null) { this.timeHelper = builder.timeHelper; } else { if (axisType == AxisType.Time || axisType == AxisType.RunTime) timeHelper = TimeHelper.factory(units, attributes); else if (axisType == AxisType.TimeOffset) timeHelper = TimeHelper.factory(null, attributes); else timeHelper = null; } }
public CalendarDate makeDate(CalendarDate runDate, double val) { double offset = timeHelper.getOffsetInTimeUnits(timeHelper.getRefDate(), runDate); return timeHelper.makeDate(offset + val); }
public Calendar getCalendar() { return timeHelper.getCalendar(); }
public CalendarDate makeDate(double value) { return timeHelper.makeDate(value); }
static public TimeHelper factory(String units, AttributeContainer atts) { if (units == null) units = atts.findAttValueIgnoreCase(CDM.UDUNITS, null); if (units == null) units = atts.findAttValueIgnoreCase(CDM.UNITS, null); if (units == null) throw new IllegalStateException("No units"); Calendar cal = getCalendarFromAttribute(atts); CalendarDateUnit dateUnit; try { dateUnit = CalendarDateUnit.withCalendar(cal, units); // this will throw exception on failure return new TimeHelper( dateUnit); } catch (IllegalArgumentException e) { return null; } }
Calendar cal = TimeHelper.getCalendarFromAttribute(timeVar);
public CalendarDate getRefDate() { return timeHelper.getRefDate(); }
public CalendarDateUnit getCalendarDateUnit() { return timeHelper.getCalendarDateUnit(); }
public CalendarDateRange getDateRange() { return timeHelper.getDateRange(startValue, endValue); }
public double getOffsetInTimeUnits(CalendarDate start, CalendarDate end) { return timeHelper.getOffsetInTimeUnits(start, end); }
public TimeHelper setReferenceDate(CalendarDate refDate) { CalendarDateUnit cdUnit = CalendarDateUnit.of(dateUnit.getCalendar(), dateUnit.getCalendarField(), refDate); return new TimeHelper(cdUnit); }
public List<NamedObject> getCoordValueNames() { loadValuesIfNeeded(); if (timeHelper != null) return timeHelper.getCoordValueNames(this); List<NamedObject> result = new ArrayList<>(); for (int i = 0; i < ncoords; i++) { Object value = null; switch (spacing) { case regularPoint: case irregularPoint: value = Format.d(getCoordMidpoint(i), 3); break; case regularInterval: case contiguousInterval: case discontiguousInterval: value = new CoordInterval(getCoordEdge1(i), getCoordEdge2(i), 3); break; } result.add(new NamedAnything(value, value + " " + getUnits())); } return result; }
if (timeHelper != null) f.format(" refDate=%s", timeHelper.getRefDate()); f.format("%n");
public List<NamedObject> getCoordValueNames(CoverageCoordAxis1D axis) { axis.loadValuesIfNeeded(); List<NamedObject> result = new ArrayList<>(); for (int i = 0; i < axis.getNcoords(); i++) { double value; switch (axis.getSpacing()) { case regularPoint: case irregularPoint: value = axis.getCoordMidpoint(i); result.add(new NamedAnything(makeDate(value), axis.getAxisType().toString())); break; case regularInterval: case contiguousInterval: case discontiguousInterval: CoordInterval coord = new CoordInterval(axis.getCoordEdge1(i), axis.getCoordEdge2(i), 3); result.add(new NamedAnything(coord, coord + " " + axis.getUnits())); break; } } return result; }
static void readAllRuntimes(Coverage cover, GridDatatype dt, CoordinateAxis1DTime runtimeAxis, CoordinateAxis1D ensAxis, CoordinateAxis1D vertAxis) { GridCoordSystem csys = dt.getCoordinateSystem(); CoordinateAxis1DTime timeAxis1D = csys.getTimeAxis1D(); CoordinateAxis timeAxis = csys.getTimeAxis(); CoordinateAxis2D timeAxis2D = (timeAxis instanceof CoordinateAxis2D) ? (CoordinateAxis2D) timeAxis : null; if (runtimeAxis == null) readAllTimes1D(cover, dt, null, -1, timeAxis1D, ensAxis, vertAxis); else if (timeAxis2D == null) { // 1D time or no time for (int i = 0; i < runtimeAxis.getSize(); i++) readAllTimes1D(cover, dt, runtimeAxis.getCalendarDate(i), i, timeAxis1D, ensAxis, vertAxis); } else { // 2D time TimeHelper helper = TimeHelper.factory(timeAxis.getUnitsString(), timeAxis.getAttributeContainer()); if (timeAxis2D.isInterval()) { ArrayDouble.D3 bounds = timeAxis2D.getCoordBoundsArray(); for (int i = 0; i < runtimeAxis.getSize(); i++) readAllTimes2D(cover, dt, runtimeAxis.getCalendarDate(i), i, helper, bounds.slice(0, i), ensAxis, vertAxis); } else { ArrayDouble.D2 coords = timeAxis2D.getCoordValuesArray(); for (int i = 0; i < runtimeAxis.getSize(); i++) readAllTimes2D(cover, dt, runtimeAxis.getCalendarDate(i), i, helper, coords.slice(0, i), ensAxis, vertAxis); } } }
static void readAllTimes2D(Coverage cover, GridDatatype dt, CalendarDate rt_val, int rt_idx, TimeHelper helper, Array timeVals, CoordinateAxis1D ensAxis, CoordinateAxis1D vertAxis) { int[] shape = timeVals.getShape(); if (timeVals.getRank() == 1) { timeVals.resetLocalIterator(); int time_idx = 0; while (timeVals.hasNext()) { double timeVal = timeVals.nextDouble(); readAllEnsembles(cover, dt, rt_val, rt_idx, helper.makeDate(timeVal), time_idx++, ensAxis, vertAxis); } } else { Index index = timeVals.getIndex(); for (int i=0; i<shape[0]; i++) { double timeVal = (timeVals.getDouble(index.set(i,0)) + timeVals.getDouble(index.set(i,1))) / 2; readAllEnsembles(cover, dt, rt_val, rt_idx, helper.makeDate(timeVal), i, ensAxis, vertAxis); } } }