// <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(); }
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"); }