BALL  1.4.1
nucleotide.h
Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 
00005 #ifndef BALL_KERNEL_NUCLEOTIDE_H
00006 #define BALL_KERNEL_NUCLEOTIDE_H
00007 
00008 #ifndef BALL_KERNEL_FRAGMENT_H
00009 # include <BALL/KERNEL/fragment.h>
00010 #endif
00011 
00012 #ifndef BALL_KERNEL_RESIDUE_H
00013 # include <BALL/KERNEL/residue.h>
00014 #endif
00015 
00016 #ifndef BALL_KERNEL_NUCLEOTIDEITERATOR_H
00017 # include <BALL/KERNEL/nucleotideIterator.h>
00018 #endif
00019 
00020  
00021 #define BALL_NUCLEOTIDE_DEFAULT_ID               ""
00022 #define BALL_NUCLEOTIDE_DEFAULT_INSERTION_CODE   ' '
00023 
00024 namespace BALL 
00025 {
00026   class NucleicAcid;
00027 
00035   class BALL_EXPORT Nucleotide
00036     : public Fragment
00037   {
00038     public:
00039 
00040     BALL_CREATE_DEEP(Nucleotide)
00041   
00042     
00045 
00047     enum Property
00048     {
00050       PROPERTY__5_PRIME = Residue::NUMBER_OF_PROPERTIES + 1,
00052       PROPERTY__3_PRIME,
00054       PROPERTY__NUCLEOTIDE,
00055 
00057       NUMBER_OF_PROPERTIES
00058     };
00059 
00061 
00064   
00066     Nucleotide();
00067   
00069     Nucleotide(const Nucleotide& nucleotide, bool deep = true);
00070   
00072     Nucleotide
00073       (const String& name,
00074        const String& id = BALL_NUCLEOTIDE_DEFAULT_ID,
00075        char insertion_code = BALL_NUCLEOTIDE_DEFAULT_INSERTION_CODE);
00076 
00078     virtual ~Nucleotide();
00079 
00081     virtual void clear();
00082   
00084     virtual void destroy();
00085   
00087 
00090 
00094     void persistentWrite(PersistenceManager& pm, const char* name = 0) const;
00095 
00099     void persistentRead(PersistenceManager& pm);
00100 
00102 
00105 
00111     void set(const Nucleotide& nucleotide, bool deep = true);
00112 
00119     Nucleotide& operator = (const Nucleotide& nucleotide);
00120 
00126     void get(Nucleotide& nucleotide, bool deep = true) const;
00127 
00131     void swap(Nucleotide& nucleotide);
00132   
00134 
00139     bool operator == (const Nucleotide& nucleotide) const;
00140 
00144     bool operator != (const Nucleotide& nucleotide) const;
00145 
00148 
00153     NucleicAcid* getNucleicAcid();
00154     
00159     const NucleicAcid* getNucleicAcid() const;
00160 
00164     void setID(const String& id);
00165 
00169     const String& getID() const;
00170 
00174     void setInsertionCode(char insertion_code);
00175 
00179     char getInsertionCode() const;
00180 
00184     void prepend(Atom& atom);
00185 
00189     void append(Atom& atom);
00190 
00194     void insert(Atom& atom);
00195 
00200     void insertBefore(Atom& atom, Composite& before);
00201 
00206     void insertAfter(Atom& atom, Composite& after);
00207 
00211     bool remove(Atom& atom);
00212 
00216     void spliceBefore(Nucleotide& nucleotide);
00217 
00221     void spliceAfter(Nucleotide& nucleotide);
00222 
00226     void splice(Nucleotide& nucleotide);
00227 
00229 
00232 
00238     bool isTerminal() const;
00239   
00244     bool is3Prime() const;
00245 
00250     bool is5Prime() const;
00251 
00253 
00256 
00261     virtual bool isValid() const;
00262 
00269     virtual void dump(std::ostream& s = std::cout, Size depth = 0) const;
00270 
00272  
00273     private:
00274 
00275     AtomContainer* getAtomContainer(Position position);
00276   
00277     const AtomContainer* getAtomContainer(Position position) const;
00278   
00279     Size countAtomContainers() const;
00280 
00281     void prepend(AtomContainer& atom_container);
00282 
00283     void append(AtomContainer& atom_container);
00284 
00285     void insert(AtomContainer& atom_container);
00286 
00287     void insertBefore(AtomContainer& atom_container, Composite& composite);
00288 
00289     void insertAfter(AtomContainer& atom_container, Composite& composite);
00290 
00291     void spliceBefore(AtomContainer& atom_container);
00292 
00293     void spliceAfter(AtomContainer& base_ragment);
00294 
00295     void splice(AtomContainer& AtomContainer);
00296 
00297     bool remove(AtomContainer& AtomContainer);
00298 
00299     bool isSuperAtomContainerOf(const AtomContainer& atom_container) const;
00300 
00301     BALL_KERNEL_DEFINE_ITERATOR_CREATORS(AtomContainer)
00302 
00303     // --- ATTRIBUTES
00304 
00305     String  id_;
00306 
00307     char    insertion_code_;
00308   };
00309 
00310 
00311   template <class NucleotideContainerType>
00312   const Nucleotide* get5Prime(const NucleotideContainerType& nucleotide_container)
00313   {
00314     NucleotideConstIterator res_it;
00315     for ( res_it = nucleotide_container.beginNucleotide(); !res_it.isEnd(); ++res_it)
00316     {
00317       return &(*res_it);
00318     }
00319 
00320     return 0;
00321   }
00322 
00323   template <class NucleotideContainerType>
00324   const Nucleotide* get3Prime(const NucleotideContainerType& nucleotide_container)
00325   {
00326     for (NucleotideConstIterator res_it = nucleotide_container.rbeginNucleotide(); !res_it.isREnd(); ++res_it)
00327     {
00328       return &(*res_it);
00329     }
00330 
00331     return 0;
00332   }
00333  
00334 } // namespace BALL
00335 
00336 #endif // BALL_KERNEL_NUCLEOTIDE_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines