Search in sources :

Example 1 with Annotation

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");
}
Also used : Code(org.monarchinitiative.loinc2hpo.codesystems.Code) ImmutableMap(com.google.common.collect.ImmutableMap) Annotation(org.monarchinitiative.loinc2hpo.model.Annotation)

Example 2 with Annotation

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);
}
Also used : HpoTerm(com.github.phenomics.ontolib.formats.hpo.HpoTerm) Code(org.monarchinitiative.loinc2hpo.codesystems.Code) Annotation(org.monarchinitiative.loinc2hpo.model.Annotation) FXML(javafx.fxml.FXML)

Example 3 with Annotation

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());
}
Also used : Annotation(org.monarchinitiative.loinc2hpo.model.Annotation) FXML(javafx.fxml.FXML)

Example 4 with Annotation

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();
}
Also used : PopUps(org.monarchinitiative.loinc2hpo.gui.PopUps) WriteToFile(org.monarchinitiative.loinc2hpo.io.WriteToFile) javafx.scene.control(javafx.scene.control) Inject(com.google.inject.Inject) Parent(javafx.scene.Parent) Task(javafx.concurrent.Task) ListChangeListener(javafx.collections.ListChangeListener) MalformedLoincCodeException(org.monarchinitiative.loinc2hpo.exception.MalformedLoincCodeException) HpoTerm(com.github.phenomics.ontolib.formats.hpo.HpoTerm) GitHubPopup(org.monarchinitiative.loinc2hpo.gui.GitHubPopup) Circle(javafx.scene.shape.Circle) ImmutableMap(com.google.common.collect.ImmutableMap) LoincLongNameParser(org.monarchinitiative.loinc2hpo.util.LoincLongNameParser) Event(javafx.event.Event) javafx.stage(javafx.stage) Platform(javafx.application.Platform) FXML(javafx.fxml.FXML) Logger(org.apache.logging.log4j.Logger) Code(org.monarchinitiative.loinc2hpo.codesystems.Code) HPO_Class_Found(org.monarchinitiative.loinc2hpo.util.HPO_Class_Found) ObservableList(javafx.collections.ObservableList) org.monarchinitiative.loinc2hpo.loinc(org.monarchinitiative.loinc2hpo.loinc) LoincCodeNotFoundException(org.monarchinitiative.loinc2hpo.exception.LoincCodeNotFoundException) NetPostException(org.monarchinitiative.loinc2hpo.exception.NetPostException) Singleton(com.google.inject.Singleton) Scene(javafx.scene.Scene) Main(org.monarchinitiative.loinc2hpo.gui.Main) java.util(java.util) Loinc2HPOCodedValue(org.monarchinitiative.loinc2hpo.codesystems.Loinc2HPOCodedValue) LocalDateTime(java.time.LocalDateTime) FXCollections(javafx.collections.FXCollections) GitHubLabelRetriever(org.monarchinitiative.loinc2hpo.github.GitHubLabelRetriever) GitHubPoster(org.monarchinitiative.loinc2hpo.github.GitHubPoster) CodeSystemConvertor(org.monarchinitiative.loinc2hpo.codesystems.CodeSystemConvertor) FXMLLoader(javafx.fxml.FXMLLoader) Annotation(org.monarchinitiative.loinc2hpo.model.Annotation) SparqlQuery(org.monarchinitiative.loinc2hpo.util.SparqlQuery) Callback(javafx.util.Callback) Color(javafx.scene.paint.Color) OntologyModelBuilderForJena(org.monarchinitiative.loinc2hpo.io.OntologyModelBuilderForJena) javafx.scene.input(javafx.scene.input) Model(org.monarchinitiative.loinc2hpo.model.Model) ReadOnlyStringWrapper(javafx.beans.property.ReadOnlyStringWrapper) LoincOfInterest(org.monarchinitiative.loinc2hpo.io.LoincOfInterest) Injector(com.google.inject.Injector) ActionEvent(javafx.event.ActionEvent) java.io(java.io) LoincCodeClass(org.monarchinitiative.loinc2hpo.util.LoincCodeClass) LogManager(org.apache.logging.log4j.LogManager) LoincOfInterest(org.monarchinitiative.loinc2hpo.io.LoincOfInterest) ObservableList(javafx.collections.ObservableList) HPO_Class_Found(org.monarchinitiative.loinc2hpo.util.HPO_Class_Found) MalformedLoincCodeException(org.monarchinitiative.loinc2hpo.exception.MalformedLoincCodeException) WriteToFile(org.monarchinitiative.loinc2hpo.io.WriteToFile) FXML(javafx.fxml.FXML)

