}
psmProbabilities = (PSParameter) identification.getSpectrumMatchParameter(spectrumKey, psmProbabilities);
SpectrumMatch spectrumMatch = identification.getSpectrumMatch(spectrumKey);
PeptideAssumption bestAssumption = spectrumMatch.getBestPeptideAssumption();
Peptide tempPeptide = bestAssumption.getPeptide();
// the peptide
br.write(getCurrentTabSpace() + "<PeptideItem>" + System.getProperty("line.separator"));
tabCounter++;
// peptide sequence
br.write(getCurrentTabSpace() + "<Sequence>" + tempPeptide.getSequence() + "</Sequence>" + System.getProperty("line.separator"));
// peptide start and end
String proteinAccession = proteinMatch.getMainMatch();
String proteinSequence = sequenceFactory.getProtein(proteinAccession).getSequence();
int peptideStart = proteinSequence.lastIndexOf(tempPeptide.getSequence()) + 1; // @TODO: lastIndexOf should be avoided!!
br.write(getCurrentTabSpace() + "<Start>" + peptideStart + "</Start>" + System.getProperty("line.separator"));
br.write(getCurrentTabSpace() + "<End>" + (peptideStart + tempPeptide.getSequence().length() - 1) + "</End>" + System.getProperty("line.separator"));
// spectrum index reference
br.write(getCurrentTabSpace() + "<SpectrumReference>" + spectrumIndexes.get(spectrumMatch.getKey()) + "</SpectrumReference>" + System.getProperty("line.separator"));
// modifications
writePtms(tempPeptide);
// fragment ions
writeFragmentIons(spectrumMatch);
// Get scores
HashMap<Integer, Double> eValues = new HashMap<Integer, Double>();
Double mascotScore = null, msAmandaScore = null;
for (int se : spectrumMatch.getAdvocates()) {
for (double eValue : spectrumMatch.getAllAssumptions(se).keySet()) {
for (SpectrumIdentificationAssumption assumption : spectrumMatch.getAllAssumptions(se).get(eValue)) {
if (assumption instanceof PeptideAssumption) {
PeptideAssumption peptideAssumption = (PeptideAssumption) assumption;
if (peptideAssumption.getPeptide().isSameSequenceAndModificationStatus(bestAssumption.getPeptide(), sequenceMatchingPreferences)) {
if (!eValues.containsKey(se) || eValues.get(se) > eValue) {
eValues.put(se, eValue);
if (se == Advocate.mascot.getIndex()) {
mascotScore = ((MascotScore) assumption.getUrParam(new MascotScore(0))).getScore();
} else if (se == Advocate.msAmanda.getIndex()
&& peptideAssumption.getUrParam(new MsAmandaScore()) != null) {
msAmandaScore = ((MsAmandaScore) assumption.getUrParam(new MsAmandaScore())).getScore();
}
}
}
}
}
}
}
// PTM scores
ArrayList<String> modifications = new ArrayList<String>();
for (ModificationMatch modificationMatch : bestAssumption.getPeptide().getModificationMatches()) {
if (modificationMatch.isVariable()) {
if (!modifications.contains(modificationMatch.getTheoreticPtm())) {
modifications.add(modificationMatch.getTheoreticPtm());
}
}
}
StringBuilder dScore = new StringBuilder();
Collections.sort(modifications);
PSPtmScores ptmScores = new PSPtmScores();
for (String mod : modifications) {
if (spectrumMatch.getUrParam(ptmScores) != null) {
if (dScore.length() > 0) {
dScore.append(", ");
}
ptmScores = (PSPtmScores) spectrumMatch.getUrParam(new PSPtmScores());
dScore.append(mod).append(" (");
if (ptmScores != null && ptmScores.getPtmScoring(mod) != null) {
PtmScoring ptmScoring = ptmScores.getPtmScoring(mod);
boolean firstSite = true;
ArrayList<Integer> sites = new ArrayList<Integer>(ptmScoring.getDSites());
Collections.sort(sites);
for (int site : sites) {
if (firstSite) {
firstSite = false;
} else {
dScore.append(", ");
}
dScore.append(site).append(": ").append(ptmScoring.getDeltaScore(site));
}
} else {
dScore.append("Not Scored");
}
dScore.append(")");
}
}
StringBuilder probabilisticScore = new StringBuilder();
if (ptmScoringPreferences.isProbabilitsticScoreCalculation()) {
for (String mod : modifications) {
if (spectrumMatch.getUrParam(ptmScores) != null) {
if (probabilisticScore.length() > 0) {
probabilisticScore.append(", ");
}
ptmScores = (PSPtmScores) spectrumMatch.getUrParam(new PSPtmScores());
probabilisticScore.append(mod).append(" (");
if (ptmScores != null && ptmScores.getPtmScoring(mod) != null) {
PtmScoring ptmScoring = ptmScores.getPtmScoring(mod);
boolean firstSite = true;
ArrayList<Integer> sites = new ArrayList<Integer>(ptmScoring.getProbabilisticSites());
Collections.sort(sites);
for (int site : sites) {
if (firstSite) {
firstSite = false;
} else {
probabilisticScore.append(", ");
}
probabilisticScore.append(site).append(": ").append(ptmScoring.getProbabilisticScore(site));
}
} else {
probabilisticScore.append("Not Scored");
}
probabilisticScore.append(")");
}
}
}
// @TODO: the line below uses the protein tree, which has to be rebuilt if not available...
ArrayList<String> peptideParentProteins = tempPeptide.getParentProteins(sequenceMatchingPreferences);
String peptideProteins = "";
for (String accession : peptideParentProteins) {
if (!peptideProteins.equals("")) {
peptideProteins += ", ";
}