public void TestGetModifiedSequence()
        {
            var seq           = "NIDVLEGNEQFINAAKIITHPNFNGNTLDND";
            var modifications = "X;X;X;X;X;X;X;X;X;X;X;X;X;X;X;Dimethyl (K);X;X;X;X;X;X;X;X;X;X;X;X;X;X;X";
            var actual        = MaxQuantPeptideTextReader.GetModifiedSequence(seq, modifications);

            Assert.AreEqual("NIDVLEGNEQFINAAK(Dimethyl)IITHPNFNGNTLDND", actual);
        }
        public void TestRead()
        {
            MaxQuantPeptideTextReader reader = new MaxQuantPeptideTextReader();
            var spectra = reader.ReadFromFile(TestContext.CurrentContext.TestDirectory + "/../../../data/maxquant_sites.txt");

            Assert.AreEqual(162, spectra.Count);
            Assert.AreEqual("LQR_SCS_Nu_CA_SAX_Online_071226_06", spectra[0].Query.FileScan.Experimental);
            Assert.AreEqual(12044, spectra[0].Query.FileScan.FirstScan);
            Assert.AreEqual(0.000888, spectra[0].ExpectValue, 0.000001);
            Assert.AreEqual(21.4, spectra[0].Score, 0.0001);
            Assert.AreEqual("ASEDES*DLEDEEEKSQEDTEQK", spectra[0].Sequence);

            Assert.AreEqual("#S*GEDEQQEQTIAEDLVVTK", spectra[15].Sequence);

            Assert.AreEqual("*", reader.ModificationMap["(ph)"]);
            Assert.AreEqual("#", reader.ModificationMap["(ac)"]);
            Assert.AreEqual("@", reader.ModificationMap["(ox)"]);
        }
        public override IEnumerable <string> Process()
        {
            var spectra = new MaxQuantPeptideTextReader().ReadFromFile(options.SiteFile);

            spectra.RemoveAll(m => m.DeltaScore < options.MinDeltaScore || m.Probability < options.MinProbability);
            spectra = (from g in spectra.GroupBy(m => m.Query.FileScan.ShortFileName)
                       select g.OrderBy(l => l.Score).Last()).ToList();

            if (options.IsSILAC)
            {
                var spmap = spectra.ToDictionary(m => m.Query.FileScan.ShortFileName);

                var existModificationChar = (from sp in spectra
                                             from c in sp.Sequence
                                             where !char.IsLetter(c)
                                             select c).Distinct().Count();

                Dictionary <char, char> labelChars = new Dictionary <char, char>();
                foreach (var c in options.SILACAminoacids)
                {
                    labelChars[c] = ModificationConsts.MODIFICATION_CHAR[++existModificationChar];
                }

                using (var sr = new StreamReader(options.MSMSFile))
                {
                    var    headers   = sr.ReadLine().Split('\t');
                    var    rawIndex  = Array.IndexOf(headers, "Raw file");
                    var    scanIndex = Array.IndexOf(headers, "Scan number");
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        if (string.IsNullOrWhiteSpace(line))
                        {
                            break;
                        }

                        var parts = line.Split('\t');
                        var raw   = parts[rawIndex];
                        var scan  = int.Parse(parts[scanIndex]);
                        var sf    = new SequestFilename(raw, scan, scan, 0, "");
                        var name  = sf.ShortFileName;

                        IIdentifiedSpectrum sp;
                        if (spmap.TryGetValue(name, out sp))
                        {
                            foreach (var pep in sp.Peptides)
                            {
                                var           seq = pep.Sequence;
                                StringBuilder sb  = new StringBuilder();
                                for (int i = seq.Length - 1; i >= 0; i--)
                                {
                                    char heavyChar;
                                    if (labelChars.TryGetValue(seq[i], out heavyChar))
                                    {
                                        sb.Append(heavyChar);
                                    }
                                    sb.Append(seq[i]);
                                }
                                pep.Sequence = SequenceUtils.GetReversedSequence(sb.ToString());
                            }
                        }
                    }
                }
            }



            string resultFilename = options.SiteFile + ".peptides";

            new MascotPeptideTextFormat("\t\"File, Scan(s)\"\tSequence\tCharge\tScore\tDeltaScore\tExpectValue\tPValue\tModification").WriteToFile(resultFilename, spectra);

            return(new[] { resultFilename });
        }