Permalink
Browse files

Expands 'offbyone' type make.contigs

  • Loading branch information...
1 parent 26df7fb commit a2758904beff407fd96d6dd9b1ed5b6d0b5df7f0 @mothur-westcott mothur-westcott committed Feb 2, 2017
Showing with 86 additions and 61 deletions.
  1. +35 −31 source/commands/makecontigscommand.cpp
  2. +35 −29 source/commands/makecontigscommand.h
  3. +15 −1 source/mothurout.cpp
  4. +1 −0 source/mothurout.h
@@ -2515,39 +2515,43 @@ int MakeContigsCommand::setNameType(string forward, string reverse) {
else {
char delim = ':';
if (m->changedSeqNames) { delim = '_'; }
-
- int pos = forward.find_last_of(delim);
- string tempForward = forward;
- string tempForwardEnd = forward;
- if (pos != string::npos) {
- tempForwardEnd = forward.substr(pos+1);
- }
-
- int pos2 = reverse.find_last_of(delim);
- string tempReverse = reverse;
- string tempReverseEnd = reverse;
- if (pos2 != string::npos) {
- tempReverseEnd = reverse.substr(pos2+1);
- }
-
- if (tempForwardEnd == tempReverseEnd) {
- if ((m->isAllAlphas(tempForwardEnd)) && (m->isAllAlphas(tempReverseEnd))) {
- //check for off by one on rest of name
- if (tempForward.length() == tempReverse.length()) {
- int numDiffs = 0;
- char forwardDiff = ' '; char reverseDiff = ' '; int spot = 0;
- for (int i = 0; i < tempForward.length(); i++) {
- if (tempForward[i] != tempReverse[i]) {
- numDiffs++;
- forwardDiff = tempForward[i];
- reverseDiff = tempReverse[i];
- spot = i;
+ vector<char> delims; delims.push_back(delim); delims.push_back('/');
+
+ for (int j = 0; j < delims.size(); j++) {
+ delim = delims[j];
+ int pos = forward.find_last_of(delim);
+ string tempForward = forward;
+ string tempForwardEnd = forward;
+ if (pos != string::npos) {
+ tempForwardEnd = forward.substr(pos+1);
+ }
+
+ int pos2 = reverse.find_last_of(delim);
+ string tempReverse = reverse;
+ string tempReverseEnd = reverse;
+ if (pos2 != string::npos) {
+ tempReverseEnd = reverse.substr(pos2+1);
+ }
+
+ if (tempForwardEnd != tempReverseEnd) {
+ if ((m->isAllAlphaNumerics(tempForwardEnd)) && (m->isAllAlphaNumerics(tempReverseEnd))) {
+ //check for off by one on rest of name
+ if (tempForward.length() == tempReverse.length()) {
+ int numDiffs = 0;
+ char forwardDiff = ' '; char reverseDiff = ' '; int spot = 0;
+ for (int i = 0; i < tempForward.length(); i++) {
+ if (tempForward[i] != tempReverse[i]) {
+ numDiffs++;
+ forwardDiff = tempForward[i];
+ reverseDiff = tempReverse[i];
+ spot = i;
+ }
}
+ if (numDiffs == 1) {
+ if ((forwardDiff == '1') && (reverseDiff == '2')) { type = offByOne; offByOneTrimLength = tempForward.length()-spot+1; }
+ }
+ //cout << tempReverse.substr(0, (tempReverse.length()-offByOneTrimLength)) << endl;
}
- if (numDiffs == 1) {
- if ((forwardDiff == '1') && (reverseDiff == '2')) { type = offByOne; offByOneTrimLength = tempForward.length()-spot+1; }
- }
- //cout << tempReverse.substr(0, (tempReverse.length()-offByOneTrimLength)) << endl;
}
}
}
@@ -282,38 +282,44 @@ static DWORD WINAPI MyGroupContigsThreadFunction(LPVOID lpParam){
char delim = ':';
if (pDataArray->m->changedSeqNames) { delim = '_'; }
- int pos = forward.find_last_of(delim);
- string tempForward = forward;
- string tempForwardEnd = forward;
- if (pos != string::npos) {
- tempForwardEnd = forward.substr(pos+1);
- }
-
- int pos2 = reverse.find_last_of(delim);
- string tempReverse = reverse;
- string tempReverseEnd = reverse;
- if (pos2 != string::npos) {
- tempReverseEnd = reverse.substr(pos2+1);
- }
+ vector<char> delims; delims.push_back(delim); delims.push_back('/');
- if (tempForwardEnd == tempReverseEnd) {
- if ((pDataArray->m->isAllAlphas(tempForwardEnd)) && (pDataArray->m->isAllAlphas(tempReverseEnd))) {
- //check for off by one on rest of name
- if (tempForward.length() == tempReverse.length()) {
- int numDiffs = 0;
- char forwardDiff = ' '; char reverseDiff = ' '; int spot = 0;
- for (int i = 0; i < tempForward.length(); i++) {
- if (tempForward[i] != tempReverse[i]) {
- numDiffs++;
- forwardDiff = tempForward[i];
- reverseDiff = tempReverse[i];
- spot = i;
+ for (int j = 0; j < delims.size(); j++) {
+ delim = delims[j];
+
+ int pos = forward.find_last_of(delim);
+ string tempForward = forward;
+ string tempForwardEnd = forward;
+ if (pos != string::npos) {
+ tempForwardEnd = forward.substr(pos+1);
+ }
+
+ int pos2 = reverse.find_last_of(delim);
+ string tempReverse = reverse;
+ string tempReverseEnd = reverse;
+ if (pos2 != string::npos) {
+ tempReverseEnd = reverse.substr(pos2+1);
+ }
+
+ if (tempForwardEnd != tempReverseEnd) {
+ if ((pDataArray->m->isAllAlphaNumerics(tempForwardEnd)) && (pDataArray->m->isAllAlphaNumerics(tempReverseEnd))) {
+ //check for off by one on rest of name
+ if (tempForward.length() == tempReverse.length()) {
+ int numDiffs = 0;
+ char forwardDiff = ' '; char reverseDiff = ' '; int spot = 0;
+ for (int i = 0; i < tempForward.length(); i++) {
+ if (tempForward[i] != tempReverse[i]) {
+ numDiffs++;
+ forwardDiff = tempForward[i];
+ reverseDiff = tempReverse[i];
+ spot = i;
+ }
}
+ if (numDiffs == 1) {
+ if ((forwardDiff == '1') && (reverseDiff == '2')) { type = offByOne; pDataArray->offByOneTrimLength = tempForward.length()-spot+1; }
+ }
+ //cout << tempReverse.substr(0, (tempReverse.length()-offByOneTrimLength)) << endl;
}
- if (numDiffs == 1) {
- if ((forwardDiff == '1') && (reverseDiff == '2')) { type = offByOne; pDataArray->offByOneTrimLength = tempForward.length()-spot+1; }
- }
- //cout << tempReverse.substr(0, (tempReverse.length()-offByOneTrimLength)) << endl;
}
}
}
View
@@ -3588,7 +3588,21 @@ bool MothurOut::isAllAlphas(string stringToCheck){
}
}
-
+/***********************************************************************/
+bool MothurOut::isAllAlphaNumerics(string stringToCheck){
+ try {
+ bool allAlphaNumerics = true;
+
+ if(stringToCheck.find_first_not_of("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOopPQqRrSsTtUuVvWwXxYyZz0123456789") != string::npos) { allAlphaNumerics = false; }
+
+ return allAlphaNumerics;
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "isAllAlphas");
+ exit(1);
+ }
+
+}
/***********************************************************************/
bool MothurOut::mothurConvert(string item, float& num){
try {
View
@@ -167,6 +167,7 @@ class MothurOut {
bool isContainingOnlyDigits(string);
bool containsAlphas(string);
bool isAllAlphas(string);
+ bool isAllAlphaNumerics(string);
bool isNumeric1(string);
bool isNumeric1(char);
bool isInteger(string);

0 comments on commit a275890

Please sign in to comment.