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

Scaffold_AMOS.cc

Go to the documentation of this file.
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 #include "Scaffold_AMOS.hh" 00011 using namespace AMOS; 00012 using namespace std; 00013 00014 00015 00016 00017 //================================================ Scaffold_t ================== 00018 const NCode_t Scaffold_t::NCODE = M_SCAFFOLD; 00019 00020 00021 //----------------------------------------------------- getSpan ---------------- 00022 Size_t Scaffold_t::getSpan ( ) const 00023 { 00024 Pos_t hi,lo; 00025 00026 if ( contigs_m . empty( ) ) 00027 { 00028 hi = 0; 00029 lo = 0; 00030 } 00031 else 00032 { 00033 hi = -(MAX_POS); 00034 lo = MAX_POS; 00035 } 00036 00037 vector<Tile_t>::const_iterator ti; 00038 for ( ti = contigs_m . begin( ); ti != contigs_m . end( ); ++ ti ) 00039 { 00040 if ( ti -> offset < lo ) 00041 lo = ti -> offset; 00042 if ( ti -> offset + ti -> range . getLength( ) > hi ) 00043 hi = ti -> offset + ti -> range . getLength( ); 00044 } 00045 00046 return hi - lo; 00047 } 00048 00049 00050 //----------------------------------------------------- readMessage ------------ 00051 void Scaffold_t::readMessage (const Message_t & msg) 00052 { 00053 Universal_t::readMessage (msg); 00054 00055 try { 00056 vector<Message_t>::const_iterator i; 00057 00058 if ( msg . exists (F_EDGE) ) 00059 { 00060 ID_t iid; 00061 istringstream ss; 00062 00063 ss . str (msg . getField (F_EDGE)); 00064 00065 while ( ss ) 00066 { 00067 ss >> iid; 00068 if ( ! ss . fail( ) ) 00069 edges_m . push_back (iid); 00070 } 00071 00072 if ( !ss . eof( ) ) 00073 AMOS_THROW_ARGUMENT ("Invalid contig edge link list format"); 00074 ss . clear( ); 00075 } 00076 00077 for ( i = msg . getSubMessages( ) . begin( ); 00078 i != msg . getSubMessages( ) . end( ); i ++ ) 00079 { 00080 if ( i -> getMessageCode( ) == M_TILE ) 00081 { 00082 contigs_m . push_back (Tile_t( )); 00083 contigs_m . back( ) . readMessage (*i); 00084 } 00085 } 00086 } 00087 catch (ArgumentException_t) { 00088 00089 clear( ); 00090 throw; 00091 } 00092 } 00093 00094 00095 //----------------------------------------------------- readRecord ------------- 00096 void Scaffold_t::readRecord (istream & fix, istream & var) 00097 { 00098 Universal_t::readRecord (fix, var); 00099 00100 Size_t csize, esize; 00101 readLE (fix, &csize); 00102 readLE (fix, &esize); 00103 00104 contigs_m . resize (csize); 00105 for ( Pos_t i = 0; i < csize; i ++ ) 00106 contigs_m [i] . readRecord (var); 00107 00108 edges_m . resize (esize); 00109 for ( Pos_t i = 0; i < esize; i ++ ) 00110 readLE (var, &(edges_m [i])); 00111 } 00112 00113 00114 00115 //----------------------------------------------------- writeMessage ----------- 00116 void Scaffold_t::writeMessage (Message_t & msg) const 00117 { 00118 Universal_t::writeMessage (msg); 00119 00120 try { 00121 ostringstream ss; 00122 Pos_t begin = msg . getSubMessages( ) . size( ); 00123 msg . getSubMessages( ) . resize (begin + contigs_m . size( )); 00124 00125 msg . setMessageCode (Scaffold_t::NCODE); 00126 00127 if ( !edges_m . empty( ) ) 00128 { 00129 string s; 00130 vector<ID_t>::const_iterator evi; 00131 00132 for ( evi = edges_m . begin( ); evi != edges_m . end( ); evi ++ ) 00133 { 00134 ss << *evi << endl; 00135 s . append (ss . str( )); 00136 ss . str (NULL_STRING); 00137 } 00138 msg . setField (F_EDGE, s); 00139 } 00140 00141 if ( !contigs_m . empty( ) ) 00142 { 00143 vector<Tile_t>::const_iterator tvi; 00144 for ( tvi = contigs_m . begin( ); tvi != contigs_m . end( ); ++ tvi ) 00145 tvi -> writeMessage (msg . getSubMessages( ) [begin ++]); 00146 } 00147 } 00148 catch (ArgumentException_t) { 00149 00150 msg . clear( ); 00151 throw; 00152 } 00153 } 00154 00155 00156 //----------------------------------------------------- writeRecord ------------ 00157 void Scaffold_t::writeRecord (ostream & fix, ostream & var) const 00158 { 00159 Universal_t::writeRecord (fix, var); 00160 00161 Size_t csize = contigs_m . size( ); 00162 Size_t esize = edges_m . size( ); 00163 writeLE (fix, &csize); 00164 writeLE (fix, &esize); 00165 00166 for ( Pos_t i = 0; i < csize; i ++ ) 00167 contigs_m [i] . writeRecord (var); 00168 00169 for ( Pos_t i = 0; i < esize; i ++ ) 00170 writeLE (var, &(edges_m [i])); 00171 }

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