Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FlexbbRotamerSets.hh
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 /// @file protocols/flexpack/rotamer_set/FlexbbRotamerSets.hh
11 /// @brief Declaration for a class to hold a set of rotamers for a flexible packing run
12 /// @author Andrew Leaver-Fay (aleaverfay@gmail.com), Florian Richter (floric@u.washington.edu), oct 08
13 
14 #ifndef INCLUDED_protocols_flexpack_rotamer_set_FlexbbRotamerSets_hh
15 #define INCLUDED_protocols_flexpack_rotamer_set_FlexbbRotamerSets_hh
16 
17 /// Unit headers
19 
20 /// Package headers
21 #ifdef WIN32
23 #endif
24 
28 
29 /// Project headers
32 #include <core/graph/Graph.fwd.hh>
35 #include <core/pose/Pose.fwd.hh>
38 #include <core/types.hh>
39 
40 /// Utility headers
41 #include <utility/pointer/ReferenceCount.hh>
42 
44 #include <utility/vector1.hh>
45 
46 
47 
48 namespace protocols {
49 namespace flexpack {
50 namespace rotamer_set {
51 
53 {
54 public:
55  typedef core::Size Size;
61 
62 public:
64 
65  virtual ~FlexbbRotamerSets();
66 
67  void
68  set_frames(
69  Pose const & pose,
71  );
72 
75  Pose const & pose,
76  ScoreFunction const & sfxn,
77  PackerTaskCOP task
78  ) const;
79 
82  Pose const & pose,
83  Size resid
84  ) const;
85 
86  void build_rotamers(
87  Pose const & pose,
88  ScoreFunction const & sfxn,
90  );
91 
92  void
93  dump_pdbs( core::pose::Pose const & pose, std::string const & filename_base ) const;
94 
95  void
97  Pose const & pose,
98  ScoreFunction const & sfxn,
101  ) const;
102 
104  Pose const & pose,
105  ScoreFunction const & sfxn,
108  ) const;
109 
110  /* void compute_one_body_energies_for_precomputed_ig(
111  Pose const & pose,
112  ScoreFunction const & sfxn,
113  core::graph::GraphCOP flexpack_neighbor_graph,
114  interaction_graph::FlexbbInteractionGraph & flexbb_ig
115  ) const; */
116 
118  Pose const & pose,
119  ScoreFunction const & sfxn,
122  ) const;
123 
124  /* void compute_two_body_energies(
125  Pose const & pose,
126  ScoreFunction const & sfxn,
127  core::graph::Graph const & flexpack_neighbor_graph,
128  interaction_graph::PrecomputedFlexbbInteractionGraph & flexbb_ig
129  ) const; */
130 
131  //void prepare_sets_for_packing( Pose const & pose, ScoreFunction const &);
132 
133  /// Virtual functions from base class
134  virtual core::uint nrotamers() const;
136 
137  virtual core::uint nmoltenres() const;
138 
139  virtual core::uint total_residue() const;
140 
141  virtual
142  core::uint
143  moltenres_2_resid( core::uint ) const;
144 
145  virtual
146  core::uint
147  resid_2_moltenres( core::uint ) const;
148 
149  virtual
150  core::uint
152 
153  virtual
154  core::uint
155  res_for_rotamer( core::uint ) const;
156 
157  virtual
159  rotamer( core::uint ) const;
160 
161  virtual
163  rotamer_for_moltenres( core::uint moltenres_id, core::uint rotamerid ) const;
164 
165  virtual
166  core::uint
168 
169  /// @brief convert rotid in full rotamer enumeration into rotamer id on its source residue
170  virtual
171  core::uint
172  rotid_on_moltenresidue( core::uint rotid ) const;
173 
174  /// @brief convert moltenres rotid to id in full rotamer enumeration
175  virtual
176  core::uint
177  moltenres_rotid_2_rotid( core::uint moltenres, core::uint moltenresrotid ) const;
178 
179  Size
180  nmolten_res() const
181  { return nmoltenres_;}
182 
183  //Size
184  //moltenres_2_resid( Size molten_resid ) const
185  //{ return moltenres_2_resid_[ molten_resid ]; }
186 
187  //Size
188  //resid_2_moltenres( Size resid ) const
189  //{ return resid_2_moltenres_[ resid ]; }
190 
191  /// @brief The total number of rotamers across all residues and all backbone conformations
192  //Size
193  //nrotamers() const {
194  // return nrotamers_;
195  //}
196 
197  //Size
198  //nrotamers_for_moltenres( Size molten_resid ) const
199  //{ return nrotamers_for_moltenres_[ molten_resid ]; }
200 
201  Size
202  nrotamers_for_res( Size resid ) const
203  { return nrotamers_for_moltenres_[ resid_2_moltenres_[ resid ] ]; }
204 
205  Size
206  nbbconfs_for_moltenres( core::Size moltenres ) const;
207 
208  Size
209  nbbconfs_for_flexseg( core::Size flex_segment_id ) const
210  { return nbbconfs_for_flexseg_[ flex_segment_id ]; }
211 
212  /// @brief the "total" number of backbone conformations, counting the input conformation
213  /// for all flexible segments (but not counting the input conformation for residues with only a single
214  /// backbone conformation)
215  Size
216  nbackbone_conformations() const;
217 
218  Size
219  nbbconfs_for_res( core::Size resid ) const;
220 
223  return nrots_for_moltenres_bbconf_[ moltenres ];
224  }
225 
226  Size
227  nrotamers_for_moltenres_in_bbconf( Size moltenres, Size bbconf ) const
228  { return nrots_for_moltenres_bbconf_[moltenres][bbconf]; }
229 
230  Size
231  nrotamers_for_resid_in_bbconf( Size resid, Size bbconf ) const
232  { return nrots_for_moltenres_bbconf_[ resid_2_moltenres_[ resid ] ][ bbconf ]; }
233 
234  Size
236  { return nrotoffset_for_moltenres_bbconf_[ moltenres ][ bbconf ] ;}
237 
238  Size
240  { return nrotoffset_for_moltenres_bbconf_[ moltenres ][ bbconf ] - nrotoffset_for_moltenres_[ moltenres ]; }
241 
242  //virtual
243  //uint
244  //nrotamer_offset_for_moltenres( uint moltenresid ) const {
245  // return nrotoffset_for_moltenres_[ moltenresid ];
246  //}
247 
248  /// @brief Input: rotid in global enumeration, Output rotid in local enumeration
249  Size
250  local_rotid_for_rotamer_on_moltenres( Size moltenres, Size rotamer_id ) const
251  { return rotamer_id - nrotoffset_for_moltenres_[ moltenres ] ; }
252 
253 
254  Size
255  local_rotid_for_rotamer( Size rotamer_id ) const
256  { return rotamer_id - nrotoffset_for_moltenres_[ moltenres_for_rotamer_[ rotamer_id ] ]; }
257 
258  Size
260  { return flexsegment_span_.size(); }
261 
262  Size
263  flexsegment_start_moltenresid( Size flex_segment_id ) const
264  { return resid_2_moltenres_[ flexsegment_span_[ flex_segment_id ].first ]; }
265 
266  Size
267  flexsegment_stop_moltenresid( Size flex_segment_id ) const
268  { return resid_2_moltenres_[ flexsegment_span_[ flex_segment_id ].second ]; }
269 
270  Size
271  flexsegment_size( Size flex_segment_id ) const
272  { return flexsegment_span_[ flex_segment_id ].second - flexsegment_span_[ flex_segment_id ].first + 1; }
273 
274  Size
275  flexsegment_start_resid( Size flex_segment_id ) const
276  { return flexsegment_span_[ flex_segment_id ].first; }
277 
278  Size
279  flexsegment_stop_resid( Size flex_segment_id ) const
280  { return flexsegment_span_[ flex_segment_id ].second; }
281 
282  Size
283  flexsegid_for_moltenres( Size molten_resid ) const
284  { return moltenres_2_flexseg_[ molten_resid ]; }
285 
286  Size
287  flexsegid_for_res( Size resid ) const
288  { return moltenres_2_flexseg_[ resid_2_moltenres_[ resid ] ]; }
289 
290  bool
291  moltenres_part_of_flexsegment( Size molten_resid ) const
292  { return moltenres_2_flexseg_[ molten_resid ] != 0; }
293 
294  bool
296  { return moltenres_2_flexseg_[ resid_2_moltenres_[ resid ] ] != 0; }
297 
299  rotset_for_moltenres( Size molten_resid, Size bbconf = 1 ) const;
300 
302  rotset_for_residue( Size resid, Size bbconf = 1 ) const;
303 
304  /// @brief Rotamer indexed locally
306  rotamer_for_residue( Size resid, Size rotindex_on_residue ) const;
307 
308  /// @brief Rotamer indexed locally
309  //core::conformation::ResidueCOP
310  //rotamer_for_moltenres( Size moltenres, Size rotindex_on_residue ) const;
311 
312  /// @brief Rotamer indexed globally.
313  //core::conformation::ResidueCOP
314  //rotamer( Size rotindex ) const;
315 
317  backbone_for_resid_bbconf( Size resid, Size bbconf ) const
318  { return *conformations_for_flexible_segments_[ resid_2_moltenres_[ resid ] ][ bbconf ]; }
319 
321  backbone_for_moltenres_bbconf( Size moltenres, Size bbconf ) const
322  { return *conformations_for_flexible_segments_[ moltenres ][ bbconf ]; }
323 
324 
325  /// @brief rotamer_id in the global enumeration of rotamers.
326  //Size
327  //moltenres_for_rotamer( Size rotamer_id ) const {
328  // return moltenres_for_rotamer_[ rotamer_id ];
329  //}
330 
331  Size
332  bbconf_for_rotamer( Size rotamer_id ) const {
333  Size moltenres = moltenres_for_rotamer_[ rotamer_id ];
334  return bbconf_for_rotamer_of_moltenres_[ moltenres ][ local_rotid_for_rotamer_on_moltenres( moltenres, rotamer_id ) ];
335  }
336 
337  Size
338  bbconf_for_rotamer_on_moltenres( Size moltenres, Size rotamer_id ) const {
339  return bbconf_for_rotamer_of_moltenres_[ moltenres ][ rotamer_id ];
340  }
341 
342  /// @brief Do two rotamers originate from the same backbone conformation?
343  /// Local enumeration for both rot1 and rot2; rot1 and rot2 must be rotamers of the
344  /// same molten residue.
345  bool
347  utility::vector1< Size > const & bbconf( bbconf_for_rotamer_of_moltenres_[ moltenres ] );
348  return bbconf[ rot1 ] == bbconf[ rot2 ];
349  }
350 
351 protected:
352 
353  void
355  Pose & pose,
357  Size frag_num,
359  );
360 
361 private:
362  void update_offset_data();
363 
364  void
366  Size lowermoltenres,
367  Size uppermoltenres,
368  utility::vector1< utility::vector1< Size > > const & regular_representatives,
369  utility::vector1< utility::vector1< Size > > const & proline_representatives,
370  utility::vector1< utility::vector1< Size > > const & glycine_representatives,
371  Pose const & pose,
372  ScoreFunction const & sfxn,
374  ) const;
375 
376  void
378  Size moltenres,
379  Pose const & pose,
380  ScoreFunction const & sfxn,
383  ) const;
384 
385 
386 private:
387 
388  //not derived from fixbb RotamerSets, so we need to copy some of the basic data structs
392 
393  PackerTaskCOP task_; // initialized at construction
394 
400 
401  //andrew, did you forget to put these two vectors in?
404 
405  //why is this a vector of vector of residues?
413 
414 };
415 
416 
417 }
418 }
419 }
420 
421 #endif