package org.das2.dataset; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import org.das2.DasException; import org.das2.datum.Datum; import org.das2.datum.InconvertibleUnitsException; import org.das2.datum.LoggerManager; import org.das2.datum.Units; import org.das2.datum.UnitsUtil; import org.das2.qds.DDataSet; import org.das2.qds.IndexGenDataSet; import org.das2.qds.QDataSet; import org.das2.qds.SemanticOps; import org.das2.qds.ops.Ops; /** * Revisit Larry's KernalRebinner, where each point is spread out using * a kernel, and then convoluted with each data point. * @author jbf */ public class KernelRebinner implements DataSetRebinner { private static final Logger logger= LoggerManager.getLogger("das2.data.rebinner"); public enum Type { flat, cone, disk, } Type type; public KernelRebinner( Type t ) { this.type = t; } public static QDataSet makeFlatKernel( RebinDescriptor ddX, RebinDescriptor ddY, int nx, int ny ) { DDataSet k= DDataSet.createRank2( nx,ny ); for ( int i=0; inx4 && rnx) x0=nx; // trim to visible portion if (x1<0) x1=0; else if (x1>nx) x1=nx+1; if (y0<0) y0=0; else if (y0>ny) y0=ny; if (y1<0) y1=0; else if (y1>ny) y1=ny+1; for ( int i=x0; i0. && m11>0. ) { rebinData.putValue( i, j, rebinData.value(i,j)/w11 ); } else { rebinData.putValue( i, j, Double.NaN ); } } } rebinData.putProperty( QDataSet.WEIGHTS, rebinWeights ); logger.finest( "create new DataSet" ); QDataSet xtags= Ops.dataset( ddX.binCentersDV() ); QDataSet ytags= Ops.dataset( ddY.binCentersDV() ); logger.log(Level.FINER, "time to complete (ms): {0}", System.currentTimeMillis()-t0); logger.finest("done, QernalTableRebinner.rebin"); return Ops.link( xtags, ytags, rebinData ); } }