private void fitavg() { if (showfitdialog()) { double[] stats = new double[2]; float[] tempdata = new float[xpts * ypts]; float[] tempweights = new float[xpts * ypts]; for (int i = 0; i < xpts; i++) { for (int j = 0; j < ypts; j++) { tempdata[i + j * xpts] = (float) ((double) avg[i][j] / (double) nmeas[ncurves]); tempweights[i + j * xpts] = avgweights[i][j]; } } int tempmaxiter = fitclass.maxiter; if (checkc2) { fitclass.maxiter = 0; } float[] fit = fitclass.fitdata( avgparams, avgfixes, avgconstraints, tempdata, tempweights, stats, false); fitclass.maxiter = tempmaxiter; for (int i = 0; i < xpts; i++) { for (int j = 0; j < ypts; j++) { avgfit[i][j] = fit[i + j * xpts] * (float) nmeas[ncurves]; } } pwavg.updateSeries(avgfit, 1, false); float[] temp = pwavg.getLimits(); temp[4] = 1.0f; pwavg.setLimits(temp); c2[ncurves] = stats[1]; c2array[ncurves].setText("" + (float) c2[ncurves]); } }
public void itemStateChanged(ItemEvent e) { beta = Double.parseDouble(betaval.getText()); updatebeta(); boolean avgchanged = false; for (int i = 0; i < ncurves; i++) { if (checkarray[i].getState() != include[i]) { avgchanged = true; if (include[i]) { include[i] = false; } else { include[i] = true; } } } if (avgchanged) { updateavg(); updatebeta(); int1array[ncurves].setText("" + (float) intensity1[ncurves]); e1array[ncurves].setText("" + (float) bright1[ncurves]); n1array[ncurves].setText("" + (float) number1[ncurves]); int2array[ncurves].setText("" + (float) intensity2[ncurves]); e2array[ncurves].setText("" + (float) bright2[ncurves]); n2array[ncurves].setText("" + (float) number2[ncurves]); eccarray[ncurves].setText("" + (float) brightcc[ncurves]); pwavg.updateSeries(avg, 0, true); float[] temp = pwavg.getLimits(); temp[4] = 1.0f; pwavg.setLimits(temp); } if (e.getSource() == dispcurvechoice) { dispcurve = dispcurvechoice.getSelectedIndex(); pwfit.updateSeries(pch[dispcurve], 0, true); pwfit.updateSeries(fit[dispcurve], 1, true); float[] temp = pwfit.getLimits(); temp[4] = 1.0f; pwfit.setLimits(temp); } }
private void undoglobalfit() { for (int i = 0; i < ncurves; i++) { for (int j = 0; j < nparams; j++) { globalparams[i][j] = undoparams[i][j]; globalformulas[i][j] = undoformulas[i][j]; globalvflmatrix[i][j] = undovflmatrix[i][j]; } for (int j = 0; j < xpts; j++) { for (int k = 0; k < ypts; k++) { fit[i][j][k] = undofit[i][j][k]; } } if (i == dispcurve) { pwfit.updateSeries(fit[dispcurve], 1, true); } c2[i] = undoc2[i]; c2array[i].setText("" + (float) c2[i]); } globalc2 = undoglobalc2; globalc2label.setText("Global chi^2 = " + (float) globalc2); }
private void fitglobal() { int nparams = 11; int nsel = 0; for (int i = 0; i < ncurves; i++) { if (include[i]) { nsel++; } } double[][] params = new double[nsel][nparams]; String[][] tempformulas = new String[nsel][nparams]; double[][][] constraints = new double[2][nsel][nparams]; int[][] vflmatrix = new int[nsel][nparams]; int counter = 0; for (int i = 0; i < ncurves; i++) { if (include[i]) { for (int j = 0; j < nparams; j++) { params[counter][j] = globalparams[i][j]; tempformulas[counter][j] = globalformulas[i][j]; constraints[0][counter][j] = globalconstraints[0][i][j]; constraints[1][counter][j] = globalconstraints[1][i][j]; vflmatrix[counter][j] = globalvflmatrix[i][j]; } counter++; } for (int j = 0; j < nparams; j++) { undoparams[i][j] = globalparams[i][j]; undoformulas[i][j] = globalformulas[i][j]; undovflmatrix[i][j] = globalvflmatrix[i][j]; } for (int j = 0; j < xpts; j++) { for (int k = 0; k < ypts; k++) { undofit[i][j][k] = fit[i][j][k]; } } undoc2[i] = c2[i]; } undoglobalc2 = globalc2; if (showglobalfitdialog(params, tempformulas, vflmatrix)) { counter = 0; for (int i = 0; i < ncurves; i++) { if (include[i]) { for (int j = 0; j < nparams; j++) { globalparams[i][j] = params[counter][j]; globalformulas[i][j] = tempformulas[counter][j]; globalvflmatrix[i][j] = vflmatrix[counter][j]; } counter++; } } double[] stats = new double[2]; float[][] tempdata = new float[nsel][xpts * ypts]; float[][] tempweights = new float[nsel][xpts * ypts]; counter = 0; for (int i = 0; i < ncurves; i++) { if (include[i]) { for (int j = 0; j < xpts; j++) { for (int k = 0; k < ypts; k++) { tempdata[counter][j + k * xpts] = (float) ((double) pch[i][j][k] / (double) nmeas[i]); tempweights[counter][j + k * xpts] = weights[i][j][k]; } } counter++; } } int tempmaxiter = globalfitclass.maxiter; if (checkc2) { globalfitclass.changemaxiter(0); } double[] tempc2vals = new double[nsel]; IJ.showStatus("Fitting Globally"); float[][] tempfit = globalfitclass.fitdata( params, vflmatrix, tempformulas, paramsnames, constraints, tempdata, tempweights, stats, tempc2vals, false); IJ.showStatus("Fit Complete"); globalfitclass.changemaxiter(tempmaxiter); globalc2 = stats[1]; globalc2label.setText("Global chi^2 = " + (float) globalc2); counter = 0; for (int i = 0; i < ncurves; i++) { if (include[i]) { for (int j = 0; j < xpts; j++) { for (int k = 0; k < ypts; k++) { fit[i][j][k] = tempfit[counter][j + xpts * k] * (float) nmeas[i]; } } if (i == dispcurve) { pwfit.updateSeries(fit[dispcurve], 1, true); } for (int j = 0; j < nparams; j++) { globalparams[i][j] = params[counter][j]; } c2[i] = tempc2vals[counter]; c2array[i].setText("" + (float) c2[i]); counter++; } } float[] temp = pwfit.getLimits(); temp[4] = 1.0f; pwfit.setLimits(temp); } }