Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RotamerSetOperation.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 core/pack/rotamer_set/RotamerSetOperation.hh
11 /// @brief rotamer set operation class
12 /// @author Andrew Leaver-Fay (leaverfa@email.unc.edu)
13 
14 
15 #ifndef INCLUDED_core_pack_rotamer_set_RotamerSetOperation_hh
16 #define INCLUDED_core_pack_rotamer_set_RotamerSetOperation_hh
17 
18 // Unit Headers
20 
21 // Package Headers
23 #include <core/graph/Graph.fwd.hh>
25 #include <core/pose/Pose.fwd.hh>
28 
29 // Utility Headers
30 #include <utility/pointer/ReferenceCount.hh>
31 
32 #include <core/types.hh>
33 #include <utility/vector1.hh>
34 
35 
36 namespace core {
37 namespace pack {
38 namespace rotamer_set {
39 
40 /// @brief RotamerSetOperations are able to modify the contents of a RotamerSet
41 /// within the packer immediately after rotamer creation.
42 ///
43 /// @li They are handed into the packer through a packer task; each ResidueLevelTask
44 /// keeps its own list of rotamer set operations.
45 ///
46 /// @li Each RotamerSet, within the build_rotamers() method will iterate across
47 /// the RotamerSetOperation objects, and call alter_rotamer_set on each
48 /// element in the ResidueLevelTask's list of rotamer_set_operations.
49 ///
50 /// @li RotamerSetOperations are visited in the order in which they are appended
51 /// to the ResidueLevelTasks's operation list.
52 ///
53 /// @li RotamerSetOperations are unable to correlate changes to rotamer sets across
54 /// multiple rotamer sets -- they have access to only a single RotamerSet object
55 /// in their alter_rotamer_set operations. For correlated alterations to rotamer
56 /// sets, the (as of yet undefined) RotamerSetsOperation class should be used.
57 
59 {
60  public:
62  virtual ~RotamerOperation();
63 
64  virtual
65  bool
68  pose::Pose const & pose,
69  scoring::ScoreFunction const & sfxn,
70  pack::task::ResidueLevelTask const & rtask,
71  graph::GraphCOP packer_neighbor_graph,
73  ) = 0;
74 
75 };
76 
78 {
79 public:
81  virtual ~RotamerSetOperation();
82 
83  virtual
85  clone() const = 0;
86 
87  virtual
88  void
90  pose::Pose const & pose,
91  scoring::ScoreFunction const & sfxn,
92  task::PackerTask const & ptask,
93  graph::GraphCOP packer_neighbor_graph,
94  RotamerSet & rotamer_set
95  ) = 0;
96 
97  virtual
98  Real
100  pose::Pose const & pose,
101  task::PackerTaskCOP the_task,
102  core::Size residue_in
103  ) const;
104 
105 #ifdef USEBOOSTSERIALIZE
106 private:
107  friend class boost::serialization::access;
108 
109  template<class Archive>
110  void serialize(Archive & ar, const unsigned int version) {
111  }
112 #endif
113 };
114 
115 }
116 }
117 }
118 
119 #endif