1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
/*
Ray -- Parallel genome assemblies for parallel DNA sequencing
Copyright (C) 2010, 2011, 2012, 2013 Sébastien Boisvert
http://DeNovoAssembler.SourceForge.Net/
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You have received a copy of the GNU General Public License
along with this program (gpl-3.0.txt).
see <http://www.gnu.org/licenses/>
*/
#include "ColorSpaceDecoder.h"
#include <code/Mock/constants.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
#define _COLOR_SPACE_DECODER_CODE_A 0
#define _COLOR_SPACE_DECODER_CODE_C 1
#define _COLOR_SPACE_DECODER_CODE_G 2
#define _COLOR_SPACE_DECODER_CODE_T 3
#define _COLOR_SPACE_DECODER_COLOR_BLUE '0'
#define _COLOR_SPACE_DECODER_COLOR_GREEN '1'
#define _COLOR_SPACE_DECODER_COLOR_ORANGE '2'
#define _COLOR_SPACE_DECODER_COLOR_RED '3'
#define _COLOR_SPACE_DECODER_NUMBER_OF_COLORS 4
/*
* \see http://www.ploscompbiol.org/article/slideshow.action?uri=info:doi/10.1371/journal.pcbi.1000386&imageURI=info:doi/10.1371/journal.pcbi.1000386.g002
*/
ColorSpaceDecoder::ColorSpaceDecoder(){
int i=0;
// A-dependant colors
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_BLUE;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_GREEN;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_ORANGE;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_RED;
// C-dependant colors
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_GREEN;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_BLUE;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_RED;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_ORANGE;
// G-dependant colors
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_ORANGE;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_RED;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_BLUE;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_GREEN;
// T-dependant colors
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_RED;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_ORANGE;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_GREEN;
m_colors[i++]=_COLOR_SPACE_DECODER_COLOR_BLUE;
}
/*
* decode color-space read.
*/
string ColorSpaceDecoder::decode(char*x){
int len=strlen(x);
char v[1024];
int lastCode=0;
char boot=x[0];
if(boot==SYMBOL_A){
lastCode=_COLOR_SPACE_DECODER_CODE_A;
}else if(boot==SYMBOL_T){
lastCode=_COLOR_SPACE_DECODER_CODE_T;
}else if(boot==SYMBOL_C){
lastCode=_COLOR_SPACE_DECODER_CODE_C;
}else if(boot==SYMBOL_G){
lastCode=_COLOR_SPACE_DECODER_CODE_G;
}
int i=1;
while(i<len){
char color=x[i];
int currentCode=0;
while(currentCode<_COLOR_SPACE_DECODER_NUMBER_OF_COLORS){
if(color==m_colors[lastCode*_COLOR_SPACE_DECODER_NUMBER_OF_COLORS+currentCode]){
break;
}
currentCode++;
}
if(currentCode==_COLOR_SPACE_DECODER_CODE_A){
v[i-1]=SYMBOL_A;
}else if(currentCode==_COLOR_SPACE_DECODER_CODE_C){
v[i-1]=SYMBOL_C;
}else if(currentCode==_COLOR_SPACE_DECODER_CODE_G){
v[i-1]=SYMBOL_G;
}else if(currentCode==_COLOR_SPACE_DECODER_CODE_T){
v[i-1]=SYMBOL_T;
}
lastCode=currentCode;
i++;
}
v[len]='\0';
string s(v);
return s;
}
|