diff --git a/sirius_cli/src/main/resources/sirius.properties b/sirius_cli/src/main/resources/sirius.properties index e1084db1c4..6c8d5acd6b 100644 --- a/sirius_cli/src/main/resources/sirius.properties +++ b/sirius_cli/src/main/resources/sirius.properties @@ -25,6 +25,7 @@ de.unijena.bioinf.sirius.ui.cite = false de.unijena.bioinf.sirius.ui.cite.classyfire = false de.unijena.bioinf.sirius.ui.allowMs1Only=true +de.unijena.bioinf.sirius.ui.ignoreFormulas=false # S3 CustomDB config #de.unijena.bioinf.stores.customdb.s3.host= diff --git a/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/settings/GerneralSettingsPanel.java b/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/settings/GerneralSettingsPanel.java index 8e926cd266..406076d79f 100644 --- a/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/settings/GerneralSettingsPanel.java +++ b/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/settings/GerneralSettingsPanel.java @@ -112,6 +112,7 @@ public boolean restartRequired() { public void saveProperties() { props.setProperty("de.unijena.bioinf.sirius.treebuilder.solvers", (String) solver.getSelectedItem()); props.setProperty("de.unijena.bioinf.sirius.ui.allowMs1Only", String.valueOf(allowMS1Only.isSelected())); + props.setProperty("de.unijena.bioinf.sirius.ui.ignoreFormulas", String.valueOf(ignoreFormulas.isSelected())); // props.setProperty("de.unijena.bioinf.sirius.treebuilder.timeout", treeTimeout.getNumber().toString()); final Path dir = Paths.get(db.getFilePath()); if (Files.isDirectory(dir)) { diff --git a/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/utils/CompoundFilterMatcher.java b/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/utils/CompoundFilterMatcher.java index 467dfefd17..191352deaf 100644 --- a/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/utils/CompoundFilterMatcher.java +++ b/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/utils/CompoundFilterMatcher.java @@ -57,28 +57,32 @@ public boolean matches(InstanceBean item) { double mz = item.getIonMass(); double rt = item.getID().getRt().map(RetentionTime::getRetentionTimeInSeconds).orElse(Double.NaN); //todo hotfix, since the confidence score is a FormulaScore which sets all NaN to -Infinity (after computation, and thus also in project space) - double confidence = item.getID().getConfidenceScore().map(conf -> Double.isInfinite(conf) ? Double.NaN : conf).orElse(Double.NaN); - if ((mz < filterModel.getCurrentMinMz()) || - (filterModel.isMaxMzFilterActive() && mz > filterModel.getCurrentMaxMz())) { - return false; + double confidence = item.getID().getConfidenceScore().filter(conf -> !Double.isInfinite(conf)).orElse(Double.NaN); + + { + if (mz < filterModel.getCurrentMinMz()) + return false; + if (filterModel.isMaxMzFilterActive() && mz > filterModel.getCurrentMaxMz()) + return false; } - if (!Double.isNaN(rt)) { - if ((rt < filterModel.getCurrentMinRt()) || - (filterModel.isMaxRtFilterActive() && rt > filterModel.getCurrentMaxRt())) { + + if (!Double.isNaN(rt)) { //never filter NaN because RT is just not available + if (rt < filterModel.getCurrentMinRt()) + return false; + if (filterModel.isMaxRtFilterActive() && rt > filterModel.getCurrentMaxRt()) return false; - } } + if (!Double.isNaN(confidence)) { - if ((confidence < filterModel.getCurrentMinConfidence()) || - (filterModel.isMaxConfidenceFilterActive() && confidence > filterModel.getCurrentMaxConfidence())) { + if (filterModel.isMinConfidenceFilterActive() && confidence < filterModel.getCurrentMinConfidence()) + return false; + if (filterModel.isMaxConfidenceFilterActive() && confidence > filterModel.getCurrentMaxConfidence()) + return false; + } else if (filterModel.isMinConfidenceFilterActive()) { // filter NaN if min filter is set return false; - } - } else { - return Double.compare(filterModel.getMinConfidence(), filterModel.getCurrentMinConfidence()) == 0; } - final Set adducts = filterModel.getAdducts(); - if (!adducts.isEmpty() && !adducts.contains(item.getIonization())) + if (filterModel.isAdductFilterActive() && !filterModel.getAdducts().contains(item.getIonization())) return false; return anyIOIntenseFilterMatches(item, filterModel); @@ -166,8 +170,8 @@ private boolean matchesElementFilter(InstanceBean item, CompoundFilterModel filt boolean r1 = item.loadTopFormulaResult(List.of(TopCSIScore.class)).map(FormulaResult::getId) .map(id -> (filter.matchFormula && constraints.isSatisfied(id.getMolecularFormula(), id.getIonType().getIonization())) - || - (filter.matchPrecursorFormula && constraints.isSatisfied(id.getPrecursorFormula(), id.getIonType().getIonization())) + || + (filter.matchPrecursorFormula && constraints.isSatisfied(id.getPrecursorFormula(), id.getIonType().getIonization())) ).orElse(false); boolean r2 = item.loadTopFormulaResult(List.of(ZodiacScore.class, SiriusScore.class)).map(FormulaResult::getId) diff --git a/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/utils/CompoundFilterModel.java b/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/utils/CompoundFilterModel.java index 0884483936..fa6d2bc105 100644 --- a/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/utils/CompoundFilterModel.java +++ b/sirius_gui/src/main/java/de/unijena/bioinf/ms/gui/utils/CompoundFilterModel.java @@ -302,6 +302,10 @@ public boolean isMaxConfidenceFilterActive() { return currentMaxConfidence != maxConfidence; } + public boolean isMinConfidenceFilterActive() { + return currentMinConfidence != minConfidence; + } + public void setAdducts(Set adducts) { this.adducts = adducts; @@ -310,6 +314,11 @@ public void setAdducts(Set adducts) { public Set getAdducts() { return Collections.unmodifiableSet(adducts); } + public boolean isAdductFilterActive() { + return adducts != null && !adducts.isEmpty(); + } + + @Override public HiddenChangeSupport pcs() { diff --git a/sirius_gui/src/main/java/de/unijena/bioinf/projectspace/GuiProjectSpaceManager.java b/sirius_gui/src/main/java/de/unijena/bioinf/projectspace/GuiProjectSpaceManager.java index 7cb1c00f97..e7fbc6bc24 100644 --- a/sirius_gui/src/main/java/de/unijena/bioinf/projectspace/GuiProjectSpaceManager.java +++ b/sirius_gui/src/main/java/de/unijena/bioinf/projectspace/GuiProjectSpaceManager.java @@ -155,7 +155,7 @@ public synchronized void importOneExperimentPerLocation(@NotNull final List (input.msInput.msParserfiles.size() > 1 && input.msInput.projects.size() == 0 && input.msInput.msParserfiles.keySet().stream().map(p -> p.getFileName().toString().toLowerCase()).allMatch(n -> n.endsWith(".mzml") || n.endsWith(".mzxml")))) .getResult();