/** * Creates an instance of this class for the given region and terms. * * @param offsetX the X-offset of the region. * @param offsetY the Y-offset of the region. * @param regionWidth the width of the region. * @param regionHeight the height of the region. * @param terms an array of terms. * @param pm a monitor to inform the user about progress */ public RasterDataLoop(final int offsetX, final int offsetY, final int regionWidth, final int regionHeight, final Term[] terms, final ProgressMonitor pm) { this(new RasterDataEvalEnv(offsetX, offsetY, regionWidth, regionHeight), terms, pm); }
@Override public final double evalD(final EvalEnv env) throws EvalException { final int elemIndex = ((RasterDataEvalEnv) env).getElemIndex(); return (data.getElemIntAt(elemIndex) & flagMask) == flagMask ? 1.0 : 0.0; } }
public int getOffsetX() { return rasterDataEvalEnv.getOffsetX(); }
private static GeoPos getGeoPos(final GeoCoding geoCoding, EvalEnv env, int width, int height) { RasterDataEvalEnv rasterEnv = (RasterDataEvalEnv) env; int pixelX = rasterEnv.getPixelX(); int pixelY = rasterEnv.getPixelY(); if (pixelX >= 0 && pixelX < width && pixelY >= 0 && pixelY < height) { return geoCoding.getGeoPos(new PixelPos(pixelX + 0.5f, pixelY + 0.5f), null); } return INVALID_GEO_POS; }
public void testDefaultConstructor() { final RasterDataEvalEnv env = new RasterDataEvalEnv(0, 0, 1, 1); assertEquals(0, env.getPixelX()); assertEquals(0, env.getPixelY()); assertEquals(0, env.getElemIndex()); assertEquals(0, env.getOffsetX()); assertEquals(0, env.getOffsetY()); assertEquals(1, env.getRegionWidth()); assertEquals(1, env.getRegionHeight()); }
public void testXY() { final RasterDataEvalEnv env = new RasterDataEvalEnv(50, 20, 200, 100); assertEquals(0, env.getElemIndex()); assertEquals(50, env.getPixelX()); assertEquals(20, env.getPixelY()); env.setElemIndex(1); assertEquals(1, env.getElemIndex()); assertEquals(50 + 1, env.getPixelX()); assertEquals(20, env.getPixelY()); env.setElemIndex(200 + 2); assertEquals(200 + 2, env.getElemIndex()); assertEquals(50 + 2, env.getPixelX()); assertEquals(20 + 1, env.getPixelY()); env.setElemIndex(70 * 200 + 110); assertEquals(70 * 200 + 110, env.getElemIndex()); assertEquals(50 + 110, env.getPixelX()); assertEquals(20 + 70, env.getPixelY()); } }
/** * Creates an instance of this class for the given region and terms. * * @param rasterDataEvalEnv the raster data evaluation environment passed to the term evaluation * @param terms an array of terms. * @param pm a monitor to inform the user about progress */ public RasterDataLoop(final RasterDataEvalEnv rasterDataEvalEnv, final Term[] terms, final ProgressMonitor pm) { Guardian.assertNotNull("rasterDataEvalEnv", rasterDataEvalEnv); Guardian.assertNotNull("pm", pm); checkTerms(terms); checkRegion(rasterDataEvalEnv.getOffsetX(), rasterDataEvalEnv.getOffsetY(), rasterDataEvalEnv.getRegionWidth(), rasterDataEvalEnv.getRegionHeight(), terms); this.rasterDataEvalEnv = rasterDataEvalEnv; this.terms = terms; this.rasterRegions = createRasterRegions(terms, rasterDataEvalEnv.getRegionWidth(), 1); this.pm = pm; }
final int rowCount = destRect.height; final int pixelCount = colCount * rowCount; final RasterDataEvalEnv env = new RasterDataEvalEnv(destRect.x, destRect.y, colCount, rowCount, getLevelImageSupport()); for (int i = 0, k = w * y; i < pixelCount; i += colCount, k += w) { for (int j = 0, l = x; j < colCount; j++, l++) { env.setElemIndex(i + j); productData.setElemUIntAt(k + l, term.evalB(env) ? TRUE : FALSE); for (int i = 0, k = w * y; i < pixelCount; i += colCount, k += w) { for (int j = 0, l = x; j < colCount; j++, l++) { env.setElemIndex(i + j); final double v = term.evalD(env); if (Double.isNaN(v) || Double.isInfinite(v)) { for (int i = 0, k = w * y; i < pixelCount; i += colCount, k += w) { for (int j = 0, l = x; j < colCount; j++, l++) { env.setElemIndex(i + j); productData.setElemDoubleAt(k + l, term.evalD(env));
env.setElemIndex(x); body.eval(env, pixelIndex); pixelIndex++;
@Override public double evalD(EvalEnv env) throws EvalException { return ((RasterDataEvalEnv) env).getPixelY() + 0.5; } };
@Override public double evalD(EvalEnv env) throws EvalException { return ((RasterDataEvalEnv) env).getPixelX() + 0.5; } };
public int getRegionWidth() { return rasterDataEvalEnv.getRegionWidth(); }
public int getRegionHeight() { return rasterDataEvalEnv.getRegionHeight(); }
public int getOffsetY() { return rasterDataEvalEnv.getOffsetY(); }
public void testConstructor() { final RasterDataEvalEnv env = new RasterDataEvalEnv(20, 14, 238, 548); assertEquals(20, env.getPixelX()); assertEquals(14, env.getPixelY()); assertEquals(0, env.getElemIndex()); assertEquals(20, env.getOffsetX()); assertEquals(14, env.getOffsetY()); assertEquals(238, env.getRegionWidth()); assertEquals(548, env.getRegionHeight()); }
final RasterDataEvalEnv env = new RasterDataEvalEnv(rect.x, rect.y, rect.width, rect.height); pm.beginTask("Evaluating expression", rect.height); try { env.setElemIndex(pixelIndex); final double v = term.evalD(env); if (Double.isNaN(v) || Double.isInfinite(v)) {
@Override public double evalD(EvalEnv env) throws EvalException { int pixelY = ((RasterDataEvalEnv) env).getPixelY(); ProductData.UTC scanLineTime = ProductUtils.getScanLineTime(product, pixelY); if (scanLineTime != null) { return scanLineTime.getMJD(); } return Double.NaN; } }
@Test public void testMJDSymbol_no_time() throws Exception { final Product product = new Product("name", "type", 10, 10); MoreFuncs.MJD mjd = new MoreFuncs.MJD(product); assertTrue(Double.isNaN(mjd.evalD(new RasterDataEvalEnv(-1, -1, -1, -1)))); } }
@Override public double evalD(final EvalEnv env) throws EvalException { final int elemIndex = ((RasterDataEvalEnv) env).getElemIndex(); return data.getElemDoubleAt(elemIndex); }
@Test public void testMJDSymbol() throws Exception { final Product product = new Product("name", "type", 10, 10); ProductData.UTC startTime = ProductData.UTC.parse("01-Jan-2010 00:00:00"); ProductData.UTC endTime = ProductData.UTC.parse("01-Jan-2010 10:00:00"); product.setStartTime(startTime); product.setEndTime(endTime); MoreFuncs.MJD mjd = new MoreFuncs.MJD(product); RasterDataEvalEnv rasterEnv = new RasterDataEvalEnv(0, 0, 10, 10); assertEquals(startTime.getMJD(), mjd.evalD(rasterEnv), 1E-6); rasterEnv = new RasterDataEvalEnv(9, 0, 10, 10); assertEquals(startTime.getMJD(), mjd.evalD(rasterEnv), 1E-6); rasterEnv = new RasterDataEvalEnv(0, 9, 10, 10); assertEquals(endTime.getMJD(), mjd.evalD(rasterEnv), 1E-6); rasterEnv = new RasterDataEvalEnv(9, 9, 10, 10); assertEquals(endTime.getMJD(), mjd.evalD(rasterEnv), 1E-6); rasterEnv = new RasterDataEvalEnv(-1, 4, 10, 10); double centralTime = (startTime.getMJD() * 5 + endTime.getMJD() * 4) / 9; assertEquals(centralTime, mjd.evalD(rasterEnv), 1E-6); }