/*- * Copyright 2015 Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package uk.ac.diamond.scisoft.analysis.diffraction.powder; import java.util.Arrays; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; public class XYImagePixelCache implements IPixelIntegrationCache { private Dataset x; private Dataset y; private double[] xRange; private double[] yRange; private int nX; private int nY; private Dataset xAxis; private Dataset yAxis; public XYImagePixelCache(Dataset xd, Dataset yd, double[] xRange, double[] yRange, int nX, int nY) { this.x = xd; this.y = yd; double shiftx = (xRange[1]- xRange[0])/(2*nX); double shifty = (xRange[1]- xRange[0])/(2*nX); this.xRange = xRange.clone(); Arrays.sort(this.xRange); this.xRange[0] -= shiftx; this.xRange[1] += shiftx; this.yRange = yRange.clone(); Arrays.sort(this.yRange); this.yRange[0] -= shifty; this.yRange[1] += shifty; this.nX = nX; this.nY = nY; this.xAxis = calculateAxis(nX, xRange); this.yAxis = calculateAxis(nY, yRange); } @Override public Dataset[] getXAxisArray() { return new Dataset[]{x}; } @Override public Dataset[] getYAxisArray() { return new Dataset[]{y}; } @Override public double getXBinEdgeMax() { return xRange[1]; } @Override public double getXBinEdgeMin() { return xRange[0]; } @Override public double getYBinEdgeMax() { return yRange[1]; } @Override public double getYBinEdgeMin() { return yRange[0]; } @Override public int getNumberOfBinsXAxis() { return nX; } @Override public int getNumberOfBinsYAxis() { return nY; } @Override public double[] getYAxisRange() { return yRange; } @Override public double[] getXAxisRange() { return xRange; } @Override public Dataset getXAxis() { return xAxis; } @Override public Dataset getYAxis() { return yAxis; } @Override public boolean isPixelSplitting() { return false; } @Override public boolean isTo1D() { return false; } private static Dataset calculateAxis(int nBins, double[] binRange){ // double shift = (binRange[1]- binRange[0])/(2*nBins); // return DatasetFactory.createLinearSpace(binRange[0]-shift, binRange[1]+shift, nBins + 1, Dataset.FLOAT64); return DatasetFactory.createLinearSpace(binRange[0], binRange[1], nBins, Dataset.FLOAT64); } @Override public boolean sanitise() { return false; } @Override public boolean provideLookup() { return true; } }