e.printStackTrace();
return;
}
PTMFactory ptmFactory = PTMFactory.getInstance();
ModificationProfile ptmProfile = peptideShakerGUI.getSearchParameters().getModificationProfile();
PTMScoringPreferences ptmScoringPreferences = peptideShakerGUI.getPtmScoringPreferences();
ProjectDetails projectDetails = peptideShakerGUI.getProjectDetails();
ArrayList<Integer> algorithms = projectDetails.getIdentificationAlgorithms();
progressDialog.setPrimaryProgressCounterIndeterminate(false);
progressDialog.setMaxPrimaryProgressCounter(identification.getSpectrumIdentificationSize());
writer.write("Index" + SEPARATOR);
writer.write("Protein(s)" + SEPARATOR);
writer.write("Protein(s) Descriptions" + SEPARATOR);
writer.write("Sequence" + SEPARATOR);
writer.write("Modification(s)" + SEPARATOR);
if (ptmScoringPreferences.isProbabilitsticScoreCalculation()) {
writer.write(ptmScoringPreferences.getSelectedProbabilisticScore().getName() + " localization" + SEPARATOR);
}
writer.write("D-score localization" + SEPARATOR);
if (algorithms.size() == 1 && algorithms.get(0) == Advocate.mascot.getIndex()) {
writer.write("MD-score localization" + SEPARATOR);
writer.write("MD-score" + SEPARATOR);
}
writer.write("# phosphorylations" + SEPARATOR);
writer.write("# phosphorylation sites" + SEPARATOR);
writer.write("Spectrum File" + SEPARATOR);
writer.write("Spectrum Title" + SEPARATOR);
writer.write("Precursor m/z" + SEPARATOR);
writer.write("Precursor Charge" + SEPARATOR);
writer.write("Precursor Retention Time" + SEPARATOR);
writer.write("Peptide Theoretical Mass" + SEPARATOR);
if (peptideShakerGUI.getSearchParameters().isPrecursorAccuracyTypePpm()) {
writer.write("Mass Error [ppm]" + SEPARATOR);
} else {
writer.write("Mass Error [Da]" + SEPARATOR);
}
writer.write("Isotope" + SEPARATOR);
writer.write("Confidence" + SEPARATOR);
writer.write("Validation" + SEPARATOR);
writer.write("Decoy" + SEPARATOR);
writer.write(System.getProperty("line.separator"));
PSParameter psParameter = new PSParameter();
int psmCounter = 0;
HashMap<String, ArrayList<String>> spectrumKeys = identification.getSpectrumIdentificationMap();
int fileCounter = 0;
for (String spectrumFile : spectrumKeys.keySet()) {
progressDialog.setTitle("Loading Spectrum Matches. Please Wait... (" + ++fileCounter + "/" + spectrumKeys.size() + ")");
identification.loadSpectrumMatches(spectrumKeys.get(spectrumFile), progressDialog);
progressDialog.setTitle("Loading Spectrum Matches Details. Please Wait... (" + fileCounter + "/" + spectrumKeys.size() + ")");
identification.loadSpectrumMatchParameters(spectrumKeys.get(spectrumFile), psParameter, progressDialog);
progressDialog.setTitle("Copying Spectrum Matches Phospho Details to File. Please Wait... (" + fileCounter + "/" + spectrumKeys.size() + ")");
progressDialog.setMaxPrimaryProgressCounter(spectrumKeys.get(spectrumFile).size());
progressDialog.setValue(0);
for (String psmKey : spectrumKeys.get(spectrumFile)) {
if (progressDialog.isRunCanceled()) {
break;
}
SpectrumMatch spectrumMatch = identification.getSpectrumMatch(psmKey);
psParameter = (PSParameter) identification.getSpectrumMatchParameter(psmKey, psParameter);
PeptideAssumption bestAssumption = spectrumMatch.getBestPeptideAssumption();
writer.write(++psmCounter + SEPARATOR);
String proteinAccessions = "";
String proteinDescriptions = "";
for (String protein : bestAssumption.getPeptide().getParentProteins(peptideShakerGUI.getSequenceMatchingPreferences())) {
if (!proteinAccessions.equals("")) {
proteinAccessions += ", ";
proteinDescriptions += "; ";
}
proteinAccessions += protein;
proteinDescriptions += sequenceFactory.getHeader(protein).getSimpleProteinDescription();
}
writer.write(proteinAccessions + SEPARATOR);
writer.write(proteinDescriptions + SEPARATOR);
String sequence = bestAssumption.getPeptide().getSequence();
writer.write(sequence + SEPARATOR);
HashMap<String, ArrayList<Integer>> modMap = new HashMap<String, ArrayList<Integer>>();
for (ModificationMatch modificationMatch : bestAssumption.getPeptide().getModificationMatches()) {
if (modificationMatch.isVariable()) {
if (!modMap.containsKey(modificationMatch.getTheoreticPtm())) {
modMap.put(modificationMatch.getTheoreticPtm(), new ArrayList<Integer>());
}
modMap.get(modificationMatch.getTheoreticPtm()).add(modificationMatch.getModificationSite());
}
}
boolean first = true, first2;
ArrayList<String> mods = new ArrayList<String>(modMap.keySet());
Collections.sort(mods);
for (String mod : mods) {
if (first) {
first = false;
} else {
writer.write(", ");
}
first2 = true;
writer.write(mod + "(");
for (int aa : modMap.get(mod)) {
if (first2) {
first2 = false;
} else {
writer.write(", ");
}
writer.write(aa + "");
}
writer.write(")");
}
writer.write(SEPARATOR);
int nPhospho = 0;
ArrayList<String> modList = new ArrayList<String>();
for (ModificationMatch modificationMatch : bestAssumption.getPeptide().getModificationMatches()) {
if (modificationMatch.isVariable()) {
String ptmName = modificationMatch.getTheoreticPtm();
if (ptmName.contains("phospho")) {
nPhospho++;
}
PTM refPtm = ptmFactory.getPTM(ptmName);
for (String equivalentPtm : ptmProfile.getSimilarNotFixedModifications(refPtm.getMass())) {
if (!modList.contains(equivalentPtm)) {
modList.add(equivalentPtm);
}
}
}
}
Collections.sort(modList);
PSPtmScores ptmScores = new PSPtmScores();
first = true;
StringBuilder dLocalizations = new StringBuilder();
StringBuilder probabilisticLocalizations = new StringBuilder();
String mdLocation = "";
String mdScore = "";
String[] split = sequence.split("[STY]");
int nSites = split.length - 1;
ArrayList<String> phosphoNames = new ArrayList<String>();
for (String mod : modList) {
if (mod.contains("phospho")) {
phosphoNames.add(mod);
if (spectrumMatch.getUrParam(ptmScores) != null) {
ptmScores = (PSPtmScores) spectrumMatch.getUrParam(new PSPtmScores());
if (ptmScores != null && ptmScores.getPtmScoring(mod) != null) {
PtmScoring ptmScoring = ptmScores.getPtmScoring(mod);
ArrayList<Integer> sites = new ArrayList<Integer>(ptmScoring.getProbabilisticSites());
Collections.sort(sites);
for (Integer site : sites) {
if (probabilisticLocalizations.length() > 0) {
probabilisticLocalizations.append(", ");
}
probabilisticLocalizations.append(site.toString()).append(": ").append(ptmScoring.getProbabilisticScore(site));
}
sites = new ArrayList<Integer>(ptmScoring.getDSites());
Collections.sort(sites);
for (Integer site : sites) {
if (dLocalizations.length() > 0) {
dLocalizations.append(", ");
}
dLocalizations.append(site.toString()).append(": ").append(ptmScoring.getDeltaScore(site));
}
}
}
}
}
if (algorithms.size() == 1 && algorithms.get(0) == Advocate.mascot.getIndex()) {
if (!phosphoNames.isEmpty() && spectrumMatch.hasAssumption(Advocate.mascot.getIndex())) {
PeptideAssumption mascotAssumption = null;
double bestScore = 0;
for (ArrayList<SpectrumIdentificationAssumption> peptideAssumptionList : spectrumMatch.getAllAssumptions(Advocate.mascot.getIndex()).values()) {
for (SpectrumIdentificationAssumption assumption : peptideAssumptionList) {
PeptideAssumption peptideAssumption = (PeptideAssumption) assumption;
MascotScore mascotScore = new MascotScore();
mascotScore = (MascotScore) peptideAssumption.getUrParam(mascotScore);
if (mascotScore.getScore() > bestScore) {
mascotAssumption = peptideAssumption;
bestScore = mascotScore.getScore();
}
}
}
if (mascotAssumption != null) {
Peptide mascotPeptide = mascotAssumption.getPeptide();
Double score = MDScore.getMDScore(spectrumMatch, mascotPeptide, phosphoNames, peptideShakerGUI.getSequenceMatchingPreferences());
if (score != null) {
mdScore = score.toString();
}
ArrayList<Integer> sites = new ArrayList<Integer>();
for (ModificationMatch modificationMatch : mascotPeptide.getModificationMatches()) {
if (modificationMatch.getTheoreticPtm().contains("phospho")) {
sites.add(modificationMatch.getModificationSite());
}
}
Collections.sort(sites);
for (int site : sites) {
if (!mdLocation.equals("")) {
mdLocation += ", ";
}
mdLocation += site;
}
}
}
}
if (ptmScoringPreferences.isProbabilitsticScoreCalculation()) {
writer.write(probabilisticLocalizations + SEPARATOR);
}
writer.write(dLocalizations + SEPARATOR);
if (algorithms.size() == 1 && algorithms.get(0) == Advocate.mascot.getIndex()) {
writer.write(mdLocation + SEPARATOR);
writer.write(mdScore + SEPARATOR);
}
writer.write(nPhospho + SEPARATOR);
writer.write(nSites + SEPARATOR);
writer.write(spectrumFile + SEPARATOR);
writer.write(Spectrum.getSpectrumTitle(spectrumMatch.getKey()) + SEPARATOR);
Precursor prec = spectrumFactory.getPrecursor(spectrumMatch.getKey());
writer.write(prec.getMz() + SEPARATOR);
writer.write(bestAssumption.getIdentificationCharge().value + SEPARATOR);
writer.write(prec.getRt() + SEPARATOR);
writer.write(bestAssumption.getPeptide().getMass() + SEPARATOR);
writer.write(bestAssumption.getDeltaMass(prec.getMz(), peptideShakerGUI.getSearchParameters().isPrecursorAccuracyTypePpm()) + SEPARATOR);
writer.write(bestAssumption.getIsotopeNumber(prec.getMz()) + SEPARATOR);
writer.write(psParameter.getPsmConfidence() + SEPARATOR);
MatchValidationLevel matchValidationLevel = psParameter.getMatchValidationLevel();
writer.write(matchValidationLevel.toString());
if (matchValidationLevel == MatchValidationLevel.doubtful && !psParameter.getReasonDoubtful().equals("")) {
writer.write(" (" + psParameter.getReasonDoubtful() + ")");
}
writer.write(SEPARATOR);
if (bestAssumption.getPeptide().isDecoy(peptideShakerGUI.getSequenceMatchingPreferences())) {
writer.write(1 + SEPARATOR);
} else {
writer.write(0 + SEPARATOR);
}
writer.write(System.getProperty("line.separator"));
progressDialog.increasePrimaryProgressCounter();
}
}
writer.close();
try {
File outputFile = new File(selectedFile.getParent(), reducedName + "_Proteins_phospho.txt");
writer = new BufferedWriter(new FileWriter(outputFile));
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "An error occurred when saving the protein details.", "Saving Failed", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
return;
}
ArrayList<String> targetedPtms = new ArrayList<String>();
for (String ptm : ptmProfile.getAllNotFixedModifications()) {
if (ptm.contains("phospho")) {
targetedPtms.add(ptm);
}
}