public void measureSetting1(MeasurementPlotter mPlot) { // switch (layer) { // case retarderA: // targets = new double[]{0, 0, 0, 0, 0, 0, 0, 0, 0}; // break; // case retarderB: // targets = new double[]{0, 0, 0, 0, 0, 0, 0, 0, 0}; // break; // case elliptical: // targets = new double[]{0, 0, 0, 0, 0, 0, 0, 0}; // break; // case circular: // targets = new double[]{0, 0}; // break; // } final MultiSectorMeasurer acquireImageAndMeasure = new MultiSectorMeasurer(); System.out.println("measure setting 1"); int step = (int) ((SLMModel.startMax - SLMModel.startMin) / SLMModel.numPoints); for (int s = 0; s < SLMModel.numPoints; s++) { // for each setting int setTo = (int) (SLMModel.startMin + s * step); for (int i = 0; i < numIDs; i++) { // for each sector settings[i] = setTo; } acquireImageAndMeasure.run(); for (int i = 0; i < numIDs; i++) { mPlot.recordData(i, s, measurements[i]); } } // TaskMeasureSetting1 task = new TaskMeasureSetting1(mPlot); // task.execute(); }
// <editor-fold defaultstate="collapsed" desc=">>>--- Minimizations... ---<<<" > public void minimizeToTargets( double[] startMin, double[] startMax, double tol, double[] targets, MeasurementPlotter mPlot) { // AcquireAndMeasure waits for all minimizers to send next setting, // using CyclicBarrier, then aquires an image, measures all the roi's, // then returns measurement to each minimizer. // // This is where the target retarder is indicated... // For balancing intensity (settings 2-4), pass in the setting1 intensities // in targets[] acqCtrl.start(); MultiSectorMeasurer acquireImageAndMeasure = new MultiSectorMeasurer(mPlot); this.targets = targets; barrier = new CyclicBarrier(numIDs, acquireImageAndMeasure); final MinimizeFunction function = new MinimizeFunction(); stopSignal = new CountDownLatch(numIDs); // create and launch minimizations minimizations = new BrentsMethod_IntDouble[numIDs]; for (int i = 0; i < numIDs; i++) { minimizations[i] = new BrentsMethod_IntDouble(function, stopSignal); } for (int i = 0; i < numIDs; i++) { createMinimizationThread(i, startMin[i], startMax[i], tol); } // Await completion of all of the minimizations- CountDownLatch is released... System.out.println("* Waiting for stopSignal..."); try { stopSignal.await(); } catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println(">>>>> All minimizations done <<<<<"); for (int i = 0; i < numIDs; i++) { // measurements[i] = minimizations[i].getMinX(); System.out.println(" " + i + " setting: " + settings[i] + ", measure: " + measurements[i]); } mPlot.closeTextFile(); acqCtrl.finish(); }
public void run() { try { System.out.println("acquireImageAndMeasure"); for (int i = 0; i < numIDs; i++) { // for testing using MockRetarders switch (layer) { case retarderA: slmCtrl.setRetA(i, (int) settings[i]); break; case retarderB: slmCtrl.setRetB(i, (int) settings[i]); break; case elliptical: slmCtrl.setElliptical(i, (int) settings[i]); break; case circular: slmCtrl.setCircular(i, (int) settings[i]); break; } } if (!SLMModel.useMockRetarders) { Thread.currentThread().sleep(slmModel.getSettlingtime()); // byte[] data = acqCtrl.acquireSampleImage(); acqCtrl.acquireImage(data); // test // BufferedImage img = // ImageFactoryGrayScale.createImage(acqCtrl.getImageWidth(), acqCtrl.getImageHeight(), 8, // (byte[]) data); // edu.mbl.jif.gui.imaging.FrameImageDisplay id = new // edu.mbl.jif.gui.imaging.FrameImageDisplay(img, "Sample"); // id.setVisible(true); // measure intensity at ROIs ImageStatistics[] iStats = measureROIsIn(data, acqCtrl.getImageWidth(), acqCtrl.getImageHeight(), rois); iteration++; for (int i = 0; i < numIDs; i++) { measurements[i] = Math.abs(iStats[i].meanInROI - slmModel.getZeroIntensity() - targets[i]); if (mPlot != null) { mPlot.recordData(i, iteration, measurements[i]); } } } else { // useMockRetarders for (int i = 0; i < numIDs; i++) { // for testing using MockRetarders switch (layer) { case retarderA: measurements[i] = mockRet[i].calcA(settings[i]); break; case retarderB: measurements[i] = mockRet[i].calcB(settings[i]); break; case elliptical: measurements[i] = mockRet[i].calc(settings[i]); break; case circular: measurements[i] = mockRet[i].calc(settings[i]); break; } if (mPlot != null) { mPlot.recordData(i, iteration, measurements[i]); } } } } catch (InterruptedException ex) { Logger.getLogger(SLM_Calibrator.class.getName()).log(Level.SEVERE, null, ex); } }
private void normalize(DataSet[] dataSets) { double[] max = new double[numIDs]; // find max for (int i = 0; i < numIDs; i++) { for (int j = 0; j < SLMModel.numPoints; j++) { if (max[i] < dataSets[i].getMeasurement(j)) { max[i] = dataSets[i].getMeasurement(j); } } } // normalize for (int i = 0; i < numIDs; i++) { for (int j = 0; j < SLMModel.numPoints; j++) { dataSets[i].measurement[j] = dataSets[i].measurement[j] / max[i]; } } // dumpDataSet(); // Plot & record Normalized Intensity for (int i = 0; i < numIDs; i++) { System.out.println("\n" + ">>>>>>> ID: " + i); for (int j = 0; j < SLMModel.numPoints; j++) { System.out.println(dataSets[i].setting[j] + " => " + dataSets[i].measurement[j]); double s = dataSets[i].getSetting(j); double m = dataSets[i].getMeasurement(j); mNPlot.recordData(i, j, s, m); } } mNPlot.closeTextFile(); writeOutMatrix(dataSets, "Normalized"); // Plot & record RetardanceCurve for (int i = 0; i < numIDs; i++) { System.out.println("\n" + ">>>>>>> ID: " + i); double lastValue = 0; boolean inSection1 = true; boolean inSection2 = false; boolean inSection3 = false; for (int j = 0; j < SLMModel.numPoints; j++) { System.out.println(dataSets[i].setting[j] + " => " + dataSets[i].measurement[j]); double s = dataSets[i].getSetting(j); double m = dataSets[i].getMeasurement(j); if (inSection1 && (lastValue > m)) { inSection1 = false; inSection2 = true; } if (inSection2 && (lastValue < m)) { inSection2 = false; inSection3 = true; } lastValue = m; double ret = 0; if (inSection1) { ret = 3.0 * Math.PI - 2 * Math.asin(Math.sqrt(m)); } if (inSection2) { ret = Math.PI + 2 * Math.asin(Math.sqrt(m)); } if (inSection3) { ret = Math.PI - 2 * Math.asin(Math.sqrt(m)); } mNPlot.recordData(i, j, s, ret); dataSets[i].measurement[j] = ret; } } mNPlot.closeTextFile(); writeOutMatrix(dataSets, "Retardance"); }