private void reestimate() { SemOptimizer optimizer; String type = wrapper.getSemOptimizerType(); if ("Regression".equals(type)) { optimizer = new SemOptimizerRegression(); } else if ("EM".equals(type)) { optimizer = new SemOptimizerEm(); } else if ("Powell".equals(type)) { optimizer = new SemOptimizerPowell(); } else if ("Random Search".equals(type)) { optimizer = new SemOptimizerScattershot(); } else if ("RICF".equals(type)) { optimizer = new SemOptimizerRicf(); } else if ("Powell".equals(type)) { optimizer = new SemOptimizerPowell(); } else { throw new IllegalArgumentException("Unexpected optimizer " + "type: " + type); } int numRestarts = wrapper.getNumRestarts(); optimizer.setNumRestarts(numRestarts); java.util.List<SemEstimator> estimators = wrapper.getMultipleResultList(); java.util.List<SemEstimator> newEstimators = new ArrayList<>(); for (SemEstimator estimator : estimators) { SemPm semPm = estimator.getSemPm(); DataSet dataSet = estimator.getDataSet(); ICovarianceMatrix covMatrix = estimator.getCovMatrix(); SemEstimator newEstimator; if (dataSet != null) { newEstimator = new SemEstimator(dataSet, semPm, optimizer); newEstimator.setNumRestarts(numRestarts); newEstimator.setScoreType(wrapper.getScoreType()); } else if (covMatrix != null) { newEstimator = new SemEstimator(covMatrix, semPm, optimizer); newEstimator.setNumRestarts(numRestarts); newEstimator.setScoreType(wrapper.getScoreType()); } else { throw new IllegalStateException( "Only continuous " + "rectangular data sets and covariance matrices " + "can be processed."); } newEstimator.estimate(); newEstimators.add(newEstimator); } wrapper.setSemEstimator(newEstimators.get(0)); wrapper.setMultipleResultList(newEstimators); resetSemImEditor(); }