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 //----------------------------------------------------- readRecordFix ----------
00115 void Scaffold_t::readRecordFix (istream & fix)
00116 {
00117   Universal_t::readRecordFix (fix);
00118 
00119   Size_t csize, esize;
00120   readLE (fix, &csize);
00121   readLE (fix, &esize);
00122 
00123   contigs_m . clear();
00124   edges_m . clear();
00125 
00126   contigs_m . resize (csize);
00127   edges_m . resize (esize);
00128 }
00129 
00130 
00131 //----------------------------------------------------- writeMessage -----------
00132 void Scaffold_t::writeMessage (Message_t & msg) const
00133 {
00134   Universal_t::writeMessage (msg);
00135 
00136   try {
00137     ostringstream ss;
00138     Pos_t begin = msg . getSubMessages( ) . size( );
00139     msg . getSubMessages( ) . resize (begin + contigs_m . size( ));
00140 
00141     msg . setMessageCode (Scaffold_t::NCODE);
00142 
00143     if ( !edges_m . empty( ) )
00144       {
00145         string s;
00146         vector<ID_t>::const_iterator evi;
00147 
00148         for ( evi = edges_m . begin( ); evi != edges_m . end( ); evi ++ )
00149           {
00150             ss << *evi << endl;
00151             s . append (ss . str( ));
00152             ss . str (NULL_STRING);
00153           }
00154         msg . setField (F_EDGE, s);
00155       }
00156 
00157     if ( !contigs_m . empty( ) )
00158       {
00159         vector<Tile_t>::const_iterator tvi;
00160         for ( tvi = contigs_m . begin( ); tvi != contigs_m . end( ); ++ tvi )
00161           tvi -> writeMessage (msg . getSubMessages( ) [begin ++]);
00162       }
00163   }
00164   catch (ArgumentException_t) {
00165 
00166     msg . clear( );
00167     throw;
00168   }
00169 }
00170 
00171 
00172 //----------------------------------------------------- writeRecord ------------
00173 void Scaffold_t::writeRecord (ostream & fix, ostream & var) const
00174 {
00175   Universal_t::writeRecord (fix, var);
00176 
00177   Size_t csize = contigs_m . size( );
00178   Size_t esize = edges_m . size( );
00179   writeLE (fix, &csize);
00180   writeLE (fix, &esize);
00181 
00182   for ( Pos_t i = 0; i < csize; i ++ )
00183     contigs_m [i] . writeRecord (var);
00184 
00185   for ( Pos_t i = 0; i < esize; i ++ )
00186     writeLE (var, &(edges_m [i]));
00187 }

Generated on Mon Feb 22 17:36:27 2010 for libAMOS by  doxygen 1.4.7