Example 5 with Annotation

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()");
}
Also used : javafx.scene.control(javafx.scene.control) Inject(com.google.inject.Inject) Node(javafx.scene.Node) Loinc2HPOCodedValue(org.monarchinitiative.loinc2hpo.codesystems.Loinc2HPOCodedValue) Model(org.monarchinitiative.loinc2hpo.model.Model) FXCollections(javafx.collections.FXCollections) LoincEntry(org.monarchinitiative.loinc2hpo.loinc.LoincEntry) ReadOnlyStringWrapper(javafx.beans.property.ReadOnlyStringWrapper) FXML(javafx.fxml.FXML) ActionEvent(javafx.event.ActionEvent) Logger(org.apache.logging.log4j.Logger) HpoTermId4LoincTest(org.monarchinitiative.loinc2hpo.loinc.HpoTermId4LoincTest) UniversalLoinc2HPOAnnotation(org.monarchinitiative.loinc2hpo.loinc.UniversalLoinc2HPOAnnotation) ReadOnlyBooleanWrapper(javafx.beans.property.ReadOnlyBooleanWrapper) Stage(javafx.stage.Stage) CodeSystemConvertor(org.monarchinitiative.loinc2hpo.codesystems.CodeSystemConvertor) Annotation(org.monarchinitiative.loinc2hpo.model.Annotation) Map(java.util.Map) Code(org.monarchinitiative.loinc2hpo.codesystems.Code) ObservableList(javafx.collections.ObservableList) BorderPane(javafx.scene.layout.BorderPane) LogManager(org.apache.logging.log4j.LogManager) Singleton(com.google.inject.Singleton) LoincEntry(org.monarchinitiative.loinc2hpo.loinc.LoincEntry) HpoTermId4LoincTest(org.monarchinitiative.loinc2hpo.loinc.HpoTermId4LoincTest) Map(java.util.Map) Code(org.monarchinitiative.loinc2hpo.codesystems.Code) UniversalLoinc2HPOAnnotation(org.monarchinitiative.loinc2hpo.loinc.UniversalLoinc2HPOAnnotation) Annotation(org.monarchinitiative.loinc2hpo.model.Annotation)

Aggregations

Annotation (org.monarchinitiative.loinc2hpo.model.Annotation)5 FXML (javafx.fxml.FXML)4 Code (org.monarchinitiative.loinc2hpo.codesystems.Code)4 HpoTerm (com.github.phenomics.ontolib.formats.hpo.HpoTerm)2 ImmutableMap (com.google.common.collect.ImmutableMap)2 Inject (com.google.inject.Inject)2 Singleton (com.google.inject.Singleton)2 ReadOnlyStringWrapper (javafx.beans.property.ReadOnlyStringWrapper)2 FXCollections (javafx.collections.FXCollections)2 ObservableList (javafx.collections.ObservableList)2 ActionEvent (javafx.event.ActionEvent)2 javafx.scene.control (javafx.scene.control)2 LogManager (org.apache.logging.log4j.LogManager)2 Logger (org.apache.logging.log4j.Logger)2 CodeSystemConvertor (org.monarchinitiative.loinc2hpo.codesystems.CodeSystemConvertor)2 Loinc2HPOCodedValue (org.monarchinitiative.loinc2hpo.codesystems.Loinc2HPOCodedValue)2 Injector (com.google.inject.Injector)1 java.io (java.io)1 LocalDateTime (java.time.LocalDateTime)1 java.util (java.util)1