Rosetta  2020.46
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | List of all members
protocols::kinematic_closure::perturbers::Perturber Class Referenceabstract

Base class for all of the perturber algorithms. More...

#include <Perturber.hh>

Inheritance diagram for protocols::kinematic_closure::perturbers::Perturber:
Inheritance graph
[legend]

Public Member Functions

virtual std::string get_name () const =0
 Return the name of this perturber. More...
 
void perturb (Pose const &pose, ClosureProblemOP problem)
 Perturb all of the non-pivot residues. More...
 
void perturb_with_balance (Pose const &pose, ClosureProblemOP problem)
 Perturb all of the non-pivot residues such that detailed balance is obeyed. More...
 
virtual void perturb_subset (Pose const &pose, IndexList const &residues, ClosureProblemOP problem)=0
 Perturb the given residues. More...
 
virtual void perturb_subset_with_balance (Pose const &pose, IndexList const &residues, ClosureProblemOP problem)
 Perturb the given residues such that detailed balance is obeyed. More...
 

Detailed Description

Base class for all of the perturber algorithms.

Solving a kinematic closure problem has two steps. The first step is to pick a new torsion angles, bond angles, and/or bond lengths in the region being sampled. The second step is to analytically set six torsions such that the backbone stays closed. Perturber subclasses are responsible for managing the first step.

Every perturber subclass must reimplement perturb_subset(). The arguments to the method are a Pose, a list of residues, and a ClosureProblem. The pose is const and should just be used to look up residue types and other relevant contextual information. The residue list specifies the residues that should be perturbed. In other words, residues not in this list should not be changed. This allows composite perturbers to specify different perturber algorithms for different parts on the loop. For example, for antibody modeling you might use a custom perturber for loop regions with well-known motifs and the standard RamaPerturber everywhere else. Finally, the problem is used to actually set the backbone DOFS via methods like perturb_phi() and perturb_psi().

If your perturber algorithm can be made to obey detailed balance, you should also reimplement perturb_subset_with_balance(). This method is called by BalancedKicMover and it works just like perturb_subset(). If your algorithm doesn't obey detailed balance, or if you don't know what detailed balance is, then don't worry about it.

Note
Currently perturb_phi() and perturb_psi() live in ClosureProblem. This makes sense, because the problem owns the matrices that these methods are perturbing. So you can think of these methods as part of an interface that allows the closure problem to be defined. However, this approach will not work well with non-canonical backbones. An alternative is to expose a much more general interface to the problem (i.e. get_torsion_angles() and set_torsion_angles()). Then subclasses of Perturber that are only meant to work with one sort of backbone can be created, and these subclasses can define methods like perturb_phi() and perturb_psi() which use the more general ClosureProblem interface. In any case, you should be aware that the perturber interface may change in the near future.

It would have been nice if any regular mover could be used to perturb the backbone, instead of being limited to single-purpose Perturber subclasses. I spent a lot of time trying to get this to work, but it was very slow. My belief is that too many AtomTree coordinates were being updated too often.

Member Function Documentation

virtual std::string protocols::kinematic_closure::perturbers::Perturber::get_name ( ) const
pure virtual
void protocols::kinematic_closure::perturbers::Perturber::perturb ( Pose const &  pose,
ClosureProblemOP  problem 
)

Perturb all of the non-pivot residues.

virtual void protocols::kinematic_closure::perturbers::Perturber::perturb_subset ( Pose const &  pose,
IndexList const &  residues,
ClosureProblemOP  problem 
)
pure virtual
void protocols::kinematic_closure::perturbers::Perturber::perturb_subset_with_balance ( Pose const &  pose,
IndexList const &  residues,
ClosureProblemOP  problem 
)
virtual
void protocols::kinematic_closure::perturbers::Perturber::perturb_with_balance ( Pose const &  pose,
ClosureProblemOP  problem 
)

Perturb all of the non-pivot residues such that detailed balance is obeyed.

If not reimplemented, this method will kill rosetta and complain that no balanced implementation of this algorithm exists.


The documentation for this class was generated from the following files: