public override IEnumerable <string> Process(string sourceDatabase) { StringBuilder sb = new StringBuilder(); List <int> seqLengths = new List <int>(); List <Sequence> source = new List <Sequence>(); if (contaminantFile != null) { Progress.SetMessage("Reading contaminant proteins : " + contaminantFile + " ..."); ReadFile(source, contaminantFile, sb, seqLengths); } Progress.SetMessage("Reading " + sourceDatabase + " ..."); ReadFile(source, sourceDatabase, sb, seqLengths); List <string> shuffledSeqs = UShuffle.Shuffle(sb.ToString(), klet, repeat); List <string> result = new List <string>(); for (int i = 0; i < repeat; i++) { string targetFilename; if (combined) { targetFilename = FileUtils.ChangeExtension(sourceDatabase, MyConvert.Format("SHUFFLED{0}-{1}.fasta", klet, i + 1)); } else { targetFilename = FileUtils.ChangeExtension(sourceDatabase, MyConvert.Format("SHUFFLED{0}-{1}_ONLY.fasta", klet, i + 1)); } var shuffledSeq = shuffledSeqs[i]; using (StreamWriter sw = new StreamWriter(targetFilename)) { source.ForEach(m => ff.WriteSequence(sw, m)); int index = 0; int pos = 0; foreach (var length in seqLengths) { index++; var name = "SHF_" + index.ToString().PadLeft(8, '0'); var seq = new Sequence(name, shuffledSeq.Substring(pos, length)); pos += length; ff.WriteSequence(sw, seq); } } result.Add(targetFilename); } Progress.SetMessage("Finished."); return(result); }
private void ProcessFile(ref int index, StreamWriter sw, string fastaFile, bool isContaminant) { FastaFormat ff = new FastaFormat(); using (StreamReader sr = new StreamReader(fastaFile)) { Progress.SetRange(0, sr.BaseStream.Length); Sequence seq; while ((seq = ff.ReadSequence(sr)) != null) { Progress.SetPosition(StreamUtils.GetCharpos(sr)); if (isContaminant) { if (!seq.Reference.StartsWith("CON_")) { seq.Reference = "CON_" + seq.Reference; } } if (combined) { ff.WriteSequence(sw, seq); } if (pseudoAminoacid) { builder.Build(seq); } index++; Sequence reversedSeq = SequenceUtils.GetReversedSequence(seq.SeqString, index); ff.WriteSequence(sw, reversedSeq); } } }