Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
GridSearchIteratorCA.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10  //////////////////////////////////////////////
11  /// @begin
12  ///
13  /// @file protocols/scoring/methods/pcs2/GridSearchIteratorCA.cc
14  ///
15  /// @brief
16  ///
17  /// @detailed
18  ///
19  /// @param
20  ///
21  /// @return
22  ///
23  /// @remarks
24  ///
25  /// @references
26  ///
27  /// @authorsv Christophe Schmitz
28  ///
29  /// @last_modified February 2010
30  ////////////////////////////////////////////////
31 
32 
33 // Unit headers
35 
36 // Package headers
37 
38 // Project headers
39 
40 // Utility headers
41 #include <utility/exit.hh>
42 
43 // Numeric headers
44 // AUTO-REMOVED #include <numeric/constants.hh>
45 #include <numeric/xyzVector.hh>
46 #include <core/pose/Pose.hh>
48 
49 // Objexx headers
50 
51 // C++ headers
52 #include <iostream>
53 
54 #include <utility/vector1.hh>
55 
56 
57 namespace protocols{
58 namespace scoring{
59 namespace methods{
60 namespace pcs2{
61 
62 
64 {
65  utility_exit_with_message( "You shouldn't call the empty constructor for GridSearchIteratorCA class" );
66 }
67 
69 }
70 
72 {
73  x_vec_ = other.x_vec_;
74  y_vec_ = other.y_vec_;
75  z_vec_ = other.z_vec_;
76  res_num_cur_ = other.res_num_cur_;
78 }
79 
82  if ( this != &other ) {
83  x_vec_ = other.x_vec_;
84  y_vec_ = other.y_vec_;
85  z_vec_ = other.z_vec_;
86  res_num_cur_ = other.res_num_cur_;
88  }
89  return *this;
90 }
91 
92 void
94  res_num_cur_ = 1;
95 }
96 
97 
98 void
102  core::Size index,
103  core::pose::Pose const & pose){
104 
105  numeric::xyzVector< core::Real > coo1 = pose.residue(index).atom("CA").xyz();
106  numeric::xyzVector< core::Real > coo2 = pose.residue(index).atom("C").xyz();
107 
108  //I can get a divistion by zero if I use only CA
109 
110  x_vec.push_back((coo1.x() + coo2.x())/2.0);
111  y_vec.push_back((coo1.y() + coo2.y())/2.0);
112  z_vec.push_back((coo1.z() + coo2.z())/2.0);
113 
114 }
115 
117 {
118  core::Size i;
119  core::Size n_res(pose.total_residue());
120 
121  res_num_cur_ = 1;
122 
123 
124  if(n_res <= 8){
125  for(i = 1; i <= n_res; i++){
126  set_vec(x_vec_, y_vec_, z_vec_, i, pose);
127  }
128  res_num_total_ = x_vec_.size();
129  return;
130  }
131 
132 
133  set_vec(x_vec_, y_vec_, z_vec_, 1, pose);
134  set_vec(x_vec_, y_vec_, z_vec_, n_res, pose);
135  set_vec(x_vec_, y_vec_, z_vec_, (n_res + 1) / 2, pose);
136  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 1 + 3) / 4, pose);
137  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 3 + 1) / 4, pose);
138  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 1 + 7) / 8, pose);
139  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 7 + 1) / 8, pose);
140  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 3 + 5) / 8, pose);
141  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 5 + 3) / 8, pose);
142 
143  /*
144  if(n_res <= 16){
145  res_num_total_ = x_vec_.size();
146  return;
147  }
148 
149 
150  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 1 + 15) / 16, pose);
151  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 15 + 1) / 16, pose);
152  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 5 + 11) / 16, pose);
153  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 11+ 5) / 16, pose);
154  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 3 + 13) / 16, pose);
155  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 13 + 3) / 16, pose);
156  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 7 + 9) / 16, pose);
157  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 9 + 7) / 16, pose);
158 
159 
160  if(n_res <= 32){
161  res_num_total_ = x_vec_.size();
162  return;
163  }
164 
165 
166  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 1 + 31) / 32, pose);
167  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 31 + 1) / 32, pose);
168  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 9 + 23) / 32, pose);
169  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 23 + 9) / 32, pose);
170  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 13 + 19) / 32, pose);
171  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 19 + 13) / 32, pose);
172  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 5 + 27) / 32, pose);
173  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 27 + 5) / 32, pose);
174  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 15 + 17) / 32, pose);
175  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 17 + 15) / 32, pose);
176  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 7 + 25) / 32, pose);
177  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 25 + 7) / 32, pose);
178  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 11 + 21) / 32, pose);
179  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 21 + 11) / 32, pose);
180  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 3 + 29) / 32, pose);
181  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 3 + 29) / 32, pose);
182 
183 
184  if(n_res <= 64){
185  res_num_total_ = x_vec_.size();
186  return;
187  }
188 
189 
190  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 1 + 63) / 64, pose);
191  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 63 + 1) / 64, pose);
192  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 17 + 47) / 64, pose);
193  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 47 + 17) / 64, pose);
194  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 33 + 31) / 64, pose);
195  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 31 + 33) / 64, pose);
196  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 9 + 55) / 64, pose);
197  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 55 + 9) / 64, pose);
198  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 25 + 39) / 64, pose);
199  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 39 + 25) / 64, pose);
200  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 13 + 51) / 64, pose);
201  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 51 + 13) / 64, pose);
202  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 21 + 43) / 64, pose);
203  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 43 + 21) / 64, pose);
204  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 35 + 29) / 64, pose);
205  set_vec(x_vec_, y_vec_, z_vec_, (n_res * 29 + 35) / 64, pose);
206  */
207 
208 
209  if(n_res <= 128){
210  res_num_total_ = x_vec_.size();
211  return;
212  }
213 
214  res_num_total_ = x_vec_.size();
215  return;
216 
217 }
218 
219 
220 bool
222  core::Real &y,
223  core::Real &z){
225  return false;
226  }
227 
228  x = x_vec_[res_num_cur_];
229  y = y_vec_[res_num_cur_];
230  z = z_vec_[res_num_cur_];
231 
232  res_num_cur_ ++;
233  return true;
234 }
235 
236 } //namespace pcs2
237 } //namespace methods
238 } //namespace scoring
239 } //namespace methods