00001 ///////////////////////////////////////////////////////////////////////////// 00002 // File: gnContigSpec.h 00003 // Purpose: Abstract Contig Spec class 00004 // Description: Defines an interface for contig specs 00005 // Changes: 00006 // Version: libGenome 0.5.1 00007 // Author: Aaron Darling 00008 // Modified by: 00009 // Copyright: (c) Aaron Darling 00010 // Licenses: See COPYING file for details 00011 ///////////////////////////////////////////////////////////////////////////// 00012 #ifndef _gnContigSpec_h_ 00013 #define _gnContigSpec_h_ 00014 00015 #include "gn/gnDefs.h" 00016 00017 #include <vector> 00018 #include <string> 00019 00020 #include "gn/gnBaseSpec.h" 00021 #include "gn/gnBaseFeature.h" 00022 #include "gn/gnDebug.h" 00023 /** 00024 * gnContigSpec is an interface for classes which store contigs, or reads, 00025 * of DNA or protein sequence 00026 */ 00027 class GNDLLEXPORT gnContigSpec : public gnBaseSpec 00028 { 00029 public: 00030 gnContigSpec(){} 00031 /** 00032 * Destructor, frees memory. 00033 */ 00034 virtual ~gnContigSpec(){} 00035 virtual gnContigSpec* Clone() const = 0; 00036 virtual gnContigSpec* CloneRange( const uint32 startI, const uint32 len ) const = 0; 00037 /** 00038 * Get the name of the source associated with this spec. 00039 * @return The source name or an empty string if none exists. 00040 */ 00041 virtual string GetSourceName() const; 00042 /** 00043 * Get the base pair index where this contig starts inside of the sequence data. 00044 * @return The starting base pair. 00045 */ 00046 virtual gnSeqI GetStart() const; 00047 /** 00048 * Get the length of this contig inside of the sequence data. 00049 * @return This contigs length. 00050 */ 00051 virtual gnSeqI GetLength() const; 00052 /** 00053 * Get the length of the source for this spec. 00054 * @return The source length. 00055 */ 00056 virtual gnSeqI GetSourceLength() const = 0; 00057 /** 00058 * Returns this contig's index in its source sequence. 00059 * @return This contig's index in the source sequence. 00060 */ 00061 virtual uint32 GetSourceContigIndex() const; 00062 /** 00063 * Sets the name of the source associated with this contig. 00064 * @param sourceName The new name. 00065 * @return True if successful. 00066 */ 00067 virtual void SetSourceName( const string& sourceName ); 00068 /** 00069 * Sets the starting base pair to read from in the contig's sequence. 00070 * This does not affect the actual sequence data but only where to begin 00071 * using it in this contig. 00072 * @param start The new starting base pair. 00073 * @return True if successful. 00074 */ 00075 virtual void SetStart( const gnSeqI start ); 00076 /** 00077 * Sets the length of reads into this sequence. 00078 * This does not affect the actual sequence data but only how much of it 00079 * is used in this contig. 00080 * @param len The new sequence length. 00081 * @return True if successful. 00082 */ 00083 virtual void SetLength( const gnSeqI len ); 00084 /** 00085 * Sets this contig's index in its source sequence. 00086 * @param contigI This contig's index in the source sequence. 00087 */ 00088 virtual void SetSourceContigIndex( const uint32 contigI ); 00089 /** 00090 * Sets the reverse complement bit for this contig. 00091 * This routine will translate the start index to the reverse base pair. 00092 * @param value True for reverse complement, false otherwise. 00093 * @return True if successful. 00094 */ 00095 virtual void SetReverseComplement( const boolean value ); 00096 00097 virtual void CropStart( gnSeqI cropLen ); 00098 virtual void CropEnd( gnSeqI cropLen ); 00099 00100 virtual boolean SeqRead(const gnSeqI start, gnSeqC* buf, uint32& bufLen, const uint32 contigI ) const; 00101 virtual void Clear(); 00102 protected: 00103 gnSeqI m_start; //start within the genome. 00104 gnSeqI m_length; 00105 uint32 m_SourceContigIndex; 00106 00107 /** 00108 * all derived classes must implement this! 00109 * it simply reads the specified bases into buf, disregarding circularity and reverse complement. 00110 */ 00111 virtual boolean Read(const gnSeqI start, gnSeqC* buf, uint32& bufLen ) const = 0; 00112 00113 private: 00114 00115 }; // class gnContigSpec 00116 00117 00118 inline 00119 string gnContigSpec::GetSourceName() const{ 00120 return m_sourceName; 00121 } 00122 inline 00123 void gnContigSpec::SetSourceName(const string& sourceName){ 00124 m_sourceName = sourceName; 00125 } 00126 00127 inline 00128 gnSeqI gnContigSpec::GetStart() const 00129 { 00130 return m_start; 00131 } 00132 inline 00133 gnSeqI gnContigSpec::GetLength() const 00134 { 00135 return m_length; 00136 } 00137 // SET 00138 inline 00139 void gnContigSpec::SetStart( const gnSeqI start ) 00140 { 00141 m_start = start; 00142 } 00143 inline 00144 void gnContigSpec::SetLength( const gnSeqI len ) 00145 { 00146 m_length = len; 00147 } 00148 inline 00149 uint32 gnContigSpec::GetSourceContigIndex() const{ 00150 return m_SourceContigIndex; 00151 } 00152 inline 00153 void gnContigSpec::SetSourceContigIndex( const uint32 contigI ){ 00154 m_SourceContigIndex = contigI; 00155 } 00156 00157 #endif 00158 // _gnContigSpec_h_