public TrinucCalculation Calc() { TrinucCalculation tri = new TrinucCalculation(); TrinucArray trinucArray = new TrinucArray(); string seqTrinuc = string.Empty; int trinucIndex = 0; int firstFrame = 0; int secondFrame = 0; int thirdFrame = 0; string seqCalc = seq + seq.Substring(0, 6); for (int i = 0; i < seq.Length; i += 3) { seqTrinuc = seqCalc.Substring(i, 3); trinucIndex = Array.FindIndex(trinucArray.trinuc, item => item == seqTrinuc); tri.trinucleotides[trinucIndex].Trinuc1st += 1; firstFrame += 1; } for (int i = 1; i < seq.Length + 1; i += 3) { seqTrinuc = seqCalc.Substring(i, 3); trinucIndex = Array.FindIndex(trinucArray.trinuc, item => item == seqTrinuc); tri.trinucleotides[trinucIndex].Trinuc2nd += 1; secondFrame += 1; } for (int i = 2; i < seq.Length + 2; i += 3) { seqTrinuc = seqCalc.Substring(i, 3); trinucIndex = Array.FindIndex(trinucArray.trinuc, item => item == seqTrinuc); tri.trinucleotides[trinucIndex].Trinuc3rd += 1; thirdFrame += 1; } foreach (var item in tri.trinucleotides) { item.TrinucFrq1st = (double)item.Trinuc1st / (double)firstFrame; item.TrinucFrq2nd = (double)item.Trinuc2nd / (double)secondFrame; item.TrinucFrq3rd = (double)item.Trinuc3rd / (double)thirdFrame; } foreach (var item in tri.trinucleotides) { item.TrinucDiff1st2nd = Math.Abs(item.TrinucFrq1st - item.TrinucFrq2nd); item.TrinucDiff2nd3rd = Math.Abs(item.TrinucFrq2nd - item.TrinucFrq3rd); item.TrinucDiff1st3rd = Math.Abs(item.TrinucFrq1st - item.TrinucFrq3rd); } foreach (var item in tri.trinucleotides) { item.TrinucDiffSum = item.TrinucDiff1st2nd + item.TrinucDiff2nd3rd + item.TrinucDiff1st3rd; } //TrinucOutput trinucOutput = new TrinucOutput(seq, trinucleotide); //trinucOutput.TrinucOut(); return(tri); }
public static void Main(string[] args) { Console.WriteLine("CDS search using trinuc frequencies in three frames."); TrinucCalculation trinucCalculation = new TrinucCalculation(); string FASTAfileName = @"/home/alvydas/Sequencies/Bacteria/Escherichia.coli.fasta"; int seqLength = 3000; int stepLength = 10; int fragmentLengt = 100; List <double> fragTrinucFrq = new List <double>(); string seq = string.Empty; using (StreamReader streamReader = new StreamReader(FASTAfileName)) { seq = streamReader.ReadToEnd().ToLower().Replace("\n", string.Empty); } string fragSeq = seq.Substring(0, seqLength); for (int i = 0; i < fragSeq.Length - fragmentLengt + stepLength; i += stepLength) { string frag = fragSeq.Substring(i, fragmentLengt); //Console.WriteLine(frag); TriCalc triCalc = new TriCalc(frag); var tri = triCalc.Calc(); double sum = 0; foreach (var item in tri.trinucleotides) { sum += item.TrinucDiffSum; } fragTrinucFrq.Add(sum); Console.WriteLine(i + "\t" + sum); } }
public TrinucDiff Calculation(string seqType, string seq) { TrinucCalculation trinucCalculation = new TrinucCalculation(); TrinucDiff trinucDiff = new TrinucDiff(); int trinucCount = 0; string seqCalc = "nnn" + seq + seq.Substring(0, 9); string oligoFrag = string.Empty; for (int i = 0; i < seqCalc.Length - 9; i++) { oligoFrag = seqCalc.Substring(i, 3); if (Array.IndexOf(trinucArray.trinuc, oligoFrag) < 0) { trinucleotideMatch.Add(new TrinucleotideMatch { TrinucPosition = i, TrinucMatch = oligoFrag }); continue; } if (i % 3 == 0) { var index = Array.FindIndex(trinucCalculation.trinucleotides, row => row.Trinuc == oligoFrag); trinucCalculation.trinucleotides [index].Trinuc1st += 1; trinucCount += 1; } else if ((i - 1) % 3 == 0) { var index = Array.FindIndex(trinucCalculation.trinucleotides, row => row.Trinuc == oligoFrag); trinucCalculation.trinucleotides [index].Trinuc2nd += 1; } else if ((i - 2) % 3 == 0) { var index = Array.FindIndex(trinucCalculation.trinucleotides, row => row.Trinuc == oligoFrag); trinucCalculation.trinucleotides [index].Trinuc3rd += 1; } } trinucDiff.SeqType = seqType; foreach (var item in trinucCalculation.trinucleotides) { item.TrinucFrq1st = ( double )item.Trinuc1st / trinucCount; item.TrinucFrq2nd = ( double )item.Trinuc2nd / trinucCount; item.TrinucFrq3rd = ( double )item.Trinuc3rd / trinucCount; item.TrinucFrqDiff1st2nd = Math.Abs(item.TrinucFrq1st - item.TrinucFrq2nd); item.TrinucFrqDiff1st3rd = Math.Abs(item.TrinucFrq1st - item.TrinucFrq3rd); item.TrinucFrqDiff2nd3rd = Math.Abs(item.TrinucFrq2nd - item.TrinucFrq3rd); } foreach (var item in trinucCalculation.trinucleotides) { trinucDiff.DiffSum1st2nd += item.TrinucFrqDiff1st2nd; trinucDiff.DiffSum1st3rd += item.TrinucFrqDiff1st3rd; trinucDiff.DiffSum2nd3rd += item.TrinucFrqDiff2nd3rd; } trinucDiff.DiffSum = trinucDiff.DiffSum1st2nd + trinucDiff.DiffSum1st3rd + trinucDiff.DiffSum2nd3rd; return(trinucDiff); }