Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Overlap_AMOS.cc

Go to the documentation of this file.
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 #include "Overlap_AMOS.hh" 00011 using namespace AMOS; 00012 using namespace std; 00013 00014 00015 00016 00017 //================================================ Overlap_t =================== 00018 const NCode_t Overlap_t::NCODE = M_OVERLAP; 00019 const OverlapAdjacency_t Overlap_t::NULL_ADJACENCY = 0; 00020 const OverlapAdjacency_t Overlap_t::NORMAL = 'N'; 00021 const OverlapAdjacency_t Overlap_t::ANTINORMAL = 'A'; 00022 const OverlapAdjacency_t Overlap_t::INNIE = 'I'; 00023 const OverlapAdjacency_t Overlap_t::OUTIE = 'O'; 00024 00025 00026 //----------------------------------------------------- flip ------------------- 00027 void Overlap_t::flip ( ) 00028 { 00029 OverlapAdjacency_t oa = getAdjacency( ); 00030 if ( oa == NORMAL ) 00031 setAdjacency (ANTINORMAL); 00032 else if ( oa == ANTINORMAL ) 00033 setAdjacency (NORMAL); 00034 00035 Size_t tHang = aHang_m; 00036 aHang_m = bHang_m; 00037 bHang_m = tHang; 00038 00039 reads_m = std::make_pair (reads_m . second, reads_m . first); 00040 } 00041 00042 00043 //----------------------------------------------------- getAdjacency ----------- 00044 OverlapAdjacency_t Overlap_t::getAdjacency ( ) const 00045 { 00046 if ( flags_m . nibble & ADJACENCY_BIT ) 00047 { 00048 switch (flags_m . nibble & ADJACENCY_BITS) 00049 { 00050 case NORMAL_BITS : return NORMAL; 00051 case ANTINORMAL_BITS : return ANTINORMAL; 00052 case INNIE_BITS : return INNIE; 00053 case OUTIE_BITS : return OUTIE; 00054 } 00055 } 00056 return NULL_ADJACENCY; 00057 } 00058 00059 00060 //----------------------------------------------------- readMessage ------------ 00061 void Overlap_t::readMessage (const Message_t & msg) 00062 { 00063 Universal_t::readMessage (msg); 00064 00065 try { 00066 istringstream ss; 00067 00068 if ( msg . exists (F_READS) ) 00069 { 00070 ss . str (msg . getField (F_READS)); 00071 ss >> reads_m . first; 00072 ss . ignore( ); 00073 ss >> reads_m . second; 00074 if ( !ss ) 00075 AMOS_THROW_ARGUMENT ("Invalid nodes format"); 00076 ss . clear( ); 00077 } 00078 00079 if ( msg . exists (F_ADJACENCY) ) 00080 { 00081 ss . str (msg . getField (F_ADJACENCY)); 00082 setAdjacency (ss . get( )); 00083 ss . clear( ); 00084 } 00085 00086 if ( msg . exists (F_AHANG) ) 00087 { 00088 ss . str (msg . getField (F_AHANG)); 00089 ss >> aHang_m; 00090 if ( !ss ) 00091 AMOS_THROW_ARGUMENT ("Invalid aHang format"); 00092 ss . clear( ); 00093 } 00094 00095 if ( msg . exists (F_BHANG) ) 00096 { 00097 ss . str (msg . getField (F_BHANG)); 00098 ss >> bHang_m; 00099 if ( !ss ) 00100 AMOS_THROW_ARGUMENT ("Invalid bHang format"); 00101 ss . clear( ); 00102 } 00103 00104 if ( msg . exists (F_SCORE) ) 00105 { 00106 ss . str (msg . getField (F_SCORE)); 00107 ss >> score_m; 00108 if ( !ss ) 00109 AMOS_THROW_ARGUMENT ("Invalid score format"); 00110 ss . clear( ); 00111 } 00112 00113 if ( msg . exists (F_FLAG) ) 00114 { 00115 char fA, fB, fC; 00116 ss . str (msg . getField (F_FLAG)); 00117 ss >> fA >> fB >> fC; 00118 setFlagA ( fA == '1' ); 00119 setFlagB ( fB == '1' ); 00120 setFlagC ( fC == '1' ); 00121 if ( !ss ) 00122 AMOS_THROW_ARGUMENT ("Invalid flag format"); 00123 ss . clear( ); 00124 } 00125 } 00126 catch (ArgumentException_t) { 00127 00128 clear( ); 00129 throw; 00130 } 00131 } 00132 00133 00134 //----------------------------------------------------- readRecord ------------- 00135 void Overlap_t::readRecord (istream & fix, istream & var) 00136 { 00137 Universal_t::readRecord (fix, var); 00138 00139 readLE (fix, &aHang_m); 00140 readLE (fix, &bHang_m); 00141 readLE (fix, &(reads_m . first)); 00142 readLE (fix, &(reads_m . second)); 00143 readLE (fix, &score_m); 00144 } 00145 00146 00147 //----------------------------------------------------- setAdjacency ----------- 00148 void Overlap_t::setAdjacency (OverlapAdjacency_t adj) 00149 { 00150 uint8_t bits = flags_m . nibble; 00151 flags_m . nibble &= ~ADJACENCY_BITS; 00152 flags_m . nibble |= ADJACENCY_BIT; 00153 00154 switch (adj) 00155 { 00156 case NORMAL : flags_m . nibble |= NORMAL_BITS; break; 00157 case ANTINORMAL : flags_m . nibble |= ANTINORMAL_BITS; break; 00158 case INNIE : flags_m . nibble |= INNIE_BITS; break; 00159 case OUTIE : flags_m . nibble |= OUTIE_BITS; break; 00160 case NULL_ADJACENCY: 00161 flags_m . nibble &= ~ADJACENCY_BIT; 00162 break; 00163 default: 00164 flags_m . nibble = bits; 00165 AMOS_THROW_ARGUMENT ((string)"Invalid adjacency " + adj); 00166 } 00167 } 00168 00169 00170 //----------------------------------------------------- writeMessage ----------- 00171 void Overlap_t::writeMessage (Message_t & msg) const 00172 { 00173 Universal_t::writeMessage (msg); 00174 00175 try { 00176 ostringstream ss; 00177 00178 msg . setMessageCode (Overlap_t::NCODE); 00179 00180 if ( reads_m . first != NULL_ID || reads_m . second != NULL_ID ) 00181 { 00182 ss << reads_m . first << ',' << reads_m . second; 00183 msg . setField (F_READS, ss . str( )); 00184 ss . str (NULL_STRING); 00185 } 00186 00187 if ( getAdjacency( ) != NULL_ADJACENCY ) 00188 { 00189 ss << getAdjacency( ); 00190 msg . setField (F_ADJACENCY, ss . str( )); 00191 ss . str (NULL_STRING); 00192 } 00193 00194 ss << aHang_m; 00195 msg . setField (F_AHANG, ss . str( )); 00196 ss . str (NULL_STRING); 00197 00198 ss << bHang_m; 00199 msg . setField (F_BHANG, ss . str( )); 00200 ss . str (NULL_STRING); 00201 00202 ss << score_m; 00203 msg . setField (F_SCORE, ss . str( )); 00204 ss . str (NULL_STRING); 00205 00206 if ( isFlagA( ) || isFlagB( ) || isFlagC( ) ) 00207 { 00208 ss << isFlagA( ) << isFlagB( ) << isFlagC( ); 00209 msg . setField (F_FLAG, ss . str( )); 00210 ss . str (NULL_STRING); 00211 } 00212 } 00213 catch (ArgumentException_t) { 00214 00215 msg . clear( ); 00216 throw; 00217 } 00218 } 00219 00220 00221 //----------------------------------------------------- writeRecord ------------ 00222 void Overlap_t::writeRecord (ostream & fix, ostream & var) const 00223 { 00224 Universal_t::writeRecord (fix, var); 00225 00226 writeLE (fix, &aHang_m); 00227 writeLE (fix, &bHang_m); 00228 writeLE (fix, &(reads_m . first)); 00229 writeLE (fix, &(reads_m . second)); 00230 writeLE (fix, &score_m); 00231 }

Generated on Tue May 17 15:19:02 2005 for libAMOS by doxygen 1.3.8