use of org.monarchinitiative.loinc2hpo.model.Annotation in project loinc2hpo by monarch-initiative.
the class AnnotateTabController method editCurrentAnnotation.
/**
* This method is called from the pop up window
* @param loincAnnotation passed from the pop up window
*/
protected void editCurrentAnnotation(UniversalLoinc2HPOAnnotation loincAnnotation) {
setLoincIdSelected(loincAnnotation.getLoincId());
model.setLoincUnderEditing(model.getLoincEntryMap().get(loincAnnotation.getLoincId()));
// populate annotation textfields for basic mode
Map<String, Code> internalCode = CodeSystemConvertor.getCodeContainer().getCodeSystemMap().get(Loinc2HPOCodedValue.CODESYSTEM);
Code codeLow = internalCode.get("L");
Code codeHigh = internalCode.get("H");
Code codeNormal = internalCode.get("N");
HpoTermId4LoincTest hpoLow = loincAnnotation.loincInterpretationToHPO(codeLow);
HpoTermId4LoincTest hpoHigh = loincAnnotation.loincInterpretationToHPO(codeHigh);
HpoTermId4LoincTest hpoNormal = loincAnnotation.loincInterpretationToHPO(codeNormal);
if (hpoLow != null) {
String hpoLowTermName = hpoLow.getHpoTerm().getName();
annotationTextFieldLeft.setText(hpoLowTermName);
}
if (hpoHigh != null) {
String hpoHighTermName = hpoHigh.getHpoTerm().getName();
annotationTextFieldRight.setText(hpoHighTermName);
}
if (hpoNormal != null) {
String hpoNormalTermName = hpoNormal.getHpoTerm().getName();
boolean isnegated = hpoNormal.isNegated();
annotationTextFieldMiddle.setText(hpoNormalTermName);
inverseChecker.setSelected(isnegated);
}
// remember: advanced annotation == not using internal codes
for (Map.Entry<Code, HpoTermId4LoincTest> entry : loincAnnotation.getCandidateHpoTerms().entrySet()) {
if (!entry.getKey().getSystem().equals(Loinc2HPOCodedValue.CODESYSTEM)) {
tempAdvancedAnnotations.add(new Annotation(entry.getKey(), entry.getValue()));
}
}
boolean flag = loincAnnotation.getFlag();
flagForAnnotation.setSelected(flag);
String comment = loincAnnotation.getNote();
annotationNoteField.setText(comment);
createAnnotationButton.setText("Save");
clearButton.setText("Cancel");
}
use of org.monarchinitiative.loinc2hpo.model.Annotation in project loinc2hpo by monarch-initiative.
the class AnnotateTabController method handleAnnotateCodedValue.
@FXML
private void handleAnnotateCodedValue(ActionEvent e) {
e.consume();
// do nothing if it is the basic mode
if (!advancedAnnotationModeSelected)
return;
Annotation annotation = null;
String system = annotationTextFieldLeft.getText().trim().toLowerCase();
// case sensitive
String codeId = annotationTextFieldMiddle.getText().trim();
Code code = null;
if (system != null && !system.isEmpty() && codeId != null && !codeId.isEmpty()) {
code = Code.getNewCode().setSystem(system).setCode(codeId);
}
String candidateHPO = annotationTextFieldRight.getText();
HpoTerm hpoterm = model.getTermMap().get(stripEN(candidateHPO));
if (hpoterm == null)
logger.error("hpoterm is null");
if (code != null && hpoterm != null) {
annotation = new Annotation(code, new HpoTermId4LoincTest(hpoterm, inverseChecker.isSelected()));
}
tempAdvancedAnnotations.add(annotation);
// add annotated value to the advanced table view
// initadvancedAnnotationTable();
accordion.setExpandedPane(advancedAnnotationTitledPane);
inverseChecker.setSelected(false);
model.setTempAdvancedAnnotation(new HashMap<>());
model.setInversedAdvancedMode(false);
}
use of org.monarchinitiative.loinc2hpo.model.Annotation in project loinc2hpo by monarch-initiative.
the class AnnotateTabController method handleDeleteCodedAnnotation.
@FXML
private void handleDeleteCodedAnnotation(ActionEvent event) {
event.consume();
logger.debug("user wants to delete an annotation");
logger.debug("tempAdvancedAnnotations size: " + tempAdvancedAnnotations.size());
Annotation selectedToDelete = advancedAnnotationTable.getSelectionModel().getSelectedItem();
if (selectedToDelete != null) {
tempAdvancedAnnotations.remove(selectedToDelete);
}
logger.debug("tempAdvancedAnnotations size: " + tempAdvancedAnnotations.size());
}
use of org.monarchinitiative.loinc2hpo.model.Annotation in project loinc2hpo by monarch-initiative.
the class AnnotateTabController method initialize.
@FXML
private void initialize() {
if (model != null) {
// weird line. model is set by main controller; this line never runs
setModel(model);
// currentAnnotationController.setModel(model); //let current annotation stage have access to model
}
// currentAnnotationController.setModel(model); //let current annotation stage have access to model
suggestHPOButton.setTooltip(new Tooltip("Suggest new HPO terms"));
filterButton.setTooltip(new Tooltip("Filter Loinc by providing a Loinc list in txt file"));
addCodedAnnotationButton.setTooltip(new Tooltip("Add current annotation"));
flagForAnnotation.setTooltip(new Tooltip("Check if you are not confident"));
clearButton.setTooltip(new Tooltip("Clear all textfields"));
allAnnotationsButton.setTooltip(new Tooltip("Display annotations for currently selected Loinc code"));
initLOINCtableButton.setTooltip(new Tooltip("Initialize Loinc Core Table. Download it first."));
IntializeHPOmodelbutton.setTooltip(new Tooltip("Load hp.owl as a RDF model for query"));
searchForLOINCIdButton.setTooltip(new Tooltip("Search Loinc with a Loinc code or name"));
modeButton.setTooltip(new Tooltip("Switch between basic and advanced annotation mode"));
autoQueryButton.setTooltip(new Tooltip("Find candidate HPO terms with automatically generated keys"));
manualQueryButton.setTooltip(new Tooltip("Find candidate HPO terms with manually typed keys"));
hpoListView.setCellFactory(new Callback<ListView<HPO_Class_Found>, ListCell<HPO_Class_Found>>() {
@Override
public ListCell<HPO_Class_Found> call(ListView<HPO_Class_Found> param) {
return new ListCell<HPO_Class_Found>() {
@Override
public void updateItem(HPO_Class_Found hpo, boolean empty) {
super.updateItem(hpo, empty);
if (hpo != null) {
setText(hpo.toString());
Tooltip tooltip = new Tooltip(hpo.getDefinition());
tooltip.setPrefWidth(300);
tooltip.setWrapText(true);
setTooltip(tooltip);
} else {
setText(null);
}
}
};
}
});
treeView.setCellFactory(new Callback<TreeView<HPO_TreeView>, TreeCell<HPO_TreeView>>() {
@Override
public TreeCell<HPO_TreeView> call(TreeView<HPO_TreeView> param) {
return new TreeCell<HPO_TreeView>() {
@Override
public void updateItem(HPO_TreeView hpo, boolean empty) {
super.updateItem(hpo, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (hpo != null && hpo.hpo_class_found == null) {
setText("root");
}
if (hpo != null && hpo.hpo_class_found != null) {
setText(hpo.toString());
if (hpo.hpo_class_found.getDefinition() != null) {
Tooltip tooltip = new Tooltip(hpo.hpo_class_found.getDefinition());
tooltip.setPrefWidth(300);
tooltip.setWrapText(true);
setTooltip(tooltip);
}
}
}
}
};
}
});
// if user creates a new Loinc group, add two menuitems for it, and specify the actions when those menuitems are
// clicked
userCreatedLoincLists.addListener(new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
while (c.next()) {
if (c.wasAdded()) {
logger.trace(c + " was added");
c.getAddedSubList().stream().filter(p -> !model.getUserCreatedLoincLists().containsKey(p)).forEach(p -> {
model.addUserCreatedLoincList(p, new LinkedHashSet<>());
MenuItem newListMenuItem = new MenuItem(p);
userCreatedLoincListsButton.getItems().add(newListMenuItem);
newListMenuItem.setOnAction((event -> {
logger.trace("action detected");
if (loincTableView.getSelectionModel().getSelectedItem() != null) {
LoincId loincId = loincTableView.getSelectionModel().getSelectedItem().getLOINC_Number();
if (model.getUserCreatedLoincLists().get(p).contains(loincId)) {
model.getUserCreatedLoincLists().get(p).remove(loincId);
logger.trace(String.format("LOINC: %s removed from %s", loincId, p));
} else {
model.getUserCreatedLoincLists().get(p).add(loincId);
logger.trace(String.format("LOINC: %s added to %s", loincId, p));
}
changeColorLoincTableView();
model.setSessionChanged(true);
}
}));
MenuItem newExportMenuItem = new MenuItem(p);
exportLoincListButton.getItems().add(newExportMenuItem);
newExportMenuItem.setOnAction((event -> {
logger.trace("action detected");
if (loincTableView.getSelectionModel().getSelectedItem() != null) {
Set<LoincId> loincIds = model.getUserCreatedLoincLists().get(p);
if (loincIds.isEmpty()) {
return;
}
FileChooser chooser = new FileChooser();
chooser.setTitle("Save Loinc List: ");
chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("TSV files (*.txt)", "*.txt"));
chooser.setInitialFileName(p);
File f = chooser.showSaveDialog(null);
String filepath;
if (f == null) {
return;
} else {
filepath = f.getAbsolutePath();
}
StringBuilder builder = new StringBuilder();
loincIds.forEach(l -> {
builder.append(l);
builder.append("\n");
});
WriteToFile.writeToFile(builder.toString().trim(), filepath);
}
}));
MenuItem newImportMenuItem = new MenuItem(p);
importLoincGroupButton.getItems().add(newImportMenuItem);
newImportMenuItem.setOnAction((event) -> {
logger.trace("user wants to import " + p);
FileChooser chooser = new FileChooser();
chooser.setTitle("Select file to import from");
File f = chooser.showOpenDialog(null);
if (f == null) {
return;
}
List<String> malformed = new ArrayList<>();
List<String> notFound = new ArrayList<>();
try {
LoincOfInterest loincSet = new LoincOfInterest(f.getAbsolutePath());
Set<String> loincIds = loincSet.getLoincOfInterest();
loincIds.forEach(l -> {
LoincId loincId = null;
try {
loincId = new LoincId(l);
} catch (MalformedLoincCodeException e) {
malformed.add(l);
}
if (model.getLoincEntryMap().containsKey(loincId)) {
model.getUserCreatedLoincLists().get(p).add(loincId);
} else {
notFound.add(l);
}
changeColorLoincTableView();
});
} catch (FileNotFoundException e) {
logger.error("File not found. Should never happen");
}
if (!malformed.isEmpty() || !notFound.isEmpty()) {
String malformedString = String.join("\n", malformed);
String notFoundString = String.join("\n", notFound);
PopUps.showInfoMessage(String.format("Malformed Loinc: %d\n%s\nNot Found: %d\n%s", malformed.size(), malformedString, notFound.size(), notFoundString), "Error during importing");
}
});
});
} else {
logger.error("This should never happen");
}
}
}
});
initadvancedAnnotationTable();
}
use of org.monarchinitiative.loinc2hpo.model.Annotation in project loinc2hpo by monarch-initiative.
the class CurrentAnnotationController method populateTables.
private void populateTables() {
if (model == null) {
logger.error("model is null.");
return;
}
this.currentAnnotation = model.getCurrentAnnotation();
LoincEntry currentLoincEntry = model.getLoincEntryMap().get(currentAnnotation.getLoincId());
annotationTitle.setText(String.format("Annotations for Loinc: %s[%s]", currentLoincEntry.getLOINC_Number(), currentLoincEntry.getLongName()));
internalCodeAnnotations.clear();
currentAnnotation.getCandidateHpoTerms().entrySet().stream().filter(p -> p.getKey().getSystem().equals(Loinc2HPOCodedValue.CODESYSTEM)).map(p -> new Annotation(p.getKey(), p.getValue())).forEach(internalCodeAnnotations::add);
externalCodeAnnotations.clear();
currentAnnotation.getCandidateHpoTerms().entrySet().stream().filter(p -> !p.getKey().getSystem().equals(Loinc2HPOCodedValue.CODESYSTEM)).map(p -> new Annotation(p.getKey(), p.getValue())).forEach(externalCodeAnnotations::add);
interpretationCodeAnnotations.clear();
for (Map.Entry<Code, Code> entry : CodeSystemConvertor.getCodeConversionMap().entrySet()) {
logger.debug("key: " + entry.getKey() + "\nvalue: " + entry.getValue());
HpoTermId4LoincTest result = currentAnnotation.loincInterpretationToHPO(entry.getValue());
logger.debug("result is null? " + (result == null));
if (result != null) {
Annotation annotation = new Annotation(entry.getKey(), result);
interpretationCodeAnnotations.add(annotation);
logger.debug("interpretationCodeAnnotations size: " + interpretationCodeAnnotations.size());
}
}
logger.debug("internalTableview is null: " + (internalTableview == null));
logger.debug("internalCodeAnnotations is null: " + (internalTableview == null));
logger.debug("internal annotation size: " + internalCodeAnnotations.size());
internalCodeAnnotations.forEach(logger::info);
logger.trace("exit initInternalTableview()");
}
Aggregations