public override IEnumerable<PeptideSpectralMatch> ReadNextPsm() { Protein prot; MSDataFile dataFile; foreach (OmssaPeptideSpectralMatch omssaPSM in _reader.GetRecords<OmssaPeptideSpectralMatch>()) { Peptide peptide = new Peptide(omssaPSM.Sequence.ToUpper()); SetFixedMods(peptide); SetDynamicMods(peptide, omssaPSM.Modifications); peptide.StartResidue = omssaPSM.StartResidue; peptide.EndResidue = omssaPSM.StopResidue; if (_proteins.TryGetValue(omssaPSM.Defline, out prot)) { peptide.Parent = prot; } PeptideSpectralMatch psm = new PeptideSpectralMatch(); if (_extraColumns.Count > 0) { foreach(string name in _extraColumns) { psm.AddExtraData(name, _reader.GetField<string>(name)); } } psm.Peptide = peptide; psm.Score = omssaPSM.EValue; psm.Charge = omssaPSM.Charge; psm.ScoreType = PeptideSpectralMatchScoreType.EValue; psm.IsDecoy = omssaPSM.Defline.StartsWith("DECOY"); psm.SpectrumNumber = omssaPSM.SpectrumNumber; psm.FileName = omssaPSM.FileName; string[] filenameparts = psm.FileName.Split('.'); if (_dataFiles.TryGetValue(filenameparts[0], out dataFile)) { if (!dataFile.IsOpen) dataFile.Open(); psm.Spectrum = dataFile[psm.SpectrumNumber] as MsnDataScan; } yield return psm; } }