Files
x11ma/plugins/fiji/sparseviewer/otf/DelayCorrection.java
T
2026-06-24 13:28:45 +02:00

79 lines
1.9 KiB
Java

package sparseviewer.otf;
public class DelayCorrection {
public static CorrectedXY correctXY(double[] x,
double[] y,
double shiftSamples) {
double[] xc = shiftArray(x, shiftSamples);
double[] yc = shiftArray(y, shiftSamples);
return new CorrectedXY(xc, yc);
}
public static double[] shiftArray(double[] values, double shiftSamples) {
if (values == null) {
return null;
}
double[] out = new double[values.length];
for (int i = 0; i < values.length; i++) {
double sourceIndex = i - shiftSamples;
out[i] = interpolateAt(values, sourceIndex);
}
return out;
}
private static double interpolateAt(double[] values, double index) {
if (values == null || values.length == 0) {
return Double.NaN;
}
if (index < 0.0 || index > values.length - 1) {
return Double.NaN;
}
int i0 = (int) Math.floor(index);
int i1 = i0 + 1;
if (i1 >= values.length) {
return values[i0];
}
double v0 = values[i0];
double v1 = values[i1];
if (!isFinite(v0) || !isFinite(v1)) {
return Double.NaN;
}
double alpha = index - i0;
return (1.0 - alpha) * v0 + alpha * v1;
}
private static boolean isFinite(double v) {
return !Double.isNaN(v) && !Double.isInfinite(v);
}
public static class CorrectedXY {
private final double[] x;
private final double[] y;
public CorrectedXY(double[] x, double[] y) {
this.x = x;
this.y = y;
}
public double[] getX() {
return x;
}
public double[] getY() {
return y;
}
}
}