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

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 readRecno = 0, TR_DNA startPos = 0, TR_DNA endPos = 0);
00047   virtual ~FeatureData();
00048   virtual void readDom( QDomElement & elem );
00049   virtual void writeDom( QDomElement & elem );
00050   TrDb::IndexMap getIndexMap();
00051   TR_DNA startPos() { return s.startPos; }
00052   TR_DNA endPos() { return s.endPos; }
00053   void setStartPos( TR_DNA startPos ) { s.startPos = startPos; }
00054   void setEndPos( TR_DNA endPos ) { s.endPos = endPos; }
00055   void setReadRecno( db_recno_t readRecno ) {  s.readRecno = readRecno; }
00056   FeatureGui * gui();
00057   FeatureInfo* info();
00058   
00059   static int getSeqRecNo(Db * /* dbp */ , const Dbt *  /* pkey */, const Dbt *pdata, Dbt *skey);
00060   static int bt_compare_seqRecNo(DB * db, const DBT *dbt1, const DBT *dbt2);
00061   virtual void readStream( QDataStream & str );
00062   virtual void writeStream( QDataStream & str );
00063   virtual void readAttributes( const QXmlAttributes& attr );
00064   virtual void writeXml( ostream& stream );
00065   virtual void print_debug_info();
00066 
00067 
00068 protected:
00069   virtual FeatureGui * makeGui() = 0;
00070   virtual FeatureInfo* makeInfo();
00071   /** \brief to keep the order of the data members when serializing/unserializing
00072    *
00073    * This might make the serializing/unserializing a bit faster ( probably not significant at all, not tested ).
00074    *   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 
00075    approach might be that the endian awareness of QDataStream might be lost, when we don't serialize the
00076    types one by one. It might be a problem when moving berkeley dbs around archictures. But berkeley db probably doesn't allow this anyway?*/
00077   
00078   
00079   struct StorageData
00080   {
00081     TR_DNA startPos;
00082     TR_DNA endPos;
00083     db_recno_t readRecno;
00084   };
00085   StorageData s;
00086   FeatureGui * m_gui;
00087   
00088   FeatureInfo* m_info;
00089   
00090 };
00091 
00092 /** \brief A "dnp", i.e. a defined nucleotype position
00093  */
00094 class DnpData : public FeatureData
00095 {
00096 public:
00097   DnpData( ) : FeatureData(), dnpID(-1)
00098   {}
00099   DnpData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos );
00100   void readDom( QDomElement & elem );
00101   std::string uniqueName()  { return std::string("DnpData"); }
00102   TrDb::IndexMap getIndexMap() { return FeatureData::getIndexMap(); }
00103   virtual ~DnpData()
00104   {}
00105   void readStream( QDataStream & str );
00106   void writeStream( QDataStream & str );
00107   void writeDom( QDomElement & elem );
00108   void readAttributes( const QXmlAttributes& attr );
00109   void writeXml( ostream& stream );
00110   void set_dnpID(int id);
00111   int get_dnpID();
00112   void set_dnp_type(int t);
00113   int get_dnp_type();
00114   
00115 protected:
00116   FeatureGui * makeGui() { return new DnpGui( this ); }
00117   FeatureInfo * makeInfo() { return new DnpInfo( this ); }
00118   int dnpID;
00119   int type;
00120 };
00121 
00122 /** \brief The nucleotide sequence for the read, e.g. "atag*ct*cgcg"
00123  */
00124 
00125 
00126 class DnaStrData : public FeatureData
00127 {
00128 public:
00129   DnaStrData( ) : FeatureData()
00130   {}
00131   DnaStrData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos );
00132   std::string uniqueName() { return std::string("DnaStrData"); }
00133   virtual ~DnaStrData();
00134   void readStream( QDataStream & str );
00135   void writeStream( QDataStream & str );
00136   void writeDom( QDomElement & elem );
00137   void readDom( QDomElement & elem );
00138   void readAttributes( const QXmlAttributes& attr );
00139   void writeXml( ostream& stream );
00140   TrapperVector<char> dnaVector;
00141 protected:
00142   FeatureGui * makeGui() { return new DnaStrGui(this); }
00143   FeatureInfo * makeInfo() { return new DnaStrInfo(this); }
00144 };
00145 /** \brief The chromatogram data for the read */
00146 
00147 class ChromatData : public FeatureData
00148 {
00149 public:
00150   ChromatData() : FeatureData(), cagt_vec(4)
00151   {}
00152   ChromatData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos );
00153   std::string uniqueName() { return std::string("ChromatData"); }
00154   virtual ~ChromatData()
00155   {}
00156   void readStream( QDataStream & str );
00157   void writeStream( QDataStream & str );
00158   void writeDom( QDomElement & elem );
00159   void readDom( QDomElement & elem );
00160   void readAttributes( const QXmlAttributes& attr );
00161   void writeXml( ostream& stream );
00162 
00163   std::vector<TrapperVector<Q_UINT32> > cagt_vec;
00164   TrapperVector<Q_UINT32> phd_vec;
00165   TrapperVector<Q_UINT32> gap_vec;
00166   
00167 protected:
00168   FeatureGui * makeGui() { return new ChromatGui(this); }
00169   
00170 };
00171 
00172 /** \brief Quality values of the meassurements/predicted bases
00173  */
00174 
00175 
00176 class QualityData : public FeatureData
00177 {
00178 public:
00179   QualityData() : FeatureData()
00180   {
00181     
00182   }
00183   QualityData( db_recno_t readRecno, TR_DNA startPos, TR_DNA endPos, int );
00184   std::string uniqueName()
00185   {
00186     return std::string("QualityData");
00187   }
00188   virtual ~QualityData()
00189   {}
00190   //     void setQuality( int quality_ ) { m_quality = quality_; }
00191   int quality(int pos) { return qualityVector.stlVector()[pos]; }
00192   void readStream( QDataStream & str );
00193   void writeStream( QDataStream & str );
00194   void writeDom( QDomElement & elem );
00195   void readDom( QDomElement & elem );
00196   void readAttributes( const QXmlAttributes& attr );
00197   void writeXml( ostream& stream );
00198   
00199   TrapperVector<Q_UINT32> qualityVector;
00200   
00201 protected:
00202   FeatureGui * makeGui() { return new QualityGui(this); }
00203   FeatureInfo * makeInfo() { return new QualityInfo(this); }
00204   //     int m_quality;
00205 };
00206 
00207 #endif

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