00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_CONOP_AMINO_ACIDS_HH
00020 #define OST_CONOP_AMINO_ACIDS_HH
00021
00022
00023
00024 #include <set>
00025 #include <ost/dllexport.hh>
00026 #include <ost/mol/residue_handle.hh>
00027 #include <ost/mol/torsion_handle.hh>
00028
00029 #include <ost/conop/module_config.hh>
00030
00031 namespace ost { namespace conop {
00032
00033
00034
00035 typedef enum {
00036 ALA, ARG, ASN,
00037 ASP, GLN, GLU,
00038 LYS, SER, CYS,
00039 MET, TRP, TYR,
00040 THR, VAL, ILE,
00041 LEU, GLY, PRO,
00042 HIS, PHE, XXX
00043 } AminoAcid;
00044
00048 DLLEXPORT_OST_CONOP AminoAcid ResidueToAminoAcid(const mol::ResidueHandle& r);
00049
00050
00051 DLLEXPORT_OST_CONOP String AminoAcidToResidueName(AminoAcid aa);
00052
00053 DLLEXPORT_OST_CONOP String OneLetterCodeToResidueName(char olc);
00054
00055 DLLEXPORT_OST_CONOP AminoAcid OneLetterCodeToAminoAcid(char olc);
00056
00057 char DLLEXPORT_OST_CONOP ResidueNameToOneLetterCode(String rn);
00058
00059 AminoAcid DLLEXPORT_OST_CONOP ResidueNameToAminoAcid(String rn);
00060
00061 class AminoAcidSetIterator : public std::iterator<std::forward_iterator_tag,
00062 AminoAcid> {
00063 public:
00064 AminoAcidSetIterator(unsigned int bits, int start):
00065 bits_(bits), curr_(start)
00066 {
00067 }
00068 AminoAcidSetIterator& operator++()
00069 {
00070 this->Advance();
00071 return *this;
00072 }
00073
00074 AminoAcid operator*() const
00075 {
00076 return AminoAcid(curr_);
00077 }
00078
00079 bool operator==(const AminoAcidSetIterator& rhs) const
00080 {
00081 return curr_==rhs.curr_;
00082 }
00083 bool operator!=(const AminoAcidSetIterator& rhs) const
00084 {
00085 return !this->operator==(rhs);
00086 }
00087 private:
00088 void Advance()
00089 {
00090 ++curr_;
00091 while (curr_<=XXX && !(bits_ & (1 << curr_))) { ++curr_; }
00092 }
00093 unsigned int bits_;
00094 int curr_;
00095 };
00096
00098 class DLLEXPORT_OST_CONOP AminoAcidSet {
00099 public:
00100 typedef AminoAcidSetIterator Iterator;
00101
00102 static AminoAcidSet CreatePolarSet();
00103
00104 static AminoAcidSet CreateAromaticSet();
00105
00106 static AminoAcidSet CreateApolarSet();
00107
00108 static AminoAcidSet CreateSet(AminoAcid aa);
00109
00110 static std::vector<AminoAcidSet> CreateCompleteSet();
00111
00112 static std::vector<AminoAcidSet> CreateThreeStateSet();
00113
00114 static std::vector<AminoAcidSet> CreatePseudoSet();
00115
00116 AminoAcidSet();
00117
00119 void Add(AminoAcid amino_acid);
00120
00122 void Remove(AminoAcid amino_acid);
00123
00125 bool Contains(AminoAcid amino_acid) const;
00126
00128 bool Empty() const;
00129
00137 Iterator Begin() const;
00138
00140 Iterator End() const;
00141
00142 bool operator==(const AminoAcidSet& rhs) const;
00143
00144 bool operator!=(const AminoAcidSet& rhs) const;
00145
00146 template <typename DS>
00147 void Serialize(DS& ds)
00148 {
00149 ds & bits_;
00150 }
00151 private:
00152 unsigned int bits_;
00153 };
00154
00155 DLLEXPORT_OST_CONOP std::ostream& operator<<(std::ostream& os,
00156 const AminoAcidSet& aa_set);
00157
00158 typedef std::vector<AminoAcidSet> AminoAcidAlphabet;
00159
00160 }}
00161
00162 #endif