use of edu.cmu.tetradapp.ui.model.AlgorithmModel in project tetrad by cmu-phil.
the class GeneralAlgorithmEditor method initComponents.
private void initComponents() {
algoDescTextArea.setWrapStyleWord(true);
algoDescTextArea.setLineWrap(true);
algoDescTextArea.setEditable(false);
populateAlgoTypeOptions(algoTypeOpts);
knowledgeChkBox.addActionListener((e) -> {
refreshAlgorithmList();
});
linearVarChkBox.addActionListener((ActionEvent e) -> {
refreshTestAndScoreList();
});
gaussianVarChkBox.addActionListener((ActionEvent e) -> {
refreshTestAndScoreList();
});
algorithmList.addListSelectionListener((e) -> {
if (!(e.getValueIsAdjusting() || algorithmList.isSelectionEmpty())) {
setAlgorithmDescription();
refreshTestAndScoreList();
validateAlgorithmOption();
}
});
paramSetFwdBtn.addActionListener((e) -> {
AlgorithmModel algoModel = algorithmList.getSelectedValue();
IndependenceTestModel indTestModel = indTestComboBox.getItemAt(indTestComboBox.getSelectedIndex());
ScoreModel scoreModel = scoreComboBox.getItemAt(scoreComboBox.getSelectedIndex());
if (isValid(algoModel, indTestModel, scoreModel)) {
setParameterPanel(algoModel, indTestModel, scoreModel);
changeCard(PARAMETER_CARD);
}
});
indTestComboBox.addActionListener((e) -> {
if (!updatingTestModels && indTestComboBox.getSelectedIndex() >= 0) {
AlgorithmModel algoModel = algorithmList.getSelectedValue();
Map<DataType, IndependenceTestModel> map = defaultIndTestModels.get(algoModel);
if (map == null) {
map = new EnumMap<>(DataType.class);
defaultIndTestModels.put(algoModel, map);
}
map.put(dataType, indTestComboBox.getItemAt(indTestComboBox.getSelectedIndex()));
}
});
scoreComboBox.addActionListener((e) -> {
if (!updatingScoreModels && scoreComboBox.getSelectedIndex() >= 0) {
AlgorithmModel algoModel = algorithmList.getSelectedValue();
Map<DataType, ScoreModel> map = defaultScoreModels.get(algoModel);
if (map == null) {
map = new EnumMap<>(DataType.class);
defaultScoreModels.put(algoModel, map);
}
map.put(dataType, scoreComboBox.getItemAt(scoreComboBox.getSelectedIndex()));
}
});
mainPanel.add(new AlgorithmCard(), ALGORITHM_CARD);
mainPanel.add(new ParameterCard(), PARAMETER_CARD);
mainPanel.add(new GraphCard(), GRAPH_CARD);
mainPanel.setPreferredSize(new Dimension(940, 640));
setLayout(new BorderLayout());
add(mainPanel, BorderLayout.CENTER);
// add(new JScrollPane(mainPanel), BorderLayout.CENTER);
}
use of edu.cmu.tetradapp.ui.model.AlgorithmModel in project tetrad by cmu-phil.
the class GeneralAlgorithmEditor method restorePreviousState.
private void restorePreviousState(Map<String, Object> models) {
Object obj = models.get(LINEAR_PARAM);
if ((obj != null) && (obj instanceof Boolean)) {
linearVarChkBox.setSelected((Boolean) obj);
}
obj = models.get(GAUSSIAN_PARAM);
if ((obj != null) && (obj instanceof Boolean)) {
gaussianVarChkBox.setSelected((Boolean) obj);
}
obj = models.get(KNOWLEDGE_PARAM);
if ((obj != null) && (obj instanceof Boolean)) {
knowledgeChkBox.setSelected((Boolean) obj);
}
obj = models.get(ALGO_TYPE_PARAM);
if ((obj != null) && (obj instanceof String)) {
String actCmd = String.valueOf(obj);
Optional<JRadioButton> opt = algoTypeOpts.stream().filter(e -> e.getActionCommand().equals(actCmd)).findFirst();
if (opt.isPresent()) {
opt.get().setSelected(true);
}
}
refreshAlgorithmList();
refreshTestAndScoreList();
obj = models.get(ALGO_PARAM);
if ((obj != null) && (obj instanceof AlgorithmModel)) {
String value = ((AlgorithmModel) obj).toString();
Enumeration<AlgorithmModel> enums = algoModels.elements();
while (enums.hasMoreElements()) {
AlgorithmModel model = enums.nextElement();
if (model.toString().equals(value)) {
models.put(ALGO_PARAM, model);
algorithmList.setSelectedValue(model, true);
String title = String.format("Algorithm: %s", model.getAlgorithm().getAnnotation().name());
algorithmGraphTitle.setText(title);
break;
}
}
}
obj = models.get(IND_TEST_PARAM);
if ((obj != null) && (obj instanceof IndependenceTestModel)) {
String value = ((IndependenceTestModel) obj).toString();
ComboBoxModel<IndependenceTestModel> comboBoxModels = indTestComboBox.getModel();
int size = comboBoxModels.getSize();
for (int i = 0; i < size; i++) {
IndependenceTestModel model = comboBoxModels.getElementAt(i);
if (model.toString().equals(value)) {
models.put(IND_TEST_PARAM, model);
indTestComboBox.getModel().setSelectedItem(model);
break;
}
}
}
obj = models.get(SCORE_PARAM);
if ((obj != null) && (obj instanceof ScoreModel)) {
String value = ((ScoreModel) obj).toString();
ComboBoxModel<ScoreModel> comboBoxModels = scoreComboBox.getModel();
int size = comboBoxModels.getSize();
for (int i = 0; i < size; i++) {
ScoreModel model = comboBoxModels.getElementAt(i);
if (model.toString().equals(value)) {
models.put(SCORE_PARAM, model);
scoreComboBox.getModel().setSelectedItem(model);
break;
}
}
}
}
use of edu.cmu.tetradapp.ui.model.AlgorithmModel in project tetrad by cmu-phil.
the class GeneralAlgorithmEditor method validateAlgorithmOption.
private void validateAlgorithmOption() {
paramSetFwdBtn.setEnabled(true);
AlgorithmModel algoModel = algorithmList.getSelectedValue();
Class algoClass = algoModel.getAlgorithm().getClazz();
if (algoClass.isAnnotationPresent(Nonexecutable.class)) {
String msg;
try {
Object algo = algoClass.newInstance();
Method m = algoClass.getDeclaredMethod("getDescription");
m.setAccessible(true);
try {
msg = String.valueOf(m.invoke(algo));
} catch (InvocationTargetException exception) {
msg = "";
}
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException exception) {
LOGGER.error("", exception);
msg = "";
}
paramSetFwdBtn.setEnabled(false);
JOptionPane.showMessageDialog(desktop, msg, "Please Note", JOptionPane.INFORMATION_MESSAGE);
} else {
// Check if initial graph is provided for those pairwise algorithms
if (TakesInitialGraph.class.isAssignableFrom(algoClass)) {
if (runner.getSourceGraph() == null || runner.getDataModelList().isEmpty()) {
try {
Object algo = algoClass.newInstance();
Method m = algoClass.getDeclaredMethod("setInitialGraph", Algorithm.class);
m.setAccessible(true);
try {
Algorithm algorithm = null;
m.invoke(algo, algorithm);
} catch (InvocationTargetException | IllegalArgumentException exception) {
paramSetFwdBtn.setEnabled(false);
JOptionPane.showMessageDialog(desktop, exception.getCause().getMessage(), "Please Note", JOptionPane.INFORMATION_MESSAGE);
}
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException exception) {
LOGGER.error("", exception);
}
}
}
}
// Check dataset data type for those algorithms take mixed data?
}
use of edu.cmu.tetradapp.ui.model.AlgorithmModel in project tetrad by cmu-phil.
the class GeneralAlgorithmEditor method refreshScoreList.
private void refreshScoreList() {
updatingScoreModels = true;
scoreComboBox.removeAllItems();
AlgorithmModel algoModel = algorithmList.getSelectedValue();
if (algoModel != null && algoModel.isRequiredScore()) {
boolean linear = linearVarChkBox.isSelected();
boolean gaussian = gaussianVarChkBox.isSelected();
List<ScoreModel> models = ScoreModels.getInstance().getModels(dataType);
List<ScoreModel> scoreModels = new LinkedList<>();
if (linear && gaussian) {
models.stream().filter(e -> e.getScore().getClazz().isAnnotationPresent(Linear.class)).filter(e -> e.getScore().getClazz().isAnnotationPresent(Gaussian.class)).forEach(e -> scoreModels.add(e));
} else if (linear) {
models.stream().filter(e -> e.getScore().getClazz().isAnnotationPresent(Linear.class)).filter(e -> !e.getScore().getClazz().isAnnotationPresent(Gaussian.class)).forEach(e -> scoreModels.add(e));
} else if (gaussian) {
models.stream().filter(e -> !e.getScore().getClazz().isAnnotationPresent(Linear.class)).filter(e -> e.getScore().getClazz().isAnnotationPresent(Gaussian.class)).forEach(e -> scoreModels.add(e));
} else {
models.stream().forEach(e -> scoreModels.add(e));
}
// or BDeu score for discrete data
if (TsImages.class.equals(algoModel.getAlgorithm().getClazz())) {
switch(dataType) {
case Continuous:
scoreModels.stream().filter(e -> e.getScore().getClazz().equals(SemBicScore.class)).forEach(e -> scoreComboBox.addItem(e));
break;
case Discrete:
scoreModels.stream().filter(e -> e.getScore().getClazz().equals(BdeuScore.class)).forEach(e -> scoreComboBox.addItem(e));
break;
}
} else {
scoreModels.forEach(e -> scoreComboBox.addItem(e));
}
}
updatingScoreModels = false;
if (scoreComboBox.getItemCount() > 0) {
scoreComboBox.setEnabled(true);
Map<DataType, ScoreModel> map = defaultScoreModels.get(algoModel);
if (map == null) {
map = new EnumMap<>(DataType.class);
defaultScoreModels.put(algoModel, map);
}
ScoreModel scoreModel = map.get(dataType);
if (scoreModel == null) {
scoreModel = ScoreModels.getInstance().getDefaultModel(dataType);
if (scoreModel == null) {
scoreModel = scoreComboBox.getItemAt(0);
}
}
scoreComboBox.setSelectedItem(scoreModel);
} else {
scoreComboBox.setEnabled(false);
}
}
use of edu.cmu.tetradapp.ui.model.AlgorithmModel in project tetrad by cmu-phil.
the class GeneralAlgorithmEditor method setAlgorithmDescription.
private void setAlgorithmDescription() {
AlgorithmModel model = algorithmList.getSelectedValue();
if (model == null) {
algoDescTextArea.setText("");
} else {
algoDescTextArea.setText(model.getDescription());
algoDescTextArea.setCaretPosition(0);
}
}
Aggregations