Victor
 All Data Structures Functions Variables Friends Pages
Spacer.h
1 /* This file is part of Victor.
2 
3  Victor 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, either version 3 of the License, or
6  (at your option) any later version.
7 
8  Victor is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with Victor. If not, see <http://www.gnu.org/licenses/>.
15  */
16 #ifndef _SPACER_H_
17 #define _SPACER_H_
18 
19 
20 // Includes:
21 #include <Bond.h>
22 #include <Polymer.h>
23 #include <AminoAcid.h>
24 #include <Visitor.h>
25 #include <AminoAcidCode.h>
26 #include <map>
27 #include <set>
28 
29 
30 // Global constants, typedefs, etc. (to avoid):
31 
32 namespace Victor { namespace Biopool {
33 
42  class Spacer : public Polymer {
43  public:
44  //AK11
45  friend class AtomEnergyCalculator;
46  friend class SideChainPlacement;
47 
48  // CONSTRUCTORS/DESTRUCTOR:
49  Spacer();
50  Spacer(const Spacer& orig);
51  virtual ~Spacer();
52 
53  // PREDICATES:
54 
55  int getStartOffset() {
56  return startOffset;
57  }
58 
59  int getAtomStartOffset() {
60  return startAtomOffset;
61  }
62  int getIndexFromPdbNumber(int index); // in: pdb_num, out: array_num
63  int getPdbNumberFromIndex(int index); // in: array_num, out: pdb_num
64 
65  int maxPdbNumber() {
66  return startOffset + gaps.size() + sizeAmino();
67  }
68  bool isGap(int index);
69  void printGaps();
70 
71  unsigned int sizeGaps() {
72  return gaps.size();
73  }
74 
75  virtual string getClassName() const {
76  return "Spacer";
77  }
78  void save(Saver& s); // data saver
79  AminoAcid& getAmino(unsigned int n);
80  const AminoAcid& getAmino(unsigned int n) const;
81  const unsigned int sizeAmino() const;
82 
83  Spacer& getSpacer(unsigned int n);
84  const Spacer& getSpacer(unsigned int n) const;
85  const unsigned int sizeSpacer() const;
86 
87  vector<pair<unsigned int, unsigned int> > getHelixData();
88  vector<pair<unsigned int, unsigned int> > getStrandData();
89 
90  // MODIFIERS:
91 
92 
93 
94  void insertAminoAfter(string code, unsigned int n = 9999, double phi = -62,
95  double psi = -41, double omega = 180,
96  double NToCaLen = 1.458, double CaToCLen = 1.52, double CToOLen = 1.231,
97  double atCaToCAng = 111.6, double CaToOAng = 120.80,
98  double CtoNLen = 1.33, double atCToNAng = 116.4,
99  double OToNAng = 123.2, double atNToCaAng = 121.9);
100 
101 
102  void insertAminoAfterWithGaps(string code, unsigned int n = 9999, double phi = -62,
103  double psi = -41, double omega = 180,
104  int beginHole = 0, int endHole = 0,
105  vgVector3 <double> ca1 = vgVector3<double>(), vgVector3 <double> ca2 = vgVector3<double>(),
106  string target = "", Spacer* refSpacer = 0, Spacer* pOriginalSpacer = 0,
107  double NToCaLen = 1.458, double CaToCLen = 1.52, double CToOLen = 1.231,
108  double atCaToCAng = 111.6, double CaToOAng = 120.80,
109  double CtoNLen = 1.33, double atCToNAng = 116.4,
110  double OToNAng = 123.2, double atNToCaAng = 121.9);
111 
112 
113 
114  void insertAminoBefore(string code, unsigned int p = 0, double phi = -62,
115  double psi = -41, double omega = 180,
116  double NToCaLen = 1.458, double CaToCLen = 1.52, double CToOLen = 1.231,
117  double atCaToCAng = 111.6, double CaToOAng = 120.80,
118  double CtoNLen = 1.33, double atCToNAng = 116.4,
119  double OToNAng = 123.2, double atNToCaAng = 121.9);
120  void setStartOffset(int _offset);
121 
126  void setAtomStartOffset(int _offset) {
127  startAtomOffset = _offset;
128  }
129 
130  void addGap(int index);
131  void removeGap(int index);
132  void removeAllGaps();
133 
134  void insertSubSpacerAfter(Spacer* sp, unsigned int pos);
135 
136  void insertFirstSpacer(Spacer* sp);
137 
138 
139  void insertComponent(Component* c);
140  void removeComponent(Component* c);
141  //-------------
142  void removeComponentFromIndex(unsigned int i);
143  //--------------
144  void deleteComponent(Component* c);
145 
146  void mergeSpacer(Spacer* s);
147  Spacer* splitSpacer(unsigned int index, unsigned int count);
148 
149  void copy(const Spacer& orig);
150 
151  void load(Loader& l); // data loader
152 
153  void setTrans(vgVector3<double> t);
154  void addTrans(vgVector3<double> t);
155  void setRot(vgMatrix3<double> r);
156  void addRot(vgMatrix3<double> r);
157  void sync();
158 
159  void setStateFromSecondary(string sec);
161  void setDSSP(bool verbose);
162 
163  vector< set<char> > getDSSP() {
164  return ss;
165  };
166 
167 
168  const Spacer& getInBond(unsigned int n) const;
169  Spacer& getInBond(unsigned int n);
170  const Spacer& getOutBond(unsigned int n) const;
171  Spacer& getOutBond(unsigned int n);
172 
173  void makeFlat();
174  void groupLikeStateCode();
175 
176  virtual const Atom& getOpenInBondRef(unsigned int n = 0) const;
177  virtual Atom& getOpenInBondRef(unsigned int n = 0);
178  virtual const Atom& getOpenOutBondRef(unsigned int n = 0) const;
179  virtual Atom& getOpenOutBondRef(unsigned int n = 0);
180 
181  virtual Component* clone();
182 
183  virtual void acceptCalculator(EnergyVisitor* v);
184  virtual void acceptOptimizer(OptimizationVisitor* v);
185 
186  // OPERATORS:
187  Spacer& operator=(const Spacer& orig);
188 
189  // TESTERS AND DEVELOPERS
190  void printSubSpacerList();
191  void printComponents();
192  vector< pair<int, int> > getHoles();
193 
194  static double BOND_ANGLE_AT_CPRIME_TO_N;
195  static double BOND_LENGTH_CPRIME_TO_N;
196  static double BOND_ANGLE_CA_TO_O;
197  static double BOND_LENGTH_C_TO_O;
198  static double BOND_LENGTH_CALPHA_TO_CPRIME;
199  static double BOND_LENGTH_N_TO_CALPHA;
200  static double BOND_ANGLE_AT_CALPHA_TO_CPRIME;
201  static double BOND_ANGLE_O_TO_N;
202  static double BOND_ANGLE_AT_N_TO_CALPHA;
203 
204  //
205  static bool NMRGetMinimumCADistanceVector(const string &strFileName, vector<double> *pNMR);
206 
207  protected:
208 
209  // HELPERS:
210  void resetBoundaries();
211  void modifySubSpacerList(Spacer*, int);
212  void updateSubSpacerList();
213  void getBackboneHbonds(); // backbone H bonds (for SS)
214 
215  // ATTRIBUTES
216 
217  int startOffset; //number (as reported in the pdb file) of first amminoacid loaded
218  int startAtomOffset; //number of first atom of the first amminoacid
219  vector<int> gaps;
220 
221  pair<unsigned int, unsigned int> getSubSpacerListEntry(unsigned int);
222  pair<unsigned int, unsigned int> getSubSpacerListEntry(unsigned int) const;
223 
224  bool **backboneHbonds;
225  vector<set<char > > ss;
226 
227  private:
228  vector<pair<unsigned int, unsigned int> > subSpacerList;
229  };
230 
231  // ---------------------------------------------------------------------------
232  // Spacer
233  // -----------------x-------------------x-------------------x-----------------
234 
235  // PREDICATES:
236 
241  inline void Spacer::save(Saver& s) {
242  s.saveSpacer(*this);
243  }
244 
249  inline const unsigned int Spacer::sizeSpacer() const {
250  return subSpacerList.size();
251  }
252 
253  // MODIFIERS:
254 
261  setModified();
262  }
263 
268  inline void Spacer::removeComponentFromIndex(unsigned int i) {
270  setModified();
271  }
272 inline void Spacer::deleteComponent(Component* c) {
278  setModified();
279  }
280 
285  inline void Spacer::load(Loader& l) {
286  l.loadSpacer(*this);
287  resetBoundaries();
288  }
289 
294  inline void Spacer::setTrans(vgVector3<double> t) {
295  if (sizeAmino())
296  getAmino(0).setTrans(t);
297  }
298 
303  inline void Spacer::addTrans(vgVector3<double> t) {
304  if (sizeAmino())
305  getAmino(0).addTrans(t);
306  }
307 
312  inline void Spacer::setRot(vgMatrix3<double> r) {
313  if (sizeAmino())
314  getAmino(0).setRot(r);
315  }
316 
321  inline void Spacer::addRot(vgMatrix3<double> r) {
322  if (sizeAmino())
323  getAmino(0).addRot(r);
324  }
325 
331  inline const Spacer& Spacer::getInBond(unsigned int n) const {
332  return dynamic_cast<const Spacer&> (Bond::getInBond(n));
333  }
334 
340  inline Spacer& Spacer::getInBond(unsigned int n) {
341  return dynamic_cast<Spacer&> (Bond::getInBond(n));
342  }
343 
349  inline const Spacer& Spacer::getOutBond(unsigned int n) const {
350  return dynamic_cast<const Spacer&> (Bond::getOutBond(n));
351  }
352 
358  inline Spacer& Spacer::getOutBond(unsigned int n) {
359  return dynamic_cast<Spacer&> (Bond::getOutBond(n));
360  }
361 
367  v->PrepareSpacer(*this);
368  }
369 
375  v->PrepareSpacer(*this);
376  }
377 
378 
379 
380 
381 
382  // OPERATORS:
383 
384 }} //namespace
385 #endif //_SPACER_H_
void setStartOffset(int _offset)
Definition: Spacer.cc:261
void mergeSpacer(Spacer *s)
Definition: Spacer.cc:1039
static bool NMRGetMinimumCADistanceVector(const string &strFileName, vector< double > *pNMR)
Definition: Spacer.cc:1412
vector< pair< int, int > > getHoles()
Definition: Spacer.cc:1385
const unsigned int sizeSpacer() const
Definition: Spacer.h:249
void deleteComponent(Component *c)
Definition: Spacer.h:276
Base class for saving components (Atoms, Groups, etc.).
Definition: Saver.h:39
void removeComponentFromIndex(unsigned int i)
Definition: Spacer.h:268
const Spacer & getOutBond(unsigned int n) const
Definition: Spacer.h:349
void copy(const Spacer &orig)
Definition: Spacer.cc:806
virtual void acceptOptimizer(OptimizationVisitor *v)
Definition: Spacer.h:374
AminoAcid & getAmino(unsigned int n)
Definition: Spacer.cc:962
virtual const SimpleBond & getInBond(unsigned int n) const
Definition: SimpleBond.h:176
vector< pair< unsigned int, unsigned int > > getStrandData()
Definition: Spacer.cc:233
virtual const SimpleBond & getOutBond(unsigned int n) const
Definition: SimpleBond.h:184
int getPdbNumberFromIndex(int index)
Definition: Spacer.cc:104
Spacer * splitSpacer(unsigned int index, unsigned int count)
Definition: Spacer.cc:1077
virtual const Atom & getOpenInBondRef(unsigned int n=0) const
Definition: Spacer.cc:158
void insertSubSpacerAfter(Spacer *sp, unsigned int pos)
Definition: Spacer.cc:1133
virtual ~Spacer()
Definition: Spacer.cc:66
void resetBoundaries()
Definition: Spacer.cc:761
bool isGap(int index)
Definition: Spacer.cc:126
const Spacer & getInBond(unsigned int n) const
Definition: Spacer.h:331
void setAtomStartOffset(int _offset)
Definition: Spacer.h:126
const unsigned int sizeAmino() const
Definition: Spacer.cc:197
Base class for composite structures.
Definition: Component.h:39
void setRot(vgMatrix3< double > r)
Definition: Spacer.h:312
void addTrans(vgVector3< double > t)
Definition: Spacer.h:303
void printSubSpacerList()
Definition: Spacer.cc:1351
void updateSubSpacerList()
Definition: Spacer.cc:1257
Base class for loading components (Atoms, Groups, etc.).
Definition: Loader.h:39
Base class implementing the visitor pattern.
Definition: Visitor.h:38
Spacer & operator=(const Spacer &orig)
Definition: Spacer.cc:849
void groupLikeStateCode()
Definition: Spacer.cc:1223
vector< pair< unsigned int, unsigned int > > getHelixData()
Definition: Spacer.cc:209
Spacer & getSpacer(unsigned int n)
Definition: Spacer.cc:921
void makeFlat()
Definition: Spacer.cc:1211
void removeAllGaps()
Definition: Spacer.cc:296
virtual void removeComponentFromIndex(unsigned int i)
Definition: Polymer.cc:98
void printComponents()
Definition: Spacer.cc:1365
virtual const Atom & getOpenOutBondRef(unsigned int n=0) const
Definition: Spacer.cc:178
void insertComponent(Component *c)
Definition: Spacer.cc:865
void setStateFromSecondary(string sec)
Definition: Spacer.cc:1280
void addRot(vgMatrix3< double > r)
Definition: Spacer.h:321
Implements methods to manage a polymer created by components.
Definition: Polymer.h:33
void insertAminoAfter(string code, unsigned int n=9999, double phi=-62, double psi=-41, double omega=180, double NToCaLen=1.458, double CaToCLen=1.52, double CToOLen=1.231, double atCaToCAng=111.6, double CaToOAng=120.80, double CtoNLen=1.33, double atCToNAng=116.4, double OToNAng=123.2, double atNToCaAng=121.9)
Definition: Spacer.cc:481
void getBackboneHbonds()
Definition: Spacer.cc:1489
void printGaps()
Definition: Spacer.cc:145
void setTrans(vgVector3< double > t)
Definition: Spacer.h:294
Base class Optimizacion Patter.
Definition: Visitor.h:66
void sync()
Definition: Spacer.cc:746
Spacer()
Definition: Spacer.cc:49
void addGap(int index)
Definition: Spacer.cc:274
virtual Component * clone()
Definition: Spacer.cc:836
virtual void acceptCalculator(EnergyVisitor *v)
Definition: Spacer.h:366
void setStateFromTorsionAngles()
Definition: Spacer.cc:1312
virtual void deleteComponent(Component *c)
Definition: Polymer.cc:109
void removeComponent(Component *c)
Definition: Spacer.h:259
virtual void removeComponent(Component *c)
Definition: Polymer.cc:81
int getIndexFromPdbNumber(int index)
Definition: Spacer.cc:78
void removeGap(int index)
Definition: Spacer.cc:306
void save(Saver &s)
Definition: Spacer.h:241
void modifySubSpacerList(Spacer *, int)
Definition: Spacer.cc:897
It mplements a simple amino acid.
Definition: AminoAcid.h:43
void load(Loader &l)
Definition: Spacer.h:285
void insertAminoBefore(string code, unsigned int p=0, double phi=-62, double psi=-41, double omega=180, double NToCaLen=1.458, double CaToCLen=1.52, double CToOLen=1.231, double atCaToCAng=111.6, double CaToOAng=120.80, double CtoNLen=1.33, double atCToNAng=116.4, double OToNAng=123.2, double atNToCaAng=121.9)
Definition: Spacer.cc:625
Implements a "Spacer" for a protein chain. Includes methods to obtain values from the atoms and its p...
Definition: Spacer.h:42
void setDSSP(bool verbose)
Definition: Spacer.cc:1597
pair< unsigned int, unsigned int > getSubSpacerListEntry(unsigned int)
Definition: Spacer.cc:783
void insertAminoAfterWithGaps(string code, unsigned int n=9999, double phi=-62, double psi=-41, double omega=180, int beginHole=0, int endHole=0, vgVector3< double > ca1=vgVector3< double >(), vgVector3< double > ca2=vgVector3< double >(), string target="", Spacer *refSpacer=0, Spacer *pOriginalSpacer=0, double NToCaLen=1.458, double CaToCLen=1.52, double CToOLen=1.231, double atCaToCAng=111.6, double CaToOAng=120.80, double CtoNLen=1.33, double atCToNAng=116.4, double OToNAng=123.2, double atNToCaAng=121.9)
Definition: Spacer.cc:347
void insertFirstSpacer(Spacer *sp)
Definition: Spacer.cc:1112