package cz.cuni.lf1.lge.ThunderSTORM.calibration; import cz.cuni.lf1.lge.ThunderSTORM.IModule; import cz.cuni.lf1.lge.ThunderSTORM.IModuleUI; import org.apache.commons.math3.analysis.ParametricUnivariateFunction; abstract public class DefocusFunction extends IModuleUI<DefocusFunction> implements IModule { public double a; public double b; public double c; public double d; public double w0; public boolean scaledToNm; public DefocusFunction() { this(0, 0, 0, 0, 0, false); } public DefocusFunction(double w0, double a, double b, double c, double d, boolean scaledToNm) { this.w0 = w0; this.a = a; this.b = b; this.c = c; this.d = d; this.scaledToNm = scaledToNm; } public double getW0() { return w0; } public void setW0(double w0) { this.w0 = w0; } public double getA() { return a; } public void setA(double a) { this.a = a; } public double getB() { return b; } public void setB(double b) { this.b = b; } public double getC() { return c; } public void setC(double c) { this.c = c; } public double getD() { return d; } public void setD(double d) { this.d = d; } public double value(double z) { return value(z, w0, a, b, c, d); } public void shiftInZ(double shiftAmmount) { c -= shiftAmmount; } public double[] toParArray() { return new double[]{w0, c, a, b, d}; } public abstract double[] transformParams(double [] params); public abstract double[] transformParamsInverse(double [] params); public abstract double value(double z, double w0, double a, double b, double c, double d); public abstract ParametricUnivariateFunction getFittingFunction(); public abstract DefocusFunction getNewInstance(double w0, double a, double b, double c, double d, boolean scaledToNm); public abstract DefocusFunction getNewInstance(double[] params, boolean scaledToNm); public abstract DefocusCalibration getCalibration(); // just to get an empty instance public abstract DefocusCalibration getCalibration(double angle, Homography.TransformationMatrix biplaneTransformation, DefocusFunction polynomS1Final, DefocusFunction polynomS2Final); public abstract double[] getInitialParams(double xmin, double ymin); }