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

Read_AMOS.cc

Go to the documentation of this file.
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 #include "Read_AMOS.hh" 00011 using namespace AMOS; 00012 using namespace std; 00013 00014 00015 00016 00017 //================================================ Read_t ====================== 00018 const NCode_t Read_t::NCODE = M_READ; 00019 const ReadType_t Read_t::NULL_READ = 0; 00020 const ReadType_t Read_t::OTHER = 'X'; 00021 const ReadType_t Read_t::END = 'E'; 00022 const ReadType_t Read_t::CONTIG = 'C'; 00023 const ReadType_t Read_t::BAC = 'B'; 00024 const ReadType_t Read_t::WALK = 'W'; 00025 const ReadType_t Read_t::TRANSPOSON = 'T'; 00026 00027 00028 //----------------------------------------------------- clear ------------------ 00029 void Read_t::clear ( ) 00030 { 00031 Sequence_t::clear( ); 00032 clear_m . clear( ); 00033 frag_m = NULL_ID; 00034 qclear_m . clear( ); 00035 type_m = NULL_READ; 00036 vclear_m . clear( ); 00037 bcp_m . clear( ); 00038 pos_m = 0; 00039 } 00040 00041 00042 //----------------------------------------------------- readMessage------------- 00043 void Read_t::readMessage (const Message_t & msg) 00044 { 00045 Sequence_t::readMessage (msg); 00046 00047 try { 00048 int16_t bcp; 00049 istringstream ss; 00050 00051 if ( msg . exists (F_FRAGMENT) ) 00052 { 00053 ss . str (msg . getField (F_FRAGMENT)); 00054 ss >> frag_m; 00055 if ( !ss ) 00056 AMOS_THROW_ARGUMENT ("Invalid fragment link format"); 00057 ss . clear( ); 00058 } 00059 00060 if ( msg . exists (F_TYPE) ) 00061 { 00062 ss . str (msg . getField (F_TYPE)); 00063 setType (ss . get( )); 00064 ss . clear( ); 00065 } 00066 00067 if ( msg . exists (F_CLEAR) ) 00068 { 00069 ss . str (msg . getField (F_CLEAR)); 00070 ss >> clear_m . begin; 00071 ss . ignore( ); 00072 ss >> clear_m . end; 00073 if ( !ss ) 00074 AMOS_THROW_ARGUMENT ("Invalid clear range format"); 00075 ss . clear( ); 00076 } 00077 00078 if ( msg . exists (F_VECTORCLEAR) ) 00079 { 00080 ss . str (msg . getField (F_VECTORCLEAR)); 00081 ss >> vclear_m . begin; 00082 ss . ignore( ); 00083 ss >> vclear_m . end; 00084 if ( !ss ) 00085 AMOS_THROW_ARGUMENT ("Invalid vector clear range format"); 00086 ss . clear( ); 00087 } 00088 00089 if ( msg . exists (F_QUALITYCLEAR) ) 00090 { 00091 ss . str (msg . getField (F_QUALITYCLEAR)); 00092 ss >> qclear_m . begin; 00093 ss . ignore( ); 00094 ss >> qclear_m . end; 00095 if ( !ss ) 00096 AMOS_THROW_ARGUMENT ("Invalid quality clear range format"); 00097 ss . clear( ); 00098 } 00099 00100 if ( msg . exists (F_BASEPOSITION) ) 00101 { 00102 ss . str (msg . getField (F_BASEPOSITION)); 00103 00104 while ( ss ) 00105 { 00106 ss >> bcp; 00107 if ( ! ss . fail( ) ) 00108 bcp_m . push_back (bcp); 00109 } 00110 00111 if ( !ss . eof( ) ) 00112 AMOS_THROW_ARGUMENT ("Invalid base call position format"); 00113 ss . clear( ); 00114 } 00115 00116 if ( msg . exists (F_POSITION) ) 00117 { 00118 ss . str (msg . getField (F_POSITION)); 00119 ss >> pos_m; 00120 if ( !ss ) 00121 AMOS_THROW_ARGUMENT ("Invalid fragment position format"); 00122 ss . clear( ); 00123 } 00124 } 00125 catch (ArgumentException_t) { 00126 00127 clear( ); 00128 throw; 00129 } 00130 } 00131 00132 00133 //----------------------------------------------------- readRecord ------------- 00134 void Read_t::readRecord (istream & fix, istream & var) 00135 { 00136 Size_t size; 00137 Sequence_t::readRecord (fix, var); 00138 00139 readLE (fix, &(clear_m . begin)); 00140 readLE (fix, &(clear_m . end)); 00141 readLE (fix, &frag_m); 00142 readLE (fix, &(qclear_m . begin)); 00143 readLE (fix, &(qclear_m . end)); 00144 type_m = fix . get( ); 00145 readLE (fix, &(vclear_m . begin)); 00146 readLE (fix, &(vclear_m . end)); 00147 readLE (fix, &pos_m); 00148 readLE (fix, &size); 00149 00150 bcp_m . resize (size); 00151 for ( Pos_t i = 0; i < size; i ++ ) 00152 readLE (var, &(bcp_m [i])); 00153 } 00154 00155 00156 //----------------------------------------------------- setType ---------------- 00157 void Read_t::setType (ReadType_t type) 00158 { 00159 switch (type) 00160 { 00161 case NULL_READ: 00162 case OTHER: 00163 case END: 00164 case CONTIG: 00165 case BAC: 00166 case WALK: 00167 case TRANSPOSON: 00168 type_m = type; 00169 break; 00170 default: 00171 AMOS_THROW_ARGUMENT ((string)"Invalid read type " + type); 00172 } 00173 } 00174 00175 00176 //----------------------------------------------------- writeMessage ----------- 00177 void Read_t::writeMessage (Message_t & msg) const 00178 { 00179 Sequence_t::writeMessage (msg); 00180 00181 try { 00182 vector<int16_t>::const_iterator vi; 00183 ostringstream ss; 00184 00185 msg . setMessageCode (Read_t::NCODE); 00186 00187 if ( frag_m != NULL_ID ) 00188 { 00189 ss << frag_m; 00190 msg . setField (F_FRAGMENT, ss . str( )); 00191 ss . str (NULL_STRING); 00192 } 00193 00194 if ( type_m != NULL_READ ) 00195 { 00196 ss << type_m; 00197 msg . setField (F_TYPE, ss . str( )); 00198 ss . str (NULL_STRING); 00199 } 00200 00201 if ( clear_m . getLength( ) != 0 ) 00202 { 00203 ss << clear_m . begin << ',' << clear_m . end; 00204 msg . setField (F_CLEAR, ss . str( )); 00205 ss . str (NULL_STRING); 00206 } 00207 00208 if ( vclear_m . getLength( ) != 0 ) 00209 { 00210 ss << vclear_m . begin << ',' << vclear_m . end; 00211 msg . setField (F_VECTORCLEAR, ss . str( )); 00212 ss . str (NULL_STRING); 00213 } 00214 00215 if ( qclear_m . getLength( ) != 0 ) 00216 { 00217 ss << qclear_m . begin << ',' << qclear_m . end; 00218 msg . setField (F_QUALITYCLEAR, ss . str( )); 00219 ss . str (NULL_STRING); 00220 } 00221 00222 if ( !bcp_m . empty( ) ) 00223 { 00224 for ( vi = bcp_m . begin( ); vi != bcp_m . end( ); vi ++ ) 00225 ss << *vi << '\n'; 00226 msg . setField (F_BASEPOSITION, ss . str( )); 00227 ss . str (NULL_STRING); 00228 } 00229 00230 if ( pos_m != 0 ) 00231 { 00232 ss << pos_m; 00233 msg . setField (F_POSITION, ss . str( )); 00234 ss . str (NULL_STRING); 00235 } 00236 } 00237 catch (ArgumentException_t) { 00238 00239 msg . clear( ); 00240 throw; 00241 } 00242 } 00243 00244 00245 //----------------------------------------------------- writeRecord ------------ 00246 void Read_t::writeRecord (ostream & fix, ostream & var) const 00247 { 00248 Size_t size = bcp_m . size( ); 00249 Sequence_t::writeRecord (fix, var); 00250 00251 writeLE (fix, &(clear_m . begin)); 00252 writeLE (fix, &(clear_m . end)); 00253 writeLE (fix, &frag_m); 00254 writeLE (fix, &(qclear_m . begin)); 00255 writeLE (fix, &(qclear_m . end)); 00256 fix . put (type_m); 00257 writeLE (fix, &(vclear_m . begin)); 00258 writeLE (fix, &(vclear_m . end)); 00259 writeLE (fix, &pos_m); 00260 writeLE (fix, &size); 00261 00262 for ( Pos_t i = 0; i < size; i ++ ) 00263 writeLE (var, &(bcp_m [i])); 00264 } 00265 00266 00267 //================================================ Helper Functions ============ 00268 //----------------------------------------------------- operator<< ------------- 00269 ostream & AMOS::operator<< (ostream & out, Read_t & read) 00270 { 00271 string s; 00272 00273 out << "#iid:" << read.getIID( ) << endl; 00274 out << "#comment:" << endl; 00275 out << read.getComment( ) << endl; 00276 out << "#clear:" << read.getClearRange( ).begin << "," 00277 << read.getClearRange( ).end << endl; 00278 out << "#sequence:" << endl; 00279 WrapString (out, read.getSeqString( ), 70); 00280 out << "#quality:" << endl; 00281 WrapString (out, read.getQualString( ), 70); 00282 00283 return out; 00284 }

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