Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

featuredata.cpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002  *                                                                             *
00003  *   Copyright (C) 2003  Erik Sjolund,  (<html>Erik Sj&ouml;lund</html>)       *
00004  *                       Center for Genomics and Bioinformatics,               *
00005  *                       Karolinska Institutet,                                *
00006  *                       Stockholm,                                            *
00007  *                       Sweden                                                *
00008  *                                                                             *
00009  *  Author: Erik Sjolund                                                       *
00010  *  Email: erik.sjolund@adivo.se                                               *
00011  *                                                                             *
00012  *******************************************************************************
00013  */
00014 
00015 #include "featuredata.h"
00016 #include <qdatastream.h>
00017 #include <qstring.h>
00018 #include <iostream>
00019 
00020 using namespace std;
00021 
00022 class Dbt;
00023 
00024 FeatureData::FeatureData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos) : GeneralData()
00025 {
00026     s.readRecno = readRecno;
00027     s.startPos = startPos;
00028     s.endPos = endPos;
00029     m_gui = NULL;
00030     m_info = NULL;
00031 }
00032 
00033 FeatureData::~FeatureData() 
00034 {
00035   delete m_gui;
00036   delete m_info;
00037 }
00038 
00039 FeatureGui * FeatureData::gui()
00040 {
00041   
00042   if ( !m_gui )
00043     m_gui = makeGui();
00044   
00045   return m_gui;
00046 }
00047 
00048 FeatureInfo * FeatureData::info()
00049 {
00050   
00051   if ( !m_info )
00052     m_info = makeInfo();
00053   
00054   return m_info;
00055 }
00056 
00057 FeatureInfo * FeatureData::makeInfo()
00058 {
00059   
00060   return new FeatureInfo(this);
00061 }
00062 
00063 TrDb::IndexMap FeatureData::getIndexMap()
00064 {
00065     TrDb::IndexMap iMap;
00066     TrDb::Index i = {
00067                         &FeatureData::bt_compare_seqRecNo,
00068                         &FeatureData::getSeqRecNo,
00069                         QString("readRecno"),
00070                         NULL
00071                     };
00072     iMap.insert( make_pair( i.name.ascii(), i ) );//Have to use ascii function since call is otherwise ambigous...
00073     return iMap;
00074 }
00075 
00076 void FeatureData::writeStream( QDataStream & stream )
00077 {
00078     QIODevice * dev = stream.device();
00079     Q_ASSERT( dev );
00080     if ( ! ( IO_WriteOnly & dev->mode() ) )
00081     {
00082         cerr << "data stream should be writeonly" << endl;
00083         exit(1);
00084     }
00085     stream.writeRawBytes( ( char * ) &s, sizeof ( StorageData ) );
00086 }
00087 
00088 void FeatureData::readStream( QDataStream & stream )
00089 {
00090     QIODevice * dev = stream.device();
00091     Q_ASSERT( dev );
00092     stream.readRawBytes( ( char * ) &s, sizeof ( StorageData ) );
00093 }
00094 
00095 void FeatureData::readDom( QDomElement & elem )
00096 {
00097     GeneralData::readDom( elem );
00098     QString startPosStr = elem.attribute("startPos");
00099     long startPosLong = startPosStr.toLong();
00100     // is long the same thing as Q_INT64 ?
00101     s.startPos = startPosLong;
00102     QString endPosStr = elem.attribute("endPos");
00103     ulong endPosLong = endPosStr.toLong();
00104     s.endPos = endPosLong;
00105     QString readRecnoStr = elem.attribute("readRecno");
00106     ulong readRecnoLong = readRecnoStr.toLong();
00107     s.readRecno = static_cast< db_recno_t >( readRecnoLong );
00108 }
00109 
00110 void FeatureData::readAttributes( const QXmlAttributes& attr )
00111 {
00112   
00113   if ( attr.value("startPos") != "" ) {
00114     QString startPosStr = attr.value("startPos");
00115     long startPosLong = startPosStr.toLong();
00116     // is long the same thing as Q_INT64 ?
00117     s.startPos = startPosLong;
00118   }
00119   if ( attr.value("endPos") != "" ) {  
00120     QString endPosStr = attr.value("endPos");
00121     ulong endPosLong = endPosStr.toLong();
00122     s.endPos = endPosLong;
00123   }
00124 }
00125 void FeatureData::writeXml( ostream& stream )
00126 {
00127   stream<<'<'<<uniqueName()<<' '
00128         <<"startPos=\""<<s.startPos<<"\" "
00129         <<"endPos=\""<<s.endPos<<"\"";
00130 }
00131 
00132 void FeatureData::print_debug_info()
00133 {
00134   cerr<<"readRecno: "<<s.readRecno<<endl;
00135 }
00136 
00137 void FeatureData::writeDom( QDomElement & elem )
00138 {
00139     GeneralData::writeDom( elem );
00140     Q_UINT32 readRecno = s.readRecno;
00141     QString startPosStr, endPosStr, readRecnoStr;
00142     startPosStr.setNum( ( Q_INT32 ) s.startPos );
00143     endPosStr.setNum( ( Q_INT32 ) s.endPos );
00144     readRecnoStr.setNum( readRecno );
00145     elem.setAttribute("startPos", startPosStr );
00146     elem.setAttribute("endPos", endPosStr);
00147     elem.setAttribute("readRecno", readRecnoStr);
00148 }
00149 
00150 
00151 
00152 DnpData::DnpData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos )
00153   : FeatureData( readRecno, startPos, endPos ), dnpID(-1), type(-1)
00154 {}
00155 
00156 void DnpData::readStream( QDataStream & stream )
00157 {
00158   FeatureData::readStream( stream );
00159   stream>>dnpID>>type;
00160 }
00161 
00162 void DnpData::writeStream( QDataStream & str )
00163 {
00164     FeatureData::writeStream( str );
00165     str<<dnpID<<type;
00166 }
00167 
00168 void DnpData::writeDom( QDomElement & elem )
00169 {
00170     FeatureData::writeDom( elem );
00171     elem.setAttribute("dnp", "11" );
00172 }
00173 
00174 void DnpData::readDom( QDomElement & elem )
00175 {
00176     FeatureData::readDom( elem );
00177 }
00178 
00179 void DnpData::readAttributes( const QXmlAttributes& attr )
00180 {
00181     FeatureData::readAttributes( attr );
00182     if ( attr.value("dnpID") != "" ) {
00183       dnpID = attr.value("dnpID").toInt();
00184     }
00185     if ( attr.value("type") != "" ) {
00186       type = attr.value("type").toInt();
00187     }
00188     
00189 }
00190 void DnpData::writeXml( ostream& stream )
00191 {
00192   FeatureData::writeXml(stream);
00193   stream<<" dnpID=\""<<dnpID<<"\""
00194         <<" type=\""<<type<<"\"";
00195   stream<<"/>\n";
00196 }
00197 
00198 
00199 void DnpData::set_dnpID(int id)
00200 {
00201   dnpID = id;
00202 }
00203 
00204 int DnpData::get_dnpID()
00205 {
00206   return dnpID;
00207 }
00208 
00209 void DnpData::set_dnp_type(int t)
00210 {
00211   type = t;
00212 }
00213 
00214 int DnpData::get_dnp_type()
00215 {
00216   return type;
00217 }
00218 
00219 void DnaStrData::writeStream( QDataStream & stream )
00220 {
00221     FeatureData::writeStream( stream );
00222     stream << dnaVector;
00223 }
00224 
00225 
00226 DnaStrData::DnaStrData(  db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos )
00227         : FeatureData( readRecno, startPos, endPos )
00228 {}
00229 
00230 void DnaStrData::readStream( QDataStream & stream )
00231 {
00232     FeatureData::readStream( stream );
00233     stream >> dnaVector;
00234 }
00235 
00236 
00237 
00238 void DnaStrData::writeDom( QDomElement & elem )
00239 {
00240     FeatureData::writeDom( elem );
00241     dnaVector.writeDom( elem );
00242 }
00243 
00244 void DnaStrData::readDom( QDomElement & elem )
00245 {
00246     FeatureData::readDom( elem );
00247     dnaVector.readDom( elem );
00248 }
00249 
00250 void DnaStrData::readAttributes(const QXmlAttributes& attr)
00251 {
00252     FeatureData::readAttributes(attr);
00253     dnaVector.readAttributes(attr);
00254 }
00255 
00256 void DnaStrData::writeXml( ostream& stream )
00257 {
00258   FeatureData::writeXml(stream);
00259   stream<<" trappervector=\"";
00260   for( size_t i = 0; i < dnaVector.stlVector().size(); i++ ) {
00261     stream<<dnaVector.stlVector()[i];
00262   }
00263   stream<<"\"/>\n";
00264 }
00265 
00266 
00267 DnaStrData::~DnaStrData()
00268 {
00269 }
00270 
00271 void QualityData::readStream( QDataStream & stream )
00272 {
00273     FeatureData::readStream( stream );
00274     stream >> qualityVector;
00275 }
00276 
00277 void QualityData::writeStream( QDataStream & stream )
00278 {
00279     FeatureData::writeStream( stream );
00280     stream << qualityVector;
00281 }
00282 
00283 void QualityData::writeDom( QDomElement & elem )
00284 {
00285     FeatureData::writeDom( elem );
00286     qualityVector.writeDom( elem );
00287 }
00288 
00289 void QualityData::readDom( QDomElement & elem )
00290 {
00291     FeatureData::readDom( elem );
00292     qualityVector.readDom( elem );
00293 }
00294 
00295 void QualityData::readAttributes(const QXmlAttributes& attr)
00296 {
00297     FeatureData::readAttributes(attr);
00298     qualityVector.readAttributes(attr);
00299 }
00300 
00301 void QualityData::writeXml( ostream& stream )
00302 {
00303   FeatureData::writeXml(stream);
00304   stream<<" trappervector=\"";
00305   for( size_t i = 0; i < qualityVector.stlVector().size(); i++ ) {
00306     stream<<' '<<qualityVector.stlVector()[i];
00307   }
00308   stream<<"\"/>\n";
00309 }
00310 
00311 ChromatData::ChromatData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos ):
00312   FeatureData( readRecno, startPos, endPos ), cagt_vec(4)
00313 {}
00314 
00315 void ChromatData::readStream( QDataStream & str )
00316 {
00317   FeatureData::readStream( str );
00318   for( size_t i = 0; i < 4; i++ ) {
00319     str>>cagt_vec[i];
00320   }
00321   str>>phd_vec;
00322   str>>gap_vec;
00323 }
00324 
00325 void ChromatData::writeStream( QDataStream & str )
00326 {
00327   FeatureData::writeStream( str );
00328   for( size_t i = 0; i < 4; i++ ) {
00329     str<<cagt_vec[i];
00330   }
00331   str<<phd_vec;
00332   str<<gap_vec;
00333 }
00334 
00335 void ChromatData::writeDom( QDomElement & elem )
00336 {
00337     FeatureData::writeDom( elem );
00338     elem.setAttribute("cc", "11" );
00339 }
00340 
00341 void ChromatData::readDom( QDomElement & elem )
00342 {
00343     FeatureData::readDom( elem );
00344     //     tVector.readDom( elem );
00345 }
00346 void ChromatData::readAttributes(const QXmlAttributes& attr)
00347 {
00348     FeatureData::readAttributes(attr);
00349     //Order is c, a, g, t
00350     if ( attr.value("c_vector") != "" ) {
00351       QString str = attr.value("c_vector");
00352       cagt_vec[0].readString(str);
00353 
00354     }
00355     if ( attr.value("a_vector") != "" ) {
00356       QString str = attr.value("a_vector");
00357       cagt_vec[1].readString(str);
00358 
00359     }
00360     if ( attr.value("g_vector") != "" ) {
00361       QString str = attr.value("g_vector");
00362       cagt_vec[2].readString(str);
00363 
00364     }
00365     if ( attr.value("t_vector") != "" ) {
00366       QString str = attr.value("t_vector");
00367       cagt_vec[3].readString(str);
00368 
00369     }
00370     if ( attr.value("phd") != "" ) {
00371       QString str = attr.value("phd");
00372       phd_vec.readString(str);
00373 
00374     }
00375     if ( attr.value("gap") != "" ) {
00376       QString str = attr.value("gap");
00377       gap_vec.readString(str);
00378 
00379     }
00380     
00381 }
00382 void ChromatData::writeXml( ostream& stream )
00383 {
00384   FeatureData::writeXml(stream);
00385   if ( cagt_vec[0].stlVector().size() > 0 ) {
00386     stream<<" c_vector=\"";
00387     for( size_t i = 0; i < cagt_vec[0].stlVector().size(); i++ ) {
00388       stream<<' '<<cagt_vec[0].stlVector()[i];
00389     }
00390     stream<<"\"";
00391   }
00392   if ( cagt_vec[1].stlVector().size() > 0 ) {
00393     stream<<" a_vector=\"";
00394     for( size_t i = 0; i < cagt_vec[1].stlVector().size(); i++ ) {
00395       stream<<' '<<cagt_vec[1].stlVector()[i];
00396     }
00397     stream<<"\"";
00398   }
00399   if ( cagt_vec[2].stlVector().size() > 0 ) {
00400     stream<<" g_vector=\"";
00401     for( size_t i = 0; i < cagt_vec[2].stlVector().size(); i++ ) {
00402       stream<<' '<<cagt_vec[2].stlVector()[i];
00403     }
00404     stream<<"\"";
00405   }
00406   if ( cagt_vec[3].stlVector().size() > 0 ) {
00407     stream<<" t_vector=\"";
00408     for( size_t i = 0; i < cagt_vec[3].stlVector().size(); i++ ) {
00409       stream<<' '<<cagt_vec[3].stlVector()[i];
00410     }
00411     stream<<"\"";
00412   }
00413   if ( phd_vec.stlVector().size() > 0 ) {
00414     stream<<" phd=\"";
00415     for( size_t i = 0; i < phd_vec.stlVector().size(); i++ ) {
00416       stream<<' '<<phd_vec.stlVector()[i];
00417     }
00418     stream<<"\"";
00419   }
00420   if ( gap_vec.stlVector().size() > 0 ) {
00421     stream<<" gap=\"";
00422     for( size_t i = 0; i < gap_vec.stlVector().size(); i++ ) {
00423       stream<<' '<<gap_vec.stlVector()[i];
00424     }
00425     stream<<"\"";
00426   }
00427   
00428   stream<<"/>\n";
00429 }
00430 
00431 QualityData::QualityData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos, int quality_ ):
00432   FeatureData( readRecno, startPos, endPos )//, m_quality( quality_ )
00433 {}
00434 
00435 int FeatureData::bt_compare_seqRecNo( DB * , const DBT *dbt1, const DBT *dbt2)
00436 {
00437     /* order after row and then after end position */
00438     db_recno_t * recno1  = ( db_recno_t *) dbt1->data;
00439     db_recno_t * recno2  = ( db_recno_t *) dbt2->data;
00440     if ( *recno1 > *recno2 )
00441         return 1;
00442     if ( *recno1 < *recno2 )
00443         return -1;
00444     if ( *recno1 == *recno2 )
00445         return 0;
00446     /* should never reach this point */
00447     return 0;
00448 }
00449 
00450 int FeatureData::getSeqRecNo( Db * /* dbp */ , const Dbt *  /* pkey */, const Dbt *pdata, Dbt *skey)
00451 {
00452     memset(skey, 0, sizeof(Dbt));
00453     StorageData * data = ( StorageData * ) pdata->get_data();
00454     skey->set_data( ( u_int8_t * ) (& (data->readRecno)) );
00455     skey->set_size(sizeof( db_recno_t ));
00456     return(0);
00457 }

Generated on Fri Mar 17 17:44:24 2006 for trapper by  doxygen 1.4.4