ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/FAS/src/fasatom.h
Revision: 66
Committed: Tue Aug 13 16:02:26 2002 UTC (21 years, 10 months ago) by tim
Content type: text/plain
File size: 7307 byte(s)
Log Message:
flexible atom selection

File Contents

# Content
1 #ifndef FASATOM_H
2 #define FASATOM_H
3 #include <iostream>
4 #include <vector>
5 #include "fasbond.h"
6 using namespace std;
7
8 class TFASModel;
9 class TFASBond;
10 class TFASResidue;
11 class TFASMolecule;
12
13 //ATOM Property Macros
14 #define FAS_NORMAL_ATOM (1<<1)
15 #define FAS_PROTEINBACK_ATOM (1<<2)
16 #define FAS_NUCLEIC_ATOM (1<<3)
17 #define FAS_AROMATIC_ATOM (1<<4)
18 #define FAS_RING_ATOM (1<<5)
19 #define FAS_CSTEREO_ATOM (1<<6)
20 #define FAS_ACSTEREO_ATOM (1<<7)
21 #define FAS_DONOR_ATOM (1<<8)
22 #define FAS_ACCEPTOR_ATOM (1<<8)
23 #define FAS_CHIRAL_ATOM (1<<10)
24
25 namespace TAtomProp
26 {
27 const int apNormal = FAS_NORMAL_ATOM;
28 const int apProtein = FAS_PROTEINBACK_ATOM;
29 const int apNucleic = FAS_NUCLEIC_ATOM;
30 const int ap4Ring = FAS_4RING_ATOM;
31 const int ap3Ring = FAS_3RING_ATOM;
32 const int apAromatic = FAS_AROMATIC_ATOM;
33 const int apRing = FAS_RING_ATOM;
34 const int apCStereo = FAS_CSTEREO_ATOM;
35 const int apACStereo = FAS_ACSTEREO_ATOM;
36 const int apDonor = FAS_DONOR_ATOM;
37 const int apAcceptor = FAS_ACCEPTOR_ATOM;
38 const int apChiral = FAS_CHIRAL_ATOM;
39 };
40
41 class TFASAtom
42 {
43 protected:
44 unsigned int _index;
45 unsigned int _atomicNum;
46 unsigned int _nameIndex;
47 unsigned int _typeIndex;
48 unsigned int _resid;
49 unsigned int _residIndex;
50 unsigned int _resnameIndex;
51 unsigned int _chainIndex;
52 unsigned int _segnameIndex;
53 int _atomProp;
54
55 //actually we can put these properties on an element table, but we may want to change them sometime, who
56 //knows, anyway it is a trade off between space and speed
57 float _mass;
58 float _charge;
59 float _covRadius;
60 float _bondRadius;
61 float _vdwRadius;
62 float _maxBonds;
63 float _pcharge;
64 unsigned int _hyb;
65 unsigned int _impval;
66
67 TFASResidue *_residue;
68 TFASMolecule *_mol;
69 TFASModel * _model;
70 vector<TFASBond *> _bondList;
71 bool _pseudo;
72
73 void SetAtomProp(int atomProp) { _atomProp |= atomProp;}
74 void Clear();
75 public:
76 TFASAtom(int index);
77 ~TFASAtom();
78
79 //methods to set atomic information
80 void SetIndex(unsigned int index) { _index = index;}
81 void SetAtomicNum(unsigned int atomicNum) { _atomicNum = atomicNum;}
82 void SetNameIndex(unsigned int nameIndex) { _nameIndex = nameIndex;}
83 void SetTypeIndex(unsigned int typeIndex) { _typeIndex = typeIndex;}
84 void SetResid(unsigned int resid) { _resid=resid;}
85 void SetResidIndex(unsigned int residIndex) { _residIndex = residIndex;}
86 void SetResnameIndex(unsigned int resnameIndex) { _resnameIndex = resnameIndex;}
87 void SetChainIndex(unsigned int chainIndex) { _chainIndex = chainIndex;}
88 void SetSegnameIndex(unsigned int segnameIndex) { _segnameIndex = segnameIndex;}
89 void SetResidue(TFASResidue *residue) { _residue = residue;}
90 void SetMolecule(TFASMolecule *mol) { _mol = mol;}
91 void SetModel(TFASModel *model) { _model = model;}
92 void SetPseudo(bool pseudo) { _pseudo = pseudo;}
93 void SetMass(float mass) { _mass = mass;}
94 void SetCharge(float charge) { _charge = charge;}
95 void SetPartialCharge(float pcharge) { _pcharge = pcharge;}
96 void SetCovalentRadius(float covRadius) { _covRadius = covRadius;}
97 void SetBondRadius(float bondRadius) { _bondRadius = bondRadius;}
98 void SetVdwRadius(float vdwRadius) { _vdwRadius = vdwRadius;}
99 void SetMaxBonds(float maxBonds) { _maxBonds=maxBonds;}
100 void SetHyb(unsigned int hyb) { _hyb = hyb;}
101 void SetImplicitValence (unsigned int impval) { _impval = impval;}
102
103 //methods to get atomic information
104 unsigned int GetIndex() { return _index;}
105 unsigned int GetAtomicNum() { return _atomicNum;}
106 unsigned int GetNameIndex() { return _nameIndex;}
107 unsigned int GetTypeIndex() { return _typeIndex;}
108 unsigned int GetResid() { return _resid;}
109 unsigned int GetResidIndex() { return _residIndex;}
110 unsigned int GetResnameIndex() { return _resnameIndex;}
111 unsigned int GetChainIndex() { return _chainIndex;}
112 unsigned int GetSegnameIndex() { return _segnameIndex;}
113
114 TFASResidue *GetResidue() { return _residue;}
115 TFASMolecule *GetMolecule() { return _mol;}
116 TFASModel *GetModel() { return _model;}
117 bool IsPseudo() { return _pseudo;}
118
119 float GetMass() { return _mass;}
120 float GetCharge() { return _charge;}
121 float GetPartialCharge() { return _pcharge;}
122 float GetCovalentRadius() { return _covRadius;}
123 float GetBondRadius() { return _bondRadius;}
124 float GetVdwRadius() { return _vdwRadius;}
125 float GetMaxBonds() { return _maxBonds;}
126 unsigned int GetHyb() { return _hyb;}
127 unsigned int GetImplicitValence() { return _impval;}
128 unsigned int GetHvyValence();
129 unsigned int GetValence() {return (unsigned int)_bondList.size();}
130
131 //meothds to manipulate bond
132 void AddBond(TFASBond * bond);
133 void DeleteBond(TFASBond *bond);
134 TFASBond *BeginBond(vector<TFASBond *>::iterator &i);
135 TFASBond *NextBond(vector<TFASBond *>::iterator &i);
136 TFASBond *GetBond(TFASAtom *nbrAtom);
137 //methods to traverse neighbor atoms
138 TFASAtom *BeginNbrAtom(vector<TFASBond *>::iterator &i);
139 TFASAtom *NextNbrAtom(vector<TFASBond *>::iterator &i);
140
141 //
142
143 int GetAtomProp() { return _atomProp;}
144 bool HasAtomProp(int atomProp) { return _atomProp & atomProp;}
145 void SetAromatic() { SetAtomProp(TAtomProp::apAromatic);}
146 void UnSetAromatic() { _atomProp &= ~TAtomProp::apAromatic;}
147
148 void SetClockwiseStereo()
149 {
150 _atomProp &= ~TAtomProp::apACStereo;
151 SetAtomProp(TAtomProp::apCStereo|TAtomProp::apChiral);
152 }
153
154 void SetAntiClockwiseStereo()
155 {
156 _atomProp &= ~TAtomProp::apCStereo;
157 SetAtomProp(TAtomProp::apACStereo|TAtomProp::apChiral);
158 }
159
160 void UnSetStereo()
161 {
162 _atomProp &= ~TAtomProp::apCStereo;
163 _atomProp &= ~TAtomProp::apACStereo;
164 _atomProp &= ~TAtomProp::apChiral;
165 }
166
167 void SetNormal()
168 {
169 _atomProp &= ~TAtomProp::apProtein;
170 _atomProp &= ~TAtomProp::apNucleic;
171 }
172
173 void SetProtein()
174 {
175 _atomProp &= ~TAtomProp::apNormal;
176 _atomProp &= ~TAtomProp::apNucleic;
177
178 }
179
180 void SetNucleic()
181 {
182 _atomProp &= ~TAtomProp::apNormal;
183 _atomProp &= ~TAtomProp::apProtein;
184
185 }
186
187 bool HasResidue() { return(_residue != NULL);}
188 bool IsHydrogen() { return(_atomicNum == 1);}
189 bool IsCarbon() { return(_atomicNum == 6);}
190 bool IsNitrogen() { return(_atomicNum == 7);}
191 bool IsOxygen() { return(_atomicNum == 8);}
192 bool IsSulfur() { return(_atomicNum == 16);}
193 bool IsPhosphorus() { return(_atomicNum == 15);}
194 bool IsConnected(TFASAtom *atom);
195 bool IsOneThree(TFASAtom *atom);
196 bool IsOneFour(TFASAtom *atom);
197 bool IsCarboxylOxygen();
198 bool IsPhosphateOxygen();
199 bool IsSulfateOxygen();
200 bool IsNitroOxygen();
201 bool IsAmideNitrogen();
202 bool IsPolarHydrogen();
203 bool IsNonPolarHydrogen();
204 bool IsInRing();
205 bool IsInRingSize(int ringSize);
206 bool IsAromatic();
207 bool IsAromaticNOxide();
208 bool IsChiral();
209 bool IsAxial();
210 bool IsClockwise() { return HasAtomProp(TAtomProp::apCStereo);}
211 bool IsAntiClockwise() { return HasAtomProp(TAtomProp::apACStereo);}
212 bool HasChiralitySpecified() { return IsClockwise()|IsAntiClockwise(); }
213 bool HasAlphaBetaUnsat(bool includePandS=true);
214 bool HasBondOfOrder(int order);
215 int CountBondsOfOrder(int order);
216 bool HasSingleBond() { return(HasBondOfOrder(1)); }
217 bool HasDoubleBond() { return(HasBondOfOrder(2)); }
218 bool HasAromaticBond() { return(HasBondOfOrder(4)); }
219 };
220 #endif