Loading src/main/java/Aberration_Calibration.java +35 −0 Original line number Diff line number Diff line Loading @@ -9983,11 +9983,19 @@ if (MORE_BUTTONS) { } // double [] targetTilts={0.0,0.0}; double [] manualScrewsCW=null; double [] postUVScrews=null; if (zTxTyM1M2M3!=null){ manualScrewsCW=FOCUSING_FIELD.fieldFitting.mechanicalFocusingModel.getManualScrews( zTxTy[0]-FOCUSING_FIELD.targetRelFocalShift, //double zErr, // positive - away from lens zTxTy[1]-FOCUSING_FIELD.targetRelTiltX, //targetTilts[0], // double tXErr,// positive - 1,2 away from lens, 3 - to the lens zTxTy[2]-FOCUSING_FIELD.targetRelTiltY); //targetTilts[1]); // double tYErr); postUVScrews=FOCUSING_FIELD.fieldFitting.mechanicalFocusingModel.getManualScrews( FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity, zTxTy[0]-FOCUSING_FIELD.targetRelFocalShift, //double zErr, // positive - away from lens zTxTy[1]-FOCUSING_FIELD.targetRelTiltX, //targetTilts[0], // double tXErr,// positive - 1,2 away from lens, 3 - to the lens zTxTy[2]-FOCUSING_FIELD.targetRelTiltY); //targetTilts[1]); // double tYErr); } double scaleMovement=1.0; // calculate automatically - reduce when close boolean parallelMove=false; Loading @@ -10011,6 +10019,16 @@ if (MORE_BUTTONS) { else System.out.println("Suggested rotation for screw # "+(i+1)+ " "+IJ.d2s(manualScrewsCW[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CCW)"); } if (postUVScrews!=null) { System.out.println("----- Post-UV fixture screw adjustments -----"); for (int i=0;i<postUVScrews.length;i++){ double deg=360*Math.abs(postUVScrews[i]); if (postUVScrews[i]>=0) System.out.println("Suggested rotation for screw # "+(i+1)+ " "+IJ.d2s(postUVScrews[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CW)"); else System.out.println("Suggested rotation for screw # "+(i+1)+ " "+IJ.d2s(postUVScrews[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CCW)"); } } System.out.println("----- end of Focus/tilt measurement results -----"); if (MASTER_DEBUG_LEVEL>0) System.out.println(FOCUSING_FIELD.showSamples()); Loading Loading @@ -10042,6 +10060,17 @@ if (MORE_BUTTONS) { if (manualScrewsCW[i]>=0) gd.addMessage("Screw # "+(i+1)+" "+IJ.d2s(manualScrewsCW[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CW)"); else gd.addMessage("Screw # "+(i+1)+" "+IJ.d2s(manualScrewsCW[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CCW)"); } if (postUVScrews!=null) { for (int i=0;i<postUVScrews.length;i++){ double deg=360*Math.abs(postUVScrews[i]); if (postUVScrews[i]>=0) gd.addMessage("Screw # "+(i+1)+" "+IJ.d2s(postUVScrews[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CW)"); else gd.addMessage("Screw # "+(i+1)+" "+IJ.d2s(postUVScrews[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CCW)"); } gd.addMessage( "--- Post-UV fixture screws sensitivity ---"); for (int i=0;i<FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity.length;i++){ gd.addNumericField("Screw "+i+" sensitivity", FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity[i], 4,6,"um/turn CW"); } } gd.addNumericField("Scale movement",scaleMovement,3,5,"x"); gd.addCheckbox("Recalculate and apply parallel move only",parallelMove); // should be false after manual movement Loading Loading @@ -10076,6 +10105,12 @@ if (MORE_BUTTONS) { newMotors[0]= (int) gd.getNextNumber(); newMotors[1]= (int) gd.getNextNumber(); newMotors[2]= (int) gd.getNextNumber(); if (postUVScrews!=null) { for (int i=0;i<FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity.length;i++){ FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity[i]=gd.getNextNumber(); } } scaleMovement= gd.getNextNumber(); parallelMove= gd.getNextBoolean(); FOCUSING_FIELD.filterZ= gd.getNextBoolean(); src/main/java/FocusingField.java +39 −0 Original line number Diff line number Diff line Loading @@ -8631,6 +8631,45 @@ public boolean LevenbergMarquardt( return turnCW; } /** * Post UV gluing fixture adjustment, screw numbers match motor numbers * @param umPerTurn sensitivity of the 3 adjustment screws - microns of the uv-glued support movement per screw revolution * @param zErr current focal distance error in microns, positive - away from lens * @param tXErr current horizontal tilt in microns/mm , positive - 1,2 away from lens, 3 - to the lens * @param tYErr current vertical tilt in microns/mm , positive - 2 away from lens, 1 - to the lens * @return array of optimal CW rotations of each screw (1.0 == 360 deg) * @return array of optimal CW rotations of each screw (1.0 == 360 deg) */ public double [] getManualScrews( double [] umPerTurn, // if null - use defined here double zErr, // positive - away from lens double tXErr,// positive - 1,2 away from lens, 3 - to the lens double tYErr){// positive - 2 away from lens double [][] screws={ // right, up, thread pitch (pull) !!! Inverting Y! - again invert? 1 - far left, 2 - near left, 3 - right { -13.5, -6.5, 192.8}, // -2.908571735}, // 192.8, ... for proto push-away fixture { -13.5, 6.5, 202.6}, // -3.8198374024}, { 13.6, 3.5, 83.4}}; // -2.4491867448}}; if (umPerTurn!=null) for (int i=0;i<umPerTurn.length;i++) screws[i][2]=umPerTurn[i]; double [] moveDownUm=new double [screws.length]; double [] turnCW=new double [screws.length]; for (int i=0;i<screws.length;i++){ moveDownUm[i]=zErr + screws[i][0]*tXErr+screws[i][1]*tYErr; turnCW[i]=moveDownUm[i]/screws[i][2]; } return turnCW; } /* * 192.8479341564 202.5779753086 83.4354504792 -2.908571735 -3.8198374024 -2.4491867448 */ /** * Calculate three linearized values of motor positions for current parameters, target center focal * shift and tilt (from the optic axis) Loading src/main/java/LensAdjustment.java +25 −7 Original line number Diff line number Diff line Loading @@ -255,18 +255,18 @@ public class LensAdjustment { // when approximating PSF with a second degree polynomial: public double psf_cutoffEnergy=0.98; //0.5; // disregard pixels outside of this fraction of the total energy public double psf_cutoffLevel= 0.2; // disregard pixels below this fraction of the maximal value public int psf_minArea = 10; // continue increasing the selected area, even if beyound psf_cutoffEnergy and psf_cutoffLevel, // if the selected area is smaller than this (so approximation wpuld work) public int psf_minArea = 10; // continue increasing the selected area, even if beyond psf_cutoffEnergy and psf_cutoffLevel, // if the selected area is smaller than this (so approximation would work) public double psf_blurSigma = 0.0; // optionally blur the calculated mask public double weightRatioRedToGreen=0.7; // Use this data when combining defocusing data from different color PSF public double weightRatioBlueToGreen=0.3; public double targetFarNear=0.0; // OBSOLETE target logariphm of average tangential-to-radial resolution public double weightRatioBlueToGreen=0.2; public double targetFarNear=0.0; // OBSOLETE target logarithm of average tangential-to-radial resolution public boolean useRadialTangential=false; // Use targetFarNear (radial/tangential resolution) as a proxy for the distance public double targetMicrons=0.0; // target lens center distance (away from "best focus" public double toleranceMicrons=0.5; // microns public double toleranceTilt=0.02; // public double toleranceThreshold=3.0; // When each error is under swcaled thereshold, reduce correxction step twice public double toleranceThreshold=3.0; // When each error is under scaled threshold, reduce correction step twice // public boolean parallelAdjust=true; // move 3 motors parallel after each 3-motor focus/tilt adjustment public double parallelAdjustThreshold=4.0; // adjust 3 motors parallel if focal distance error in the center exceeds this Loading Loading @@ -353,7 +353,7 @@ public class LensAdjustment { public int subdiv=4; // overwrites public static class MultiFilePSF.overexposedMaxFraction public double overexposedMaxFraction=0.1; // allowed fraction of the overexposed pixels in the PSF kernel measurement area // overwirites public static class PSFParameters.minDefinedArea // overwrites public static class PSFParameters.minDefinedArea public double minDefinedArea=0.75; // minimal (weighted) fraction of the defined patter pixels in the FFT area public int PSFKernelSize=32; // size of the detected PSF kernel public boolean approximateGrid=true; // approximate grid with polynomial Loading @@ -375,6 +375,7 @@ public class LensAdjustment { public double correlationMinAbsoluteContrast=0.5; // minimal contrast for the pattern to pass, does not compensate for low ligt public double correlationMinAbsoluteInitialContrast=0.5; // minimal contrast for the pattern of the center (initial point) public double [] postUVscrewSensitivity={-2.908571735,-3.8198374024,-2.4491867448}; public boolean flatFieldCorrection=true; public double flatFieldExpand=4.0; Loading Loading @@ -597,6 +598,7 @@ public class LensAdjustment { double correlationMinInitialContrast, // minimal contrast for the pattern of the center (initial point) double correlationMinAbsoluteContrast, // minimal contrast for the pattern to pass, does not compensate for low ligt double correlationMinAbsoluteInitialContrast, // minimal contrast for the pattern of the center (initial point) double [] postUVscrewSensitivity, // microns/turn for 3 post-UV fixture adjustment screws boolean flatFieldCorrection, double flatFieldExpand, double thresholdFinish,// (copied from series) stop iterations if 2 last steps had less improvement (but not worsening ) Loading Loading @@ -752,6 +754,7 @@ public class LensAdjustment { this.correlationMinInitialContrast=correlationMinInitialContrast; // minimal contrast for the pattern of the center (initial point) this.correlationMinAbsoluteContrast=correlationMinAbsoluteContrast; // minimal contrast for the pattern to pass, does not compensate for low ligt this.correlationMinAbsoluteInitialContrast=correlationMinAbsoluteInitialContrast; // minimal contrast for the pattern of the center (initial point) this.postUVscrewSensitivity=postUVscrewSensitivity.clone(); // microns/turn for 3 post-UV fixture adjustment screws this.flatFieldCorrection=flatFieldCorrection; this.flatFieldExpand=flatFieldExpand; this.thresholdFinish=thresholdFinish;// (copied from series) stop iterations if 2 last steps had less improvement (but not worsening ) Loading Loading @@ -910,6 +913,7 @@ public class LensAdjustment { this.correlationMinInitialContrast, this.correlationMinAbsoluteContrast, this.correlationMinAbsoluteInitialContrast, this.postUVscrewSensitivity, this.flatFieldCorrection, this.flatFieldExpand, this.thresholdFinish, Loading Loading @@ -1078,7 +1082,9 @@ public class LensAdjustment { properties.setProperty(prefix+"correlationMinInitialContrast",this.correlationMinInitialContrast+""); properties.setProperty(prefix+"correlationMinAbsoluteContrast",this.correlationMinAbsoluteContrast+""); properties.setProperty(prefix+"correlationMinAbsoluteInitialContrast",this.correlationMinAbsoluteInitialContrast+""); for (int i=0;i<this.postUVscrewSensitivity.length;i++){ properties.setProperty(prefix+"postUVscrewSensitivity_"+i,this.postUVscrewSensitivity[i]+""); } properties.setProperty(prefix+"flatFieldCorrection",this.flatFieldCorrection+""); properties.setProperty(prefix+"flatFieldExpand",this.flatFieldExpand+""); properties.setProperty(prefix+"thresholdFinish",this.thresholdFinish+""); Loading Loading @@ -1405,6 +1411,10 @@ public class LensAdjustment { this.correlationMinAbsoluteContrast=Double.parseDouble(properties.getProperty(prefix+"correlationMinAbsoluteContrast")); if (properties.getProperty(prefix+"correlationMinAbsoluteInitialContrast")!=null) this.correlationMinAbsoluteInitialContrast=Double.parseDouble(properties.getProperty(prefix+"correlationMinAbsoluteInitialContrast")); for (int i=0;i<this.postUVscrewSensitivity.length;i++){ if (properties.getProperty(prefix+"postUVscrewSensitivity_"+i)!=null) this.postUVscrewSensitivity[i]=Double.parseDouble(properties.getProperty(prefix+"postUVscrewSensitivity_"+i)); } if (properties.getProperty(prefix+"flatFieldCorrection")!=null) this.flatFieldCorrection=Boolean.parseBoolean(properties.getProperty(prefix+"flatFieldCorrection")); if (properties.getProperty(prefix+"flatFieldExpand")!=null) Loading Loading @@ -1679,6 +1689,11 @@ public class LensAdjustment { gd.addNumericField("Expand during extrapolation (relative to the average grid period)", this.flatFieldExpand, 3); gd.addNumericField("Threshold RMS to exit LMA", this.thresholdFinish, 7,9,"pix"); gd.addNumericField("Maximal number of LMA iterations per series",this.numIterations, 0); gd.addMessage( "--- Post-UV fixture screws sensitivity ---"); for (int i=0;i<this.postUVscrewSensitivity.length;i++){ gd.addNumericField("Screw "+i+" sensitivity", this.postUVscrewSensitivity[i], 4,6,"um/turn CW"); } gd.addMessage("-----"); gd.addNumericField("Report focal length at this temperature", this.reportTemperature, 1,5,"C"); Loading Loading @@ -1869,6 +1884,9 @@ public class LensAdjustment { this.flatFieldExpand= gd.getNextNumber(); this.thresholdFinish= gd.getNextNumber(); this.numIterations= (int) gd.getNextNumber(); for (int i=0;i<this.postUVscrewSensitivity.length;i++){ this.postUVscrewSensitivity[i]= gd.getNextNumber(); } this.reportTemperature= gd.getNextNumber(); return true; } Loading Loading
src/main/java/Aberration_Calibration.java +35 −0 Original line number Diff line number Diff line Loading @@ -9983,11 +9983,19 @@ if (MORE_BUTTONS) { } // double [] targetTilts={0.0,0.0}; double [] manualScrewsCW=null; double [] postUVScrews=null; if (zTxTyM1M2M3!=null){ manualScrewsCW=FOCUSING_FIELD.fieldFitting.mechanicalFocusingModel.getManualScrews( zTxTy[0]-FOCUSING_FIELD.targetRelFocalShift, //double zErr, // positive - away from lens zTxTy[1]-FOCUSING_FIELD.targetRelTiltX, //targetTilts[0], // double tXErr,// positive - 1,2 away from lens, 3 - to the lens zTxTy[2]-FOCUSING_FIELD.targetRelTiltY); //targetTilts[1]); // double tYErr); postUVScrews=FOCUSING_FIELD.fieldFitting.mechanicalFocusingModel.getManualScrews( FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity, zTxTy[0]-FOCUSING_FIELD.targetRelFocalShift, //double zErr, // positive - away from lens zTxTy[1]-FOCUSING_FIELD.targetRelTiltX, //targetTilts[0], // double tXErr,// positive - 1,2 away from lens, 3 - to the lens zTxTy[2]-FOCUSING_FIELD.targetRelTiltY); //targetTilts[1]); // double tYErr); } double scaleMovement=1.0; // calculate automatically - reduce when close boolean parallelMove=false; Loading @@ -10011,6 +10019,16 @@ if (MORE_BUTTONS) { else System.out.println("Suggested rotation for screw # "+(i+1)+ " "+IJ.d2s(manualScrewsCW[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CCW)"); } if (postUVScrews!=null) { System.out.println("----- Post-UV fixture screw adjustments -----"); for (int i=0;i<postUVScrews.length;i++){ double deg=360*Math.abs(postUVScrews[i]); if (postUVScrews[i]>=0) System.out.println("Suggested rotation for screw # "+(i+1)+ " "+IJ.d2s(postUVScrews[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CW)"); else System.out.println("Suggested rotation for screw # "+(i+1)+ " "+IJ.d2s(postUVScrews[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CCW)"); } } System.out.println("----- end of Focus/tilt measurement results -----"); if (MASTER_DEBUG_LEVEL>0) System.out.println(FOCUSING_FIELD.showSamples()); Loading Loading @@ -10042,6 +10060,17 @@ if (MORE_BUTTONS) { if (manualScrewsCW[i]>=0) gd.addMessage("Screw # "+(i+1)+" "+IJ.d2s(manualScrewsCW[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CW)"); else gd.addMessage("Screw # "+(i+1)+" "+IJ.d2s(manualScrewsCW[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CCW)"); } if (postUVScrews!=null) { for (int i=0;i<postUVScrews.length;i++){ double deg=360*Math.abs(postUVScrews[i]); if (postUVScrews[i]>=0) gd.addMessage("Screw # "+(i+1)+" "+IJ.d2s(postUVScrews[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CW)"); else gd.addMessage("Screw # "+(i+1)+" "+IJ.d2s(postUVScrews[i],3)+" ("+IJ.d2s(deg,0)+"\u00b0 CCW)"); } gd.addMessage( "--- Post-UV fixture screws sensitivity ---"); for (int i=0;i<FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity.length;i++){ gd.addNumericField("Screw "+i+" sensitivity", FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity[i], 4,6,"um/turn CW"); } } gd.addNumericField("Scale movement",scaleMovement,3,5,"x"); gd.addCheckbox("Recalculate and apply parallel move only",parallelMove); // should be false after manual movement Loading Loading @@ -10076,6 +10105,12 @@ if (MORE_BUTTONS) { newMotors[0]= (int) gd.getNextNumber(); newMotors[1]= (int) gd.getNextNumber(); newMotors[2]= (int) gd.getNextNumber(); if (postUVScrews!=null) { for (int i=0;i<FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity.length;i++){ FOCUS_MEASUREMENT_PARAMETERS.postUVscrewSensitivity[i]=gd.getNextNumber(); } } scaleMovement= gd.getNextNumber(); parallelMove= gd.getNextBoolean(); FOCUSING_FIELD.filterZ= gd.getNextBoolean();
src/main/java/FocusingField.java +39 −0 Original line number Diff line number Diff line Loading @@ -8631,6 +8631,45 @@ public boolean LevenbergMarquardt( return turnCW; } /** * Post UV gluing fixture adjustment, screw numbers match motor numbers * @param umPerTurn sensitivity of the 3 adjustment screws - microns of the uv-glued support movement per screw revolution * @param zErr current focal distance error in microns, positive - away from lens * @param tXErr current horizontal tilt in microns/mm , positive - 1,2 away from lens, 3 - to the lens * @param tYErr current vertical tilt in microns/mm , positive - 2 away from lens, 1 - to the lens * @return array of optimal CW rotations of each screw (1.0 == 360 deg) * @return array of optimal CW rotations of each screw (1.0 == 360 deg) */ public double [] getManualScrews( double [] umPerTurn, // if null - use defined here double zErr, // positive - away from lens double tXErr,// positive - 1,2 away from lens, 3 - to the lens double tYErr){// positive - 2 away from lens double [][] screws={ // right, up, thread pitch (pull) !!! Inverting Y! - again invert? 1 - far left, 2 - near left, 3 - right { -13.5, -6.5, 192.8}, // -2.908571735}, // 192.8, ... for proto push-away fixture { -13.5, 6.5, 202.6}, // -3.8198374024}, { 13.6, 3.5, 83.4}}; // -2.4491867448}}; if (umPerTurn!=null) for (int i=0;i<umPerTurn.length;i++) screws[i][2]=umPerTurn[i]; double [] moveDownUm=new double [screws.length]; double [] turnCW=new double [screws.length]; for (int i=0;i<screws.length;i++){ moveDownUm[i]=zErr + screws[i][0]*tXErr+screws[i][1]*tYErr; turnCW[i]=moveDownUm[i]/screws[i][2]; } return turnCW; } /* * 192.8479341564 202.5779753086 83.4354504792 -2.908571735 -3.8198374024 -2.4491867448 */ /** * Calculate three linearized values of motor positions for current parameters, target center focal * shift and tilt (from the optic axis) Loading
src/main/java/LensAdjustment.java +25 −7 Original line number Diff line number Diff line Loading @@ -255,18 +255,18 @@ public class LensAdjustment { // when approximating PSF with a second degree polynomial: public double psf_cutoffEnergy=0.98; //0.5; // disregard pixels outside of this fraction of the total energy public double psf_cutoffLevel= 0.2; // disregard pixels below this fraction of the maximal value public int psf_minArea = 10; // continue increasing the selected area, even if beyound psf_cutoffEnergy and psf_cutoffLevel, // if the selected area is smaller than this (so approximation wpuld work) public int psf_minArea = 10; // continue increasing the selected area, even if beyond psf_cutoffEnergy and psf_cutoffLevel, // if the selected area is smaller than this (so approximation would work) public double psf_blurSigma = 0.0; // optionally blur the calculated mask public double weightRatioRedToGreen=0.7; // Use this data when combining defocusing data from different color PSF public double weightRatioBlueToGreen=0.3; public double targetFarNear=0.0; // OBSOLETE target logariphm of average tangential-to-radial resolution public double weightRatioBlueToGreen=0.2; public double targetFarNear=0.0; // OBSOLETE target logarithm of average tangential-to-radial resolution public boolean useRadialTangential=false; // Use targetFarNear (radial/tangential resolution) as a proxy for the distance public double targetMicrons=0.0; // target lens center distance (away from "best focus" public double toleranceMicrons=0.5; // microns public double toleranceTilt=0.02; // public double toleranceThreshold=3.0; // When each error is under swcaled thereshold, reduce correxction step twice public double toleranceThreshold=3.0; // When each error is under scaled threshold, reduce correction step twice // public boolean parallelAdjust=true; // move 3 motors parallel after each 3-motor focus/tilt adjustment public double parallelAdjustThreshold=4.0; // adjust 3 motors parallel if focal distance error in the center exceeds this Loading Loading @@ -353,7 +353,7 @@ public class LensAdjustment { public int subdiv=4; // overwrites public static class MultiFilePSF.overexposedMaxFraction public double overexposedMaxFraction=0.1; // allowed fraction of the overexposed pixels in the PSF kernel measurement area // overwirites public static class PSFParameters.minDefinedArea // overwrites public static class PSFParameters.minDefinedArea public double minDefinedArea=0.75; // minimal (weighted) fraction of the defined patter pixels in the FFT area public int PSFKernelSize=32; // size of the detected PSF kernel public boolean approximateGrid=true; // approximate grid with polynomial Loading @@ -375,6 +375,7 @@ public class LensAdjustment { public double correlationMinAbsoluteContrast=0.5; // minimal contrast for the pattern to pass, does not compensate for low ligt public double correlationMinAbsoluteInitialContrast=0.5; // minimal contrast for the pattern of the center (initial point) public double [] postUVscrewSensitivity={-2.908571735,-3.8198374024,-2.4491867448}; public boolean flatFieldCorrection=true; public double flatFieldExpand=4.0; Loading Loading @@ -597,6 +598,7 @@ public class LensAdjustment { double correlationMinInitialContrast, // minimal contrast for the pattern of the center (initial point) double correlationMinAbsoluteContrast, // minimal contrast for the pattern to pass, does not compensate for low ligt double correlationMinAbsoluteInitialContrast, // minimal contrast for the pattern of the center (initial point) double [] postUVscrewSensitivity, // microns/turn for 3 post-UV fixture adjustment screws boolean flatFieldCorrection, double flatFieldExpand, double thresholdFinish,// (copied from series) stop iterations if 2 last steps had less improvement (but not worsening ) Loading Loading @@ -752,6 +754,7 @@ public class LensAdjustment { this.correlationMinInitialContrast=correlationMinInitialContrast; // minimal contrast for the pattern of the center (initial point) this.correlationMinAbsoluteContrast=correlationMinAbsoluteContrast; // minimal contrast for the pattern to pass, does not compensate for low ligt this.correlationMinAbsoluteInitialContrast=correlationMinAbsoluteInitialContrast; // minimal contrast for the pattern of the center (initial point) this.postUVscrewSensitivity=postUVscrewSensitivity.clone(); // microns/turn for 3 post-UV fixture adjustment screws this.flatFieldCorrection=flatFieldCorrection; this.flatFieldExpand=flatFieldExpand; this.thresholdFinish=thresholdFinish;// (copied from series) stop iterations if 2 last steps had less improvement (but not worsening ) Loading Loading @@ -910,6 +913,7 @@ public class LensAdjustment { this.correlationMinInitialContrast, this.correlationMinAbsoluteContrast, this.correlationMinAbsoluteInitialContrast, this.postUVscrewSensitivity, this.flatFieldCorrection, this.flatFieldExpand, this.thresholdFinish, Loading Loading @@ -1078,7 +1082,9 @@ public class LensAdjustment { properties.setProperty(prefix+"correlationMinInitialContrast",this.correlationMinInitialContrast+""); properties.setProperty(prefix+"correlationMinAbsoluteContrast",this.correlationMinAbsoluteContrast+""); properties.setProperty(prefix+"correlationMinAbsoluteInitialContrast",this.correlationMinAbsoluteInitialContrast+""); for (int i=0;i<this.postUVscrewSensitivity.length;i++){ properties.setProperty(prefix+"postUVscrewSensitivity_"+i,this.postUVscrewSensitivity[i]+""); } properties.setProperty(prefix+"flatFieldCorrection",this.flatFieldCorrection+""); properties.setProperty(prefix+"flatFieldExpand",this.flatFieldExpand+""); properties.setProperty(prefix+"thresholdFinish",this.thresholdFinish+""); Loading Loading @@ -1405,6 +1411,10 @@ public class LensAdjustment { this.correlationMinAbsoluteContrast=Double.parseDouble(properties.getProperty(prefix+"correlationMinAbsoluteContrast")); if (properties.getProperty(prefix+"correlationMinAbsoluteInitialContrast")!=null) this.correlationMinAbsoluteInitialContrast=Double.parseDouble(properties.getProperty(prefix+"correlationMinAbsoluteInitialContrast")); for (int i=0;i<this.postUVscrewSensitivity.length;i++){ if (properties.getProperty(prefix+"postUVscrewSensitivity_"+i)!=null) this.postUVscrewSensitivity[i]=Double.parseDouble(properties.getProperty(prefix+"postUVscrewSensitivity_"+i)); } if (properties.getProperty(prefix+"flatFieldCorrection")!=null) this.flatFieldCorrection=Boolean.parseBoolean(properties.getProperty(prefix+"flatFieldCorrection")); if (properties.getProperty(prefix+"flatFieldExpand")!=null) Loading Loading @@ -1679,6 +1689,11 @@ public class LensAdjustment { gd.addNumericField("Expand during extrapolation (relative to the average grid period)", this.flatFieldExpand, 3); gd.addNumericField("Threshold RMS to exit LMA", this.thresholdFinish, 7,9,"pix"); gd.addNumericField("Maximal number of LMA iterations per series",this.numIterations, 0); gd.addMessage( "--- Post-UV fixture screws sensitivity ---"); for (int i=0;i<this.postUVscrewSensitivity.length;i++){ gd.addNumericField("Screw "+i+" sensitivity", this.postUVscrewSensitivity[i], 4,6,"um/turn CW"); } gd.addMessage("-----"); gd.addNumericField("Report focal length at this temperature", this.reportTemperature, 1,5,"C"); Loading Loading @@ -1869,6 +1884,9 @@ public class LensAdjustment { this.flatFieldExpand= gd.getNextNumber(); this.thresholdFinish= gd.getNextNumber(); this.numIterations= (int) gd.getNextNumber(); for (int i=0;i<this.postUVscrewSensitivity.length;i++){ this.postUVscrewSensitivity[i]= gd.getNextNumber(); } this.reportTemperature= gd.getNextNumber(); return true; } Loading