00001 #include "MAl_addon.h"
00002 #include <limits>
00003 #include <cassert>
00004
00005 using namespace std;
00006
00007 MAl_addon::MAl_addon( MAl* m ) : mal(m)
00008 {
00009
00010 base_index[ 'a' ] = 0;
00011 index_base.push_back('a');
00012
00013 base_index[ 't' ] = 1;
00014 index_base.push_back('t');
00015
00016 base_index[ 'g' ] = 2;
00017 index_base.push_back('g');
00018
00019 base_index[ 'c' ] = 3;
00020 index_base.push_back('c');
00021
00022 base_index[ '-' ] = 4;
00023 index_base.push_back('-');
00024
00025 base_index[ '*' ] = 5;
00026 index_base.push_back('*');
00027
00028 base_index[ 'x' ] = 6;
00029 index_base.push_back('x');
00030
00031 base_index[ 'n' ] = 7;
00032 index_base.push_back('n');
00033
00034
00035 min_col = numeric_limits<size_t>::max();
00036 max_col = 0;
00037
00038 for( size_t i = 0; i < mal->get_num_seq(); i++ ) {
00039 if (mal->get_beginGood_global( i ) < min_col ) {
00040 min_col = mal->get_beginGood_global( i );
00041 }
00042 if (mal->get_endGood_global( i ) > max_col ) {
00043 max_col = mal->get_endGood_global( i );
00044 }
00045
00046 if ( max_col > consensus.size() ) {
00047
00048 for( size_t j = consensus.size(); j < max_col; j++ ) {
00049 consensus.push_back( cons_struct() );
00050 }
00051
00052 }
00053
00054
00055
00056
00057
00058 for( size_t j = mal->get_beginGood_global( i );
00059 j < mal->get_endGood_global( i ); j++ ) {
00060
00061
00062 assert( base_index[ mal->get_base_global(i,j) ] < 8 );
00063
00064 consensus[ j ].num[ base_index[ mal->get_base_global(i,j) ] ]++;
00065 if ( is_DNP(i, j) ) {
00066 consensus[ j ].num_DNPs++;
00067 }
00068
00069 }
00070
00071 }
00072 assert( max_col == consensus.size() );
00073
00074
00075
00076 for( size_t i = min_col; i < consensus.size(); i++ ) {
00077 int max(0);
00078
00079 for( size_t j = 0; j < 8; j++ ) {
00080 if ( consensus[ i ].num[ j ] > max ) {
00081 max = consensus[ i ].num[ j ];
00082 consensus[ i ].cons = index_base[ j ];
00083 }
00084
00085 }
00086 assert( max > 0 );
00087
00088 }
00089
00090 }
00091 MAl_addon::~MAl_addon()
00092 {
00093
00094 }
00095
00096 int MAl_addon::get_min_col()
00097 {
00098 return min_col;
00099 }
00100
00101 int MAl_addon::get_max_col()
00102 {
00103 return max_col;
00104 }
00105
00106 int MAl_addon::get_num_rows()
00107 {
00108 return mal->get_num_seq();
00109 }
00110
00111 char MAl_addon::get_most_freq_base_on_col( int col )
00112 {
00113 return consensus[ col ].cons;
00114 }
00115
00116 int MAl_addon::get_num_bases_on_col(int col, char base)
00117 {
00118 return consensus[ col ].num[ base_index[ base ] ];
00119 }
00120
00121 size_t MAl_addon::get_num_DNPs_on_col(int col)
00122 {
00123 return consensus[ col ].num_DNPs;
00124 }
00125
00126 char MAl_addon::get_entry( int row, int col )
00127 {
00128 return mal->get_base_global( row, col );
00129 }
00130
00131 int MAl_addon::get_qual( int row, int col )
00132 {
00133 return mal->get_qual_global( row, col );
00134 }
00135
00136
00137 void MAl_addon::set_DNP(int row, int col, bool status, int dnpID, int type)
00138 {
00139 mal->set_DNP_global( row, col, status );
00140 mal->set_DNP_ID_global( row, col, dnpID );
00141 mal->set_DNP_type_global( row, col, type );
00142 }
00143 bool MAl_addon::is_DNP(int row, int col)
00144 {
00145 return mal->is_DNP_global( row, col );
00146 }
00147
00148 int MAl_addon::get_row_start(int row)
00149 {
00150 return mal->get_beginGood_global( row );
00151 }
00152
00153 int MAl_addon::get_row_end(int row)
00154 {
00155 return mal->get_endGood_global( row );
00156 }
00157