A Mover is a type of object in Rosetta that interacts with a Pose. Frequently, a Mover changes the Pose. It does not need to; the reference to a Pose that a Mover takes can be entirely ignored or merely analyzed. The reason that a Mover is frequently used for operations that do not even change the Pose is because Rosetta is built so strongly around Movers! There are many operations that take Movers, and specifically the JobDistributor functions by applying a Mover.

Mover organization

The sampling in question is generally organized in the apply() function, where other movers, protocols, and pose-altering functionality may be called:

virtual void apply(core::pose::Pose & pose);

Movers within Rosetta

The Mover is the second most important class in Rosetta, next to the Pose. The Pose contains a structure, and Movers are the best way to remodel that structure. Most Movers fit into one of six categories (these are descriptive but not reflected in the code):

• Whole protocols. Very complex, these Movers follow a sequence of heavily input dependent logic and do quite a lot of work. Frequently, an entire application consists of performing a protocol a specified number of times. An example would be DockingProtocol. These being Movers is key to their use with the job distributor
• Whole Pose Movers. Generally apply one extensive operation to the whole Pose, but is nonetheless atomic with respect to the operation performed. A good example would be MinMover or PackRotamersMover.
• Residue Movers. Manipulate single residues (for example, the backbone dihedrals in SmallMover) or a vector of residues or a subset of a Pose.
• EnzymaticMovers. Replace, add, or remove residues to a Pose, simulating enzymatic reactions, such as post-translational modifications.
• Analysis Movers. Do not change the Pose; only report geometric and energetic properties about it. They are Movers nonetheless because it is useful to take advantage of the frameworks in which Movers play a natural part.
• Container Movers. These movers, like SequenceMover, do nothing but arrange other Movers in a generic fashion.

Every Protocol is a Mover and is made of Movers: it's Movers all the way down.

Movers and RosettaScripts

In order to be functional in RosettaScripts, a Mover must implement a parse_my_tag function that interprets the XML tag, a fresh_instance function, and a clone function.