00001 ///////////////////////////////////////////////////////////////////////////// 00002 // File: gnBaseFeature.h 00003 // Purpose: abstract Feature class 00004 // Description: Provides an interface for Features in memory and on disk. 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 _gnBaseFeature_h_ 00013 #define _gnBaseFeature_h_ 00014 00015 #include "gn/gnDefs.h" 00016 #include <string> 00017 #include <vector> 00018 #include "gn/gnClone.h" 00019 #include "gn/gnLocation.h" 00020 #include "gn/gnBaseQualifier.h" 00021 00022 class gnFragmentSpec; 00023 00024 /** 00025 * Features of DNA sequences can be accessed and manipulated using classes 00026 * derived from gnBaseFeature. gnBaseFeature outlines a basic interface 00027 * and gives functionality its derived sequence classes, such as 00028 * gnCDSFeature. 00029 */ 00030 class GNDLLEXPORT gnBaseFeature : public gnClone 00031 { 00032 public: 00033 gnBaseFeature(); 00034 gnBaseFeature( string& name, uint32 id = 0, gnFragmentSpec* spec = NULL, gnLocation::gnLocationType lt = gnLocation::LT_Nothing, boolean broken = false ); 00035 /** 00036 * Destructor, frees memory. 00037 */ 00038 ~gnBaseFeature(); 00039 00040 virtual gnBaseFeature* Clone() const = 0; 00041 /** 00042 * Gets the feature name (e.g. CDS, trna...). 00043 * @return The feature name. 00044 */ 00045 virtual string GetName() const; 00046 /** 00047 * Sets the feature name. 00048 * @param name The feature name. 00049 */ 00050 virtual void SetName( const string& name ); 00051 /** 00052 * Gets this feature's ID. 00053 * @return The feature's ID. 00054 */ 00055 virtual uint32 GetID() const; 00056 /** 00057 * Sets this feature's ID. 00058 * @param id The feature's ID. 00059 */ 00060 virtual void SetID(uint32 id); 00061 /** 00062 * Gets the gnFragmentSpec to which this feature refers. 00063 * @return The feature's ID. 00064 * @see gnFragmentSpec 00065 */ 00066 virtual gnFragmentSpec* GetSpec() const; 00067 /** 00068 * Sets the gnFragmentSpec to which this feature refers. 00069 * @param spec A pointer to the fragment spec. 00070 */ 00071 virtual void SetSpec(gnFragmentSpec* spec); 00072 /** 00073 * Gets this feature's location type. 00074 * @return The feature's location type. 00075 * @see gnLocationType 00076 */ 00077 virtual gnLocation::gnLocationType GetLocationType() const; 00078 /** 00079 * Sets this feature's location type. 00080 * LT_BetweenBases is not a valid feature location type. 00081 * @param lType The feature's location type. 00082 * @see gnLocationType 00083 */ 00084 virtual void SetLocationType( gnLocation::gnLocationType lType ); 00085 /** 00086 * Returns the number of locations this feature describes. 00087 * @return The number of locations this feature describes. 00088 */ 00089 virtual uint32 GetLocationListLength() const; 00090 /** 00091 * Adds a new location before the location at listI. 00092 * @param l The gnLocation to add. 00093 * @param listI The index into the location list to insert before. 00094 * @return True if successful, false otherwise. 00095 * @see gnLocation 00096 */ 00097 virtual boolean AddLocation( const gnLocation& l, uint32 listI = 0); 00098 /** 00099 * Gets the location at listI. 00100 * @param listI The index into the location list to get. 00101 * @return The location. 00102 */ 00103 virtual gnLocation GetLocation( uint32 listI ) const; 00104 /** 00105 * Deletes the location at listI. 00106 * @param listI The index into the location list to delete. 00107 * @return True if successful, false otherwise. 00108 */ 00109 virtual boolean RemoveLocation( uint32 listI ); 00110 /** 00111 * Sets the location at listI to a new location. 00112 * @param l The new location 00113 * @param listI The index into the location list to set. 00114 * @return True if successful, false otherwise. 00115 */ 00116 virtual boolean SetLocation( const gnLocation& l, uint32 listI ); 00117 /** 00118 * Increases this feature's coordinates by a specific number of bases. 00119 * @param i The number of bases to increase by. 00120 * @return True if successful, false if the feature was broken by the change. 00121 */ 00122 virtual boolean MovePositive( const gnSeqI i ); 00123 /** 00124 * Decreases this feature's coordinates by a specific number of bases. 00125 * @param i The number of bases to decrease by. 00126 * @return True if successful, false if the feature was broken by the change. 00127 */ 00128 virtual boolean MoveNegative( const gnSeqI i ); 00129 /** 00130 * Crops the start locations of this feature by the specified amount. 00131 * @param i The amount to crop. 00132 * @return True if successful, false if the feature was broken by the change. 00133 */ 00134 virtual boolean CropStart( const gnSeqI i ); 00135 /** 00136 * Crops the end locations of this feature by the specified amount. 00137 * @param i The amount to crop. 00138 * @return True if successful, false if the feature was broken by the change. 00139 */ 00140 virtual boolean CropEnd( const gnSeqI i ); 00141 /** 00142 * Crops the locations of this feature to fit within the given location. 00143 * @param l The location to crop reduce to. 00144 * @return True if successful, false if the feature was broken by the change. 00145 */ 00146 virtual boolean Crop( const gnLocation& l ); 00147 /** 00148 * Returns true if the feature is broken 00149 * @return True if the feature is broken 00150 */ 00151 virtual boolean IsBroken() const; 00152 /** 00153 * Sets whether the feature is broken or not. 00154 * @param broke True if the feature should be broken, false otherwise 00155 */ 00156 virtual void SetBroken(boolean broke); 00157 00158 /** 00159 * Checks if the given coordinate is contained by this feature 00160 * @param i The coordinate to check 00161 * @return True if "i" is contained by this feature. False otherwise 00162 */ 00163 virtual boolean Contains( gnSeqI i ) const; 00164 /** 00165 * Checks if the given location is contained by this feature 00166 * @param l The location to check 00167 * @return True if "l" is contained by this feature. False otherwise 00168 */ 00169 virtual boolean Contains( const gnLocation& l ) const; 00170 /** 00171 * Checks if the given feature is entirely contained by this feature 00172 * @param feature The feature to check 00173 * @return True if "feature" is contained by this feature. False otherwise 00174 */ 00175 virtual boolean Contains( gnBaseFeature* feature ) const; 00176 /** 00177 * Checks if this feature is entirely contained by the given location 00178 * @param l The location to check 00179 * @return True if "l" contains by this feature. False otherwise 00180 */ 00181 virtual boolean IsContainedBy( const gnLocation& l ) const; 00182 /** 00183 * Checks if the given location intersects this feature 00184 * @param l The location to check 00185 * @return True if "l" intersects this feature. False otherwise 00186 */ 00187 virtual boolean Intersects( const gnLocation& l ) const; 00188 /** 00189 * Checks if the given feature intersects this feature 00190 * @param feature The location to check 00191 * @return True if "feature" intersects this feature. False otherwise 00192 */ 00193 virtual boolean Intersects( gnBaseFeature* feature ) const; 00194 00195 /** 00196 * Returns the number of qualifiers in this feature. 00197 * @return The number of qualifiers in this feature. 00198 */ 00199 virtual uint32 GetQualifierListLength() const; 00200 /** 00201 * Adds a new qualifier. 00202 * @param qualifier The qualifier to add. 00203 * @return True if successful, false otherwise. 00204 */ 00205 virtual boolean AddQualifier( gnBaseQualifier* qualifier ); 00206 /** 00207 * Looks for a qualifier by name. 00208 * @param name The name of the qualifier to look for. 00209 * @return True if a qualifier was found, false otherwise. 00210 */ 00211 virtual boolean HasQualifier( const string& name ) const; 00212 /** 00213 * Searches for a qualifier by name, starting at the index listI. 00214 * @param name The name of the qualifier to look for. 00215 * @param listI The index into the qualifier list to start the search at. 00216 * @return The index of the qualifier. 00217 */ 00218 virtual uint32 FirstIndexOfQualifier( const string& name, uint32 listI ) const; 00219 /** 00220 * Searches for a qualifier by name, ending at the index listI. 00221 * @param name The name of the qualifier to look for. 00222 * @param listI The index into the qualifier list to end the search at. 00223 * @return The index of the qualifier. 00224 */ 00225 virtual uint32 LastIndexOfQualifier( const string& name, uint32 listI ) const; 00226 /** 00227 * Gets the name of the qualifier at the list index listI. 00228 * @param listI The index into the qualifier list. 00229 * @return The name of the qualifier. 00230 */ 00231 virtual string GetQualifierName( uint32 listI ) const; 00232 /** 00233 * Gets the value of the qualifier at the list index listI. 00234 * @param listI The index into the qualifier list. 00235 * @return The value of the qualifier. 00236 */ 00237 virtual string GetQualifierValue( uint32 listI ) const; 00238 /** 00239 * Gets the qualifier at the list index listI. 00240 * @param listI The index into the qualifier list. 00241 * @return The qualifier. 00242 */ 00243 virtual gnBaseQualifier* GetQualifier( uint32 listI ); 00244 /** 00245 * Deletes the qualifier at the list index listI. 00246 * @param listI The index into the qualifier list. 00247 * @return True if successful, false otherwise. 00248 */ 00249 virtual boolean RemoveQualifier( uint32 listI ); 00250 /** 00251 * Set the name and value of the qualifier at the list index listI. 00252 * @param name The new name of the qualifier. 00253 * @param value The new value of the qualifier. 00254 * @param listI The index into the qualifier list. 00255 * @return True if successful, false otherwise. 00256 */ 00257 virtual boolean SetQualifier( string& name, string& value, uint32 listI ); 00258 /** 00259 * Set the name of the qualifier at the list index listI. 00260 * @param name The new name of the qualifier. 00261 * @param listI The index into the qualifier list. 00262 * @return True if successful, false otherwise. 00263 */ 00264 virtual boolean SetQualifierName( string& name, uint32 listI ); 00265 /** 00266 * Set the value of the qualifier at the list index listI. 00267 * @param value The new value of the qualifier. 00268 * @param listI The index into the qualifier list. 00269 * @return True if successful, false otherwise. 00270 */ 00271 virtual boolean SetQualifierValue( string& value, uint32 listI ); 00272 protected: 00273 uint32 m_id; 00274 string m_name; 00275 boolean m_broken; 00276 gnLocation::gnLocationType m_locationType; 00277 vector< gnLocation > m_locationList; 00278 vector< gnBaseQualifier* > m_qualifierList; 00279 gnFragmentSpec* m_spec; 00280 };// class gnBaseFeature 00281 00282 inline 00283 string gnBaseFeature::GetName() const{ 00284 return m_name; 00285 } 00286 inline 00287 void gnBaseFeature::SetName( const string& name ){ 00288 m_name = name; 00289 } 00290 inline 00291 uint32 gnBaseFeature::GetID() const{ 00292 return m_id; 00293 } 00294 inline 00295 void gnBaseFeature::SetID(uint32 id){ 00296 m_id = id; 00297 } 00298 inline 00299 gnFragmentSpec* gnBaseFeature::GetSpec() const{ 00300 return m_spec; 00301 } 00302 inline 00303 void gnBaseFeature::SetSpec(gnFragmentSpec* spec){ 00304 m_spec = spec; 00305 } 00306 inline 00307 boolean gnBaseFeature::IsBroken() const{ 00308 return m_broken; 00309 } 00310 inline 00311 void gnBaseFeature::SetBroken(boolean broke){ 00312 m_broken = broke; 00313 } 00314 00315 inline 00316 gnLocation::gnLocationType gnBaseFeature::GetLocationType() const{ 00317 return m_locationType; 00318 } 00319 inline 00320 void gnBaseFeature::SetLocationType( gnLocation::gnLocationType lType ){ 00321 m_locationType = lType; 00322 } 00323 inline 00324 uint32 gnBaseFeature::GetLocationListLength() const{ 00325 return m_locationList.size(); 00326 } 00327 inline 00328 boolean gnBaseFeature::Crop( const gnLocation& l ){ 00329 return CropStart(l.GetStart()) && CropEnd(l.GetEnd()); 00330 } 00331 inline 00332 uint32 gnBaseFeature::GetQualifierListLength() const{ 00333 return m_qualifierList.size(); 00334 } 00335 00336 #endif 00337 // _gnBaseFeature_h_