00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef OB_RESIDUE_H
00026 #define OB_RESIDUE_H
00027
00028 #include <openbabel/babelconfig.h>
00029
00030 #ifndef EXTERN
00031 # define EXTERN extern
00032 #endif
00033
00034 #include <vector>
00035 #include <string>
00036
00037 #include <openbabel/base.h>
00038
00039 namespace OpenBabel {
00040
00041 class OBAtom;
00043 typedef std::vector<OBAtom*>::iterator OBAtomIterator;
00044 class OBBond;
00046 typedef std::vector<OBBond*>::iterator OBBondIterator;
00047
00048
00049
00050 class OBAPI OBResidue : public OBBase
00051 {
00052 public:
00053
00055 OBResidue(void);
00057 OBResidue(const OBResidue &);
00059 virtual ~OBResidue(void);
00060
00061 OBResidue &operator=(const OBResidue &);
00062
00064 void AddAtom(OBAtom *atom);
00066 void InsertAtom(OBAtom *atom);
00068 void RemoveAtom(OBAtom *atom);
00073 bool Clear();
00074
00079 void SetName(const std::string &resname);
00081 void SetNum(const unsigned int resnum);
00082 void SetNum(const std::string resnum);
00084 void SetChain(const char chain);
00086 void SetChainNum(const unsigned int chainnum);
00089 void SetIdx(const unsigned int idx);
00090
00093 void SetAtomID(OBAtom *atom, const std::string &id);
00094 void SetHetAtom(OBAtom *atom, bool hetatm);
00096 void SetSerialNum(OBAtom *atom, unsigned int sernum);
00097
00099 std::string GetName(void) const;
00101 unsigned int GetNum(void);
00102 std::string GetNumString(void);
00104 unsigned int GetNumAtoms() const;
00106 char GetChain(void) const;
00108 unsigned int GetChainNum(void) const;
00110 unsigned int GetIdx(void) const;
00112 unsigned int GetResKey(void) const;
00113
00115 std::vector<OBAtom*> GetAtoms(void) const;
00118 std::vector<OBBond*> GetBonds(bool exterior= true)const;
00119
00122 std::string GetAtomID(OBAtom *atom) const;
00124 unsigned GetSerialNum(OBAtom *atom) const;
00125
00128 bool GetAminoAcidProperty(int) const;
00131 bool GetAtomProperty(OBAtom *a, int) const;
00134 bool GetResidueProperty(int) const;
00135
00137 bool IsHetAtom(OBAtom *atom) const;
00140 bool IsResidueType(int) const;
00141
00143
00144
00145 OBAtomIterator BeginAtoms() { return _atoms.begin(); }
00147 OBAtomIterator EndAtoms() { return _atoms.end(); }
00150 OBAtom *BeginAtom(std::vector<OBAtom*>::iterator &i);
00153 OBAtom *NextAtom(std::vector<OBAtom*>::iterator &i);
00155
00156 protected:
00157
00158 unsigned int _idx;
00159 char _chain;
00160 unsigned int _aakey;
00161 unsigned int _reskey;
00162 std::string _resnum;
00163 std::string _resname;
00164
00165 std::vector<bool> _hetatm;
00166 std::vector<std::string> _atomid;
00167 std::vector<OBAtom*> _atoms;
00168 std::vector<unsigned int> _sernum;
00169
00170
00171 };
00172
00174 typedef std::vector<OBResidue*>::iterator OBResidueIterator;
00175
00177
00179
00180 #define MAXSETNO 40
00181 #define MAXELEM 1024
00182 #define MINELEM 29
00183 #define MAXRES 100
00184 #define MINRES 54
00185
00187
00189
00190 #define AA_ALA (1<<1)
00191 #define AA_GLY (1<<2)
00192 #define AA_LEU (1<<3)
00193 #define AA_SER (1<<4)
00194 #define AA_VAL (1<<5)
00195 #define AA_THR (1<<6)
00196 #define AA_LYS (1<<7)
00197 #define AA_ASP (1<<8)
00198 #define AA_ILE (1<<9)
00199 #define AA_ASN (1<<10)
00200 #define AA_GLU (1<<11)
00201 #define AA_PRO (1<<12)
00202 #define AA_ARG (1<<13)
00203 #define AA_PHE (1<<14)
00204 #define AA_GLN (1<<15)
00205 #define AA_TYR (1<<16)
00206 #define AA_HIS (1<<17)
00207 #define AA_CYS (1<<18)
00208 #define AA_MET (1<<19)
00209 #define AA_TRP (1<<20)
00210
00212
00214 #define IS_ACIDIC(x) ((x) & ((AA_ASP)|(AA_GLU)))
00215 #define IS_ACYCLIC(x) ((x) & ((AA_ALA)|(AA_GLY)|(AA_LEU)|(AA_SER)| \
00216 (AA_VAL)|(AA_THR)|(AA_LYS)|(AA_ASP)| \
00217 (AA_ILE)|(AA_ASN)|(AA_GLU)|(AA_GLN)| \
00218 (AA_CYS)|(AA_MET)))
00219 #define IS_ALIPHATIC(x) ((x) & ((AA_ALA)|(AA_GLY)|(AA_ILE)|(AA_LEU)| \
00220 (AA_VAL)))
00221 #define IS_AROMATIC(x) ((x) & ((AA_HIS)|(AA_PHE)|(AA_TRP)|(AA_TYR)))
00222 #define IS_BASIC(x) ((x) & ((AA_ARG)|(AA_HIS)|(AA_LYS)))
00223 #define IS_BURIED(x) ((x) & ((AA_ALA)|(AA_CYS)|(AA_ILE)|(AA_LEU)| \
00224 (AA_MET)|(AA_PHE)|(AA_TRP)|(AA_VAL)))
00225 #define IS_CHARGED(x) ((x) & ((AA_ASP)|(AA_GLU)|(AA_ARG)|(AA_HIS)| \
00226 (AA_LYS)))
00227 #define IS_CYCLIC(x) ((x) & ((AA_HIS)|(AA_PHE)|(AA_PRO)|(AA_TRP)| \
00228 (AA_TYR)))
00229 #define IS_HYDROPHOBIC(x) ((x) & ((AA_ALA)|(AA_LEU)|(AA_VAL)|(AA_ILE)| \
00230 (AA_PRO)|(AA_PHE)|(AA_MET)|(AA_TRP)))
00231 #define IS_LARGE(x) ((x) & ((AA_ARG)|(AA_PHE)|(AA_GLN)|(AA_TYR)| \
00232 (AA_HIS)|(AA_LEU)|(AA_LYS)|(AA_ILE)| \
00233 (AA_GLU)|(AA_MET)|(AA_TRP)))
00234 #define IS_MEDIUM(x) ((x) & ((AA_VAL)|(AA_THR)|(AA_ASP)|(AA_ASN)| \
00235 (AA_PRO)|(AA_CYS)))
00236 #define IS_NEGATIVE(x) ((x) & ((AA_ASP)|(AA_GLU)))
00237 #define IS_NEUTRAL(x) ((x) & ((AA_ALA)|(AA_GLY)|(AA_LEU)|(AA_SER)| \
00238 (AA_VAL)|(AA_THR)|(AA_PHE)|(AA_GLN)| \
00239 (AA_TYR)|(AA_HIS)|(AA_CYS)|(AA_MET)| \
00240 (AA_TRP)|(AA_ILE)|(AA_ASN)|(AA_PRO)))
00241 #define IS_POLAR(x) ((x) & ((AA_ASP)|(AA_ILE)|(AA_ASN)|(AA_GLU)| \
00242 (AA_SER)|(AA_THR)|(AA_ARG)|(AA_GLN)| \
00243 (AA_CYS)|(AA_HIS)))
00244 #define IS_POSITIVE(x) ((x) & ((AA_ARG)|(AA_HIS)|(AA_LYS)))
00245 #define IS_SMALL(x) ((x) & ((AA_ALA)|(AA_GLY)|(AA_SER)))
00246 #define IS_SURFACE(x) ((x) & ((AA_THR)|(AA_LYS)|(AA_ASP)|(AA_ILE)| \
00247 (AA_ASN)|(AA_GLU)|(AA_PRO)|(AA_ARG)| \
00248 (AA_GLY)|(AA_SER)|(AA_GLN)|(AA_TYR)| \
00249 (AA_HIS)))
00250
00252 namespace OBAminoAcidProperty
00253 {
00254 enum
00255 {
00256 ACIDIC = 0,
00257 ACYCLIC = 1,
00258 ALIPHATIC = 2,
00259 AROMATIC = 3,
00260 BASIC = 4,
00261 BURIED = 5,
00262 CHARGED = 6,
00263 CYCLIC = 7,
00264 HYDROPHOBIC = 8,
00265 LARGE = 9,
00266 MEDIUM = 10,
00267 NEGATIVE = 11,
00268 NEUTRAL = 12,
00269 POLAR = 13,
00270 POSITIVE = 14,
00271 SMALL = 15,
00272 SURFACE = 16
00273 };
00274 }
00275
00277 namespace OBResidueAtomProperty
00278 {
00279 enum
00280 {
00281 ALPHA_CARBON = 0,
00282 AMINO_BACKBONE = 1,
00283 BACKBONE = 2,
00284 CYSTEINE_SULPHUR = 3,
00285 LIGAND = 4,
00286 NUCLEIC_BACKBONE = 5,
00287 SHAPELY_BACKBONE = 6,
00288 SHAPELY_SPECIAL = 7,
00289 SIDECHAIN = 8,
00290 SUGAR_PHOSPHATE = 9
00291 };
00292 }
00293
00295
00296
00297
00298 namespace OBResidueIndex
00299 {
00300 enum
00301 {
00302 ALA = 0,
00303 GLY = 1,
00304 LEU = 2,
00305 SER = 3,
00306 VAL = 4,
00307 #ifndef SWIGPERL
00308 THR = 5,
00309 #endif
00310 LYS = 6,
00311 ASP = 7,
00312 ILE = 8,
00313 ASN = 9,
00314 GLU = 10,
00315 PRO = 11,
00316 ARG = 12,
00317 PHE = 13,
00318 GLN = 14,
00319 TYR = 15,
00320 HIS = 16,
00321 CYS = 17,
00322 MET = 18,
00323 TRP = 19,
00324 ASX = 20,
00325 GLX = 21,
00326 PCA = 22,
00327 HYP = 23,
00328 A = 24,
00329 C = 25,
00330 G = 26,
00331 T = 27,
00332 U = 28,
00333 UPLUS = 29,
00334 I = 30,
00335 _1MA = 32,
00336 _5MC = 32,
00337 OMC = 33,
00338 _1MG = 34,
00339 _2MG = 35,
00340 M2G = 36,
00341 _7MG = 37,
00342 OMG = 38,
00343 YG = 39,
00344 H2U = 40,
00345 _5MU = 41,
00346 PSU = 42,
00347 UNK = 43,
00348 ACE = 44,
00349 FOR = 45,
00350 HOH = 46,
00351 DOD = 47,
00352 SO4 = 48,
00353 PO4 = 49,
00354 NAD = 50,
00355 COA = 51,
00356 NAP = 52,
00357 NDP = 53
00358 };
00359 }
00360
00362 namespace OBResidueProperty
00363 {
00364 enum
00365 {
00366 AMINO = 0,
00367 AMINO_NUCLEO = 1,
00368 COENZYME = 2,
00369 ION = 3,
00370 NUCLEO = 4,
00371 PROTEIN = 5,
00372 PURINE = 6,
00373 PYRIMIDINE = 7,
00374 SOLVENT = 8,
00375 WATER = 9
00376 };
00377 }
00378
00380
00382
00383 EXTERN char Residue[MAXRES][4];
00384 EXTERN char ElemDesc[MAXELEM][4];
00385 EXTERN unsigned int ResNo;
00386 EXTERN unsigned int ElemNo;
00387 }
00388
00389 #endif
00390