featuredata.h

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 #ifndef FEATUREDATA_H
00016 #define FEATUREDATA_H
00017 
00018 #include <db_cxx.h>
00019 
00020 #include <qcstring.h>
00021 #include <qvaluelist.h>
00022 #include <qdom.h>
00023 #include "generaldata.h"
00024 
00025 #include "trappertypes.h"
00026 #include "trdb.h"
00027 #include "featuregui.h"
00028 #include "trappervector.h"
00029 #include <vector>
00030 #include "featureinfo.h"
00031 #include <iosfwd>
00032 
00033 class QDataStream;
00034 class QString;
00035 
00036 /** \brief Provides a abstract feature object representing a feature, i.e. an attribute to a read. 
00037   * Holds its corresponding read index (recno)  and geometric placement relative to its read.
00038   * 
00039   * The geometrical placement of this feature should be inside the dimensions of its read.
00040   * 
00041   */ 
00042 
00043 class FeatureData : public GeneralData
00044 {
00045 public:
00046   FeatureData( db_recno_t readRec = 0);
00047   virtual ~FeatureData();
00048   virtual TrDb::IndexMap getIndexMap();
00049   void setReadRecno( db_recno_t readRec ) {  readRecno_ = readRec; }
00050   FeatureGui * gui();
00051   FeatureInfo* info();
00052   
00053   static int getSeqRecNo(Db * /* dbp */ , const Dbt *  /* pkey */, const Dbt *pdata, Dbt *skey);
00054   static int bt_compare_seqRecNo(DB * db, const DBT *dbt1, const DBT *dbt2);
00055   virtual void readStream( QDataStream & str );
00056   virtual void writeStream( QDataStream & str );
00057   virtual void readAttributes( const QXmlAttributes& attr );
00058   virtual void writeXml( ostream& stream );
00059   virtual void print_debug_info();
00060   db_recno_t readRecno() { return readRecno_; }
00061 
00062 protected:
00063   virtual FeatureGui * makeGui() = 0;
00064   virtual FeatureInfo* makeInfo() = 0;
00065   /** \brief to keep the order of the data members when serializing/unserializing
00066    *
00067    * This might make the serializing/unserializing a bit faster ( probably not significant at all, not tested ).
00068    *   But the main reason for the existence of this class is that the order is kept right between serializing and unserializing. But a problem with this 
00069    approach might be that the endian awareness of QDataStream might be lost, when we don't serialize the
00070    types one by one. It might be a problem when moving berkeley dbs around archictures. But berkeley db probably doesn't allow this anyway?*/
00071   
00072   
00073   db_recno_t readRecno_;
00074 
00075   FeatureGui * m_gui;
00076   
00077   FeatureInfo* m_info;
00078   
00079 };
00080 
00081 class SpatialFeatureData : public FeatureData
00082 {
00083 public:
00084   SpatialFeatureData( db_recno_t readRec = 0, TR_DNA start = 0, TR_DNA end = 0);
00085   virtual ~SpatialFeatureData();
00086   TR_DNA startPos() { return startPos_; }
00087   TR_DNA endPos() { return endPos_; }
00088   void setStartPos( TR_DNA start ) { startPos_ = start; }
00089   void setEndPos( TR_DNA end ) { endPos_ = end; }
00090   
00091   virtual void readStream( QDataStream & str );
00092   virtual void writeStream( QDataStream & str );
00093   virtual void readAttributes( const QXmlAttributes& attr );
00094   virtual void writeXml( ostream& stream );
00095   virtual void print_debug_info();
00096 
00097 
00098 protected:
00099 //   virtual FeatureGui * makeGui();
00100   virtual FeatureInfo* makeInfo();
00101   
00102   TR_DNA startPos_;
00103   TR_DNA endPos_;
00104 
00105   
00106 };
00107 
00108 
00109 /** \brief A "dnp", i.e. a defined nucleotype position
00110  */
00111 class DnpData : public SpatialFeatureData
00112 {
00113 public:
00114   DnpData( ) : SpatialFeatureData(), dnpID(-1)
00115   {}
00116   DnpData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos );
00117   void readDom( QDomElement & elem );
00118   std::string uniqueName()  { return std::string("DnpData"); }
00119 //   TrDb::IndexMap getIndexMap() { return SpatialFeatureData::getIndexMap(); }
00120   virtual ~DnpData()
00121   {}
00122   void readStream( QDataStream & str );
00123   void writeStream( QDataStream & str );
00124   void writeDom( QDomElement & elem );
00125   void readAttributes( const QXmlAttributes& attr );
00126   void writeXml( ostream& stream );
00127   void set_dnpID(int id);
00128   int get_dnpID();
00129   void set_dnp_type(int t);
00130   int get_dnp_type();
00131   
00132 protected:
00133   FeatureGui * makeGui() { return new DnpGui( this ); }
00134   FeatureInfo * makeInfo() { return new DnpInfo( this ); }
00135   int dnpID;
00136   int type;
00137 };
00138 
00139 /** \brief The nucleotide sequence for the read, e.g. "atag*ct*cgcg"
00140  */
00141 
00142 
00143 class DnaStrData : public SpatialFeatureData
00144 {
00145 public:
00146   DnaStrData( ) : SpatialFeatureData()
00147   {}
00148   DnaStrData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos );
00149   std::string uniqueName() { return std::string("DnaStrData"); }
00150   virtual ~DnaStrData();
00151   void readStream( QDataStream & str );
00152   void writeStream( QDataStream & str );
00153   void writeDom( QDomElement & elem );
00154   void readDom( QDomElement & elem );
00155   void readAttributes( const QXmlAttributes& attr );
00156   void writeXml( ostream& stream );
00157   TrapperVector<char> dnaVector;
00158 protected:
00159   FeatureGui * makeGui() { return new DnaStrGui(this); }
00160   FeatureInfo * makeInfo() { return new DnaStrInfo(this); }
00161 };
00162 /** \brief The chromatogram data for the read */
00163 
00164 class ChromatData : public SpatialFeatureData
00165 {
00166 public:
00167   ChromatData() : SpatialFeatureData(), cagt_vec(4)
00168   {}
00169   ChromatData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos );
00170   std::string uniqueName() { return std::string("ChromatData"); }
00171   virtual ~ChromatData()
00172   {}
00173   void readStream( QDataStream & str );
00174   void writeStream( QDataStream & str );
00175   void writeDom( QDomElement & elem );
00176   void readDom( QDomElement & elem );
00177   void readAttributes( const QXmlAttributes& attr );
00178   void writeXml( ostream& stream );
00179 
00180   std::vector<TrapperVector<Q_UINT32> > cagt_vec;
00181   TrapperVector<Q_UINT32> phd_vec;
00182   TrapperVector<Q_UINT32> gap_vec;
00183   
00184 protected:
00185   FeatureGui * makeGui() { return new ChromatGui(this); }
00186   
00187 };
00188 
00189 /** \brief Quality values of the meassurements/predicted bases
00190  */
00191 
00192 
00193 class QualityData : public SpatialFeatureData
00194 {
00195 public:
00196   QualityData() : SpatialFeatureData()
00197   {
00198     
00199   }
00200   QualityData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos );
00201   std::string uniqueName()
00202   {
00203     return std::string("QualityData");
00204   }
00205   virtual ~QualityData()
00206   {}
00207   //     void setQuality( int quality_ ) { m_quality = quality_; }
00208   int quality(int pos) { return qualityVector.stlVector()[pos]; }
00209   void readStream( QDataStream & str );
00210   void writeStream( QDataStream & str );
00211   void writeDom( QDomElement & elem );
00212   void readDom( QDomElement & elem );
00213   void readAttributes( const QXmlAttributes& attr );
00214   void writeXml( ostream& stream );
00215   
00216   TrapperVector<Q_UINT32> qualityVector;
00217   
00218 protected:
00219   FeatureGui * makeGui() { return new QualityGui(this); }
00220   FeatureInfo * makeInfo() { return new QualityInfo(this); }
00221 };
00222 
00223 
00224 /** \brief General Tag data
00225  */
00226 class TagData : public SpatialFeatureData
00227 {
00228 public:
00229   TagData( ) : SpatialFeatureData()
00230   {}
00231   TagData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos );
00232   void readDom( QDomElement & elem );
00233   virtual std::string uniqueName()  { return std::string("TagData"); }
00234 //   TrDb::IndexMap getIndexMap() { return SpatialFeatureData::getIndexMap(); }
00235   virtual ~TagData()
00236   {}
00237   void readStream( QDataStream & str );
00238   void writeStream( QDataStream & str );
00239   void writeDom( QDomElement & elem );
00240   void readAttributes( const QXmlAttributes& attr );
00241   void writeXml( ostream& stream );
00242   
00243   TrDb::IndexMap getIndexMap();
00244   //Associate functions for secondary indices
00245   static int getInfoAssoc(Db *dbp, const Dbt *pkey, const Dbt *pdata, Dbt *skey);
00246   static int getScoreAssoc(Db *dbp, const Dbt *pkey, const Dbt *pdata, Dbt *skey);
00247   //Compare functions for secondary indices
00248   static int bt_compare_info( DB * db, const DBT *dbt1, const DBT *dbt2);
00249   static int bt_compare_score( DB * db, const DBT *dbt1, const DBT *dbt2);
00250 
00251   void setInfo(const std::string& inf);
00252   std::string getInfo();
00253   void setScore(const double& s);
00254   double getScore();
00255 
00256 protected:
00257   FeatureGui * makeGui() { return new TagGui( this ); }
00258   FeatureInfo * makeInfo() { return new TagInfo( this ); }
00259   
00260   std::string info;
00261   double score;
00262 };
00263 
00264 class ReadMetaData : public FeatureData
00265 {
00266 public:
00267   ReadMetaData( db_recno_t rec = 0) : FeatureData(rec), beginGood_(0), endGood_(0) {}
00268   ReadMetaData( const ReadMetaData& other );
00269   virtual ~ReadMetaData() {}
00270 
00271   virtual void print_debug_info();
00272 
00273   virtual void readStream( QDataStream & str );
00274   virtual void writeStream( QDataStream & str );
00275 
00276   virtual void readAttributes( const QXmlAttributes& attr );
00277   virtual void writeXml( ostream& stream );
00278 
00279   TrDb::IndexMap getIndexMap();
00280   //Associate functions for secondary indices
00281   static int getName(Db *dbp, const Dbt *pkey, const Dbt *pdata, Dbt *skey);
00282   //Compare functions for secondary indices
00283   static int bt_compare_name( DB * db, const DBT *dbt1, const DBT *dbt2);
00284 
00285 //   FeatureInfo* info();
00286   std::string uniqueName() { return std::string("ReadMetaData"); }
00287 
00288   void setName( const std::string& n ) { name_ = n; }
00289   void setMate( const std::string& m ) { mate_ = m; }
00290   void setMateLength( const std::size_t& l ) { matelen_ = l; }
00291   void setStrand( const std::string& m ) { strand_ = m; }
00292   void setBeginGood( TR_DNA index ) { beginGood_ = index; }
00293   void setEndGood( TR_DNA index ) { endGood_ = index; }
00294 
00295   std::string name() { return name_; }
00296   std::string mate() { return mate_; }
00297   std::size_t mateLength() { return matelen_; }
00298   std::string strand() { return strand_; }
00299   TR_DNA beginGood() { return beginGood_; }
00300   TR_DNA endGood() { return endGood_; }
00301 
00302 
00303 
00304 
00305 protected:
00306   virtual FeatureInfo* makeInfo() { return NULL; }
00307   virtual FeatureGui* makeGui() { return NULL; }
00308   
00309   
00310 //   db_recno_t readRecno;
00311   
00312   FeatureInfo* m_info;
00313   std::string name_;
00314   std::string mate_;
00315   std::size_t matelen_;
00316   std::string strand_;
00317   TR_DNA beginGood_;
00318   TR_DNA endGood_;
00319 public:
00320   TrapperVector<double> tc_vec;
00321   
00322 };
00323 
00324 #endif

Generated on Fri Jul 17 20:19:29 2009 for ngsview by  doxygen 1.5.1