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

Index_AMOS.cc

Go to the documentation of this file.
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 #include "Index_AMOS.hh" 00011 using namespace AMOS; 00012 using namespace std; 00013 00014 00015 00016 00017 //================================================ Index_t ===================== 00018 const NCode_t Index_t::NCODE = M_INDEX; 00019 00020 00021 //----------------------------------------------------- buildContigFeature ----- 00022 void Index_t::buildContigFeature (const std::string bankname) 00023 { 00024 clear( ); 00025 setType (Contig_t::NCODE, Feature_t::NCODE); 00026 00027 Feature_t fea; 00028 pair<NCode_t, ID_t> src; 00029 BankStream_t fea_bank (Feature_t::NCODE); 00030 00031 fea_bank . open (bankname, B_READ); 00032 00033 while ( fea_bank >> fea ) 00034 { 00035 src = fea . getSource( ); 00036 if ( src . first != NULL_ID && src . second == Contig_t::NCODE ) 00037 insert (src . first, fea . getIID( )); 00038 } 00039 00040 fea_bank . close( ); 00041 } 00042 00043 00044 //----------------------------------------------------- buildContigScaffold ---- 00045 void Index_t::buildContigScaffold (const std::string bankname) 00046 { 00047 clear( ); 00048 setType (Contig_t::NCODE, Scaffold_t::NCODE); 00049 00050 Scaffold_t scf; 00051 vector<Tile_t>::const_iterator cur; 00052 vector<Tile_t>::const_iterator end; 00053 BankStream_t scf_bank (Scaffold_t::NCODE); 00054 00055 scf_bank . open (bankname, B_READ); 00056 00057 while ( scf_bank >> scf ) 00058 { 00059 end = scf . getContigTiling( ) . end( ); 00060 if ( scf . getIID( ) != NULL_ID ) 00061 for ( cur = scf . getContigTiling( ) . begin( ); cur != end; ++ cur ) 00062 if ( cur -> source != NULL_ID ) 00063 insert (cur -> source, scf . getIID( )); 00064 } 00065 00066 scf_bank . close( ); 00067 } 00068 00069 00070 //----------------------------------------------------- buildReadContig -------- 00071 void Index_t::buildReadContig (const std::string bankname) 00072 { 00073 clear( ); 00074 setType (Read_t::NCODE, Contig_t::NCODE); 00075 00076 Contig_t ctg; 00077 vector<Tile_t>::const_iterator cur; 00078 vector<Tile_t>::const_iterator end; 00079 BankStream_t ctg_bank (Contig_t::NCODE); 00080 00081 ctg_bank . open (bankname, B_READ); 00082 00083 while ( ctg_bank >> ctg ) 00084 { 00085 end = ctg . getReadTiling( ) . end( ); 00086 if ( ctg . getIID( ) != NULL_ID ) 00087 for ( cur = ctg . getReadTiling( ) . begin( ); cur != end; ++ cur ) 00088 if ( cur -> source != NULL_ID ) 00089 insert (cur -> source, ctg . getIID( )); 00090 } 00091 00092 ctg_bank . close( ); 00093 } 00094 00095 00096 //----------------------------------------------------- buildReadLibrary ------- 00097 void Index_t::buildReadLibrary (const std::string bankname) 00098 { 00099 clear( ); 00100 setType (Read_t::NCODE, Library_t::NCODE); 00101 00102 Read_t red; 00103 Fragment_t frg; 00104 Bank_t frg_bank (Fragment_t::NCODE); 00105 BankStream_t red_bank (Read_t::NCODE); 00106 00107 frg_bank . open (bankname, B_READ); 00108 red_bank . open (bankname, B_READ); 00109 00110 while ( red_bank >> red ) 00111 { 00112 frg_bank . fetch (red . getFragment( ), frg); 00113 if ( red . getIID( ) != NULL_ID && frg . getLibrary( ) != NULL_ID ) 00114 insert (red . getIID( ), frg . getLibrary( )); 00115 } 00116 00117 frg_bank . close( ); 00118 red_bank . close( ); 00119 } 00120 00121 00122 //----------------------------------------------------- buildReadMate ---------- 00123 void Index_t::buildReadMate (const std::string bankname) 00124 { 00125 clear( ); 00126 setType (Read_t::NCODE, Read_t::NCODE); 00127 00128 Fragment_t frg; 00129 pair<ID_t, ID_t> mtp; 00130 BankStream_t frg_bank (Fragment_t::NCODE); 00131 00132 while ( frg_bank >> frg ) 00133 { 00134 mtp = frg . getMatePair( ); 00135 if ( mtp . first != NULL_ID && mtp . second != NULL_ID ) 00136 { 00137 insert (mtp . first, mtp . second); 00138 insert (mtp . second, mtp . first); 00139 } 00140 } 00141 00142 frg_bank . close( ); 00143 } 00144 00145 00146 //----------------------------------------------------- buildScaffoldFeature --- 00147 void Index_t::buildScaffoldFeature (const std::string bankname) 00148 { 00149 clear( ); 00150 setType (Scaffold_t::NCODE, Feature_t::NCODE); 00151 00152 Feature_t fea; 00153 pair<NCode_t, ID_t> src; 00154 BankStream_t fea_bank (Feature_t::NCODE); 00155 00156 fea_bank . open (bankname, B_READ); 00157 00158 while ( fea_bank >> fea ) 00159 { 00160 src = fea . getSource( ); 00161 if ( src . first != NULL_ID && src . second == Scaffold_t::NCODE ) 00162 insert (src . first, fea . getIID( )); 00163 } 00164 00165 fea_bank . close( ); 00166 } 00167 00168 00169 //----------------------------------------------------- readMessage ------------ 00170 void Index_t::readMessage (const Message_t & msg) 00171 { 00172 Universal_t::readMessage (msg); 00173 00174 try { 00175 Size_t size = -1; 00176 istringstream ss; 00177 00178 if ( msg . exists (F_OBJECT) ) 00179 { 00180 string str = msg . getField (F_OBJECT); 00181 00182 if ( str . length( ) != NCODE_SIZE + NCODE_SIZE + 1 ) 00183 AMOS_THROW_ARGUMENT ("Invalid object type format"); 00184 00185 type_m . first = Encode (str.substr (0, NCODE_SIZE)); 00186 type_m . second = Encode (str.substr (NCODE_SIZE + 1)); 00187 } 00188 00189 if ( msg . exists (F_SIZE) ) 00190 { 00191 ss . str (msg . getField (F_SIZE)); 00192 ss >> size; 00193 if ( !ss ) 00194 AMOS_THROW_ARGUMENT ("Invalid size format"); 00195 index_m . resize (size); 00196 00197 ss . clear( ); 00198 } 00199 00200 if ( msg . exists (F_MAP) ) 00201 { 00202 pair<ID_t, ID_t> iids; 00203 ss . str (msg . getField (F_MAP)); 00204 00205 while ( ss ) 00206 { 00207 ss >> iids . first >> iids . second; 00208 if ( ! ss . fail( ) ) 00209 insert (iids); 00210 } 00211 00212 if ( ! ss . eof( ) ) 00213 AMOS_THROW_ARGUMENT ("Invalid map format"); 00214 00215 if ( size >= 0 && size != getSize( ) ) 00216 AMOS_THROW_ARGUMENT ("map and size fields do not agree"); 00217 00218 ss . clear( ); 00219 } 00220 } 00221 catch (ArgumentException_t) { 00222 00223 clear( ); 00224 throw; 00225 } 00226 } 00227 00228 00229 //----------------------------------------------------- readRecord ------------- 00230 void Index_t::readRecord (istream & fix, istream & var) 00231 { 00232 Universal_t::readRecord (fix, var); 00233 00234 Size_t size; 00235 readLE (fix, &size); 00236 readLE (fix, &(type_m . first)); 00237 readLE (fix, &(type_m . second)); 00238 00239 pair<ID_t, ID_t> iids; 00240 index_m . clear( ); 00241 index_m . resize (size); 00242 for ( Pos_t i = 0; i < size; ++ i ) 00243 { 00244 readLE (var, &(iids . first)); 00245 readLE (var, &(iids . second)); 00246 insert (iids); 00247 } 00248 } 00249 00250 00251 //----------------------------------------------------- writeMessage ----------- 00252 void Index_t::writeMessage (Message_t & msg) const 00253 { 00254 Universal_t::writeMessage (msg); 00255 00256 try { 00257 Size_t size = getSize( ); 00258 ostringstream ss; 00259 00260 msg . setMessageCode (Index_t::NCODE); 00261 00262 if ( type_m . first != NULL_NCODE || type_m . second != NULL_NCODE ) 00263 { 00264 ss << Decode (type_m . first) << ',' << Decode (type_m . second); 00265 msg . setField (F_OBJECT, ss . str( )); 00266 ss . str (NULL_STRING); 00267 } 00268 00269 if ( size != 0 ) 00270 { 00271 ss << size; 00272 msg . setField (F_SIZE, ss . str( )); 00273 ss . str (NULL_STRING); 00274 00275 string str; 00276 for ( const_iterator itr = begin( ); itr != end( ); ++ itr ) 00277 { 00278 ss << itr -> first << '\t' << itr -> second; 00279 str . append (ss . str( )); 00280 str . push_back (NL_CHAR); 00281 ss . str (NULL_STRING); 00282 } 00283 00284 msg . setField (F_MAP, str); 00285 } 00286 } 00287 catch (ArgumentException_t) { 00288 00289 msg . clear( ); 00290 throw; 00291 } 00292 } 00293 00294 00295 //----------------------------------------------------- writeRecord ------------ 00296 void Index_t::writeRecord (ostream & fix, ostream & var) const 00297 { 00298 Universal_t::writeRecord (fix, var); 00299 00300 Size_t size = getSize( ); 00301 writeLE (fix, &size); 00302 writeLE (fix, &(type_m . first)); 00303 writeLE (fix, &(type_m . second)); 00304 00305 for ( const_iterator itr = begin( ); itr != end( ); ++ itr ) 00306 { 00307 writeLE (var, &(itr -> first)); 00308 writeLE (var, &(itr -> second)); 00309 } 00310 }

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