diff BEDTools-Version-2.14.3/src/utils/sequenceUtilities/sequenceUtils.cpp @ 0:dfcd8b6c1bda

Uploaded
author aaronquinlan
date Thu, 03 Nov 2011 10:25:04 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BEDTools-Version-2.14.3/src/utils/sequenceUtilities/sequenceUtils.cpp	Thu Nov 03 10:25:04 2011 -0400
@@ -0,0 +1,126 @@
+//
+//  sequenceUtils.cpp
+//  BEDTools
+//
+//  Created by Aaron Quinlan Spring 2009.
+//  Copyright 2009 Aaron Quinlan. All rights reserved.
+//
+//  Summary:  Contains common functions for manipulating DNA sequences.
+//
+//  Acknowledgment: I am grateful to Michael Stromberg for the code below to
+//                  reverse complement a sequence.
+
+#include "sequenceUtils.h"
+
+// Performs an in-place sequence reversal
+void reverseSequence(string &seq) {
+    std::reverse(seq.begin(), seq.end());
+}
+
+// Performs an in-place reverse complement conversion
+void reverseComplement(string &seq) {
+
+    // reverse the sequence
+    reverseSequence(seq);
+
+    // swap the bases
+    for(unsigned int i = 0; i < seq.length(); i++) {
+        switch(seq[i]) {
+            case 'A':
+                seq[i] = 'T';
+                break;
+            case 'C':
+                seq[i] = 'G';
+                break;
+            case 'G':
+                seq[i] = 'C';
+                break;
+            case 'T':
+                seq[i] = 'A';
+                break;
+            case 'a':
+                seq[i] = 't';
+                break;
+            case 'c':
+                seq[i] = 'g';
+                break;
+            case 'g':
+                seq[i] = 'c';
+                break;
+            case 't':
+                seq[i] = 'a';
+                break;
+            default:
+                break;
+        }
+    }
+}
+
+
+void toLowerCase(std::string &seq)
+{
+    const int length = seq.length();
+    for(int i=0; i < length; ++i)
+    {
+        seq[i] = std::tolower(seq[i]);
+    }
+}
+
+
+void toUpperCase(std::string &seq)
+{
+    const int length = seq.length();
+    for(int i=0; i < length; ++i)
+    {
+        seq[i] = std::toupper(seq[i]);
+    }
+}
+
+
+void getDnaContent(const string &seq, int &a, int &c, int &g, int &t, int &n, int &other)
+{
+    // swap the bases
+    for(unsigned int i = 0; i < seq.length(); i++) {
+        switch(seq[i]) {
+            case 'A':
+            case 'a':
+                a++;
+                break;
+            case 'C':
+            case 'c':
+                c++;
+                break;
+            case 'G':
+            case 'g':
+                g++;
+                break;
+            case 'T':
+            case 't':
+                t++;
+                break;
+            case 'N':
+            case 'n':
+                n++;
+                break;
+            default:
+                other++;
+                break;
+        }
+    }    
+}
+
+
+int countPattern(const string &seq, const string &pattern)
+{
+    // swap the bases
+    int patternLength = pattern.size();
+    int patternCount = 0;
+    for(unsigned int i = 0; i < seq.length(); i++) {
+        if (seq.substr(i,patternLength) == pattern) {
+            patternCount++;
+        }
+    }
+    return patternCount;
+}
+        
+