use of org.monarchinitiative.loinc2hpo.io.LoincOfInterest 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.io.LoincOfInterest in project loinc2hpo by monarch-initiative.
the class AnnotateTabController method handleLoincFiltering.
@FXML
private void handleLoincFiltering(ActionEvent e) {
List<LoincEntry> entrylist = new ArrayList<>();
String enlistName = null;
FileChooser chooser = new FileChooser();
chooser.setTitle("Choose File containing a list of interested Loinc " + "codes");
File f = chooser.showOpenDialog(null);
List<String> notFoundList = new ArrayList<>();
List<String> malformedList = new ArrayList<>();
int malformedLoincCount = 0;
if (f != null) {
String path = f.getAbsolutePath();
enlistName = f.getName();
try {
Set<String> loincOfInterest = new LoincOfInterest(path).getLoincOfInterest();
// loincOfInterest.stream().forEach(System.out::print);
for (String loincString : loincOfInterest) {
LoincId loincId = null;
LoincEntry loincEntry = null;
try {
loincId = new LoincId(loincString);
loincEntry = model.getLoincEntryMap().get(loincId);
} catch (MalformedLoincCodeException e2) {
// try to see whether user provided Loinc long common name
if (model.getLoincEntryMapWithName().get(loincString) != null) {
loincEntry = model.getLoincEntryMapWithName().get(loincString);
} else {
logger.error("Malformed loinc");
malformedList.add(loincString);
continue;
}
}
if (loincEntry != null) {
entrylist.add(loincEntry);
} else {
notFoundList.add(loincString);
}
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
if (!malformedList.isEmpty() || !notFoundList.isEmpty()) {
String malformed = String.join(",\n", malformedList);
String notfound = String.join(",\n", notFoundList);
String popupMessage = String.format("# malformed Loinc codes: %d\n %s\n\n# Loinc codes not found: %d\n%s", malformedList.size(), malformed, notFoundList.size(), notfound);
PopUps.showInfoMessage(popupMessage, "Incomplete import of Loinc codes");
}
if (entrylist.isEmpty()) {
logger.error(String.format("Found 0 Loinc codes"));
PopUps.showWarningDialog("LOINC filtering", "No hits found", "Could not find any loinc codes");
return;
} else {
logger.trace("Loinc filtering result: ");
logger.trace("# of loinc entries found: " + entrylist.size());
}
// set up the Hpo autocomplete if possible
if (termmap == null)
initialize();
loincTableView.getItems().clear();
loincTableView.getItems().addAll(entrylist);
// keep a record in model
model.addFilteredList(enlistName, new ArrayList<>(entrylist));
entrylist.forEach(p -> logger.trace(p.getLOINC_Number()));
accordion.setExpandedPane(loincTableTitledpane);
} else {
logger.error("Unable to obtain path to LOINC of interest file");
return;
}
}
use of org.monarchinitiative.loinc2hpo.io.LoincOfInterest in project loinc2hpo by monarch-initiative.
the class MainController method openSession.
protected void openSession(String pathToOpen) {
// This is deprecated. keep this only temperoly
// there should be one default file, "annotations.tsv",
// one default folder "LOINC category", which should have two files "require_new_HPO_terms.txt", "unable_to_annotate.txt" by default (and possibility others)
/**
* String annotationsFilePath = pathToOpen + File.separator + "annotations.tsv";
* if (new File(annotationsFilePath).exists()) {
* loinc2HpoAnnotationsTabController.tempimportLoincAnnotation(annotationsFilePath);
* }
*/
loinc2HpoAnnotationsTabController.importLoincAnnotation(pathToOpen);
File loinc_category_folder = new File(pathToOpen + File.separator + LOINC_CATEGORY_folder);
if (!loinc_category_folder.exists() || !loinc_category_folder.isDirectory()) {
return;
}
File[] files = loinc_category_folder.listFiles();
if (files == null) {
return;
} else {
for (File file : files) {
try {
LoincOfInterest loincCategory = new LoincOfInterest(file.getAbsolutePath());
Set<String> loincIdStrings = loincCategory.getLoincOfInterest();
String categoryName = file.getName();
if (categoryName.endsWith(".txt")) {
categoryName = categoryName.substring(0, file.getName().length() - 4);
}
Set<LoincId> loincIds = loincIdStrings.stream().map(p -> {
try {
return new LoincId(p);
} catch (MalformedLoincCodeException e1) {
logger.error("This should never happen since the loincids are automatically saved");
}
return null;
}).collect(Collectors.toSet());
if (!annotateTabController.userCreatedLoincLists.contains(categoryName)) {
annotateTabController.userCreatedLoincLists.add(categoryName);
}
model.addUserCreatedLoincList(categoryName, loincIds);
} catch (FileNotFoundException e1) {
logger.error("This should never happen since the folder is autogenerated.");
}
}
annotateTabController.changeColorLoincTableView();
}
}
Aggregations