From 5e0609347b2ca42a9c6e387916fa4b9b10f56706 Mon Sep 17 00:00:00 2001
From: Lutz Fischer
Date: Thu, 31 Oct 2019 13:44:55 +0100
Subject: [PATCH] Some cleavable cross-linker related columns are read in *
specific grouping for these can be selected Bugfix for spaces in ambiguous
accession list Validity check disabled by default but still reports warning
Validity check warnings more verbose When writing csv-files from the command
line mzIdentML files get writen out as well * a window asking for
document-owner will be displayed decoy:psms better marked Improved
synchronisation between settings-panel Some adaptation to forward settings
from the commandline to the GUI
---
nbactions-release-profile.xml | 92 +-
nbactions.xml | 6 +-
pom.xml | 4 +-
.../java/org/rappsilber/fdr/CSVinFDR.java | 33 +-
.../java/org/rappsilber/fdr/FDRSettings.java | 2 +
.../org/rappsilber/fdr/FDRSettingsImpl.java | 16 +-
.../java/org/rappsilber/fdr/OfflineFDR.java | 204 +++--
.../java/org/rappsilber/fdr/XiCSVinFDR.java | 44 +-
.../fdr/entities/AbstractFDRElement.java | 6 +
.../rappsilber/fdr/entities/PeptidePair.java | 482 ++++++-----
.../org/rappsilber/fdr/entities/Protein.java | 4 +-
.../rappsilber/fdr/entities/ProteinGroup.java | 8 +-
.../fdr/entities/ProteinGroupLink.java | 10 +-
.../java/org/rappsilber/fdr/gui/FDRGUI.form | 75 +-
.../java/org/rappsilber/fdr/gui/FDRGUI.java | 247 +++---
.../fdr/gui/FDRLevelInformations.java | 3 +-
.../fdr/gui/components/CSVSelection.form | 227 +++--
.../fdr/gui/components/CSVSelection.java | 109 ++-
.../gui/components/FDRSettingsComplete.form | 2 +-
.../gui/components/FDRSettingsComplete.java | 5 +-
.../fdr/gui/components/FDRSettingsMedium.form | 283 ++++++
.../fdr/gui/components/FDRSettingsMedium.java | 805 ++++++++++++++++++
.../fdr/gui/components/FDRSettingsPanel.java | 12 +
.../fdr/gui/components/FDRSettingsSimple.form | 37 +-
.../fdr/gui/components/FDRSettingsSimple.java | 60 +-
.../fdr/gui/components/MZIdentMLOwnerGUI.form | 134 +++
.../fdr/gui/components/MZIdentMLOwnerGUI.java | 326 +++++++
.../fdr/result/SubGroupFdrInfo.java | 2 +-
.../rappsilber/fdr/utils/MZIdentMLExport.java | 40 +-
.../rappsilber/fdr/utils/MZIdentMLOwner.java | 66 ++
.../rappsilber/fdr/utils/mzIdentMLOwner.java | 27 -
src/main/resources/xifdrproject.properties | 12 +
32 files changed, 2632 insertions(+), 751 deletions(-)
create mode 100644 src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsMedium.form
create mode 100644 src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsMedium.java
create mode 100644 src/main/java/org/rappsilber/fdr/gui/components/MZIdentMLOwnerGUI.form
create mode 100644 src/main/java/org/rappsilber/fdr/gui/components/MZIdentMLOwnerGUI.java
create mode 100644 src/main/java/org/rappsilber/fdr/utils/MZIdentMLOwner.java
delete mode 100644 src/main/java/org/rappsilber/fdr/utils/mzIdentMLOwner.java
diff --git a/nbactions-release-profile.xml b/nbactions-release-profile.xml
index 244d825..349a515 100644
--- a/nbactions-release-profile.xml
+++ b/nbactions-release-profile.xml
@@ -1,46 +1,46 @@
-
-
-
- run
-
- jar
-
-
- process-classes
- org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
-
-
- -classpath %classpath org.rappsilber.fdr.gui.FDRGUI
- java
-
-
-
- debug
-
- jar
-
-
- process-classes
- org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
-
-
- -Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath org.rappsilber.fdr.gui.FDRGUI
- java
- true
-
-
-
- profile
-
- jar
-
-
- process-classes
- org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
-
-
- -classpath %classpath org.rappsilber.fdr.gui.FDRGUI
- java
-
-
-
+
+
+
+ run
+
+ jar
+
+
+ process-classes
+ org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
+
+
+ -classpath %classpath org.rappsilber.fdr.CommandLine
+ java
+
+
+
+ debug
+
+ jar
+
+
+ process-classes
+ org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
+
+
+ -agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath org.rappsilber.fdr.CommandLine
+ java
+ true
+
+
+
+ profile
+
+ jar
+
+
+ process-classes
+ org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
+
+
+ -classpath %classpath org.rappsilber.fdr.CommandLine
+ java
+
+
+
diff --git a/nbactions.xml b/nbactions.xml
index 1078daa..3a340e4 100644
--- a/nbactions.xml
+++ b/nbactions.xml
@@ -10,7 +10,7 @@
org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
- -classpath %classpath org.rappsilber.fdr.CommandLine --pepfdr=5.0 --boost=link --csvOutDir=/home/lfischer/temp/test --csvBaseName=test_XiVersion1.7.754.RC1_2 --xiconfig=/home/lfischer/temp/test/test_XiVersion1.7.754.RC1.csv.config --fasta=/Users/salman/xi_data/xi/sequenceDB/pool8_BSCL-17_46_41-12_Sep_2019/DATABASE.fasta /home/lfischer/temp/test/test_XiVersion1.7.754.RC1.csv --gui
+ -classpath %classpath org.rappsilber.fdr.CommandLine --linkfdr=5.0 --boost=link --csvOutDir=/home/lfischer/temp/test/FDR_rpfdr5.0 --csvBaseName=4pm_dsso_Xi1.7.0.RC1_grouped --xiconfig=/home/lfischer/temp/test/4pm_dsso_Xi1.7.0.RC1.csv.config --fasta=/Users/salman/xi_data/xi/sequenceDB/4_protein_mix-17_59_11-19_Jan_2018/4ProtMix.fasta /home/lfischer/temp/test/4pm_dsso_Xi1.7.0.RC1.csv --gui
java
/home/lfischer
@@ -25,7 +25,7 @@
org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
- -agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath org.rappsilber.fdr.CommandLine --pepfdr=5.0 --boost=link --csvOutDir=/home/lfischer/temp/test --csvBaseName=test_XiVersion1.7.754.RC1_2 --xiconfig=/home/lfischer/temp/test/test_XiVersion1.7.754.RC1.csv.config --fasta=/Users/salman/xi_data/xi/sequenceDB/pool8_BSCL-17_46_41-12_Sep_2019/DATABASE.fasta /home/lfischer/temp/test/test_XiVersion1.7.754.RC1.csv --gui
+ -agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath org.rappsilber.fdr.CommandLine --linkfdr=5.0 --boost=link --csvOutDir=/home/lfischer/temp/test/FDR_rpfdr5.0 --csvBaseName=4pm_dsso_Xi1.7.0.RC1_grouped --xiconfig=/home/lfischer/temp/test/4pm_dsso_Xi1.7.0.RC1.csv.config --fasta=/Users/salman/xi_data/xi/sequenceDB/4_protein_mix-17_59_11-19_Jan_2018/4ProtMix.fasta /home/lfischer/temp/test/4pm_dsso_Xi1.7.0.RC1.csv --gui
java
true
/home/lfischer
@@ -41,7 +41,7 @@
org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
- -classpath %classpath org.rappsilber.fdr.CommandLine --pepfdr=5.0 --boost=link --csvOutDir=/home/lfischer/temp/test --csvBaseName=test_XiVersion1.7.754.RC1_2 --xiconfig=/home/lfischer/temp/test/test_XiVersion1.7.754.RC1.csv.config --fasta=/Users/salman/xi_data/xi/sequenceDB/pool8_BSCL-17_46_41-12_Sep_2019/DATABASE.fasta /home/lfischer/temp/test/test_XiVersion1.7.754.RC1.csv --gui
+ -classpath %classpath org.rappsilber.fdr.CommandLine --linkfdr=5.0 --boost=link --csvOutDir=/home/lfischer/temp/test/FDR_rpfdr5.0 --csvBaseName=4pm_dsso_Xi1.7.0.RC1_grouped --xiconfig=/home/lfischer/temp/test/4pm_dsso_Xi1.7.0.RC1.csv.config --fasta=/Users/salman/xi_data/xi/sequenceDB/4_protein_mix-17_59_11-19_Jan_2018/4ProtMix.fasta /home/lfischer/temp/test/4pm_dsso_Xi1.7.0.RC1.csv --gui
java
/home/lfischer
diff --git a/pom.xml b/pom.xml
index 5bca27a..6f19a6e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.rappsilberlab
xiFDR
- 1.3.37
+ 1.4.0
jar
@@ -145,5 +145,5 @@
Application for FDR estimation cross-linking massspectrometry data
- xiFDR-1.3.37
+ xiFDR-1.4.0
diff --git a/src/main/java/org/rappsilber/fdr/CSVinFDR.java b/src/main/java/org/rappsilber/fdr/CSVinFDR.java
index ddd9b95..6b6eb20 100644
--- a/src/main/java/org/rappsilber/fdr/CSVinFDR.java
+++ b/src/main/java/org/rappsilber/fdr/CSVinFDR.java
@@ -88,6 +88,8 @@ public class CSVinFDR extends OfflineFDR {
{"peptide coverage2", "peptide2 unique matched non lossy coverage", "unique_peak_primary_coverage_p2"},
{"peptide1 fragments", "peptide1 unique matched conservative", "conservative_fragsites_p1"},
{"peptide2 fragments", "peptide2 unique matched conservative", "conservative_fragsites_p2"},
+ {"peptides with stubs", "fragment CCPepFragment"},
+ {"peptides with doublets", "fragment CCPepDoubletFound"},
{"minimum peptide coverage", "min coverage pp"},
{"delta", "delta score", "dscore"},
};
@@ -193,6 +195,8 @@ public void readCSV(CsvParser csv, CsvCondition filter) throws FileNotFoundExcep
Integer cDelta = getColumn(csv,"delta",true);
Integer cPep1Coverage = getColumn(csv,"peptide coverage1",true);
Integer cPep2Coverage = getColumn(csv,"peptide coverage1",true);
+ Integer cPepStubs = getColumn(csv,"peptides with stubs",true);
+ Integer cPepDoublets = getColumn(csv,"peptides with doublets",true);
Integer cPepMinCoverage = getColumn(csv,"minimum peptide coverage",true);
Integer cRank = getColumn(csv,"rank",true);
@@ -293,12 +297,12 @@ public void readCSV(CsvParser csv, CsvCondition filter) throws FileNotFoundExcep
peptide2score=score*(1-ratio);
}
- String[] accessions1 =saccession1.split(";");
- String[] accessions2 =saccession2.split(";");
- String[] descriptions1 =sdescription1.split(";",-1);
- String[] descriptions2 =sdescription2.split(";",-1);
- String[] pepPositions1 =spepPosition1.split(";",-1);
- String[] pepPositions2 =spepPosition2.split(";",-1);
+ String[] accessions1 =saccession1.split("\\s*;\\s*");
+ String[] accessions2 =saccession2.split("\\s*;\\s*");
+ String[] descriptions1 =sdescription1.split("\\s*;\\s*",-1);
+ String[] descriptions2 =sdescription2.split("\\s*;\\s*",-1);
+ String[] pepPositions1 =spepPosition1.split("\\s*;\\s*",-1);
+ String[] pepPositions2 =spepPosition2.split("\\s*;\\s*",-1);
if (!sdescription1.isEmpty()) {
if (descriptions1.length != accessions1.length)
@@ -346,7 +350,7 @@ public void readCSV(CsvParser csv, CsvCondition filter) throws FileNotFoundExcep
int[] ipeppos1 = new int[pepPositions1.length];
for (int i = 0; i0) {
+ stubsFound(true);
+ }
+
+ }
+ if (cPepDoublets != null) {
+
+ psm.addOtherInfo("PeptidesWithDoublets", csv.getDouble(cPepDoublets));
+
+ }
+
if (cPepMinCoverage != null) {
psm.addOtherInfo("minPepCoverage", csv.getDouble(cPepMinCoverage));
diff --git a/src/main/java/org/rappsilber/fdr/FDRSettings.java b/src/main/java/org/rappsilber/fdr/FDRSettings.java
index 11a438f..383b6f2 100644
--- a/src/main/java/org/rappsilber/fdr/FDRSettings.java
+++ b/src/main/java/org/rappsilber/fdr/FDRSettings.java
@@ -169,5 +169,7 @@ public interface FDRSettings {
public void ignoreValidityChecks(boolean ignore);
// public double getSubScoreCutOff();
// public void setSubScoreCutOff(double localfdr);
+ public void setGroupByCrosslinkerStubs(boolean group);
+ public boolean getGroupByCrosslinkerStubs();
}
diff --git a/src/main/java/org/rappsilber/fdr/FDRSettingsImpl.java b/src/main/java/org/rappsilber/fdr/FDRSettingsImpl.java
index 1f73afe..6771982 100644
--- a/src/main/java/org/rappsilber/fdr/FDRSettingsImpl.java
+++ b/src/main/java/org/rappsilber/fdr/FDRSettingsImpl.java
@@ -32,7 +32,7 @@ public class FDRSettingsImpl implements FDRSettings {
double ProteinGroupFDR;
double ProteinGroupLinkFDR;
double ProteinGroupPairFDR;
- int BoostingSteps;
+ int BoostingSteps = 4;
boolean BoostBetween;
boolean LinkDirectional;
boolean PPIDirectional;
@@ -61,7 +61,8 @@ public class FDRSettingsImpl implements FDRSettings {
private boolean combineScoreAndDelta;
private int minFragments;
private boolean boostMinFragments = false;
- private boolean ignoreValidityChecks;
+ private boolean ignoreValidityChecks = true;
+ private boolean groubByCrosslinkerStubs;
@Override
public void addCalcListener(ActionListener al) {
@@ -320,6 +321,7 @@ public static void transferSettings(FDRSettings from, FDRSettings to) {
to.boostDeltaScore(from.boostDeltaScore());
to.combineScoreAndDelta(from.combineScoreAndDelta());
to.ignoreValidityChecks(from.ignoreValidityChecks());
+ to.setGroupByCrosslinkerStubs(from.getGroupByCrosslinkerStubs());
}
public boolean combineScoreAndDelta() {
@@ -528,6 +530,16 @@ public boolean ignoreValidityChecks() {
public void ignoreValidityChecks(boolean ignore) {
this.ignoreValidityChecks = ignore;
}
+
+ @Override
+ public void setGroupByCrosslinkerStubs(boolean group) {
+ this.groubByCrosslinkerStubs = group;
+ }
+
+ @Override
+ public boolean getGroupByCrosslinkerStubs() {
+ return this.groubByCrosslinkerStubs;
+ }
}
diff --git a/src/main/java/org/rappsilber/fdr/OfflineFDR.java b/src/main/java/org/rappsilber/fdr/OfflineFDR.java
index 15b55d2..79c6eaf 100644
--- a/src/main/java/org/rappsilber/fdr/OfflineFDR.java
+++ b/src/main/java/org/rappsilber/fdr/OfflineFDR.java
@@ -29,7 +29,6 @@
import java.util.Locale;
import java.util.Map;
import java.util.RandomAccess;
-import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.rappsilber.data.csv.CSVRandomAccess;
@@ -52,7 +51,6 @@
import org.rappsilber.fdr.entities.AbstractFDRElement;
import org.rappsilber.fdr.entities.FDRSelfAdd;
import org.rappsilber.fdr.filter.DeltaScorePercentFilter;
-import org.rappsilber.fdr.gui.FDRGUI;
import org.rappsilber.fdr.utils.HashedArrayList;
import org.rappsilber.fdr.utils.MaximisingStatus;
import org.rappsilber.fdr.utils.MaximizeLevelInfo;
@@ -65,7 +63,6 @@
import org.rappsilber.utils.IntArrayList;
import org.rappsilber.utils.RArrayUtils;
import org.rappsilber.utils.NullOutputStream;
-import org.rappsilber.utils.SelfAdd;
import org.rappsilber.utils.SelfAddHashSet;
import org.rappsilber.utils.UpdateableInteger;
import org.rappsilber.utils.Version;
@@ -163,7 +160,12 @@ public abstract class OfflineFDR {
public int commandlineFDRDigits = 2;
private boolean uniquePSMs = true;
-
+
+ /**
+ * do we have PSMs with crosslinker-stubs.
+ * Basically do we have a ms2 cleavable crosslinker search.
+ */
+ private boolean stubsFound = false;
/**
* We normalize psm-scores by median and MAD - but to go around some quirks
* of our score propagation scores then get shifted so that the lowest score
@@ -800,6 +802,19 @@ protected String registerRun(String run) {
return r;
}
+ /**
+ * returns if a calculateWrite will only do a single calculation or a range of FDR calculations
+ * @return
+ */
+ public boolean singleCalculation() {
+ return getPsmFDRSetting()[0]==getPsmFDRSetting()[1] &&
+ getPeptidePairFDRSetting()[0]==getPeptidePairFDRSetting()[1] &&
+ getProteinGroupFDRSetting()[0]==getProteinGroupFDRSetting()[1] &&
+ getLinkFDRSetting()[0]==getLinkFDRSetting()[1] &&
+ getPpiFDRSetting()[0]==getPpiFDRSetting()[1] ;
+ }
+
+
public FDRResult calculateWriteFDR(String path, String baseName, String seperator, FDRSettings settings) throws FileNotFoundException {
return calculateWriteFDR(path, baseName, seperator, commandlineFDRDigits, settings);
}
@@ -1026,6 +1041,28 @@ public void calculatePSMFDR(boolean setElementFDR, boolean ignoreGroups, FDRResu
result.maximumProteinAmbiguity = m_maximumProteinAmbiguity;
result.maximumLinkAmbiguity = m_maximumLinkAmbiguity;
+ if (settings.getGroupByCrosslinkerStubs()) {
+ for (PSM p : inputPSM) {
+ int gr = 0;
+ if ((Double)p.getOtherInfo("PeptidesWithStubs") >1)
+ gr=1;
+ if ((Double)p.getOtherInfo("PeptidesWithDoublets") >0)
+ gr++;
+ if (gr==0) {
+ p.addNegativeGrouping("low stub support");
+ } else if (gr>1){
+ p.addPositiveGrouping("high stub support");
+ }
+ }
+ } else {
+ for (PSM p : inputPSM) {
+ if (p.getNegativeGrouping()!=null)
+ p.getNegativeGrouping().remove("low stub support");
+ if (p.getPositiveGrouping()!=null)
+ p.getPositiveGrouping().remove("high stub support");
+ }
+ }
+
fdr(settings.getPSMFDR(), settings, inputPSM, GroupedFDRs, targetPepDBSize, decoyPepDBSize, 1, ignoreGroups, setElementFDR, settings.psmLocalFDR(), settings.isGroupByPSMCount());
@@ -1051,10 +1088,11 @@ public void calculatePSMFDR(boolean setElementFDR, boolean ignoreGroups, FDRResu
fdr(settings.getPSMFDR(), settings, inputPSM, GroupedFDRs, targetPepDBSize, decoyPepDBSize, 1, ignoreGroups, setElementFDR, settings.psmLocalFDR(), settings.isGroupByPSMCount());
GroupedFDRs = GroupedFDRsS;
}
+
for (SubGroupFdrInfo rl : GroupedFDRs.getGroups()) {
- if (rl.didntPassCheck) {
- result.excludedGroups.add("PSM -> " + rl.fdrGroup);
+ if (rl.didntPassCheck != null) {
+ result.excludedGroups.add("PSM -> " + rl.fdrGroup + "(" + rl.didntPassCheck + ")");
}
}
@@ -1181,8 +1219,8 @@ public void calculatePeptidePairFDR(boolean setElementFDR, FDRResult result, FDR
fdr(settings.getPeptidePairFDR(), settings, psmPeps, GroupedFDRs, targetPepDBSize, decoyPepDBSize, 1, ignoreGroups, setElementFDR, settings.peppairLocalFDR(), settings.isGroupByPSMCount());
for (SubGroupFdrInfo rl : GroupedFDRs.getGroups()) {
- if (rl.didntPassCheck) {
- result.excludedGroups.add("PeptidePair -> " + rl.fdrGroup);
+ if (rl.didntPassCheck != null) {
+ result.excludedGroups.add("PeptidePair -> " + rl.fdrGroup+ "(" + rl.didntPassCheck + ")");
}
}
@@ -1263,8 +1301,8 @@ public void calculateProteinGroupFDR(boolean ignoreGroups, boolean setElementFDR
fdr(settings.getProteinGroupFDR(), settings, pepProteinGroups, GroupedFDRs, targetProtDBSize, decoyProtDBSize, settings.getMinProteinPepCount(), ignoreGroups, setElementFDR, settings.protLocalFDR(), false);
for (SubGroupFdrInfo rl : GroupedFDRs.getGroups()) {
- if (rl.didntPassCheck) {
- result.excludedGroups.add("ProteinGroup -> " + rl.fdrGroup);
+ if (rl.didntPassCheck != null) {
+ result.excludedGroups.add("ProteinGroup -> " + rl.fdrGroup + "(" + rl.didntPassCheck + ")");
}
}
@@ -1368,8 +1406,8 @@ public void calculateLinkFDR(boolean ignoreGroups, boolean setElementFDR, FDRSet
}
for (SubGroupFdrInfo rl : GroupedFDRs.getGroups()) {
- if (rl.didntPassCheck) {
- result.excludedGroups.add("ResiduePair -> " + rl.fdrGroup);
+ if (rl.didntPassCheck != null) {
+ result.excludedGroups.add("ResiduePair -> " + rl.fdrGroup + "(" + rl.didntPassCheck + ")");
}
}
@@ -1459,8 +1497,8 @@ public void calculateProteinGroupPairFDR(boolean ignoreGroups, boolean setElemen
fdr(settings.getProteinGroupPairFDR(), settings, linkPPIs, GroupedFDRs, targetProtDBSize, decoyProtDBSize, minPepCount, ignoreGroups, setElementFDR, settings.ppiLocalFDR(), false);
for (SubGroupFdrInfo rl : GroupedFDRs.getGroups()) {
- if (rl.didntPassCheck) {
- result.excludedGroups.add("ProteinGroupPair -> " + rl.fdrGroup);
+ if (rl.didntPassCheck != null) {
+ result.excludedGroups.add("ProteinGroupPair -> " + rl.fdrGroup + "(" + rl.didntPassCheck + ")");
}
}
@@ -1621,7 +1659,11 @@ public FDRResult calculateFDR(FDRSettings settings, boolean setElementFDR) {
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "fdr protein groups :" + result.proteinGroupFDR.getResultCount());
if (!result.excludedGroups.isEmpty()) {
- Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Some FDR groups where ignored as being unreliable: "+ MyArrayUtils.toString(result.excludedGroups, "; "));
+ if (settings.ignoreValidityChecks()) {
+ Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "For some subgroups the FDR calculation is likely unreliable:\n"+ MyArrayUtils.toString(result.excludedGroups, ";\n"));
+ } else {
+ Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Some FDR groups where ignored as being unreliable:\n"+ MyArrayUtils.toString(result.excludedGroups, ";\n"));
+ }
}
return result;
@@ -1660,8 +1702,18 @@ public void writeFiles(String path, String baseName, String seperator, FDRResult
public void writeFiles(String path, String baseName, String fileextension, String seperator, FDRResult result) throws FileNotFoundException {
CSVRandomAccess csvFormater = new CSVRandomAccess(seperator.charAt(0), '"');
csvFormater.setLocale(outputlocale);
+ File folder = new File(path);
+ int n=0;
+ if (!folder.exists()) {
+ folder.mkdirs();
+ } else if (!folder.isDirectory()){
+ while (folder.exists() && folder.isDirectory()){
+ folder = new File(path+ "_" + (++n));
+ }
+ path = folder.getAbsolutePath();
+ }
- String extension = "_xiFDR" + OfflineFDR.xiFDRVersion + fileextension;
+ String extension = "_xiFDR" + getXiFDRVersion() + fileextension;
CountOccurence fdrPSMGroupCounts = new CountOccurence();
@@ -1782,7 +1834,7 @@ public int compare(PeptidePair o1, PeptidePair o2) {
String xlPepsHeader = csvFormater.valuesToString(getXLPepsHeader());
pepsOut.println(xlPepsHeader);
- pepsLinearOut = new PrintWriter(path + "/" + baseName + "_Linear_Peptides" + OfflineFDR.xiFDRVersion + extension);
+ pepsLinearOut = new PrintWriter(path + "/" + baseName + "_Linear_Peptides" + getXiFDRVersion() + extension);
String linearPepsHeader = csvFormater.valuesToString(getLinearPepsHeader());
pepsLinearOut.println(linearPepsHeader);
@@ -2491,28 +2543,27 @@ private > void defineConnectedness(Collection
*
* @param
* @param info
- * @param result
- * @return
+ * @return null pass; otherwise reason
*/
- public > boolean checkValid(SubGroupFdrInfo info, ArrayList result, double factor, int minTDCount) {
+ public > String checkValid(SubGroupFdrInfo info, double factor, int minTDCount) {
// make sure we have enough targets that we could theoretically thsi number of TD
if (info.resultTT * info.targteFDR < (double) minTDCount) {
- return false;
+ return "not enough TT";
}
if ((info.targteFDR < 1 && info.resultTT < info.resultDD) || info.resultTD < info.resultDD) {
- return false;
+ return "to many DD";
}
if ((info.resultDD + 0.00001) / (info.resultTD + 0.0001) > 1 - factor) {
- return false;
+ return "resolution to bad";
}
if (info.resultTT * info.targteFDR < factor * 10) {
- return false;
+ return "resolution to bad";
}
- return true;
+ return null;
}
@@ -2732,40 +2783,44 @@ private > void fdr(double fdr, FDRSettings setti
}
groupResult = filtered;
}
-
+ String valid = checkValid(info, 0, minTDChance);
// if (info.resultTT*fdr{1}({2})", new Object[]{group.get(0).getClass(), fdrgroup, group.get(0).getFDRGroup()});
- //between
- if (fdrgroup.toLowerCase().contains("between")) {
- toosmallsum += groupResult.size();
- toosmall.add(fdrgroup);
- collectedToSmallNames.add(fdrgroup);
- collectedToSmall.TT += info.TT;
- collectedToSmall.TD += info.TD;
- collectedToSmall.DD += info.DD;
- collectedToSmall.DCount += info.DCount;
- collectedToSmall.TCount += info.TCount;
- collectedToSmall.inputCount += info.inputCount;
- tooSmallGroup.addAll(group);
- groupResult.clear();
- } else {
- // within group
- collectedToSmallWithinNames.add(fdrgroup);
- toosmallsumWithin += groupResult.size();
- toosmallWithin.add(fdrgroup);
- collectedToSmallWithin.TT += info.TT;
- collectedToSmallWithin.TD += info.TD;
- collectedToSmallWithin.DD += info.DD;
- collectedToSmallWithin.DCount += info.DCount;
- collectedToSmallWithin.TCount += info.TCount;
- collectedToSmallWithin.inputCount += info.inputCount;
- tooSmallGroupWithin.addAll(group);
- groupResult.clear();
+ if (valid != null) {
+ if ((!settings.ignoreValidityChecks())) {
+ Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Discarded group {0}->{1}({2})", new Object[]{group.get(0).getClass(), fdrgroup, group.get(0).getFDRGroup()});
+ //between
+ if (fdrgroup.toLowerCase().contains("between")) {
+ toosmallsum += groupResult.size();
+ toosmall.add(fdrgroup);
+ collectedToSmallNames.add(fdrgroup);
+ collectedToSmall.TT += info.TT;
+ collectedToSmall.TD += info.TD;
+ collectedToSmall.DD += info.DD;
+ collectedToSmall.DCount += info.DCount;
+ collectedToSmall.TCount += info.TCount;
+ collectedToSmall.inputCount += info.inputCount;
+ tooSmallGroup.addAll(group);
+ groupResult.clear();
+ } else {
+ // within group
+ collectedToSmallWithinNames.add(fdrgroup);
+ toosmallsumWithin += groupResult.size();
+ toosmallWithin.add(fdrgroup);
+ collectedToSmallWithin.TT += info.TT;
+ collectedToSmallWithin.TD += info.TD;
+ collectedToSmallWithin.DD += info.DD;
+ collectedToSmallWithin.DCount += info.DCount;
+ collectedToSmallWithin.TCount += info.TCount;
+ collectedToSmallWithin.inputCount += info.inputCount;
+ tooSmallGroupWithin.addAll(group);
+ groupResult.clear();
+ }
+ info.filteredResult = new HashedArrayList<>();
+ } else {
+ Logger.getLogger(this.getClass().getName()).log(Level.FINE, "FDR-Group {0}->{1}({2}) deemed unreliable - be carefull", new Object[]{group.get(0).getClass(), fdrgroup, group.get(0).getFDRGroup()});
}
- info.filteredResult = new HashedArrayList<>();
- info.didntPassCheck = true;
+ info.didntPassCheck = valid;
} //else {
groupInfo.addGroup(fdrgroup, info);
// group, fdr, safetyfactor, groupResult, tCount, dCount,setElementFDR);
@@ -2809,7 +2864,7 @@ private > void fdr(double fdr, FDRSettings setti
groupResult = filtered;
}
}
- if (settings.ignoreValidityChecks() || checkValid(collectedToSmall, groupResult, 0, minTDChance)) {
+ if (settings.ignoreValidityChecks() || checkValid(collectedToSmall, 0, minTDChance) == null) {
groupInfo.addGroup(collectedToSmall.fdrGroup, collectedToSmall);
// group, fdr, safetyfactor, groupResult, tCount, dCount,setElementFDR);
// nextFDR.put(fdrgroup, prevFDR);
@@ -2848,7 +2903,7 @@ private > void fdr(double fdr, FDRSettings setti
groupResultwithin = filtered;
}
}
- if (settings.ignoreValidityChecks() || checkValid(collectedToSmallWithin, groupResultwithin, 0, minTDChance)) {
+ if (settings.ignoreValidityChecks() || checkValid(collectedToSmallWithin, 0, minTDChance) == null) {
groupInfo.addGroup(collectedToSmallWithin.fdrGroup, collectedToSmallWithin);
// group, fdr, safetyfactor, groupResult, tCount, dCount,setElementFDR);
// nextFDR.put(fdrgroup, prevFDR);
@@ -2865,7 +2920,6 @@ private > void fdr(double fdr, FDRSettings setti
// we didn't get any results through. try a non grouped
SubGroupFdrInfo info = new SubGroupFdrInfo();
info.fdrGroup = "NoSubResults";
- groupInfo.addGroup(info.fdrGroup, info);
for (String fdrgroup : groupedList.keySet()) {
info.TT += gTT.get(fdrgroup).value;
info.TD += gTD.get(fdrgroup).value;
@@ -2899,14 +2953,14 @@ private > void fdr(double fdr, FDRSettings setti
allResult = filtered;
}
}
- if (allResult.size() * fdr < minTDChance) {
- allResult.clear();
- } else {
+ if (settings.ignoreValidityChecks() || checkValid(info, 0, minTDChance) == null) {
+ groupInfo.addGroup(info.fdrGroup, info);
groupInfo.setLinear(groupInfo.getLinear() + info.linear);
groupInfo.setWithin(groupInfo.getWithin() + info.within);
groupInfo.setBetween(groupInfo.getBetween() + info.between);
- }
-
+ } else {
+ allResult.clear();
+ }
}
// return ret;
@@ -4392,8 +4446,8 @@ protected ArrayList getPSMOutputLine(PSM pp) {
protected void peptidePositionsToPSMOutString(HashMap positions, StringBuilder sbaccessions, StringBuilder sbdescriptions, StringBuilder sbPositions, StringBuilder sbProtLink, int peplink) {
for (Protein p : positions.keySet()) {
for (int i : positions.get(p)) {
- sbaccessions.append(";").append(p.getAccession());
- sbdescriptions.append(";").append(p.getDescription());
+ sbaccessions.append(";").append((p.isDecoy()?"decoy:":"")+ p.getAccession());
+ sbdescriptions.append(";").append(p.isDecoy()?"decoy":p.getDescription());
sbPositions.append(";").append(i2s(i));
sbProtLink.append(";").append(i2s(i + peplink - 1));
}
@@ -6052,4 +6106,22 @@ public boolean groupPSMsByRun() {
return this.groupPSMsByRun;
}
+ /**
+ * do we have PSMs with crosslinker-stubs.
+ * Basically do we have a ms2 cleavable crosslinker search.
+ * @return the stubsFound
+ */
+ public boolean stubsFound() {
+ return stubsFound;
+ }
+
+ /**
+ * do we have PSMs with crosslinker-stubs.
+ * Basically do we have a ms2 cleavable crosslinker search.
+ * @param stubsFound the stubsFound to set
+ */
+ public void stubsFound(boolean stubsFound) {
+ this.stubsFound = stubsFound;
+ }
+
}
diff --git a/src/main/java/org/rappsilber/fdr/XiCSVinFDR.java b/src/main/java/org/rappsilber/fdr/XiCSVinFDR.java
index ef68303..b4ba158 100644
--- a/src/main/java/org/rappsilber/fdr/XiCSVinFDR.java
+++ b/src/main/java/org/rappsilber/fdr/XiCSVinFDR.java
@@ -26,6 +26,7 @@
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.swing.SwingUtilities;
import org.rappsilber.data.csv.ColumnAlternatives;
import org.rappsilber.data.csv.CsvParser;
import org.rappsilber.data.csv.condition.CsvCondition;
@@ -34,6 +35,10 @@
import org.rappsilber.fdr.entities.Peptide;
import org.rappsilber.fdr.entities.Protein;
import org.rappsilber.fdr.gui.FDRGUI;
+import org.rappsilber.fdr.gui.components.MZIdentMLOwnerGUI;
+import org.rappsilber.fdr.result.FDRResult;
+import org.rappsilber.fdr.utils.MZIdentMLExport;
+import org.rappsilber.fdr.utils.MZIdentMLOwner;
import org.rappsilber.utils.IntArrayList;
import org.rappsilber.utils.UpdatableChar;
import rappsilber.config.RunConfig;
@@ -278,7 +283,7 @@ public String[] parseArgs(String[] argv, FDRSettings settings) {
}
if (startGUI) {
- FDRGUI fg = FDRGUI.startGUI();
+ final FDRGUI fg = FDRGUI.startGUI();
if (unknown.size() > 0) {
fg.setInput(unknown.get(0));
}
@@ -289,6 +294,17 @@ public String[] parseArgs(String[] argv, FDRSettings settings) {
fg.setXiConfig(confpath);
}
fg.setFDRSettings(settings);
+
+ String outdir = getCsvOutDirSetting();
+ String basename = getCsvOutBaseSetting();
+ fg.setCSVOutFile(outdir + ((outdir.endsWith("/") || outdir.endsWith("\\")) ? "":File.separator) + basename +".csv");
+// SwingUtilities.invokeLater(new Runnable() {
+// @Override
+// public void run() {
+// fg.readAdditionalCSV();
+// }
+// });
+//
unknown.clear();
unknown.add("--GUI--");
@@ -380,8 +396,23 @@ public static void main (String[] argv) throws SQLException, FileNotFoundExcepti
}
Logger.getLogger(XiCSVinFDR.class.getName()).log(Level.INFO, "Calculate FDR");
- ofdr.calculateWriteFDR(ofdr.getCsvOutDirSetting(), ofdr.getCsvOutBaseSetting(), ",", settings);
+ FDRResult res = ofdr.calculateWriteFDR(ofdr.getCsvOutDirSetting(), ofdr.getCsvOutBaseSetting(), ",", settings);
+ Logger.getLogger(XiCSVinFDR.class.getName()).log(Level.INFO, ofdr.singleCalculation() +
+ " " + (ofdr.getConfig() != null) + " " + (ofdr.searchedFastas != null && ofdr.searchedFastas.size()>0) + "\n");
+
+ if (ofdr.singleCalculation() && ofdr.getConfig() != null && (ofdr.searchedFastas != null && ofdr.searchedFastas.size()>0)) {
+ // we should be able to write out an mzIdentML
+ String path =ofdr.getCsvOutDirSetting();
+ String baseName = ofdr.getCsvOutBaseSetting();
+ String out = path + (path.endsWith(File.separator)?"":File.separator) + baseName + ".mzid";
+ try {
+ Logger.getLogger(XiCSVinFDR.class.getName()).log(Level.INFO, "Writing mzIdentML to " + out);
+ MZIdentMLExport mze = new MZIdentMLExport(ofdr, res, out, MZIdentMLOwnerGUI.getSetOwner(new MZIdentMLOwner()));
+ } catch (Exception ex) {
+ Logger.getLogger(XiCSVinFDR.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
System.exit(0);
@@ -489,7 +520,7 @@ public void matchFastas() throws IOException {
p.setSequence(proteinsToSequence.get(fastaheader));
} else {
// did not find a decoy protein - so will try the target protein
- fastaheader = parts2Proteins.get(p.getAccession());
+ fastaheader = parts2Proteins.get(p.getAccession().toLowerCase());
if (fastaheader != null) {
// only found target protein - assume same size
p.setSize(proteinsToSequence.get(fastaheader).length());
@@ -500,7 +531,7 @@ public void matchFastas() throws IOException {
}
} else {
- String fastaheader = parts2Proteins.get(p.getAccession());
+ String fastaheader = parts2Proteins.get(p.getAccession().toLowerCase());
if (fastaheader != null) {
p.setSequence(proteinsToSequence.get(fastaheader));
} else {
@@ -539,7 +570,6 @@ public void readCSV(CsvParser csv, CsvCondition filter) throws FileNotFoundExcep
super.readCSV(csv, filter); //To change body of generated methods, choose Tools | Templates.
matchFastas();
}
-
-
-
+
+
}
diff --git a/src/main/java/org/rappsilber/fdr/entities/AbstractFDRElement.java b/src/main/java/org/rappsilber/fdr/entities/AbstractFDRElement.java
index 39ee4bb..64c8004 100644
--- a/src/main/java/org/rappsilber/fdr/entities/AbstractFDRElement.java
+++ b/src/main/java/org/rappsilber/fdr/entities/AbstractFDRElement.java
@@ -111,6 +111,12 @@ public HashSet getPositiveGrouping() {
return m_positiveGroups;
}
+ public void addPositiveGrouping(String av) {
+ if (this.m_positiveGroups == null)
+ this.m_positiveGroups = new HashSet(1);
+ this.m_positiveGroups.add(av);
+ }
+
/**
* indicates this passed some form of Negative value that makes this
diff --git a/src/main/java/org/rappsilber/fdr/entities/PeptidePair.java b/src/main/java/org/rappsilber/fdr/entities/PeptidePair.java
index abd1460..736a040 100644
--- a/src/main/java/org/rappsilber/fdr/entities/PeptidePair.java
+++ b/src/main/java/org/rappsilber/fdr/entities/PeptidePair.java
@@ -32,21 +32,34 @@
* by setting the second peptide to the {@link Peptide#NOPEPTIDE} place-holder.
*/
public class PeptidePair extends AbstractFDRElement {//implements Comparable{
- /** counts up each instance of PeptidePairs used to assign unique IDs */
+
+ /**
+ * counts up each instance of PeptidePairs used to assign unique IDs
+ */
public static int PEPTIDEPAIRCOUNT = 0;
- /** a link represented by this peptide pair that passed the fdr */
+ /**
+ * a link represented by this peptide pair that passed the fdr
+ */
private ProteinGroupLink m_link;
- /** unique id for this peptide pair */
+ /**
+ * unique id for this peptide pair
+ */
protected int peptidePairID = PEPTIDEPAIRCOUNT++;
- /** sorry is used in the rappsilber group for a search type specific FDR */
+ /**
+ * sorry is used in the rappsilber group for a search type specific FDR
+ */
public static boolean ISTARGETED = false;
- /** length groups used for doing a length depended FDR-grouping */
+ /**
+ * length groups used for doing a length depended FDR-grouping
+ */
protected static int[] lenghtGroup;
// /** meaningful names for the FDR-groups */
// public static HashMap fdrGroupNames = new HashMap();
- /** is used in the rappsilber group internally for a a specific search type */
+ /**
+ * is used in the rappsilber group internally for a a specific search type
+ */
private static Pattern targetMod = Pattern.compile("X(-?[0-9]+(\\.[0-9]+)?)");
-
+
/**
* id of peptide1
*/
@@ -68,12 +81,12 @@ public class PeptidePair extends AbstractFDRElement {//implements C
* overall score of this pair
*/
private double score = Double.NaN;
-
+
/**
* overall score of this pair
*/
private double peptide1score = Double.NaN;
-
+
/**
* overall score of this pair
*/
@@ -110,44 +123,71 @@ public class PeptidePair extends AbstractFDRElement {//implements C
* it could be a protein internal link
*/
private boolean isInternal = false;
- /** only one peptide */
+ /**
+ * only one peptide
+ */
protected boolean isLinear = false;
- /** single loop-linked peptide */
+ /**
+ * single loop-linked peptide
+ */
private boolean isLoop = false;
- /** no decoy */
+ /**
+ * no decoy
+ */
private boolean isTT = false;
- /** one decoy */
+ /**
+ * one decoy
+ */
private boolean isTD = false;
- /** two decoy */
+ /**
+ * two decoy
+ */
private boolean isDD = false;
- /** FDR group assigned to this peptide pair */
+ /**
+ * FDR group assigned to this peptide pair
+ */
private String fdrGroup;
- /** fdr assigned to the score of this peptidepair */
+ /**
+ * fdr assigned to the score of this peptidepair
+ */
public double m_fdr = -1;
- /** the fdr of the link that is supported by this peptide pair*/
+ /**
+ * the fdr of the link that is supported by this peptide pair
+ */
protected double m_LinkFdr = -1;
- /** the fdr of the protein pair that is supported by this peptide pair */
+ /**
+ * the fdr of the protein pair that is supported by this peptide pair
+ */
protected double m_PPIFdr = -1;
- /** proteingroup supported by this peptidepair that passed the fdr */
+ /**
+ * proteingroup supported by this peptidepair that passed the fdr
+ */
public ProteinGroup fdrProteinGroup1 = null;
- /** proteingroup supported by this peptidepair that passed the fdr */
+ /**
+ * proteingroup supported by this peptidepair that passed the fdr
+ */
public ProteinGroup fdrProteinGroup2 = null;
- /** are all supporting PSMs special cases? */
+ /**
+ * are all supporting PSMs special cases?
+ */
// private HashSet negativeGroups = null;
- /** indicates that the two peptides where in the same spectrum but non-covalently linked */
+ /**
+ * indicates that the two peptides where in the same spectrum but
+ * non-covalently linked
+ */
private boolean isNonCovalent = false;
// private HashSet positiveGroups;
- /**
+ /**
* is this a cross-link of consecutive peptides
*/
private Boolean isConsecutive;
-
-
+
/**
* constructor
- * @param psm
+ *
+ * @param psm
*/
public PeptidePair(PSM psm) {
this.peptide1 = psm.getPeptide1();
@@ -172,7 +212,7 @@ public PeptidePair(PSM psm) {
// this.chargeTopScores.set(psm.getCharge(), psm.getScore());
// this.chargeTopScoresPSMId.set(psm.getCharge(), psm.getPsmID());
this.psms.add(psm);
- this.chargeTopScoresPSM = new PSM[psm.getCharge()+1];
+ this.chargeTopScoresPSM = new PSM[psm.getCharge() + 1];
this.chargeTopScoresPSM[psm.getCharge()] = psm;
//this.chargeTopScoresRatios.set(psm.getCharge(), psm.getScoreRatio());
@@ -199,19 +239,21 @@ public int hashCode() {
@Override
public boolean equals(Object l) {
PeptidePair c = (PeptidePair) l;
- if (isNonCovalent != c.isNonCovalent)
+ if (isNonCovalent != c.isNonCovalent) {
return false;
-
- return crosslinker == c.crosslinker &&
- ((c.peptide1.equals(peptide1) && c.peptide2.equals(peptide2) && c.pepsite1 == pepsite1 && c.pepsite2 == pepsite2)
+ }
+
+ return crosslinker == c.crosslinker
+ && ((c.peptide1.equals(peptide1) && c.peptide2.equals(peptide2) && c.pepsite1 == pepsite1 && c.pepsite2 == pepsite2)
|| (c.peptide2.equals(peptide1) && c.peptide1.equals(peptide2) && c.pepsite2 == pepsite1 && c.pepsite1 == pepsite2));
}
- /**
- * adds the information of another peptide pair to this one.
- * Is used to join the PeptidePairs that are generated from different PSMs
- * but are actually the same PeptidePairs.
- * @param p
+ /**
+ * adds the information of another peptide pair to this one. Is used to join
+ * the PeptidePairs that are generated from different PSMs but are actually
+ * the same PeptidePairs.
+ *
+ * @param p
*/
public void add(PeptidePair p) {
if (p == this) {
@@ -225,60 +267,63 @@ public void add(PeptidePair p) {
chargeTopScoresPSM = new PSM[p.chargeTopScoresPSM.length];
System.arraycopy(dummy, 0, chargeTopScoresPSM, 0, dummy.length);
}
- for (int i = 0 ; i< p.chargeTopScoresPSM.length;i++) {
+ for (int i = 0; i < p.chargeTopScoresPSM.length; i++) {
PSM ppsm = p.chargeTopScoresPSM[i];
- if (ppsm == null)
+ if (ppsm == null) {
continue;
+ }
+
+ PSM cpsm = null;
+ if (chargeTopScoresPSM.length > i) {
+ cpsm = chargeTopScoresPSM[i];
+ }
- PSM cpsm =null;
- if (chargeTopScoresPSM.length>i)
- cpsm= chargeTopScoresPSM[i];
-
if (cpsm == null || ppsm.getScore() > cpsm.getScore()) {
- chargeTopScoresPSM[i]= ppsm;
+ chargeTopScoresPSM[i] = ppsm;
// if (invertScoreRatio) {
// chargeTopScoresRatios.set(i, 1 - p.chargeTopScoresRatios.get(i));
// } else {
// chargeTopScoresRatios.set(i, p.chargeTopScoresRatios.get(i));
// }
-
+
}
-
+
}
boolean setFDR = false;
addFDRGroups(p);
-
+
if (p.isInternal && !isInternal) {
isInternal = true;
setFDR = true;
- }
-
- if (setFDR)
+ }
+
+ if (setFDR) {
setFDRGroup();
-
+ }
+
}
/**
- * calculate the score of this Peptide pair based on the scores of the
+ * calculate the score of this Peptide pair based on the scores of the
* supporting PSMs
*/
public void setScore() {
score = 0;
- peptide1score=0;
- peptide2score=0;
+ peptide1score = 0;
+ peptide2score = 0;
for (PSM psm : chargeTopScoresPSM) {
- if (psm!=null) {
+ if (psm != null) {
score += psm.getScore() * psm.getScore();
if (psm.getPeptide1() == getPeptide1()) {
- peptide1score+=psm.getPeptide1Score()*psm.getPeptide1Score();
- peptide2score+=psm.getPeptide2Score()*psm.getPeptide2Score();
+ peptide1score += psm.getPeptide1Score() * psm.getPeptide1Score();
+ peptide2score += psm.getPeptide2Score() * psm.getPeptide2Score();
} else {
- peptide1score+=psm.getPeptide2Score()*psm.getPeptide2Score();
- peptide2score+=psm.getPeptide1Score()*psm.getPeptide1Score();
+ peptide1score += psm.getPeptide2Score() * psm.getPeptide2Score();
+ peptide2score += psm.getPeptide1Score() * psm.getPeptide1Score();
}
}
-
+
}
score = Math.sqrt(score);
peptide1score = Math.sqrt(peptide1score);
@@ -286,9 +331,10 @@ public void setScore() {
}
/**
- * returns the link that is supported by this peptidepair encapsulated in a
+ * returns the link that is supported by this peptidepair encapsulated in a
* ArrayList.
- * @return
+ *
+ * @return
*/
public ArrayList getLinks() {
ArrayList links = new ArrayList();
@@ -297,20 +343,22 @@ public ArrayList getLinks() {
}
/**
- * returns the link that is supported by this peptidepair
- * @return
+ * returns the link that is supported by this peptidepair
+ *
+ * @return
*/
public ProteinGroupLink getLink() {
return new ProteinGroupLink(this);
}
/**
- * returns the link supported by this peptidepair but filtered through the
- * supplied SelfAddHashSet. This ensures that all peptidepairs that would
- * support the same link will actually return references to the same
+ * returns the link supported by this peptidepair but filtered through the
+ * supplied SelfAddHashSet. This ensures that all peptidepairs that would
+ * support the same link will actually return references to the same
* instance of the ProteinGroupLink.
+ *
* @param allLinks
- * @return
+ * @return
*/
public ArrayList getLinks(SelfAddHashSet allLinks) {
return allLinks.registerAll(getLinks());
@@ -318,7 +366,8 @@ public ArrayList getLinks(SelfAddHashSet all
/**
* returns a list of proteins supported by this peptide pair.
- * @return
+ *
+ * @return
*/
public ArrayList getProteins() {
HashSet prots = new HashSet();
@@ -331,34 +380,36 @@ public ArrayList getProteins() {
}
/**
- * returns the proteins supported by this peptidepair but filtered through the
- * supplied SelfAddHashSet. This ensures that all peptidepairs that would
- * support the same proteins will actually return references to the same
- * instances of the Protein.
- * @param allProteins
- * @return
+ * returns the proteins supported by this peptidepair but filtered through
+ * the supplied SelfAddHashSet. This ensures that all peptidepairs that
+ * would support the same proteins will actually return references to the
+ * same instances of the Protein.
+ *
+ * @param allProteins
+ * @return
*/
public ArrayList getProteins(SelfAddHashSet allProteins) {
return allProteins.registerAll(getProteins());
}
-
/**
- * calculate the score for the given protein based on the score of the
+ * calculate the score for the given protein based on the score of the
* current PeptidePair
+ *
* @param prot
- * @return
+ * @return
*/
public double getProteinScore(Protein prot) {
- if (Double.isNaN(peptide1score))
+ if (Double.isNaN(peptide1score)) {
setScore();
+ }
double score = 0;
// is the protein among the first site of proteins
ArrayList prot1 = peptide1.getProteins();
int prot1size = prot1.size();
for (Protein p : prot1) {
if (p.equals(prot)) {
- score += peptide1score * peptide1score/prot1size;
+ score += peptide1score * peptide1score / prot1size;
break;
}
}
@@ -367,7 +418,7 @@ public double getProteinScore(Protein prot) {
int prot2size = prot2.size();
for (Protein p : prot2) {
if (p.equals(prot)) {
- score += peptide1score * peptide1score/prot2size;
+ score += peptide1score * peptide1score / prot2size;
break;
}
}
@@ -376,12 +427,14 @@ public double getProteinScore(Protein prot) {
/**
* calculate the score of a Peptide based on the current PeptidePair
+ *
* @param pep
- * @return
+ * @return
*/
public double getPeptideScore(Peptide pep) {
- if (Double.isNaN(peptide1score))
+ if (Double.isNaN(peptide1score)) {
setScore();
+ }
// is the protein among the first site of proteins
if (pep.equals(peptide1)) {
score += peptide1score * peptide1score;
@@ -403,7 +456,8 @@ public Peptide getPeptide1() {
/**
* the second peptide of the pair
- * @return
+ *
+ * @return
*/
public Peptide getPeptide2() {
return peptide2;
@@ -430,7 +484,7 @@ public int getPeptideLinkSite2() {
public int getPeptideLinkSite(int peptide) {
return peptide == 0 ? pepsite1 : pepsite2;
}
-
+
/**
* @return the length of peptide 1
*/
@@ -457,7 +511,8 @@ public double getScore() {
/**
* whether the first peptide is decoy
- * @return
+ *
+ * @return
*/
public boolean isDecoy1() {
return isDecoy1;
@@ -465,7 +520,8 @@ public boolean isDecoy1() {
/**
* whether the second peptide is decoy
- * @return
+ *
+ * @return
*/
public boolean isDecoy2() {
return isDecoy2;
@@ -473,8 +529,9 @@ public boolean isDecoy2() {
/**
* whether this could be an protein internal link.
- * Meaning whether there is an overlap between the proteins that the first
+ * Meaning whether there is an overlap between the proteins that the first
* and the second peptide could originate from.
+ *
* @return the isInternal
*/
@Override
@@ -483,16 +540,19 @@ public boolean isInternal() {
}
/**
- * Whether it is definitely not an internal and also not a linear peptide pair
+ * Whether it is definitely not an internal and also not a linear peptide
+ * pair
+ *
* @return the isInternal
*/
@Override
public boolean isBetween() {
return (!isInternal) && (!isLinear);
}
-
+
/**
* all peptides are target
+ *
* @return the isTT
*/
@Override
@@ -502,6 +562,7 @@ public boolean isTT() {
/**
* one peptide is decoy
+ *
* @return the isTD
*/
@Override
@@ -511,23 +572,24 @@ public boolean isTD() {
/**
* two peptides are decoy
+ *
* @return the isDD
*/
@Override
public boolean isDD() {
return isDD;
}
-
+
/**
* the assigned FDR group for this peptide pair
- * @return
+ *
+ * @return
*/
@Override
public String getFDRGroup() {
return fdrGroup;
}
-
// /**
// * translates FDR-group IDs into FDR-group names
// * @param fdrgroup
@@ -541,10 +603,10 @@ public String getFDRGroup() {
// }
// return fdrGroupNames.get(fdrgroup);
// }
-
/**
* returns all supporting peptide pairs - meaning itself
- * @return
+ *
+ * @return
*/
public Collection getPeptidePairs() {
ArrayList ret = new ArrayList(1);
@@ -554,7 +616,8 @@ public Collection getPeptidePairs() {
/**
* list of the peptides of this peptide pair
- * @return
+ *
+ * @return
*/
public ArrayList getPeptides() {
ArrayList ret = new ArrayList(2);
@@ -566,30 +629,35 @@ public ArrayList getPeptides() {
}
/**
- * returns a list of IDs of the top scoring PSMs for each precursor charge state
- * of the PSMs that support this peptide pair.
- * @return
+ * returns a list of IDs of the top scoring PSMs for each precursor charge
+ * state of the PSMs that support this peptide pair.
+ *
+ * @return
*/
public String getTopPSMIDs() {
return RArrayUtils.toStringNoNull(chargeTopScoresPSM, ";");
}
-
+
/**
- * returns a list of the top scoring PSMs for each precursor charge state
- * of the PSMs that support this peptide pair.
- * @return
+ * returns a list of the top scoring PSMs for each precursor charge state of
+ * the PSMs that support this peptide pair.
+ *
+ * @return
*/
public Collection getTopPSMs() {
ArrayList psms = new ArrayList<>();
- for (PSM p : chargeTopScoresPSM)
- if (p!=null)
+ for (PSM p : chargeTopScoresPSM) {
+ if (p != null) {
psms.add(p);
+ }
+ }
return psms;
}
/**
* A string representation of this peptide pair
- * @return
+ *
+ * @return
*/
@Override
public String toString() {
@@ -607,7 +675,8 @@ public String toString() {
/**
* is any peptide a decoy
- * @return
+ *
+ * @return
*/
public boolean isDecoy() {
return isDecoy1 || isDecoy2;
@@ -622,7 +691,8 @@ public static int[] getLenghtGroup() {
/**
* set maximum length groups for fdr
- * @param aLenghtGroup
+ *
+ * @param aLenghtGroup
*/
public static void setLenghtGroup(int[] aLenghtGroup) {
// make sure every value exists only ones
@@ -649,33 +719,23 @@ public static void setLenghtGroup(int[] aLenghtGroup) {
lenghtGroup[i] = dl[dl.length - 1 - i];
}
-
-// // give groups a name
-// String[] groupNames = new String[]{"Linear", "Within", "Between", "Linear Special", "Within Special", "Between Special"};
-// fdrGroupNames.put(-1, "all combined");
-// for (int gn = 0; gn < groupNames.length; gn++) {
-// int g = gn * (lenghtGroup.length);
-// for (int i = 0; i < lenghtGroup.length; i++) {
-// fdrGroupNames.put(g + i, groupNames[gn] + " >" + lenghtGroup[i]);
-// }
-// }
-
}
- /**
- * define a fdr-group id based on the inputs
+ /**
+ * define a fdr-group id based on the inputs
+ *
* @param pep1
* @param pep2
* @param isLinear
* @param isInternal
* @param specialCase
- * @return
+ * @return
*/
public static String getFDRGroup(Peptide pep1, Peptide pep2, boolean isLinear, boolean isInternal, Collection negativeGroups, Collection positiveGroups, String groupExt) {
- String group = (isLinear ? "linear" : (isInternal ? "internal" :"between"));
- groupExt=" " + groupExt;
+ String group = (isLinear ? "linear" : (isInternal ? "internal" : "between"));
+ groupExt = " " + groupExt;
if (negativeGroups != null && negativeGroups.size() > 0) {
- ArrayList ng = new ArrayList<>(negativeGroups);
+ ArrayList ng = new ArrayList<>(negativeGroups);
java.util.Collections.sort(ng);
groupExt += " n:" + RArrayUtils.toString(ng, " n:");
}
@@ -689,61 +749,64 @@ public static String getFDRGroup(Peptide pep1, Peptide pep2, boolean isLinear, b
// sorry is used rappsilber internally for targeted modification search
Matcher m = targetMod.matcher(pep1.getSequence());
if (m.matches()) {
- int mass = (int)(Math.round(Double.parseDouble(m.group(1))*10));
+ int mass = (int) (Math.round(Double.parseDouble(m.group(1)) * 10));
// fdrGroup +=100 * mass;
- groupExt = " " + (mass/10.0) + groupExt;
-
+ groupExt = " " + (mass / 10.0) + groupExt;
+
} else {
m = targetMod.matcher(pep2.getSequence());
if (m.matches()) {
- int mass = (int)(Math.round(Double.parseDouble(m.group(1))*10));
- groupExt = " " + (mass/10.0) + groupExt;
+ int mass = (int) (Math.round(Double.parseDouble(m.group(1)) * 10));
+ groupExt = " " + (mass / 10.0) + groupExt;
}
}
- }
-
- if (isLinear) {
- // and the next decision is based on minimum peptide length
- for (int lg = 0; lg < lenghtGroup.length; lg++) {
- if (pep1.length() > lenghtGroup[lg]) {
- group += " > " + lenghtGroup[lg];
- break;
+ }
+
+ if (lenghtGroup.length > 0
+ && (lenghtGroup.length > 1 || lenghtGroup[0] > 0)) {
+ if (isLinear) {
+ // and the next decision is based on minimum peptide length
+ for (int lg = 0; lg < lenghtGroup.length; lg++) {
+ if (pep1.length() > lenghtGroup[lg]) {
+ group += " > " + lenghtGroup[lg];
+ break;
+ }
}
- }
- } else {
- int peplength1 = pep1.length();
- int peplength2 = pep2.length();
- int pepMinLen;
- if (peplength1 == 1 && pep1.getSequence().matches("^X-?[0-9\\.,]*")) {
- pepMinLen = peplength2;
- } else if (peplength2 == 1 && pep2.getSequence().matches("^X-?[0-9\\.,]*")) {
- pepMinLen = peplength1;
} else {
- pepMinLen = Math.min(peplength1, peplength2);
- }
-
- // and the next decision is based on minimum peptide length
- for (int lg = 0; lg < lenghtGroup.length; lg++) {
- if (pepMinLen > lenghtGroup[lg] ) {
- group += " > " + lenghtGroup[lg];
- break;
+ int peplength1 = pep1.length();
+ int peplength2 = pep2.length();
+ int pepMinLen;
+ if (peplength1 == 1 && pep1.getSequence().matches("^X-?[0-9\\.,]*")) {
+ pepMinLen = peplength2;
+ } else if (peplength2 == 1 && pep2.getSequence().matches("^X-?[0-9\\.,]*")) {
+ pepMinLen = peplength1;
+ } else {
+ pepMinLen = Math.min(peplength1, peplength2);
+ }
+
+ // and the next decision is based on minimum peptide length
+ for (int lg = 0; lg < lenghtGroup.length; lg++) {
+ if (pepMinLen > lenghtGroup[lg]) {
+ group += " > " + lenghtGroup[lg];
+ break;
+ }
}
}
}
-
- String g = FDRGroupNames.get(group+groupExt);
+ String g = FDRGroupNames.get(group + groupExt);
return g;
-
+
}
-
+
/**
* define the fdr-group for this match
*/
public void setFDRGroup() {
String sc = null;
- fdrGroup = getFDRGroup(peptide1, peptide2, isLinear, isInternal, m_negativeGroups, m_positiveGroups, isNonCovalent ? "NonCovalent":"");
+ fdrGroup = getFDRGroup(peptide1, peptide2, isLinear, isInternal, m_negativeGroups, m_positiveGroups, isNonCovalent ? "NonCovalent" : "");
}
+
/**
* define the fdr-group for this match
*/
@@ -753,6 +816,7 @@ public void setFDRGroup(String fdrGroup) {
/**
* is this actually a single peptide
+ *
* @return the isLinear
*/
@Override
@@ -762,6 +826,7 @@ public boolean isLinear() {
/**
* is this actually a single peptide
+ *
* @param isLinear the isLinear to set
*/
public void setLinear(boolean isLinear) {
@@ -770,19 +835,23 @@ public void setLinear(boolean isLinear) {
/**
* The fdr assigned to the score of this peptide pair
- * @param fdr
+ *
+ * @param fdr
*/
public void setFDR(double fdr) {
m_fdr = fdr;
for (PSM psm : chargeTopScoresPSM) {
- if (psm != null)
+ if (psm != null) {
psm.setFdrPeptidePair(this);
+ }
}
}
+
/**
* The fdr assigned to the score of this peptide pair
- * @return
+ *
+ * @return
*/
public double getFDR() {
return m_fdr;
@@ -790,22 +859,24 @@ public double getFDR() {
/**
* a link supported by this peptidepair that passed the fdr
+ *
* @param l
*/
public void setFdrLink(ProteinGroupLink l) {
this.m_link = l;
if (l != null) {
for (PSM psm : chargeTopScoresPSM) {
- if (psm != null)
+ if (psm != null) {
psm.setFdrPeptidePair(this);
+ }
}
}
}
-
/**
* a ProteinGroup supported by this peptidepair that passed the fdr
- * @param pg
+ *
+ * @param pg
*/
public void setFdrProteinGroup(ProteinGroup pg) {
@@ -813,8 +884,9 @@ public void setFdrProteinGroup(ProteinGroup pg) {
this.fdrProteinGroup1 = null;
this.fdrProteinGroup2 = null;
for (PSM psm : chargeTopScoresPSM) {
- if (psm != null)
+ if (psm != null) {
psm.setFdrProteinGroup(null);
+ }
}
} else {
if (pg.equals(peptide1.getProteinGroup())) {
@@ -826,16 +898,18 @@ public void setFdrProteinGroup(ProteinGroup pg) {
}
for (PSM psm : chargeTopScoresPSM) {
- if (psm != null)
+ if (psm != null) {
psm.setFdrProteinGroup(pg);
+ }
}
}
-
+
}
/**
* the first ProteinGroup supported by this peptidepair that passed the fdr
- * @return
+ *
+ * @return
*/
public ProteinGroup getFdrProteinGroup1() {
return this.fdrProteinGroup1;
@@ -843,7 +917,8 @@ public ProteinGroup getFdrProteinGroup1() {
/**
* the second ProteinGroup supported by this peptidepair that passed the fdr
- * @return
+ *
+ * @return
*/
public ProteinGroup getFdrProteinGroup2() {
return this.fdrProteinGroup2;
@@ -851,15 +926,16 @@ public ProteinGroup getFdrProteinGroup2() {
/**
* PSM id for the supporting PSM (only top scoring PSM per Charge state)
- * @return
+ *
+ * @return
*/
public String[] getPSMids() {
//String[] ret = new String[chargeTopScoresPSM.size()];
ArrayList ret = new ArrayList<>(chargeTopScoresPSM.length);
-
+
int c = 0;
for (PSM psm : chargeTopScoresPSM) {
- if (psm!=null) {
+ if (psm != null) {
ret.add(psm.getPsmID());
}
}
@@ -869,6 +945,7 @@ public String[] getPSMids() {
/**
* Unique id for this peptidepair
+ *
* @return the peptidePairID
*/
public int getPeptidePairID() {
@@ -877,7 +954,8 @@ public int getPeptidePairID() {
/**
* a link supported by this peptidepair that passed the FDR
- * @return
+ *
+ * @return
*/
public ProteinGroupLink getFdrLink() {
return this.m_link;
@@ -885,7 +963,8 @@ public ProteinGroupLink getFdrLink() {
/**
* number of supporting peptides. Meaning 1 (itself)
- * @return
+ *
+ * @return
*/
public int getPeptidePairCount() {
return 1;
@@ -931,32 +1010,35 @@ public int getPeptidePairCount() {
// public HashSet getNegativeGrouping() {
// return this.negativeGroups;
// }
-
-
/**
* get the peptide at the given site
+ *
* @param n
- * @return
+ * @return
*/
public Object getSite(int n) {
- return n==0 ? getPeptide1() : getPeptide2();
+ return n == 0 ? getPeptide1() : getPeptide2();
}
- /**
+ /**
* how many site do we have
- *
- 2 - cross-linked peptides
+ *
+ *
- 2 - cross-linked peptides
* - 1 - linear peptide
- * @return
+ *
+ * @return
*/
public int getSites() {
- if (isLinear)
+ if (isLinear) {
return 1;
- else
+ } else {
return 2;
- }
+ }
+ }
/**
* is this a loop linked peptide
+ *
* @return the isLoop
*/
public boolean isLoop() {
@@ -965,25 +1047,28 @@ public boolean isLoop() {
/**
* is this a loop linked peptide
+ *
* @param isLoop the isLoop to set
*/
public void setLoop(boolean isLoop) {
this.isLoop = isLoop;
}
-
+
@Override
public Site getLinkSite1() {
- if (peptide1 == Peptide.NOPEPTIDE)
+ if (peptide1 == Peptide.NOPEPTIDE) {
return null;
- return new PeptideSite(peptide1,pepsite1);
+ }
+ return new PeptideSite(peptide1, pepsite1);
}
@Override
public Site getLinkSite2() {
- if (peptide2 == Peptide.NOPEPTIDE)
+ if (peptide2 == Peptide.NOPEPTIDE) {
return null;
- return new PeptideSite(peptide2,pepsite2);
- }
+ }
+ return new PeptideSite(peptide2, pepsite2);
+ }
/**
* @return the psms
@@ -1010,7 +1095,9 @@ public ProteinGroup getProteinGroup2() {
}
/**
- * indicates that the two peptides where in the same spectrum but non-covalently linked
+ * indicates that the two peptides where in the same spectrum but
+ * non-covalently linked
+ *
* @return the isNonCovalent
*/
public boolean isNonCovalent() {
@@ -1018,13 +1105,15 @@ public boolean isNonCovalent() {
}
/**
- * indicates that the two peptides where in the same spectrum but non-covalently linked
+ * indicates that the two peptides where in the same spectrum but
+ * non-covalently linked
+ *
* @param isNonCovalent the isNonCovalent to set
*/
public void setNonCovalent(boolean isNonCovalent) {
this.isNonCovalent = isNonCovalent;
}
-
+
// @Override
// public boolean hasPositiveGrouping() {
// return this.positiveGroups != null;
@@ -1044,9 +1133,9 @@ public void setNonCovalent(boolean isNonCovalent) {
// public HashSet getPositiveGrouping() {
// return this.positiveGroups;
// }
-
/**
* is this a cross-link of consecutive peptides
+ *
* @return the isConsecutive
*/
public boolean isConsecutive() {
@@ -1055,10 +1144,11 @@ public boolean isConsecutive() {
/**
* is this a cross-link of consecutive peptides
+ *
* @param isConsecutive the isConsecutive to set
*/
public void setConsecutive(boolean isConsecutive) {
this.isConsecutive = isConsecutive;
}
-
+
}
diff --git a/src/main/java/org/rappsilber/fdr/entities/Protein.java b/src/main/java/org/rappsilber/fdr/entities/Protein.java
index 9d31195..ba50a5c 100644
--- a/src/main/java/org/rappsilber/fdr/entities/Protein.java
+++ b/src/main/java/org/rappsilber/fdr/entities/Protein.java
@@ -65,9 +65,9 @@ public Protein(long id, String accession, String description, boolean isDecoy, b
this.id = id;
// at some points we consider decoy and non decoy proteins the same. So
// both get the same accession to make my life easier
- if (accession.startsWith("REV_") || accession.startsWith("RAN_"))
+ if (accession.toUpperCase().startsWith("REV_") || accession.toUpperCase().startsWith("RAN_"))
this.accession = accession.substring(4);
- else if (accession.startsWith("DECOY:"))
+ else if (accession.toUpperCase().startsWith("DECOY:"))
this.accession = accession.substring(6);
else
this.accession = accession;
diff --git a/src/main/java/org/rappsilber/fdr/entities/ProteinGroup.java b/src/main/java/org/rappsilber/fdr/entities/ProteinGroup.java
index 685edde..f7116f4 100644
--- a/src/main/java/org/rappsilber/fdr/entities/ProteinGroup.java
+++ b/src/main/java/org/rappsilber/fdr/entities/ProteinGroup.java
@@ -337,12 +337,8 @@ public void addPeptidePair(PeptidePair pp) {
public String accessions() {
StringBuffer sb = new StringBuffer();
- if (isDecoy()) {
- sb.append("DECOY:");
- }
-
for (Protein p : groupproteins) {
- sb.append(p.getAccession());
+ sb.append((p.isDecoy()?"decoy:":"")+ p.getAccession());
sb.append(";");
}
return sb.substring(0,sb.length() - 1);
@@ -362,7 +358,7 @@ public String descriptions() {
StringBuffer sb = new StringBuffer();
for (Protein p : groupproteins) {
sb.append(";");
- sb.append(p.getDescription());
+ sb.append(p.isDecoy()?"decoy:":p.getDescription());
}
return sb.substring(1);
}
diff --git a/src/main/java/org/rappsilber/fdr/entities/ProteinGroupLink.java b/src/main/java/org/rappsilber/fdr/entities/ProteinGroupLink.java
index e6109cf..cadb362 100644
--- a/src/main/java/org/rappsilber/fdr/entities/ProteinGroupLink.java
+++ b/src/main/java/org/rappsilber/fdr/entities/ProteinGroupLink.java
@@ -551,12 +551,10 @@ protected String getAccessions(HashMap positions) {
isdecoy|= p.isDecoy();
IntArrayList pos = positions.get(p);
for (Integer i : pos) {
- sb.append(";");
- sb.append(p.getAccession());
+ sb.append(";" );
+ sb.append((p.isDecoy()?"decoy:":"") + p.getAccession());
}
}
- if (isdecoy)
- return "DECOY:" + sb.substring(1);
return sb.substring(1);
}
@@ -568,11 +566,9 @@ protected String getDescriptions(HashMap positions) {
IntArrayList pos = positions.get(p);
for (Integer i : pos) {
sb.append(";");
- sb.append(p.getDescription());
+ sb.append(p.isDecoy()?"decoy:":p.getDescription());
}
}
- if (isdecoy)
- return "DECOY:" + sb.substring(1);
return sb.substring(1);
}
diff --git a/src/main/java/org/rappsilber/fdr/gui/FDRGUI.form b/src/main/java/org/rappsilber/fdr/gui/FDRGUI.form
index 9596533..b77afc0 100644
--- a/src/main/java/org/rappsilber/fdr/gui/FDRGUI.form
+++ b/src/main/java/org/rappsilber/fdr/gui/FDRGUI.form
@@ -43,6 +43,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -71,7 +84,7 @@
-
+
@@ -113,7 +126,7 @@
-
+
@@ -170,7 +183,7 @@
-
+
@@ -193,7 +206,7 @@
-
+
@@ -210,7 +223,7 @@
-
+
@@ -241,7 +254,7 @@
-
+
@@ -372,8 +385,8 @@
-
-
+
+
@@ -394,9 +407,9 @@
-
+
@@ -450,7 +463,7 @@
-
+
@@ -579,16 +592,16 @@
-
+
-
+
-
+
@@ -596,7 +609,7 @@
-
+
@@ -624,6 +637,7 @@
+
@@ -643,7 +657,9 @@
-
+
+
+
@@ -718,6 +734,12 @@
+
+
+
+
+
+
@@ -841,7 +863,7 @@
-
+
@@ -1277,7 +1299,7 @@
-
+
@@ -1440,7 +1462,7 @@
-
+
@@ -1591,10 +1613,11 @@
-
-
-
-
+
+
+
+
+
@@ -1645,14 +1668,14 @@
-
+
-
+
@@ -1727,7 +1750,7 @@
-
+
@@ -1823,7 +1846,7 @@
-
+
diff --git a/src/main/java/org/rappsilber/fdr/gui/FDRGUI.java b/src/main/java/org/rappsilber/fdr/gui/FDRGUI.java
index 4145b8b..389d36e 100644
--- a/src/main/java/org/rappsilber/fdr/gui/FDRGUI.java
+++ b/src/main/java/org/rappsilber/fdr/gui/FDRGUI.java
@@ -56,6 +56,7 @@
import org.rappsilber.fdr.CSVinFDR;
import org.rappsilber.fdr.DBinFDR;
import org.rappsilber.fdr.FDRSettings;
+import org.rappsilber.fdr.FDRSettingsImpl;
import org.rappsilber.fdr.result.FDRResult;
import org.rappsilber.fdr.result.FDRResultLevel;
import org.rappsilber.fdr.MZIdentXLFDR;
@@ -72,7 +73,7 @@
import org.rappsilber.fdr.utils.MaximisingStatus;
import org.rappsilber.fdr.utils.MaximizingUpdate;
import org.rappsilber.fdr.utils.MiscUtils;
-import org.rappsilber.fdr.utils.mzIdentMLOwner;
+import org.rappsilber.fdr.utils.MZIdentMLOwner;
import org.rappsilber.gui.components.AutoAddTableModelListener;
import org.rappsilber.gui.GenericTextPopUpMenu;
import org.rappsilber.gui.components.JoinedThreadedTextOuput;
@@ -164,6 +165,7 @@ public boolean isLoggable(LogRecord record) {
ArrayList spins = new ArrayList();
con.add(this);
con.add(fdrSettingsComplete);
+ con.add(fdrSettingsMedium);
con.add(fdrSettingsSimple);
makeSpinnersSelectTextOnEnter(con, spinSet, spins);
@@ -172,9 +174,6 @@ public boolean isLoggable(LogRecord record) {
// hide the FDR-groups panel
ckDefineGroupsActionPerformed(null);
- // preset minimum peptide-length
- fdrSettingsComplete.setMinPeptideLength(6);
- fdrSettingsSimple.setMinPeptideLength(6);
ActionListener stopMaximizingAl = new ActionListener() {
@@ -185,11 +184,16 @@ public void actionPerformed(ActionEvent e) {
};
fdrSettingsComplete.addStopMaximizingListener(stopMaximizingAl);
+ fdrSettingsMedium.addStopMaximizingListener(stopMaximizingAl);
fdrSettingsSimple.addStopMaximizingListener(stopMaximizingAl);
+ // preset minimum peptide-length
fdrSettingsComplete.setMinPeptideLength(6);
+ fdrSettingsMedium.setMinPeptideLength(6);
fdrSettingsSimple.setMinPeptideLength(6);
+
fdrSettingsComplete.setReportFactor(100000);
+ fdrSettingsMedium.setReportFactor(100000);
fdrSettingsSimple.setReportFactor(100000);
ActionListener calcListener = new ActionListener() {
@@ -198,13 +202,14 @@ public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().contentEquals("boost")) {
fdrSettingsComplete.btnStopBoost.setEnabled(true);
fdrSettingsSimple.btnStopBoost.setEnabled(true);
+ fdrSettingsMedium.btnStopBoost.setEnabled(true);
}
basicCalc();
}
};
fdrSettingsSimple.addCalcListener(calcListener);
-
+ fdrSettingsMedium.addCalcListener(calcListener);
fdrSettingsComplete.addCalcListener(calcListener);
spDistanceGroup.setSpecialValueText("No distance group");
@@ -484,6 +489,7 @@ public OfflineFDR getFdr() {
*/
public void setFdr(OfflineFDR m_fdr) {
this.m_fdr = m_fdr;
+ ckGroupByCrossLinkerStubs.setEnabled(m_fdr.stubsFound());
}
/**
@@ -593,7 +599,7 @@ protected void exportMZIdentML() {
if ( getFdr() instanceof MZIdentXLFDR) {
writeMZIdentML();
} else if (getFdr()instanceof XiInFDR) {
- MZIdentMLExport export = new MZIdentMLExport(getFdr(), getResult(), new mzIdentMLOwner(getMzIdentMLOwnerFirst(), getMzIdentMLOwnerLast(), getMzIdentMLOwnerEmail(), getMzIdentMLOwnerOrg(), getMzIdentMLOwnerAdress()));
+ MZIdentMLExport export = new MZIdentMLExport(getFdr(), getResult(), new MZIdentMLOwner(getMzIdentMLOwnerFirst(), getMzIdentMLOwnerLast(), getMzIdentMLOwnerEmail(), getMzIdentMLOwnerOrg(), getMzIdentMLOwnerAdress()));
export.setForceExtension(cmbPeakListFormat.getSelectedItem().toString());
export.setMZMLTemplate(cmbMzMLScan2ID.getSelectedItem().toString());
export.convertFile(f.getAbsolutePath());
@@ -837,8 +843,8 @@ public void run() {
}else {
ofdr = new CSVinFDR();
}
- setFdr(ofdr);
addCSV(ofdr, null, csv,filter);
+ setFdr(ofdr);
while (csvs.hasNext()) {
csv = csvs.next();
@@ -1181,45 +1187,15 @@ protected void reportResultToSumaryTab(OfflineFDR ofdr, FDRResult result) {
private void basicCalc() {
if (getFdr() != null) {
- fdrSettingsComplete.setPSMDirectional(fdrSettings.isPSMDirectional());
- fdrSettingsComplete.setPeptidePairDirectional(fdrSettings.isPeptidePairDirectional());
- fdrSettingsComplete.setLinkDirectional(fdrSettings.isLinkDirectional());
- fdrSettingsComplete.setPPIDirectional(fdrSettings.isPPIDirectional());
-
- fdrSettingsComplete.setPSMFDR(fdrSettings.getPSMFDR());
- fdrSettingsComplete.setPeptidePairFDR(fdrSettings.getPeptidePairFDR());
- fdrSettingsComplete.setProteinGroupFDR(fdrSettings.getProteinGroupFDR());
- fdrSettingsComplete.setProteinGroupLinkFDR(fdrSettings.getProteinGroupLinkFDR());
- fdrSettingsComplete.setProteinGroupPairFDR(fdrSettings.getProteinGroupPairFDR());
-
- fdrSettingsComplete.setMaxLinkAmbiguity(fdrSettings.getMaxLinkAmbiguity());
- fdrSettingsComplete.setMaxProteinAmbiguity(fdrSettings.getMaxProteinAmbiguity());
- fdrSettingsComplete.setMinLinkPepCount(fdrSettings.getMinLinkPepCount());
- fdrSettingsComplete.setMinPPIPepCount(fdrSettings.getMinPPIPepCount());
- fdrSettingsComplete.setMinPeptideLength(fdrSettings.getMinPeptideLength());
- fdrSettingsComplete.setMinProteinPepCount(fdrSettings.getMinProteinPepCount());
-
- fdrSettingsSimple.setPSMDirectional(fdrSettings.isPSMDirectional());
- fdrSettingsSimple.setPeptidePairDirectional(fdrSettings.isPeptidePairDirectional());
- fdrSettingsSimple.setLinkDirectional(fdrSettings.isLinkDirectional());
- fdrSettingsSimple.setPPIDirectional(fdrSettings.isPPIDirectional());
-
- fdrSettingsSimple.setPSMFDR(fdrSettings.getPSMFDR());
- fdrSettingsSimple.setPeptidePairFDR(fdrSettings.getPeptidePairFDR());
- fdrSettingsSimple.setProteinGroupFDR(fdrSettings.getProteinGroupFDR());
- fdrSettingsSimple.setProteinGroupLinkFDR(fdrSettings.getProteinGroupLinkFDR());
- fdrSettingsSimple.setProteinGroupPairFDR(fdrSettings.getProteinGroupPairFDR());
-
- fdrSettingsSimple.setMaxLinkAmbiguity(fdrSettings.getMaxLinkAmbiguity());
- fdrSettingsSimple.setMaxProteinAmbiguity(fdrSettings.getMaxProteinAmbiguity());
- fdrSettingsSimple.setMinLinkPepCount(fdrSettings.getMinLinkPepCount());
- fdrSettingsSimple.setMinPPIPepCount(fdrSettings.getMinPPIPepCount());
- fdrSettingsSimple.setMinPeptideLength(fdrSettings.getMinPeptideLength());
- fdrSettingsSimple.setMinProteinPepCount(fdrSettings.getMinProteinPepCount());
+ FDRSettingsImpl.transferSettings(fdrSettings, fdrSettingsComplete);
+ FDRSettingsImpl.transferSettings(fdrSettings, fdrSettingsMedium);
+ FDRSettingsImpl.transferSettings(fdrSettings, fdrSettingsSimple);
getFdr().setGroupByProteinPair(fdrSettings.isGroupByPSMCount());
getFdr().setMinDecoys(fdrSettings.getMinTD());
-
+
+ fdrSettings.setGroupByCrosslinkerStubs(ckGroupByCrossLinkerStubs.isEnabled() && ckGroupByCrossLinkerStubs.isSelected());
+
if (fdrSettings.doOptimize() != null) {
final OfflineFDR.FDRLevel l = fdrSettings.doOptimize();
if (l == OfflineFDR.FDRLevel.PSM)
@@ -1229,6 +1205,7 @@ private void basicCalc() {
public void run() {
maximise(l, fdrSettings.getBoostBetween());
fdrSettingsComplete.btnStopBoost.setEnabled(false);
+ fdrSettingsMedium.btnStopBoost.setEnabled(false);
fdrSettingsSimple.btnStopBoost.setEnabled(false);
}
@@ -1236,27 +1213,6 @@ public void run() {
ml.start();
}
-
-// switch (fdrSettings.doOptimize()) {
-// case PROTEINGROUPLINK:
-// Thread ml = new Thread() {
-// public void run() {
-// maximiseLink(fdrSettings.getBoostBetween());
-// }
-// };
-// ml.start();
-// return;
-//
-// case PROTEINGROUPPAIR:
-// Thread mp = new Thread() {
-// public void run() {
-// maximisePPI(fdrSettings.getBoostBetween());
-// }
-// };
-// mp.start();
-// return;
-// }
-// JOptionPane.showMessageDialog(this, "Boosting of that Level currently not supported!");
} else {
calculateFDR();
}
@@ -1303,6 +1259,7 @@ public void run() {
// btnMaxLink.setEnabled(enable);
// btnMaxPPI.setEnabled(enable);
fdrSettingsComplete.setEnabled(enable);
+ fdrSettingsMedium.setEnabled(enable);
fdrSettingsSimple.setEnabled(enable);
}
};
@@ -1360,6 +1317,12 @@ public void run() {
fdrSettingsComplete.setProteinGroupFDR(state.showProtFDR);
fdrSettingsComplete.setProteinGroupLinkFDR(state.showLinkFDR);
+ fdrSettingsMedium.setPeptidePairFDR(state.showPepFDR);
+ fdrSettingsMedium.setPSMFDR(state.showPSMFDR);
+ fdrSettingsMedium.setPeptidePairFDR(state.showPepFDR);
+ fdrSettingsMedium.setProteinGroupFDR(state.showProtFDR);
+ fdrSettingsMedium.setProteinGroupLinkFDR(state.showLinkFDR);
+
txtSumPSM.setText(state.showPSMCount);
txtSumPepPairs.setText(state.showPepCount);
@@ -1409,7 +1372,6 @@ public void run() {
private void changeFDRSettings(java.awt.event.ActionEvent evt) {
-
if (rbFDRSimple.isSelected()) {
if (fdrSettings != null) {
fdrSettingsSimple.setAll(fdrSettings);
@@ -1419,6 +1381,15 @@ private void changeFDRSettings(java.awt.event.ActionEvent evt) {
}
spFDRSettingsWrapper.setViewportView(fdrSettingsSimple);
fdrSettings = fdrSettingsSimple;
+ } else if (rbFDRMedium.isSelected()) {
+ if (fdrSettings != null) {
+ fdrSettingsMedium.setAll(fdrSettings);
+ }
+ if (spFDRSettingsWrapper.getComponentCount() > 3) {
+ spFDRSettingsWrapper.remove(spFDRSettingsWrapper.getComponent(3));
+ }
+ spFDRSettingsWrapper.setViewportView(fdrSettingsMedium);
+ fdrSettings = fdrSettingsMedium;
} else if (rbFDRComplete.isSelected()) {
if (fdrSettings != null) {
fdrSettingsComplete.setAll(fdrSettings);
@@ -1436,11 +1407,13 @@ public void setFDRSettings(final FDRSettings settings) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
- rbFDRComplete.setSelected(true);
+ rbFDRMedium.setSelected(true);
+ rbFDRComplete.setSelected(false);
rbFDRSimple.setSelected(false);
rbFDRCompleteActionPerformed(null);
fdrSettingsSimple.setAll(settings);
+ fdrSettingsMedium.setAll(settings);
fdrSettingsComplete.setAll(settings);
}
});
@@ -1450,7 +1423,8 @@ public void setInput(final String fileName) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
- csvSelect.setInputFile(fileName);
+ csvSelect.setInputFile(fileName);
+ tpInput.setSelectedComponent(pCSVInput);
}
});
}
@@ -1477,6 +1451,9 @@ public void run() {
});
}
+ public void setCSVOutFile(String path) {
+ fbFolder.setFile(path);
+ }
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
@@ -1493,15 +1470,17 @@ private void initComponents() {
bgFDRSettingType = new javax.swing.ButtonGroup();
fdrSettingsComplete = new org.rappsilber.fdr.gui.components.FDRSettingsComplete();
fdrSettingsSimple = new org.rappsilber.fdr.gui.components.FDRSettingsSimple();
+ fdrSettingsMedium = new org.rappsilber.fdr.gui.components.FDRSettingsMedium();
+ rbFDRSimple = new javax.swing.JRadioButton();
jScrollPane6 = new javax.swing.JScrollPane();
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel2 = new javax.swing.JPanel();
tpInput = new javax.swing.JTabbedPane();
pDatabase = new javax.swing.JPanel();
getDBFDR = new org.rappsilber.fdr.gui.components.GetDBFDR();
- jPanel6 = new javax.swing.JPanel();
+ pCSVInput = new javax.swing.JPanel();
csvSelect = new org.rappsilber.fdr.gui.components.CSVSelection();
- jPanel11 = new javax.swing.JPanel();
+ pMZIdentMLInput = new javax.swing.JPanel();
fbMZIdentMLIn = new org.rappsilber.gui.components.FileBrowser();
jLabel19 = new javax.swing.JLabel();
btnReadMZIdent = new javax.swing.JButton();
@@ -1523,7 +1502,7 @@ private void initComponents() {
spTargetDBLinks = new javax.swing.JSpinner();
lblLinkDB = new javax.swing.JLabel();
ckDBSize = new javax.swing.JCheckBox();
- rbFDRSimple = new javax.swing.JRadioButton();
+ rbFDRMedium = new javax.swing.JRadioButton();
rbFDRComplete = new javax.swing.JRadioButton();
spFDRSettingsWrapper = new javax.swing.JScrollPane();
pFDRGroups = new javax.swing.JPanel();
@@ -1536,6 +1515,7 @@ private void initComponents() {
cbGroupLinksBySelf = new javax.swing.JCheckBox();
cbGroupPPIBySelf = new javax.swing.JCheckBox();
cbGroupRun = new javax.swing.JCheckBox();
+ ckGroupByCrossLinkerStubs = new javax.swing.JCheckBox();
ckDefineGroups = new javax.swing.JCheckBox();
pResult = new javax.swing.JPanel();
tpResult = new javax.swing.JTabbedPane();
@@ -1641,6 +1621,14 @@ private void initComponents() {
fdrSettingsSimple.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+ bgFDRSettingType.add(rbFDRSimple);
+ rbFDRSimple.setText("Simple FDR");
+ rbFDRSimple.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ changFDRSettingsInterface(evt);
+ }
+ });
+
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Cross-Link FDR");
addFocusListener(new java.awt.event.FocusAdapter() {
@@ -1681,24 +1669,24 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
}
});
- javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
- jPanel6.setLayout(jPanel6Layout);
- jPanel6Layout.setHorizontalGroup(
- jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel6Layout.createSequentialGroup()
+ javax.swing.GroupLayout pCSVInputLayout = new javax.swing.GroupLayout(pCSVInput);
+ pCSVInput.setLayout(pCSVInputLayout);
+ pCSVInputLayout.setHorizontalGroup(
+ pCSVInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(pCSVInputLayout.createSequentialGroup()
.addContainerGap()
.addComponent(csvSelect, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
- jPanel6Layout.setVerticalGroup(
- jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel6Layout.createSequentialGroup()
+ pCSVInputLayout.setVerticalGroup(
+ pCSVInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(pCSVInputLayout.createSequentialGroup()
.addContainerGap()
- .addComponent(csvSelect, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(csvSelect, javax.swing.GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
.addContainerGap())
);
- tpInput.addTab("CSV", jPanel6);
+ tpInput.addTab("CSV", pCSVInput);
fbMZIdentMLIn.setDescription("MZIdentML-Files");
fbMZIdentMLIn.setExtensions(new String[] {"mzid"});
@@ -1739,36 +1727,36 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
}
});
- javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11);
- jPanel11.setLayout(jPanel11Layout);
- jPanel11Layout.setHorizontalGroup(
- jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel11Layout.createSequentialGroup()
+ javax.swing.GroupLayout pMZIdentMLInputLayout = new javax.swing.GroupLayout(pMZIdentMLInput);
+ pMZIdentMLInput.setLayout(pMZIdentMLInputLayout);
+ pMZIdentMLInputLayout.setHorizontalGroup(
+ pMZIdentMLInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(pMZIdentMLInputLayout.createSequentialGroup()
.addContainerGap()
- .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel11Layout.createSequentialGroup()
+ .addGroup(pMZIdentMLInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(pMZIdentMLInputLayout.createSequentialGroup()
.addComponent(jLabel19)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(fbMZIdentMLIn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnReadMZIdent))
- .addGroup(jPanel11Layout.createSequentialGroup()
+ .addGroup(pMZIdentMLInputLayout.createSequentialGroup()
.addComponent(jLabel22)
.addGap(239, 239, 239)
- .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel11Layout.createSequentialGroup()
- .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(pMZIdentMLInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(pMZIdentMLInputLayout.createSequentialGroup()
+ .addGroup(pMZIdentMLInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(rbMZLowBetter)
.addComponent(rbMZHighBetter))
- .addGap(88, 375, Short.MAX_VALUE))
+ .addGap(88, 437, Short.MAX_VALUE))
.addComponent(cbMZMatchScoreName, javax.swing.GroupLayout.Alignment.TRAILING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addContainerGap())
);
- jPanel11Layout.setVerticalGroup(
- jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel11Layout.createSequentialGroup()
+ pMZIdentMLInputLayout.setVerticalGroup(
+ pMZIdentMLInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(pMZIdentMLInputLayout.createSequentialGroup()
.addContainerGap()
- .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addGroup(pMZIdentMLInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel22)
.addComponent(cbMZMatchScoreName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(1, 1, 1)
@@ -1776,22 +1764,22 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(rbMZLowBetter)
.addGap(18, 18, 18)
- .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
- .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addGroup(pMZIdentMLInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addGroup(pMZIdentMLInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnReadMZIdent)
.addComponent(jLabel19))
.addComponent(fbMZIdentMLIn, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(259, Short.MAX_VALUE))
);
- tpInput.addTab("mzIdentML", jPanel11);
+ tpInput.addTab("mzIdentML", pMZIdentMLInput);
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
- .addComponent(tpInput, javax.swing.GroupLayout.PREFERRED_SIZE, 824, Short.MAX_VALUE)
+ .addComponent(tpInput)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
@@ -1864,7 +1852,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addComponent(spDecoyDBProt, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(spTargetDBProt, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblProtein, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addContainerGap(321, Short.MAX_VALUE))
+ .addContainerGap(384, Short.MAX_VALUE))
);
pDatabseSizeLayout.setVerticalGroup(
pDatabseSizeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -1899,17 +1887,17 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
}
});
- bgFDRSettingType.add(rbFDRSimple);
- rbFDRSimple.setSelected(true);
- rbFDRSimple.setText("Simple FDR");
- rbFDRSimple.addActionListener(new java.awt.event.ActionListener() {
+ bgFDRSettingType.add(rbFDRMedium);
+ rbFDRMedium.setSelected(true);
+ rbFDRMedium.setText("Reduced");
+ rbFDRMedium.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
- changFDRSettingsInterface(evt);
+ rbFDRMediumActionPerformed(evt);
}
});
bgFDRSettingType.add(rbFDRComplete);
- rbFDRComplete.setText("complete FDR");
+ rbFDRComplete.setText("Complete FDR");
rbFDRComplete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rbFDRCompleteActionPerformed(evt);
@@ -1961,6 +1949,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
cbGroupRun.setText("PSMs by Run");
+ ckGroupByCrossLinkerStubs.setText("MS Cleavable XL Grouping");
+ ckGroupByCrossLinkerStubs.setToolTipText("If the present PSMs will be groupped by presents of peptides with crosslinker stub fragments");
+
javax.swing.GroupLayout pFDRGroupsLayout = new javax.swing.GroupLayout(pFDRGroups);
pFDRGroups.setLayout(pFDRGroupsLayout);
pFDRGroupsLayout.setHorizontalGroup(
@@ -1976,7 +1967,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(spDistanceGroup, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(ckIgnoreGroups1, javax.swing.GroupLayout.PREFERRED_SIZE, 226, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(cbGroupPepsBySelf))
+ .addComponent(cbGroupPepsBySelf)
+ .addComponent(ckGroupByCrossLinkerStubs))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pFDRGroupsLayout.setVerticalGroup(
@@ -1993,7 +1985,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addComponent(cbGroupLinksBySelf)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(cbGroupPPIBySelf)
- .addGap(35, 35, 35)
+ .addGap(4, 4, 4)
+ .addComponent(ckGroupByCrossLinkerStubs)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(pFDRGroupsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(spDistanceGroup, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
@@ -2019,7 +2013,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addComponent(ckDBSize)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(spExtraLongLayout.createSequentialGroup()
- .addComponent(rbFDRSimple)
+ .addComponent(rbFDRMedium)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(rbFDRComplete)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
@@ -2035,9 +2029,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGroup(spExtraLongLayout.createSequentialGroup()
.addContainerGap()
.addGroup(spExtraLongLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(rbFDRSimple)
.addComponent(rbFDRComplete)
- .addComponent(ckDefineGroups))
+ .addComponent(ckDefineGroups)
+ .addComponent(rbFDRMedium))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(spExtraLongLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(spFDRSettingsWrapper)
@@ -2238,7 +2232,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel9Layout.createSequentialGroup()
.addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel18, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(jPanel20, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 635, Short.MAX_VALUE)
+ .addComponent(jPanel20, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 698, Short.MAX_VALUE)
.addComponent(jPanel16, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel15, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
@@ -2369,7 +2363,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanel10Layout.createSequentialGroup()
.addComponent(rbCSV)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 466, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 538, Short.MAX_VALUE)
.addComponent(btnWrite))
.addComponent(lpCsvOutLocal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(23, 23, 23))
@@ -2452,7 +2446,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
lblPeaklistExtension.setText("Peak-list file extension");
- cmbPeakListFormat.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "mzML", "raw", "mgf" }));
+ cmbPeakListFormat.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "mgf", "mzML", "raw", " " }));
cmbMzMLScan2ID.setEditable(true);
cmbMzMLScan2ID.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "controllerType=0 controllerNumber=1 scan=%s%", "controllerType=0 controllerNumber=1 scan=%s-1%", "scan=%s%", "scan=%s-1%", "%s%" }));
@@ -2491,7 +2485,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addComponent(txtmzIdentOwnerEmail)
.addComponent(txtmzIdentOwnerOrg)
.addComponent(cmbPeakListFormat, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, 302, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, 350, Short.MAX_VALUE)
.addComponent(btnWriteMzIdentML)))))
.addContainerGap())
);
@@ -2546,13 +2540,13 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
pPeakListLookupLayout.setHorizontalGroup(
pPeakListLookupLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pPeakListLookupLayout.createSequentialGroup()
- .addContainerGap(739, Short.MAX_VALUE)
+ .addContainerGap(805, Short.MAX_VALUE)
.addComponent(btnPeakListParse)
.addContainerGap())
.addGroup(pPeakListLookupLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pPeakListLookupLayout.createSequentialGroup()
.addContainerGap()
- .addComponent(flPeakLists, javax.swing.GroupLayout.DEFAULT_SIZE, 802, Short.MAX_VALUE)
+ .addComponent(flPeakLists, javax.swing.GroupLayout.DEFAULT_SIZE, 865, Short.MAX_VALUE)
.addContainerGap()))
);
pPeakListLookupLayout.setVerticalGroup(
@@ -2606,7 +2600,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addContainerGap()
.addGroup(pLogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(spLog)
- .addComponent(memory2, javax.swing.GroupLayout.DEFAULT_SIZE, 801, Short.MAX_VALUE)
+ .addComponent(memory2, javax.swing.GroupLayout.DEFAULT_SIZE, 870, Short.MAX_VALUE)
.addComponent(cbLevel, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
@@ -2639,7 +2633,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGroup(pVersionLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pVersionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 789, Short.MAX_VALUE)
+ .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 865, Short.MAX_VALUE)
.addGroup(pVersionLayout.createSequentialGroup()
.addComponent(jLabel29)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
@@ -2707,7 +2701,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 839, Short.MAX_VALUE)
+ .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 902, Short.MAX_VALUE)
.addComponent(jSplitPane1)
);
layout.setVerticalGroup(
@@ -2948,6 +2942,10 @@ public void run() {
peaklistparser.start();
}//GEN-LAST:event_btnPeakListParseActionPerformed
+ private void rbFDRMediumActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbFDRMediumActionPerformed
+ changeFDRSettings(evt);
+ }//GEN-LAST:event_rbFDRMediumActionPerformed
+
// private void fdrSpinnerMaximumCheck(JSpinner sp, double max) {
// SpinnerModel sm = sp.getModel();
// Double fdr = (Double) sm.getValue();
@@ -3021,6 +3019,7 @@ public void run() {
private javax.swing.JComboBox cbMZMatchScoreName;
private javax.swing.JCheckBox ckDBSize;
private javax.swing.JCheckBox ckDefineGroups;
+ private javax.swing.JCheckBox ckGroupByCrossLinkerStubs;
private javax.swing.JCheckBox ckIgnoreGroups1;
public javax.swing.JCheckBox ckPrePostAA;
protected javax.swing.JComboBox cmbMzMLScan2ID;
@@ -3033,6 +3032,7 @@ public void run() {
private org.rappsilber.gui.components.FileBrowser fbMZIdentMLIn;
private org.rappsilber.gui.components.FileBrowser fbMzIdentMLOut;
private org.rappsilber.fdr.gui.components.FDRSettingsComplete fdrSettingsComplete;
+ private org.rappsilber.fdr.gui.components.FDRSettingsMedium fdrSettingsMedium;
private org.rappsilber.fdr.gui.components.FDRSettingsSimple fdrSettingsSimple;
private org.rappsilber.gui.components.FileList flPeakLists;
private org.rappsilber.fdr.gui.components.GetDBFDR getDBFDR;
@@ -3059,7 +3059,6 @@ public void run() {
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel10;
- private javax.swing.JPanel jPanel11;
private javax.swing.JPanel jPanel12;
private javax.swing.JPanel jPanel14;
private javax.swing.JPanel jPanel15;
@@ -3069,7 +3068,6 @@ public void run() {
private javax.swing.JPanel jPanel20;
private javax.swing.JPanel jPanel21;
private javax.swing.JPanel jPanel22;
- private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanel8;
private javax.swing.JPanel jPanel9;
private javax.swing.JScrollPane jScrollPane1;
@@ -3096,15 +3094,18 @@ public void run() {
private org.rappsilber.gui.components.memory.Memory memory2;
private org.rappsilber.gui.components.memory.Memory memory3;
private javax.swing.JPanel pAbout;
+ private javax.swing.JPanel pCSVInput;
private javax.swing.JPanel pDatabase;
private javax.swing.JPanel pDatabseSize;
private javax.swing.JPanel pFDRGroups;
private javax.swing.JPanel pLog;
+ private javax.swing.JPanel pMZIdentMLInput;
private javax.swing.JPanel pPeakListLookup;
private javax.swing.JPanel pResult;
private javax.swing.JPanel pVersion;
private javax.swing.JRadioButton rbCSV;
private javax.swing.JRadioButton rbFDRComplete;
+ private javax.swing.JRadioButton rbFDRMedium;
private javax.swing.JRadioButton rbFDRSimple;
private javax.swing.JRadioButton rbMZHighBetter;
private javax.swing.JRadioButton rbMZLowBetter;
diff --git a/src/main/java/org/rappsilber/fdr/gui/FDRLevelInformations.java b/src/main/java/org/rappsilber/fdr/gui/FDRLevelInformations.java
index 13fbdad..77f9d0d 100644
--- a/src/main/java/org/rappsilber/fdr/gui/FDRLevelInformations.java
+++ b/src/main/java/org/rappsilber/fdr/gui/FDRLevelInformations.java
@@ -18,7 +18,6 @@
import java.util.Set;
import org.rappsilber.data.csv.CSVRandomAccess;
import org.rappsilber.fdr.result.FDRResultLevel;
-import org.rappsilber.fdr.OfflineFDR;
import org.rappsilber.fdr.result.SubGroupFdrInfo;
import org.rappsilber.fdr.utils.MiscUtils;
@@ -65,7 +64,7 @@ public FDRLevelInformations(FDRResultLevel level, String title) {
rowString[7] = "" + sg.filteredResult.size() ;
rowString[8] = "" + sg.worstAcceptedScore;
- rowString[9] = "" + !sg.didntPassCheck;
+ rowString[9] = (sg.didntPassCheck == null ? "true" : sg.didntPassCheck);
csv.insertLine(csv.getRowCount(), rowString);
}
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/CSVSelection.form b/src/main/java/org/rappsilber/fdr/gui/components/CSVSelection.form
index 44096c9..2b314d2 100644
--- a/src/main/java/org/rappsilber/fdr/gui/components/CSVSelection.form
+++ b/src/main/java/org/rappsilber/fdr/gui/components/CSVSelection.form
@@ -30,6 +30,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -68,7 +79,7 @@
-
+
@@ -79,11 +90,11 @@
-
+
-
+
@@ -103,8 +114,8 @@
-
-
+
+
@@ -146,7 +157,7 @@
-
+
@@ -169,6 +180,9 @@
+
+
+
@@ -187,6 +201,9 @@
+
+
+
@@ -479,120 +496,102 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/CSVSelection.java b/src/main/java/org/rappsilber/fdr/gui/components/CSVSelection.java
index 3d6b962..d7d359b 100644
--- a/src/main/java/org/rappsilber/fdr/gui/components/CSVSelection.java
+++ b/src/main/java/org/rappsilber/fdr/gui/components/CSVSelection.java
@@ -163,6 +163,69 @@ public void actionPerformed(ActionEvent e) {
columnNamesColumn.setCellEditor(new NeededOptionalComboBoxCellEditor(cbCSVHeaders, cbCSVHeaderOptional));
resetColumnMappings();
//spAdditional.setVisible(false);
+
+ tblCSVColumns.setModel(new javax.swing.table.DefaultTableModel(
+ new Object [][] {
+ {"run", new Boolean(true), "raw file name that the spectrum derived from", ""},
+ {"scan", new Boolean(true), "scan number within that run", null},
+ {"psmid", new Boolean(true), "a unique ID for the PSM - if not given will be defined based on run and scan", null},
+ {"peak list file", new Boolean(true), "the name of the actual peak file containing the spectrum (needed for mzML export)", null},
+ {"peak list index", new Boolean(true), "an index for the spectrum within the file(needed for mzML export)", null},
+ {"rank", new Boolean(true), "The rank of the PSM (e.g. 1=best match for a spectrum ;2 second best ...)", null},
+ {"peptide1", null, "sequence of the first peptide", null},
+ {"peptide2", null, "sequence of the second peptide", null},
+ {"peptide length 1", new Boolean(true), "length (in amino acids) of the first peptide", null},
+ {"peptide length 2", new Boolean(true), "length (in amino acids) of the second peptide", null},
+ {"peptide link 1", null, "which residue of the first peptide does the cross-linker attach to", null},
+ {"peptide link 2", null, "which residue of the second peptide does the cross-linker attach to", null},
+ {"is decoy 1", null, "is the first peptide from the decoy database", null},
+ {"is decoy 2", null, "is the second peptide from the decoy database", null},
+ {"precursor charge", null, "charge state of the precursor ion", null},
+ {"score", new Boolean(true), "score of the spectrum match", null},
+ {"score ratio", new Boolean(true), "if there is a joined score given for the match how to separate the score for cases where each peptide individually has to be considered (only affects protein fdr)", null},
+ {"peptide1 score", new Boolean(true), "a score for the first peptide", null},
+ {"peptide2 score", new Boolean(true), "a score for the second peptide", null},
+ {"accession1", null, "protein accession number(s) for the source of the first peptide", null},
+ {"accession2", null, "protein accession number(s) for the source of the second peptide", null},
+ {"description1", new Boolean(true), "description of the first protein", null},
+ {"description2", new Boolean(true), "description of the second protein", null},
+ {"peptide position 1", null, "position(s) of the first peptide in the protein(s)", null},
+ {"peptide position 2", null, "position(s) of the second peptide in the protein(s)", null},
+ {"crosslinker", new Boolean(true), "name of the cross-linker involved in this PSM", null},
+ {"crossLinkerModMass", new Boolean(true), "mass difference between the sum of the non-cross-linked peptides and teh cross-linked peptides", null},
+ {"experimental mz", new Boolean(true), "experimental precursor M/Z", null},
+ {"calculated mass", new Boolean(true), "calculated mass of the precursor", null},
+ {"negative grouping", new Boolean(true), "if some matches have an inherently higher chance to be false positive then they can be flaged here", null},
+ {"positive grouping", new Boolean(true), "if some matches have an inherently lower chance to be false positive then they can be flaged here", null},
+ {"info", new Boolean(true), "arbitrary info field to be forwarded to the results table", null},
+ {"delta score", new Boolean(true), "the delta score of the match", null},
+ {"peptide coverage1", new Boolean(true), "how well is peptide explained", null},
+ {"peptide coverage2", new Boolean(true), "how well is peptide 2 explained", null},
+ {"minimum peptide coverage", new Boolean(true), "how well is the wors explained peptide explained", null},
+ {"peptide1 fragments", new Boolean(true), "How many fragments where assigned to peptide 1", null},
+ {"peptide2 fragments", new Boolean(true), "How many fragments where assigned to peptide 2", null},
+ {"peptides with stubs", new Boolean(true), "For how many peptides was an cross-linker stub identified", null},
+ {"peptides with doublets", new Boolean(true), "For how many peptides was an doublet of cross-linker stubs identified", null}
+ },
+ new String [] {
+ "Column", "Optional", "Description", "Name in CSV"
+ }
+ ) {
+ Class[] types = new Class [] {
+ java.lang.String.class, java.lang.Boolean.class, java.lang.String.class, java.lang.String.class
+ };
+ boolean[] canEdit = new boolean [] {
+ false, false, false, true
+ };
+
+ public Class getColumnClass(int columnIndex) {
+ return types [columnIndex];
+ }
+
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return canEdit [columnIndex];
+ }
+ });
}
public void resetColumnMappings() {
@@ -292,7 +355,7 @@ public File[] getFiles() {
return fbCsvIn.getFiles();
}
- protected void doActionPerformed() {
+ public void doActionPerformed() {
ActionEvent ae = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "file selected",Calendar.getInstance().getTimeInMillis(), 0);
for (java.awt.event.ActionListener al : m_actionlisteners)
al.actionPerformed(null);
@@ -489,6 +552,7 @@ private void initComponents() {
cbCSVHeaderOptional = new javax.swing.JComboBox();
bgScoreDirectionCSV = new javax.swing.ButtonGroup();
filter = new org.rappsilber.data.csv.gui.filter.ConditionList();
+ pAdditional = new javax.swing.JPanel();
jLabel26 = new javax.swing.JLabel();
cbCSVQuote = new javax.swing.JComboBox();
cbCSVDElimiter = new javax.swing.JComboBox();
@@ -504,14 +568,12 @@ private void initComponents() {
btnAddCSV = new javax.swing.JButton();
ckSmartMatch = new javax.swing.JCheckBox();
spAdditional = new javax.swing.JScrollPane();
- pAdditional = new javax.swing.JPanel();
pXiConfig = new javax.swing.JPanel();
fbConfigIn = new org.rappsilber.gui.components.FileBrowser();
jLabel12 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
fbFastaIn = new org.rappsilber.gui.components.FileBrowser();
ckCSVMarkModifications = new javax.swing.JCheckBox();
- jPanel2 = new javax.swing.JPanel();
ckFilter = new javax.swing.JCheckBox();
btnFilter = new javax.swing.JButton();
localPicker1 = new org.rappsilber.gui.components.LocalPicker();
@@ -521,10 +583,14 @@ private void initComponents() {
cbCSVHeaderOptional.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+ pAdditional.setPreferredSize(new java.awt.Dimension(300, 90));
+ pAdditional.setLayout(new javax.swing.BoxLayout(pAdditional, javax.swing.BoxLayout.Y_AXIS));
+
jLabel26.setText("Delimiter");
cbCSVQuote.setEditable(true);
cbCSVQuote.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "\"", "'" }));
+ cbCSVQuote.setPreferredSize(new java.awt.Dimension(100, 24));
cbCSVQuote.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbCSVQuoteActionPerformed(evt);
@@ -533,6 +599,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
cbCSVDElimiter.setEditable(true);
cbCSVDElimiter.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Comma(,)", "Semicolon(;)", "Tab", "Space", "|", " " }));
+ cbCSVDElimiter.setPreferredSize(new java.awt.Dimension(100, 24));
cbCSVDElimiter.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbCSVDElimiterActionPerformed(evt);
@@ -648,7 +715,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
}
});
- pAdditional.setLayout(new javax.swing.BoxLayout(pAdditional, javax.swing.BoxLayout.Y_AXIS));
+ pXiConfig.setPreferredSize(new java.awt.Dimension(300, 107));
fbConfigIn.setDescription("Xi-Config");
fbConfigIn.setExtensions(new String[] {"config", "conf"});
@@ -674,8 +741,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(pXiConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pXiConfigLayout.createSequentialGroup()
- .addComponent(ckCSVMarkModifications)
- .addGap(0, 663, Short.MAX_VALUE))
+ .addComponent(ckCSVMarkModifications, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGap(0, 522, Short.MAX_VALUE))
.addComponent(fbFastaIn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(fbConfigIn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
@@ -696,22 +763,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
- pAdditional.add(pXiConfig);
-
- javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
- jPanel2.setLayout(jPanel2Layout);
- jPanel2Layout.setHorizontalGroup(
- jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 917, Short.MAX_VALUE)
- );
- jPanel2Layout.setVerticalGroup(
- jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 100, Short.MAX_VALUE)
- );
-
- pAdditional.add(jPanel2);
-
- spAdditional.setViewportView(pAdditional);
+ spAdditional.setViewportView(pXiConfig);
ckFilter.setEnabled(false);
ckFilter.addActionListener(new java.awt.event.ActionListener() {
@@ -760,7 +812,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ckCSVHasHeader)
- .addComponent(cbCSVDElimiter, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(cbCSVDElimiter, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
@@ -769,11 +821,11 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel27)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(cbCSVQuote, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(cbCSVQuote, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel28)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(localPicker1, javax.swing.GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE)))
+ .addComponent(localPicker1, javax.swing.GroupLayout.DEFAULT_SIZE, 91, Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(rbCSVHighBetter)
@@ -786,8 +838,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING)
- .addComponent(spAdditional, javax.swing.GroupLayout.DEFAULT_SIZE, 881, Short.MAX_VALUE)))
+ .addComponent(jScrollPane2)
+ .addComponent(spAdditional, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)))
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btnAddCSV, btnReadCsv});
@@ -824,7 +876,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(rbCSVLowBetter)
.addComponent(ckSmartMatch)))
- .addGap(23, 23, 23)
+ .addGap(18, 18, 18)
.addComponent(spAdditional, javax.swing.GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 201, Short.MAX_VALUE))
@@ -985,7 +1037,6 @@ private void localPicker1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-
private javax.swing.JLabel jLabel26;
private javax.swing.JLabel jLabel27;
private javax.swing.JLabel jLabel28;
- private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane2;
private org.rappsilber.gui.components.LocalPicker localPicker1;
private javax.swing.JPanel pAdditional;
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsComplete.form b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsComplete.form
index e1a8ccd..e364078 100644
--- a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsComplete.form
+++ b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsComplete.form
@@ -461,7 +461,7 @@
-
+
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsComplete.java b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsComplete.java
index b500f72..4effacc 100644
--- a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsComplete.java
+++ b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsComplete.java
@@ -380,6 +380,7 @@ public void doOptimize(OfflineFDR.FDRLevel level) {
if (level == null)
ckMaximize.setSelected(false);
else {
+ ckMaximize.setSelected(true);
cbBoostWhat.getModel().setSelectedItem(level);
}
}
@@ -719,7 +720,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
});
spMinTDChance.setModel(new javax.swing.SpinnerNumberModel(0, 0, null, 1));
- spMinTDChance.setToolTipText("The total number of matches times the fdr should be larger then the given number - otherwise the subgroup will not be considered on its own");
+ spMinTDChance.setToolTipText("The total number of matches times the fdr should be larger then the given number - otherwise the subgroup will be considered unreliable");
spMinTDChance.setSpecialValue(0);
jLabel7.setText("Min TD Chance");
@@ -967,7 +968,7 @@ private void ckMoreOptionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN
}//GEN-LAST:event_ckMoreOptionsActionPerformed
private void ckIgnoreValidityActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ckIgnoreValidityActionPerformed
- spMinTDChance.setEnabled(!ckIgnoreValidity.isSelected());
+ //spMinTDChance.setEnabled(!ckIgnoreValidity.isSelected());
}//GEN-LAST:event_ckIgnoreValidityActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsMedium.form b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsMedium.form
new file mode 100644
index 0000000..96904f4
--- /dev/null
+++ b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsMedium.form
@@ -0,0 +1,283 @@
+
+
+
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsMedium.java b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsMedium.java
new file mode 100644
index 0000000..ae1ecf0
--- /dev/null
+++ b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsMedium.java
@@ -0,0 +1,805 @@
+/*
+ * Copyright 2015 Lutz Fischer .
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.rappsilber.fdr.gui.components;
+
+import javax.swing.AbstractButton;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JCheckBox;
+import javax.swing.JRadioButton;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerModel;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.rappsilber.fdr.OfflineFDR;
+import org.rappsilber.fdr.OfflineFDR.FDRLevel;
+import static org.rappsilber.fdr.gui.components.FDRSettingsComplete.setSpinnerModel;
+
+/**
+ *
+ * @author lfischer
+ */
+public class FDRSettingsMedium extends FDRSettingsPanel {
+
+// private ArrayList m_calc_listener = new ArrayList();
+//
+// private OfflineFDR.FDRLevel m_optimizeWhat;
+
+ private int m_minPepLength = 0;
+ private int m_boostingSteps = 4;
+ private double m_protfdr = 100;
+ private int m_minTD = DEFAULT_MIN_TD_COUNT;
+
+
+ private boolean m_filterToUniquePSM = true;
+
+ private boolean scaleByContectedness = false;
+ private Boolean ppiLocalFDR;
+ private Boolean linkLocalFDR;
+ private Boolean protLocalFDR;
+ private Boolean peppairLocalFDR;
+ private Boolean psmLocalFDR;
+ private double minPeptideCoverageFilter;
+ private double minDeltaScoreFilter;
+ private boolean combineScoreAndDelta;
+ private int minFragments;
+ private boolean ignoreValidityChecks = true;
+ private boolean psmDirectional;
+ private boolean peptidePairDirectional;
+ private boolean linkDirectional;
+ private boolean ppiDirectional;
+ private double reportFactor;
+
+ @Override
+ public boolean getBoostBetween() {
+ return ckBoostBetween.isSelected();
+ }
+
+ @Override
+ public void setBoostBetween(final boolean between) {
+ SwingUtilities.invokeLater(new Runnable() {
+
+ public void run() {
+ ckBoostBetween.setSelected(between);
+ }
+ });
+ }
+
+
+
+ private void setValueLater(final JSpinner sp, final Object value) {
+ SwingUtilities.invokeLater(new Runnable() {
+
+ public void run() {
+ sp.setValue(value);
+ }
+ });
+
+ }
+
+ private void setValueLater(final JCheckBox ck, final boolean value) {
+ SwingUtilities.invokeLater(new Runnable() {
+
+ public void run() {
+ ck.setSelected(value);
+ }
+ });
+
+ }
+
+ /**
+ * Creates new form FDRSettingsComplete
+ */
+ public FDRSettingsMedium() {
+ initComponents();
+
+ ChangeListener max100Listener = new ChangeListener() {
+ public void stateChanged(ChangeEvent e) {
+ SpinnerModel sp = (SpinnerModel) e.getSource();
+ if (((Double)sp.getValue()) >100)
+ sp.setValue(100d);
+ }
+ };
+ setSpinnerModel(spPsmFDR, 100);
+ setSpinnerModel(spPepFDR, 100);
+ setSpinnerModel(spLinkFDR, 5);
+ setSpinnerModel(spPPIFdr, 100);
+ cbBoostOther.setVisible(false);
+ rbBoostOther.setVisible(false);
+ }
+
+ private void doCalc() {
+ // if (ckMaximize.isSelected()) {
+ m_protfdr = 1;
+
+ this.psmLocalFDR = tsLocalFDR.getSelectionState();
+ this.peppairLocalFDR = tsLocalFDR.getSelectionState();
+ this.protLocalFDR = tsLocalFDR.getSelectionState();
+ this.linkLocalFDR = tsLocalFDR.getSelectionState();
+ this.ppiLocalFDR = tsLocalFDR.getSelectionState();
+
+ btnStopBoost.setEnabled(ckMaximize.isSelected());
+ raiseStartCalc(ckMaximize.isSelected());
+
+ }
+
+
+
+ @Override
+ public double getPSMFDR() {
+ return Double.parseDouble(spPsmFDR.getValue().toString())/100.0;
+ }
+
+
+ @Override
+ public double getPeptidePairFDR() {
+ return Double.parseDouble(spPepFDR.getValue().toString())/100.0;
+ }
+
+ @Override
+ public double getProteinGroupFDR() {
+ return m_protfdr;
+ }
+
+ @Override
+ public double getProteinGroupLinkFDR() {
+ return Double.parseDouble(spLinkFDR.getValue().toString())/100.0;
+ }
+
+ @Override
+ public double getProteinGroupPairFDR() {
+ return Double.parseDouble(spPPIFdr.getValue().toString())/100.0;
+ }
+
+ @Override
+ public void setPSMFDR( Double fdr) {
+ setValueLater(spPsmFDR,fdr*100);
+ }
+
+
+ @Override
+ public void setPeptidePairFDR( Double fdr) {
+ setValueLater(spPepFDR,fdr*100);
+ }
+
+ @Override
+ public void setProteinGroupLinkFDR( Double fdr) {
+ setValueLater(spLinkFDR,fdr*100);
+ }
+
+ @Override
+ public void setProteinGroupPairFDR( Double fdr) {
+ setValueLater(spPPIFdr,fdr*100);
+ }
+
+ @Override
+ public void setProteinGroupFDR( Double fdr) {
+ m_protfdr = fdr;
+ }
+
+ @Override
+ public int getMinProteinPepCount() {
+ return 1;
+ }
+
+ @Override
+ public int getMinLinkPepCount() {
+ return 1;
+ }
+
+ @Override
+ public int getMinPPIPepCount() {
+ return 1;
+ }
+
+ @Override
+ public void setMinProteinPepCount(Integer minPep) {
+ }
+
+ @Override
+ public void setMinLinkPepCount(Integer minPep) {
+ }
+
+ @Override
+ public void setMinPPIPepCount(Integer minPep) {
+ }
+
+
+
+
+ @Override
+ public int getMinPeptideLength() {
+ return m_minPepLength;
+ }
+
+ @Override
+ public void setMinPeptideLength(Integer minLength) {
+ m_minPepLength = minLength;
+ }
+
+
+ @Override
+ public int getMaxLinkAmbiguity() {
+ return 0;
+ }
+
+ @Override
+ public void setMaxLinkAmbiguity(Integer maxAmbiguity) {
+
+ }
+
+ @Override
+ public int getMaxProteinAmbiguity() {
+ return 0;
+ }
+
+ @Override
+ public void setMaxProteinAmbiguity(Integer maxAmbiguity) {
+ }
+
+ @Override
+ public boolean isPSMDirectional() {
+ return this.psmDirectional;
+ }
+
+ @Override
+ public boolean isPeptidePairDirectional() {
+ return this.peptidePairDirectional;
+ }
+
+ @Override
+ public boolean isLinkDirectional() {
+ return this.linkDirectional;
+ }
+
+ @Override
+ public boolean isPPIDirectional() {
+ return this.ppiDirectional;
+ }
+
+ @Override
+ public void setPSMDirectional(boolean directional) {
+ psmDirectional=directional;
+ }
+
+ @Override
+ public void setPeptidePairDirectional(boolean directional) {
+ peptidePairDirectional = directional;
+ }
+
+ @Override
+ public void setLinkDirectional(boolean directional) {
+ linkDirectional = directional;
+ }
+
+ @Override
+ public void setPPIDirectional(boolean directional) {
+ ppiDirectional = directional;
+ }
+
+
+ @Override
+ public OfflineFDR.FDRLevel doOptimize() {
+ if (!ckMaximize.isSelected())
+ return null;
+ if (rbBoostPeptidePairs.isSelected()) {
+ return OfflineFDR.FDRLevel.PEPTIDE_PAIR;
+ }
+ if (rbBoostLinks.isSelected()) {
+ return OfflineFDR.FDRLevel.PROTEINGROUPLINK;
+ }
+ if (rbBoostPPI.isSelected()) {
+ return OfflineFDR.FDRLevel.PROTEINGROUPPAIR;
+ }
+ return (OfflineFDR.FDRLevel) cbBoostOther.getSelectedItem();
+ }
+
+ @Override
+ public void doOptimize(OfflineFDR.FDRLevel level) {
+ if (level == null) {
+ ckMaximize.setSelected(false);
+ ckMaximizeActionPerformed(null);
+ }else {
+ ckMaximize.setSelected(true);
+ ckMaximizeActionPerformed(null);
+ switch(level) {
+ case PEPTIDE_PAIR:
+ bgBoost.setSelected(rbBoostPeptidePairs.getModel(), true);
+ cbBoostOther.setVisible(false);
+ rbBoostOther.setVisible(false);
+ break;
+ case PROTEINGROUPLINK:
+ bgBoost.setSelected(rbBoostLinks.getModel(), true);
+ cbBoostOther.setVisible(false);
+ rbBoostOther.setVisible(false);
+ break;
+ case PROTEINGROUPPAIR:
+ bgBoost.setSelected(rbBoostPPI.getModel(), true);
+ cbBoostOther.setVisible(false);
+ rbBoostOther.setVisible(false);
+ break;
+ default:
+ bgBoost.getSelection().setSelected(false);
+ cbBoostOther.setSelectedItem(level);
+ cbBoostOther.setVisible(true);
+ rbBoostOther.setVisible(true);
+ bgBoost.setSelected(rbBoostOther.getModel(), true);
+ }
+ }
+ }
+
+ public int getBoostingSteps() {
+ return m_boostingSteps;
+ }
+
+ public void setBoostingSteps(int steps) {
+ m_boostingSteps = steps;
+ }
+
+ public double getReportFactor() {
+ return this.reportFactor;
+ }
+
+ public void setReportFactor(double factor) {
+ this.reportFactor = factor;
+ }
+
+
+ public boolean filterToUniquePSM() {
+ return m_filterToUniquePSM;
+ }
+
+ public void setFilterToUniquePSM(boolean filterToUniquePSM) {
+ m_filterToUniquePSM = filterToUniquePSM;
+ }
+
+ public boolean combineScoreAndDelta() {
+ return this.combineScoreAndDelta;
+ }
+ public void combineScoreAndDelta(boolean c) {
+ this.combineScoreAndDelta = c;
+ }
+
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ bgBoost = new javax.swing.ButtonGroup();
+ ckBoostBetween = new javax.swing.JCheckBox();
+ btnCalc = new javax.swing.JButton();
+ btnStopBoost = new javax.swing.JButton();
+ jLabel5 = new javax.swing.JLabel();
+ spPsmFDR = new javax.swing.JSpinner();
+ jLabel9 = new javax.swing.JLabel();
+ jLabel2 = new javax.swing.JLabel();
+ spPepFDR = new javax.swing.JSpinner();
+ jLabel3 = new javax.swing.JLabel();
+ spLinkFDR = new javax.swing.JSpinner();
+ jLabel4 = new javax.swing.JLabel();
+ spPPIFdr = new javax.swing.JSpinner();
+ rbBoostLinks = new javax.swing.JRadioButton();
+ rbBoostPPI = new javax.swing.JRadioButton();
+ rbBoostPeptidePairs = new javax.swing.JRadioButton();
+ ckMaximize = new javax.swing.JCheckBox();
+ cbBoostOther = new javax.swing.JComboBox<>();
+ rbBoostOther = new javax.swing.JRadioButton();
+ tsLocalFDR = new org.rappsilber.gui.components.TriStateCheckBox();
+ jLabel6 = new javax.swing.JLabel();
+
+ ckBoostBetween.setText("Between");
+
+ btnCalc.setText("Calculate");
+ btnCalc.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ btnCalcActionPerformed(evt);
+ }
+ });
+
+ btnStopBoost.setText("stop boost");
+ btnStopBoost.setEnabled(false);
+ btnStopBoost.setMargin(new java.awt.Insets(2, 7, 2, 7));
+ btnStopBoost.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ btnStopBoostActionPerformed(evt);
+ }
+ });
+
+ jLabel5.setText("PSM");
+
+ spPsmFDR.setToolTipText("FDR value accepted for PSMs");
+
+ jLabel9.setText("Max FDRs");
+
+ jLabel2.setText("Peptide Pair");
+
+ spPepFDR.setToolTipText("FDR value accepted for Peptide Pairs (including linksite within the peptide)");
+
+ jLabel3.setText("Residue Pairs");
+
+ spLinkFDR.setToolTipText("FDR value accepted for Links (Protein-group-links)");
+
+ jLabel4.setText("Protein Pairs");
+
+ spPPIFdr.setToolTipText("FDR value accepted for protein-pairs");
+
+ bgBoost.add(rbBoostLinks);
+ rbBoostLinks.setSelected(true);
+ rbBoostLinks.setToolTipText("try to maximize the number of residue pairs");
+ rbBoostLinks.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ setBoostingLevel(evt);
+ }
+ });
+
+ bgBoost.add(rbBoostPPI);
+ rbBoostPPI.setToolTipText("try to maximize the number of protein pairs");
+ rbBoostPPI.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ setBoostingLevel(evt);
+ }
+ });
+
+ bgBoost.add(rbBoostPeptidePairs);
+ rbBoostPeptidePairs.setToolTipText("try to maximize the number of peptide pairs");
+ rbBoostPeptidePairs.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ setBoostingLevel(evt);
+ }
+ });
+
+ ckMaximize.setText("Boost");
+ ckMaximize.setToolTipText("should we try to boost the results reported for a specified maximum FDR");
+ ckMaximize.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ ckMaximizeActionPerformed(evt);
+ }
+ });
+
+ cbBoostOther.setModel(new DefaultComboBoxModel(new OfflineFDR.FDRLevel[]{OfflineFDR.FDRLevel.PSM, OfflineFDR.FDRLevel.PROTEINGROUP}));
+ cbBoostOther.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ cbBoostOtherActionPerformed(evt);
+ }
+ });
+
+ bgBoost.add(rbBoostOther);
+ rbBoostOther.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ rbBoostOthersetBoostingLevel(evt);
+ }
+ });
+
+ tsLocalFDR.setToolTipText("calculate Local FDR(=PEP) (square); calculate and filter by Local FDR (tick); or do not calculate Local FDR(empty)");
+ tsLocalFDR.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tsLocalFDRActionPerformed(evt);
+ }
+ });
+
+ jLabel6.setText("Local FDR");
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+ this.setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jLabel5)
+ .addComponent(jLabel2)
+ .addComponent(jLabel3)
+ .addComponent(jLabel4)
+ .addComponent(jLabel6))
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addGap(16, 16, 16)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+ .addComponent(spPPIFdr, javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(spLinkFDR, javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(spPepFDR, javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(spPsmFDR, javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addGroup(layout.createSequentialGroup()
+ .addGap(18, 18, 18)
+ .addComponent(tsLocalFDR, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
+ .addComponent(ckMaximize)
+ .addComponent(rbBoostPeptidePairs)
+ .addComponent(rbBoostLinks)
+ .addComponent(rbBoostPPI)
+ .addComponent(rbBoostOther))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(cbBoostOther, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 86, Short.MAX_VALUE)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(btnCalc)
+ .addComponent(btnStopBoost))
+ .addContainerGap())
+ );
+
+ layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btnCalc, btnStopBoost});
+
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(jLabel9)
+ .addComponent(ckMaximize))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addGroup(layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(spPsmFDR, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jLabel5))
+ .addGap(11, 11, 11)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(spPepFDR, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jLabel2))
+ .addComponent(rbBoostPeptidePairs))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(spLinkFDR, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jLabel3))
+ .addComponent(rbBoostLinks, javax.swing.GroupLayout.Alignment.TRAILING))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(spPPIFdr, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jLabel4))
+ .addComponent(rbBoostPPI, javax.swing.GroupLayout.Alignment.TRAILING))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(cbBoostOther, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(jLabel6)
+ .addComponent(tsLocalFDR, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+ .addComponent(rbBoostOther))
+ .addGap(0, 57, Short.MAX_VALUE))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(btnStopBoost)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnCalc)
+ .addContainerGap())
+ );
+ }// //GEN-END:initComponents
+
+ private void btnCalcActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCalcActionPerformed
+ // TODO add your handling code here:
+ doCalc();
+
+ }//GEN-LAST:event_btnCalcActionPerformed
+
+ private void btnStopBoostActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnStopBoostActionPerformed
+ raiseStopMaximizing();
+ }//GEN-LAST:event_btnStopBoostActionPerformed
+
+ private void ckMaximizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ckMaximizeActionPerformed
+ rbBoostLinks.setEnabled(ckMaximize.isSelected());
+ rbBoostPPI.setEnabled(ckMaximize.isSelected());
+ rbBoostPeptidePairs.setEnabled(ckMaximize.isSelected());
+ rbBoostOther.setEnabled(ckMaximize.isSelected());
+ cbBoostOther.setEnabled(ckMaximize.isSelected());
+ ckBoostBetween.setEnabled(ckMaximize.isSelected());
+
+ }//GEN-LAST:event_ckMaximizeActionPerformed
+
+ private void setBoostingLevel(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_setBoostingLevel
+ if (evt.getSource() instanceof JRadioButton) {
+ cbBoostOther.setVisible(false);
+ rbBoostOther.setVisible(false);
+ }
+ }//GEN-LAST:event_setBoostingLevel
+
+ private void rbBoostOthersetBoostingLevel(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbBoostOthersetBoostingLevel
+ // TODO add your handling code here:
+ }//GEN-LAST:event_rbBoostOthersetBoostingLevel
+
+ private void cbBoostOtherActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbBoostOtherActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_cbBoostOtherActionPerformed
+
+ private void tsLocalFDRActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tsLocalFDRActionPerformed
+
+
+ }//GEN-LAST:event_tsLocalFDRActionPerformed
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.ButtonGroup bgBoost;
+ private javax.swing.JButton btnCalc;
+ public javax.swing.JButton btnStopBoost;
+ private javax.swing.JComboBox cbBoostOther;
+ private javax.swing.JCheckBox ckBoostBetween;
+ private javax.swing.JCheckBox ckMaximize;
+ private javax.swing.JLabel jLabel2;
+ private javax.swing.JLabel jLabel3;
+ private javax.swing.JLabel jLabel4;
+ private javax.swing.JLabel jLabel5;
+ private javax.swing.JLabel jLabel6;
+ private javax.swing.JLabel jLabel9;
+ private javax.swing.JRadioButton rbBoostLinks;
+ private javax.swing.JRadioButton rbBoostOther;
+ private javax.swing.JRadioButton rbBoostPPI;
+ private javax.swing.JRadioButton rbBoostPeptidePairs;
+ private javax.swing.JSpinner spLinkFDR;
+ private javax.swing.JSpinner spPPIFdr;
+ private javax.swing.JSpinner spPepFDR;
+ private javax.swing.JSpinner spPsmFDR;
+ private org.rappsilber.gui.components.TriStateCheckBox tsLocalFDR;
+ // End of variables declaration//GEN-END:variables
+
+ @Override
+ public void setEnabled(boolean e) {
+ super.setEnabled(e);
+ btnCalc.setEnabled(e);
+ if (e)
+ btnStopBoost.setEnabled(false);
+ }
+
+// @Override
+// public boolean isEnabeled(boolean e) {
+// }
+
+ @Override
+ public void setMinTD(Integer c) {
+ m_minTD = c;
+ }
+
+ @Override
+ public int getMinTD() {
+ return m_minTD;
+ }
+
+ @Override
+ public Boolean psmLocalFDR() {
+ return this.psmLocalFDR;
+ }
+
+ @Override
+ public Boolean peppairLocalFDR() {
+ return this.peppairLocalFDR;
+ }
+
+ @Override
+ public Boolean protLocalFDR() {
+ return this.protLocalFDR;
+ }
+
+ @Override
+ public Boolean linkLocalFDR() {
+ return this.linkLocalFDR;
+ }
+
+ @Override
+ public Boolean ppiLocalFDR() {
+ return this.ppiLocalFDR;
+ }
+
+ @Override
+ public void psmLocalFDR(Boolean local) {
+ this.psmLocalFDR = local;
+ setLocalFDR();
+ }
+
+ protected void setLocalFDR() {
+ Boolean hasTrue = false;
+ Boolean hasFalse = false;
+ if (this.peppairLocalFDR!= null) {
+ hasTrue |= this.peppairLocalFDR;
+ hasFalse &= !this.peppairLocalFDR;
+ }
+ if (this.psmLocalFDR!= null) {
+ hasTrue |= this.psmLocalFDR;
+ hasFalse &= !this.psmLocalFDR;
+ }
+ if (this.protLocalFDR!= null) {
+ hasTrue |= this.protLocalFDR;
+ hasFalse &= !this.protLocalFDR;
+ }
+ if (this.linkLocalFDR!= null) {
+ hasTrue |= this.linkLocalFDR;
+ hasFalse &= !this.linkLocalFDR;
+ }
+ if (this.ppiLocalFDR!= null) {
+ hasTrue |= this.ppiLocalFDR;
+ hasFalse &= !this.ppiLocalFDR;
+ }
+ if (hasTrue) {
+ this.tsLocalFDR.setSelectionState(true);
+ } else if (hasFalse) {
+ this.tsLocalFDR.setSelectionState(false);
+ } else {
+ this.tsLocalFDR.setSelectionState(null);
+ }
+ }
+
+ @Override
+ public void peppairLocalFDR(Boolean local) {
+ this.peppairLocalFDR = local;
+ setLocalFDR();
+ }
+
+ @Override
+ public void protLocalFDR(Boolean local) {
+ this.protLocalFDR = local;
+ setLocalFDR();
+ }
+
+ @Override
+ public void linkLocalFDR(Boolean local) {
+ this.linkLocalFDR = local;
+ setLocalFDR();
+ }
+
+ @Override
+ public void ppiLocalFDR(Boolean local) {
+ this.ppiLocalFDR = local;
+ setLocalFDR();
+ }
+
+
+ @Override
+ public double getMinPeptideCoverageFilter() {
+ return this.minPeptideCoverageFilter;
+ }
+ @Override
+ public void setMinPeptideCoverageFilter(double d) {
+ this.minPeptideCoverageFilter = d;
+ }
+
+ @Override
+ public double getMinDeltaScoreFilter() {
+ return this.minDeltaScoreFilter;
+ }
+
+ @Override
+ public void setMinDeltaScoreFilter(double d) {
+ this.minDeltaScoreFilter = d;
+ }
+
+ @Override
+ public int getMinPeptideFragmentsFilter() {
+ return this.minFragments;
+ }
+
+ @Override
+ public void setMinPeptideFragmentsFilter(int frags) {
+ this.minFragments = frags;
+ }
+
+ @Override
+ public boolean ignoreValidityChecks() {
+ return this.ignoreValidityChecks;
+ }
+
+ @Override
+ public void ignoreValidityChecks(boolean ignore) {
+ this.ignoreValidityChecks = ignore;
+ }
+
+
+
+}
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsPanel.java b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsPanel.java
index 6bfce40..3097061 100644
--- a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsPanel.java
+++ b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsPanel.java
@@ -49,6 +49,7 @@ public abstract class FDRSettingsPanel extends javax.swing.JPanel implements FDR
private boolean boostPepCoverage = true;
private boolean boostPepDeltaScore = true;
private boolean boostMinFragments = false;
+ private boolean groubByCrosslinkerStubs;
/**
* Creates new form FDRSettingsPanel
@@ -265,4 +266,15 @@ public void boostMinFragments(boolean boost){
// public void setSubScoreCutOff(double localfdr) {
// this.subScoreCutOff = localfdr;
// }
+
+ @Override
+ public void setGroupByCrosslinkerStubs(boolean group) {
+ this.groubByCrosslinkerStubs = group;
+ }
+
+ @Override
+ public boolean getGroupByCrosslinkerStubs() {
+ return this.groubByCrosslinkerStubs;
+ }
+
}
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsSimple.form b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsSimple.form
index 7a8accb..3e213a4 100644
--- a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsSimple.form
+++ b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsSimple.form
@@ -17,11 +17,10 @@
-
+
-
@@ -32,16 +31,13 @@
-
-
-
-
-
+
+
-
+
@@ -61,19 +57,18 @@
-
-
-
-
-
+
-
+
+
+
+
@@ -113,11 +108,6 @@
-
-
-
-
-
@@ -135,15 +125,6 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsSimple.java b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsSimple.java
index 1bc7f12..b5207dc 100644
--- a/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsSimple.java
+++ b/src/main/java/org/rappsilber/fdr/gui/components/FDRSettingsSimple.java
@@ -55,8 +55,11 @@ public class FDRSettingsSimple extends FDRSettingsPanel {
private double minDeltaScoreFilter;
private boolean combineScoreAndDelta;
private int minFragments;
- private boolean boostMinFragments;
- private boolean ignoreValidityChecks;
+ private boolean ignoreValidityChecks = true;
+ private boolean psmDirectional;
+ private boolean peptidePairDirectional;
+ private boolean linkDirectional;
+ private boolean ppiDirectional;
@Override
public boolean getBoostBetween() {
@@ -279,42 +282,42 @@ public void setMaxProteinAmbiguity(Integer maxAmbiguity) {
@Override
public boolean isPSMDirectional() {
- return ckDirectional.isSelected();
+ return this.psmDirectional;
}
@Override
public boolean isPeptidePairDirectional() {
- return ckDirectional.isSelected();
+ return this.peptidePairDirectional;
}
@Override
public boolean isLinkDirectional() {
- return ckDirectional.isSelected();
+ return this.linkDirectional;
}
@Override
public boolean isPPIDirectional() {
- return ckDirectional.isSelected();
+ return this.ppiDirectional;
}
@Override
public void setPSMDirectional(boolean directional) {
- setValueLater(ckDirectional,directional);
+ psmDirectional=directional;
}
@Override
public void setPeptidePairDirectional(boolean directional) {
- setValueLater(ckDirectional,directional);
+ peptidePairDirectional = directional;
}
@Override
public void setLinkDirectional(boolean directional) {
- setValueLater(ckDirectional,directional);
+ linkDirectional = directional;
}
@Override
public void setPPIDirectional(boolean directional) {
- setValueLater(ckDirectional,directional);
+ ppiDirectional = directional;
}
@@ -330,6 +333,7 @@ public void doOptimize(OfflineFDR.FDRLevel level) {
if (level == null)
ckMaximize.setSelected(false);
else {
+ ckMaximize.setSelected(true);
cbFDRLevel.getModel().setSelectedItem(level);
}
}
@@ -379,10 +383,8 @@ private void initComponents() {
lblReportFactor = new javax.swing.JLabel();
spReportFactor = new javax.swing.JSpinner();
jLabel1 = new javax.swing.JLabel();
- ckDirectional = new javax.swing.JCheckBox();
btnCalc = new javax.swing.JButton();
ckMaximize = new javax.swing.JCheckBox();
- lblDirectional = new javax.swing.JLabel();
lblBoost = new javax.swing.JLabel();
spFDR = new javax.swing.JSpinner();
cbFDRLevel = new org.rappsilber.fdr.gui.components.FDRLevelComboBox();
@@ -397,8 +399,6 @@ private void initComponents() {
jLabel1.setText("FDR");
- ckDirectional.setToolTipText("Is the Cross-linking considered directional (A links to B is different to B links to A)");
-
btnCalc.setText("Calculate");
btnCalc.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -414,14 +414,6 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
}
});
- lblDirectional.setText("Is directional");
- lblDirectional.setToolTipText("Is the Cross-linking considered directional (A links to B is different to B links to A)");
- lblDirectional.addMouseListener(new java.awt.event.MouseAdapter() {
- public void mouseClicked(java.awt.event.MouseEvent evt) {
- lblDirectionalMouseClicked(evt);
- }
- });
-
lblBoost.setText("Boost result");
lblBoost.setToolTipText("Use prefiltering on lower level to boost the results on the chossen level of information");
lblBoost.addMouseListener(new java.awt.event.MouseAdapter() {
@@ -456,7 +448,6 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(btnStopBoost, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel1)
- .addComponent(lblDirectional)
.addComponent(lblBoost)
.addComponent(lblReportFactor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
@@ -466,13 +457,11 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addComponent(spReportFactor, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(spFDR)
.addGroup(layout.createSequentialGroup()
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(ckDirectional)
- .addComponent(ckMaximize))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 58, Short.MAX_VALUE)
+ .addComponent(ckMaximize)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 38, Short.MAX_VALUE)
.addComponent(ckBoostBetween)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(cbFDRLevel, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE))
+ .addComponent(cbFDRLevel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(btnCalc)))
@@ -486,16 +475,15 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
.addComponent(jLabel1)
.addComponent(spFDR, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cbFDRLevel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(ckDirectional)
- .addComponent(lblDirectional))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(ckMaximize)
.addComponent(lblBoost)))
- .addComponent(ckBoostBetween, javax.swing.GroupLayout.Alignment.TRAILING))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(ckBoostBetween)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblReportFactor)
@@ -514,10 +502,6 @@ private void btnCalcActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST
}//GEN-LAST:event_btnCalcActionPerformed
- private void lblDirectionalMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblDirectionalMouseClicked
- ckDirectional.setSelected(!ckDirectional.isSelected());
- }//GEN-LAST:event_lblDirectionalMouseClicked
-
private void lblBoostMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblBoostMouseClicked
ckMaximize.setSelected(!ckMaximize.isSelected());
@@ -536,11 +520,9 @@ private void ckMaximizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI
public javax.swing.JButton btnStopBoost;
private org.rappsilber.fdr.gui.components.FDRLevelComboBox cbFDRLevel;
private javax.swing.JCheckBox ckBoostBetween;
- private javax.swing.JCheckBox ckDirectional;
private javax.swing.JCheckBox ckMaximize;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel lblBoost;
- private javax.swing.JLabel lblDirectional;
public javax.swing.JLabel lblReportFactor;
private javax.swing.JSpinner spFDR;
private javax.swing.JSpinner spReportFactor;
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/MZIdentMLOwnerGUI.form b/src/main/java/org/rappsilber/fdr/gui/components/MZIdentMLOwnerGUI.form
new file mode 100644
index 0000000..0f884f4
--- /dev/null
+++ b/src/main/java/org/rappsilber/fdr/gui/components/MZIdentMLOwnerGUI.form
@@ -0,0 +1,134 @@
+
+
+
diff --git a/src/main/java/org/rappsilber/fdr/gui/components/MZIdentMLOwnerGUI.java b/src/main/java/org/rappsilber/fdr/gui/components/MZIdentMLOwnerGUI.java
new file mode 100644
index 0000000..fed6bb2
--- /dev/null
+++ b/src/main/java/org/rappsilber/fdr/gui/components/MZIdentMLOwnerGUI.java
@@ -0,0 +1,326 @@
+/*
+ * Copyright 2019 Lutz Fischer .
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.rappsilber.fdr.gui.components;
+
+import java.awt.BorderLayout;
+import java.awt.GraphicsEnvironment;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.lang.invoke.MethodHandles;
+import java.util.Locale;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import org.rappsilber.config.LocalProperties;
+import org.rappsilber.fdr.utils.MZIdentMLOwner;
+
+/**
+ *
+ * @author Lutz Fischer
+ */
+public class MZIdentMLOwnerGUI extends javax.swing.JPanel {
+
+ /**
+ * Creates new form MzIdenMLOwner
+ */
+ public MZIdentMLOwnerGUI() {
+ initComponents();
+ setMZIdentMLOwner();
+ }
+
+
+ public void setMZIdentMLOwner() {
+ txtmzIdentOwnerFirst.setText(LocalProperties.getProperty("mzIdenMLOwnerFirst", txtmzIdentOwnerFirst.getText()));
+ txtmzIdentOwnerLast.setText(LocalProperties.getProperty("mzIdenMLOwnerLast", txtmzIdentOwnerLast.getText()));
+ txtmzIdentOwnerEmail.setText(LocalProperties.getProperty("mzIdenMLOwnerEmail", txtmzIdentOwnerEmail.getText()));
+ txtmzIdentAddress.setText(LocalProperties.getProperty("mzIdenMLOwnerAddress", txtmzIdentAddress.getText()));
+ txtmzIdentOwnerOrg.setText(LocalProperties.getProperty("mzIdenMLOwnerOrg", txtmzIdentOwnerOrg.getText()));
+ }
+
+ public void setMZIdentMLOwner(MZIdentMLOwner owner) {
+ txtmzIdentOwnerFirst.setText(owner.first);
+ txtmzIdentOwnerLast.setText(owner.last);
+ txtmzIdentOwnerEmail.setText(owner.email);
+ txtmzIdentAddress.setText(owner.address);
+ txtmzIdentOwnerOrg.setText(owner.org);
+ }
+
+ public static MZIdentMLOwner getLastOwner() {
+ return new MZIdentMLOwner(
+ LocalProperties.getProperty("mzIdenMLOwnerFirst", ""),
+ LocalProperties.getProperty("mzIdenMLOwnerLast", ""),
+ LocalProperties.getProperty("mzIdenMLOwnerEmail", ""),
+ LocalProperties.getProperty("mzIdenMLOwnerOrg", ""),
+ LocalProperties.getProperty("mzIdenMLOwnerAddress", ""));
+
+ }
+
+ public static void saveDefaultOwner(MZIdentMLOwner owner) {
+ LocalProperties.setProperty("mzIdenMLOwnerFirst", owner.first);
+ LocalProperties.setProperty("mzIdenMLOwnerLast", owner.last);
+ LocalProperties.setProperty("mzIdenMLOwnerEmail", owner.email);
+ LocalProperties.setProperty("mzIdenMLOwnerAddress", owner.address);
+ LocalProperties.setProperty("mzIdenMLOwnerOrg", owner.org);
+ }
+
+
+ public static void resetDefaultOwner() {
+ LocalProperties.setProperty("mzIdenMLOwnerFirst", null);
+ LocalProperties.setProperty("mzIdenMLOwnerLast", null);
+ LocalProperties.setProperty("mzIdenMLOwnerEmail", null);
+ LocalProperties.setProperty("mzIdenMLOwnerAddress", null);
+ LocalProperties.setProperty("mzIdenMLOwnerOrg", null);
+ }
+
+
+ public MZIdentMLOwner getOwnerInfo() {
+ return new MZIdentMLOwner(txtmzIdentOwnerFirst.getText(), txtmzIdentOwnerLast.getText(), txtmzIdentOwnerEmail.getText(), txtmzIdentOwnerOrg.getText(), txtmzIdentAddress.getText());
+ }
+
+ public static MZIdentMLOwner getDocumentOwner() {
+ MZIdentMLOwner o = getLastOwner();
+ if (o.isEmpty()) {
+ return getNewOwner(o);
+ }
+ return o;
+ }
+
+ public static MZIdentMLOwner getSetOwner(MZIdentMLOwner defaultOwner) throws HeadlessException, UnsupportedOperationException {
+ MZIdentMLOwner o = getNewOwner(defaultOwner);
+ saveDefaultOwner(o);
+ return o;
+ }
+
+ public static MZIdentMLOwner getNewOwner(MZIdentMLOwner defaultOwner) throws HeadlessException, UnsupportedOperationException {
+ if (GraphicsEnvironment.isHeadless()) {
+ Logger.getLogger(MethodHandles.lookup().lookupClass().getName()).log(Level.WARNING, "NO OWNER PREDEFINED AND CAN'T ASK FOR ONE!");
+ return defaultOwner;
+ }
+ if (SwingUtilities.isEventDispatchThread()) {
+ Logger.getLogger(MethodHandles.lookup().lookupClass().getName()).log(Level.WARNING, "NO OWNER PREDEFINED AND CAN'T ASK FOR ONE!");
+ throw new UnsupportedOperationException("This Method should not be run from the EventDispachThread");
+ }
+ final Object lock = new Object();
+ final JFrame window = new JFrame("mzIdentML Document Owner");
+ JLabel desc = new JLabel("mzIdentML-files need to provide information about the owner of the document");
+ MZIdentMLOwnerGUI og = new MZIdentMLOwnerGUI();
+ window.getContentPane().setLayout(new BorderLayout());
+ window.add(desc,BorderLayout.NORTH);
+ window.add(og,BorderLayout.CENTER);
+ JPanel pButtons = new JPanel(new BorderLayout());
+ window.getContentPane().add(pButtons,BorderLayout.SOUTH);
+ JButton close = new JButton("OK");
+ pButtons.add(close,BorderLayout.EAST);
+ window.pack();
+ close.addActionListener(new ActionListener(){
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ window.setVisible(false);
+ synchronized (lock) {
+ lock.notify();
+ }
+ }
+ });
+ window.addWindowListener(new WindowAdapter() {
+
+ @Override
+ public void windowClosing(WindowEvent arg0) {
+ synchronized (lock) {
+ //window.setVisible(false);
+ lock.notify();
+ }
+ }
+
+ });
+ window.setVisible(true);
+ Thread t = new Thread(new Runnable() {
+ public void run() {
+ while (window.isVisible()) {
+ try {
+ synchronized(lock) {
+ lock.wait();
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ Logger.getLogger(MZIdentMLOwnerGUI.class.getName()).log(Level.INFO,"Window Closed");
+ }
+ }
+ });
+ t.start();
+ try {
+ t.join();
+ } catch (InterruptedException ex) {
+ Logger.getLogger(MZIdentMLOwnerGUI.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ MZIdentMLOwner ret = og.getCurrentDocumentOwner();
+ return ret;
+ }
+
+ public MZIdentMLOwner getCurrentDocumentOwner() {
+ return new MZIdentMLOwner(
+ txtmzIdentOwnerFirst.getText(),
+ txtmzIdentOwnerLast.getText(),
+ txtmzIdentOwnerEmail.getText(),
+ txtmzIdentOwnerOrg.getText(),
+ txtmzIdentAddress.getText());
+ }
+
+ public static void main(String[] args) {
+ getNewOwner(getLastOwner());
+ }
+
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ jLabel2 = new javax.swing.JLabel();
+ txtmzIdentOwnerFirst = new javax.swing.JTextField();
+ txtmzIdentOwnerLast = new javax.swing.JTextField();
+ txtmzIdentOwnerEmail = new javax.swing.JTextField();
+ jLabel3 = new javax.swing.JLabel();
+ jLabel5 = new javax.swing.JLabel();
+ txtmzIdentOwnerOrg = new javax.swing.JTextField();
+ jLabel4 = new javax.swing.JLabel();
+ jScrollPane1 = new javax.swing.JScrollPane();
+ txtmzIdentAddress = new javax.swing.JTextArea();
+
+ jLabel2.setText("Document Owner");
+
+ txtmzIdentOwnerFirst.setText("First");
+ txtmzIdentOwnerFirst.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ txtmzIdentOwnerFirstActionPerformed(evt);
+ }
+ });
+
+ txtmzIdentOwnerLast.setText("Last");
+ txtmzIdentOwnerLast.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ txtmzIdentOwnerLastActionPerformed(evt);
+ }
+ });
+
+ txtmzIdentOwnerEmail.setText("reseacher@organisation.org");
+ txtmzIdentOwnerEmail.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ txtmzIdentOwnerEmailActionPerformed(evt);
+ }
+ });
+
+ jLabel3.setText("E-Mail");
+
+ jLabel5.setText("Organisation");
+
+ txtmzIdentOwnerOrg.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ txtmzIdentOwnerOrgActionPerformed(evt);
+ }
+ });
+
+ jLabel4.setText("Address");
+
+ txtmzIdentAddress.setColumns(20);
+ txtmzIdentAddress.setRows(5);
+ jScrollPane1.setViewportView(txtmzIdentAddress);
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+ this.setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jLabel2)
+ .addComponent(jLabel3)
+ .addComponent(jLabel4)
+ .addComponent(jLabel5))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jScrollPane1)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(txtmzIdentOwnerFirst)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(txtmzIdentOwnerLast)
+ .addGap(3, 3, 3))
+ .addComponent(txtmzIdentOwnerEmail)
+ .addComponent(txtmzIdentOwnerOrg)))
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(jLabel2)
+ .addComponent(txtmzIdentOwnerFirst, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(txtmzIdentOwnerLast, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(jLabel3)
+ .addComponent(txtmzIdentOwnerEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(txtmzIdentOwnerOrg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jLabel5))
+ .addGap(9, 9, 9)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jScrollPane1)
+ .addComponent(jLabel4)))
+ );
+ }// //GEN-END:initComponents
+
+ private void txtmzIdentOwnerFirstActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtmzIdentOwnerFirstActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_txtmzIdentOwnerFirstActionPerformed
+
+ private void txtmzIdentOwnerLastActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtmzIdentOwnerLastActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_txtmzIdentOwnerLastActionPerformed
+
+ private void txtmzIdentOwnerEmailActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtmzIdentOwnerEmailActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_txtmzIdentOwnerEmailActionPerformed
+
+ private void txtmzIdentOwnerOrgActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtmzIdentOwnerOrgActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_txtmzIdentOwnerOrgActionPerformed
+
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JLabel jLabel2;
+ private javax.swing.JLabel jLabel3;
+ private javax.swing.JLabel jLabel4;
+ private javax.swing.JLabel jLabel5;
+ private javax.swing.JScrollPane jScrollPane1;
+ private javax.swing.JTextArea txtmzIdentAddress;
+ private javax.swing.JTextField txtmzIdentOwnerEmail;
+ private javax.swing.JTextField txtmzIdentOwnerFirst;
+ private javax.swing.JTextField txtmzIdentOwnerLast;
+ private javax.swing.JTextField txtmzIdentOwnerOrg;
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/src/main/java/org/rappsilber/fdr/result/SubGroupFdrInfo.java b/src/main/java/org/rappsilber/fdr/result/SubGroupFdrInfo.java
index 1422363..bd38466 100644
--- a/src/main/java/org/rappsilber/fdr/result/SubGroupFdrInfo.java
+++ b/src/main/java/org/rappsilber/fdr/result/SubGroupFdrInfo.java
@@ -72,7 +72,7 @@ public class SubGroupFdrInfo implements Iterable {
public int between;
public int linear;
- public boolean didntPassCheck = false;
+ public String didntPassCheck = null;
public Iterator iterator() {
return filteredResult.iterator();
diff --git a/src/main/java/org/rappsilber/fdr/utils/MZIdentMLExport.java b/src/main/java/org/rappsilber/fdr/utils/MZIdentMLExport.java
index 8ab2d25..cb5cac6 100644
--- a/src/main/java/org/rappsilber/fdr/utils/MZIdentMLExport.java
+++ b/src/main/java/org/rappsilber/fdr/utils/MZIdentMLExport.java
@@ -232,7 +232,7 @@ public class MZIdentMLExport {
XLMOD xlmod;
- private mzIdentMLOwner owner = new mzIdentMLOwner("fisrt", "last", "email", "org", "adress");
+ private MZIdentMLOwner owner = new MZIdentMLOwner("fisrt", "last", "email", "org", "address");
private PSMToMzIdentScanId mgfScanID = new PSMToMzIdentScanId() {
@@ -291,7 +291,7 @@ public String getID(DBPSM psm) {
* @throws Exception
*/
//CV also available at http://psidev.cvs.sourceforge.net/viewvc/*checkout*/psidev/psi/psi-ms/mzML/controlledVocabulary/psi-ms.obo
- public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, String outputfile, String databaseFileFormatID, String massSpecFileFormatID, mzIdentMLOwner owner) throws Exception {
+ public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, String outputfile, String databaseFileFormatID, String massSpecFileFormatID, MZIdentMLOwner owner) throws Exception {
//XTandemFile xfile = new XTandemFile(inputfile);
this.owner = owner;
initializeVariables(fdr, fdrResult, databaseFileFormatID, massSpecFileFormatID);
@@ -329,17 +329,17 @@ public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, String outputfile, S
* @throws Exception
*/
//CV also available at http://psidev.cvs.sourceforge.net/viewvc/*checkout*/psidev/psi/psi-ms/mzML/controlledVocabulary/psi-ms.obo
- public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, String databaseFileFormatID, String massSpecFileFormatID, mzIdentMLOwner owner) throws Exception {
+ public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, String databaseFileFormatID, String massSpecFileFormatID, MZIdentMLOwner owner) throws Exception {
//XTandemFile xfile = new XTandemFile(inputfile);
this.owner = owner;
initializeVariables(fdr, fdrResult, databaseFileFormatID, massSpecFileFormatID);
}
- public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, String outputfile, mzIdentMLOwner owner) throws Exception {
+ public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, String outputfile, MZIdentMLOwner owner) throws Exception {
this(fdr, fdrResult, outputfile, "MS:1001348", "MS:1001062", owner);
}
- public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, mzIdentMLOwner owner) throws Exception {
+ public MZIdentMLExport(OfflineFDR fdr, FDRResult fdrResult, MZIdentMLOwner owner) throws Exception {
this(fdr, fdrResult, "MS:1001348", "MS:1001062", owner);
}
@@ -518,7 +518,7 @@ public void readInFDR(OfflineFDR fdr, FDRResult result, double massError) {
int pagID =0;
handleAnalysisSoftware(OfflineFDR.getXiFDRVersion().toString());
- handleAuditCollection(owner.first, owner.last, owner.email, owner.adress, owner.org);
+ handleAuditCollection(owner.first, owner.last, owner.email, owner.address, owner.org);
handleProvider(); //Performed after auditcollection, since contact is needed for provider
boolean fragmentIsMono = handleAnalysisProtocolCollection(fdr, result);
@@ -684,7 +684,7 @@ public void readInFDR(OfflineFDR fdr, FDRResult result, double massError) {
xlModId++;
org.rappsilber.fdr.entities.PeptidePair peppair = psm.getPeptidePair();
- SpectraData specData = getSpectraData(psm.getSearchID(), psm.getRun());
+ SpectraData specData = getSpectraData(psm.getSearchID(), psm.getPeakListName());
double calcMass = psm.getCalcMass();
double psmXLMass = psm.getCalcMass();
@@ -1893,7 +1893,7 @@ public void handleAuditCollection(String firstName, String lastName, String emai
public SpectrumIdentificationList getSpectrumIdentificationList(DBPSM psm) {
- return getSpectrumIdentificationList(psm.getSearchID(),psm.getRun());
+ return getSpectrumIdentificationList(psm.getSearchID(),psm.getPeakListName());
}
public SpectrumIdentificationList getSpectrumIdentificationList(int searchid,String run) {
@@ -1961,18 +1961,25 @@ public SpectraData getSpectraData(int searchid, String run) {
if (sd == null) {
sd = new SpectraData();
SpectrumIDFormat sif = new SpectrumIDFormat();
- if (forceExtension.toLowerCase().contentEquals("mzml")) {
+ if (forceExtension != null && forceExtension.toLowerCase().contentEquals("mzml")) {
sif.setCvParam(makeCvParam("MS:1001530", "mzML unique identifier",psiCV));
} else {
sif.setCvParam(makeCvParam("MS:1000774", "multiple peak list nativeID format", psiCV));
}
sd.setSpectrumIDFormat(sif);
String runOut = run;
+ String extension = "";
+ // get the file extension of the run-name
+ if (runOut.contains(".")) {
+ extension = runOut.substring(runOut.lastIndexOf(".")+1);
+ }
+
if (forceExtension != null) {
if (runOut.contains("."))
runOut = runOut.substring(0,runOut.lastIndexOf("."))+"."+forceExtension;
else
runOut = runOut + "." + forceExtension;
+ extension = forceExtension;
}
sd.setLocation(runOut);
@@ -1986,12 +1993,15 @@ public SpectraData getSpectraData(int searchid, String run) {
*/
FileFormat ff = new FileFormat();
- if (forceExtension.toLowerCase().contentEquals("mzml")) {
+ if (extension.toLowerCase().contentEquals("mzml")) {
ff.setCvParam(makeCvParam("MS:1000584", "mzML format",psiCV));
- scanIDTranslation= this.mzMLscanIDTranslation;
- } else if (forceExtension.toLowerCase().contentEquals("raw")) {
+ scanIDTranslation= this.mzMLscanIDTranslation;
+ } else if (extension.toLowerCase().contentEquals("raw")) {
ff.setCvParam(makeCvParam("MS:1000563","Thermo RAW format", psiCV));
- scanIDTranslation= this.thermoRawScaNumber;
+ scanIDTranslation= this.thermoRawScaNumber;
+ } else if (extension.toLowerCase().contentEquals("apl")) {
+ ff.setCvParam(makeCvParam("MS:1002996","Andromeda:apl file format", psiCV));
+ scanIDTranslation= this.thermoRawScaNumber;
} else {
ff.setCvParam(makeCvParam("MS:1001062","Mascot MGF format", psiCV));
scanIDTranslation= this.mgfScanID;
@@ -2905,14 +2915,14 @@ public void setOwnerOrg(String ownerOrg) {
* @return the ownerAddress
*/
public String getOwnerAddress() {
- return owner.adress;
+ return owner.address;
}
/**
* @param ownerAddress the ownerAddress to set
*/
public void setOwnerAddress(String ownerAddress) {
- this.owner.adress = ownerAddress;
+ this.owner.address = ownerAddress;
}
/**
diff --git a/src/main/java/org/rappsilber/fdr/utils/MZIdentMLOwner.java b/src/main/java/org/rappsilber/fdr/utils/MZIdentMLOwner.java
new file mode 100644
index 0000000..8475a00
--- /dev/null
+++ b/src/main/java/org/rappsilber/fdr/utils/MZIdentMLOwner.java
@@ -0,0 +1,66 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.rappsilber.fdr.utils;
+
+import java.util.Objects;
+
+/**
+ *
+ * @author lfischer
+ */
+public class MZIdentMLOwner {
+ public String first;
+ public String last;
+ public String email;
+ public String org;
+ public String address;
+
+ public MZIdentMLOwner() {
+
+ }
+ public MZIdentMLOwner(String first, String last, String email, String org, String adress) {
+ this.first = first;
+ this.last = last;
+ this.email = email;
+ this.org = org;
+ this.address = adress;
+ }
+
+ public boolean isEmpty() {
+ return (this.first == null || this.first.isEmpty()) &&
+ (this.last == null || this.last.isEmpty()) &&
+ (this.email == null || this.email.isEmpty()) &&
+ (this.org == null || this.email.isEmpty()) &&
+ (this.address == null|| this.address.isEmpty());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof MZIdentMLOwner) {
+ MZIdentMLOwner o = (MZIdentMLOwner) obj;
+ return ((this.first == null && o.first == null) || (this.first != null && this.first.contentEquals(o.first))) &&
+ ((this.last == null && o.last == null) || (this.last != null && this.last.contentEquals(o.last))) &&
+ ((this.email == null && o.email == null) || (this.email != null && this.email.contentEquals(o.email))) &&
+ ((this.org == null && o.org == null) || (this.org != null && this.org.contentEquals(o.org))) &&
+ ((this.address == null && o.address == null) || (this.address != null && this.address.contentEquals(o.address)));
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ // somewhat autogenerated
+ int hash = 5;
+ hash = 97 * hash + this.first.hashCode();
+ hash = 97 * hash + this.last.hashCode();
+ hash = 97 * hash + this.email.hashCode();
+ hash = 97 * hash + this.org.hashCode();
+ hash = 97 * hash + this.address.hashCode();
+ return hash;
+ }
+
+
+}
diff --git a/src/main/java/org/rappsilber/fdr/utils/mzIdentMLOwner.java b/src/main/java/org/rappsilber/fdr/utils/mzIdentMLOwner.java
deleted file mode 100644
index 37b2b43..0000000
--- a/src/main/java/org/rappsilber/fdr/utils/mzIdentMLOwner.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-package org.rappsilber.fdr.utils;
-
-/**
- *
- * @author lfischer
- */
-public class mzIdentMLOwner {
- String first;
- String last;
- String email;
- String org;
- String adress;
-
- public mzIdentMLOwner(String first, String last, String email, String org, String adress) {
- this.first = first;
- this.last = last;
- this.email = email;
- this.org = org;
- this.adress = adress;
- }
-
-}
diff --git a/src/main/resources/xifdrproject.properties b/src/main/resources/xifdrproject.properties
index 586133a..3811705 100644
--- a/src/main/resources/xifdrproject.properties
+++ b/src/main/resources/xifdrproject.properties
@@ -1,6 +1,18 @@
xifdr.version=${project.version}
xifdr.artifactId=${project.artifactId}
xifdr.changelog=\
+1.4.0\n\
+* Medium complexity level of FDR interface replaces (previous simple one)\n\
+* Some cleavable cross-linker related columns are read in\n\
+** specific grouping for these can be selected\n\
+* Validity check disabled by default but still reports warning\n\
+* Validity check warnings more verbose\n\
+* When writing csv-files from the command line mzIdentML files get writen out as well\n\
+** a window asking for document-owner will be displayed\n\
+* decoy:psms better marked\n\
+* Improved synchronisation between settings-panel\n\
+* Some adaptation to forward settings from the command-line to the GUI\n\
+* BugFix for spaces in ambiguous accession list\n\
1.3.37\n\
* BUGFIX local FDR not working correctly\n\
* Forward arguments from command-line to GUI\n\