ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/FAS/src/fasatom.h
Revision: 81
Committed: Thu Aug 15 22:14:31 2002 UTC (21 years, 10 months ago) by tim
Content type: text/plain
File size: 8558 byte(s)
Log Message:
*** empty log message ***

File Contents

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