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

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