public CoverageCoordAxis1D getTimeAxisForRun(CalendarDate rundate) { double rundateTarget = runCoord.convert(rundate); int run_index = new CoordAxisHelper(runCoord).findCoordElement(rundateTarget, false); // LOOK not Bounded return (run_index < 0 || run_index >= runCoord.getNcoords()) ? null : getTimeAxisForRun(run_index); }
public Optional<CoverageCoordAxis> subsetByIndex(Range range) { try { CoordAxisHelper helper = new CoordAxisHelper(this); CoverageCoordAxisBuilder builder = helper.subsetByIndex(range); return Optional.of(new CoverageCoordAxis1D(builder)); } catch (InvalidRangeException e) { return Optional.empty(e.getMessage()); } }
@Override public Optional<CoverageCoordAxis> subsetDependent(CoverageCoordAxis1D dependsOn) { CoverageCoordAxisBuilder builder; try { builder = new CoordAxisHelper(this).subsetByIndex(dependsOn.getRange()); // LOOK Other possible subsets? } catch (InvalidRangeException e) { return Optional.empty(e.getMessage()); } return Optional.of(new CoverageCoordAxis1D(builder)); }
@Override public Optional<CoverageCoordAxis> subset(double minValue, double maxValue, int stride) throws InvalidRangeException { CoordAxisHelper helper = new CoordAxisHelper(this); Optional<CoverageCoordAxisBuilder> buildero = helper.subset(minValue, maxValue, stride); return !buildero.isPresent() ? Optional.empty(buildero.getErrorMessage()) : Optional.of(new CoverageCoordAxis1D(buildero.get())); }
@Override public Optional<CoverageCoordAxis> subset(double minValue, double maxValue, int stride) { CoordAxisHelper helper = new CoordAxisHelper(this); Optional<CoverageCoordAxisBuilder> buildero = helper.subset(minValue, maxValue, stride); return !buildero.isPresent() ? Optional.empty(buildero.getErrorMessage()) : Optional.of(new TimeOffsetAxis(buildero.get())); }
public Optional<CoordReturn> findXYindexFromCoord(double x, double y) { CoordReturn result = new CoordReturn(); if (isProjection) { CoordAxisHelper xhelper = new CoordAxisHelper(xAxis); CoordAxisHelper yhelper = new CoordAxisHelper(yAxis); result.x = xhelper.findCoordElement(x, false); result.y = yhelper.findCoordElement(y, false); if (result.x >= 0 && result.x < xAxis.getNcoords() && result.y >= 0 && result.y < yAxis.getNcoords()) { result.xcoord = xAxis.getCoordMidpoint(result.x); result.ycoord = yAxis.getCoordMidpoint(result.y); return Optional.of(result); } else { return Optional.empty("not in grid"); } } else { // 1D lat lon case CoordAxisHelper xhelper = new CoordAxisHelper(lonAxis); CoordAxisHelper yhelper = new CoordAxisHelper(latAxis); double lon = LatLonPointImpl.lonNormalFrom(x, lonAxis.getStartValue()); result.x = xhelper.findCoordElement(lon, false); result.y = yhelper.findCoordElement(y, false); if (result.x >= 0 && result.x < lonAxis.getNcoords() && result.y >= 0 && result.y < latAxis.getNcoords()) { result.xcoord = lonAxis.getCoordMidpoint(result.x); result.ycoord = latAxis.getCoordMidpoint(result.y); return Optional.of(result); } else { return Optional.empty("not in grid"); } } }
double start = timeOffset.getStartValue(); double end = timeOffset.getEndValue(); CoordAxisHelper helper = new CoordAxisHelper(timeOffset);
public Optional<CoverageCoordAxis> subsetByIntervals(List<MAMath.MinMax> lonIntvs, int stride) { if (axisType != AxisType.Lon) return Optional.empty("subsetByIntervals only for longitude"); if (!isRegular()) return Optional.empty("subsetByIntervals only for regular longitude"); CoordAxisHelper helper = new CoordAxisHelper(this); double start = Double.NaN; boolean first = true; List<RangeIterator> ranges = new ArrayList<>(); for (MAMath.MinMax lonIntv : lonIntvs) { if (first) start = lonIntv.min; first = false; Optional<RangeIterator> opt = helper.makeRange(lonIntv.min, lonIntv.max, stride); if (!opt.isPresent()) return Optional.empty(opt.getErrorMessage()); ranges.add(opt.get()); } try { RangeComposite compositeRange = new RangeComposite(AxisType.Lon.toString(), ranges); int npts = compositeRange.length(); double end = start + npts * resolution; CoverageCoordAxisBuilder builder = new CoverageCoordAxisBuilder(this); // copy builder.subset(npts, start, end, resolution, null); builder.setRange(null); builder.setCompositeRange(compositeRange); return Optional.of(new CoverageCoordAxis1D(builder)); } catch (InvalidRangeException e) { return Optional.empty(e.getMessage()); } }
if (latlon != null) { // overrides other horiz subset params if (isProjection) { CoordAxisHelper xhelper = new CoordAxisHelper(xAxis); CoordAxisHelper yhelper = new CoordAxisHelper(yAxis); CoordAxisHelper xhelper = new CoordAxisHelper(lonAxis); CoordAxisHelper yhelper = new CoordAxisHelper(latAxis);
@Override public Optional<CoverageCoordAxis> subset(SubsetParams params) { if (params == null) return Optional.of(new TimeAxis2DFmrc(new CoverageCoordAxisBuilder(this))); CalendarDate rundate = (CalendarDate) params.get(SubsetParams.runtime); boolean runtimeAll = (Boolean) params.get(SubsetParams.runtimeAll); boolean latest = (rundate == null) && !runtimeAll; // default is latest int run_index = -1; if (latest) { run_index = runCoord.getNcoords() - 1; } else if (rundate != null){ double rundateTarget = runCoord.convert(rundate); CoordAxisHelper helper = new CoordAxisHelper(runCoord); run_index = helper.findCoordElement(rundateTarget, true); // LOOK Bounded } if (run_index >= 0) { CoverageCoordAxis1D time1D = getTimeAxisForRun(run_index); return time1D.subset(params); } // no subsetting needed return Optional.of(new TimeAxis2DFmrc(new CoverageCoordAxisBuilder(this))); }
public Optional<TimeOffsetAxis> subsetFromTime(SubsetParams params, CalendarDate runDate) { CoordAxisHelper helper = new CoordAxisHelper(this); CoverageCoordAxisBuilder builder = null; if (params.isTrue(SubsetParams.timePresent)) { double offset = getOffsetInTimeUnits(runDate, CalendarDate.present()); builder = helper.subsetClosest(offset); } CalendarDate dateWanted = (CalendarDate) params.get(SubsetParams.time); if (dateWanted != null) { // convertFrom, convertTo double offset = getOffsetInTimeUnits(runDate, dateWanted); builder = helper.subsetClosest(offset); } Integer stride = (Integer) params.get(SubsetParams.timeStride); if (stride == null || stride < 0) stride = 1; CalendarDateRange dateRange = (CalendarDateRange) params.get(SubsetParams.timeRange); if (dateRange != null) { double min = getOffsetInTimeUnits(runDate, dateRange.getStart()); double max = getOffsetInTimeUnits(runDate, dateRange.getEnd()); Optional<CoverageCoordAxisBuilder> buildero = helper.subset(min, max, stride); if (buildero.isPresent()) builder = buildero.get(); else return Optional.empty(buildero.getErrorMessage()); } assert (builder != null); // all the offsets are reletive to rundate builder.setReferenceDate(runDate); return Optional.of(new TimeOffsetAxis(builder)); }
return Optional.of(new CoverageCoordAxisBuilder(this)); CoordAxisHelper helper = new CoordAxisHelper(this);