Mercurial > repos > aaronquinlan > multi_intersect
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; +} + +