Foldit puzzles may also contain non-protein molecules called ligands. In some cases, small molecule ligands may have multiple rotamers as well. In other cases, a ligand may be a single atom, or a locked small molecule.
The shake tool moves one or more protein segments to their "best" positions. The "wiggle sidechains" option of the wiggle tool fine-tunes these positions. Both shake and wiggle sidechains work on ligands and DNA/RNA bases in the same way.
Rotamer count example
The table below shows the variation in rotamer counts for puzzle 1462: Reindeer Beta-lactoglobulin. This relatively large puzzle had 162 segments, with instances of each of the 20 amino acids found in Foldit.
Alanine and glycine had only one rotamer, which is always the case. Serine, threonine, and glutamine had as many as 55 rotamers. These results are for one particular solution, and would likely be different for other solutions to the same puzzle.
For amino acid found in puzzle 1462, the table lists the amino acid name and code, and the number of times the amino acid was present. The minimum, maximum, and average or mean number of rotamers is shown for each amino acid.
Foldit Lua Interface
There are two Foldit Lua functions that work directly with rotamers.
The function rotamer.GetCount returns the number of rotamer positions currently available.
The function rotamer.SetRotamer "snaps" the sidechain to a specific rotamer position.
Due to reasons that are poorly understood, but that may have something to do with quantum mechanics, the rotamer count for a particular segment can change when the shape of the protein changes. Recipes which try rotamers from 1 to rotamer.GetCount () sometimes crash on rotamer.SetRotamer. See using pcall to trap Lua errors for a technique which avoids this type of crash.
The rotamer count may be useful in other situations.
In some Foldit puzzles, the backbone of some segments may be locked, preventing it from changing shape. In some cases, the sidechains of the same segments are also locked, but in other cases, the sidechains of these locked segments can move. The function structure.IsLocked only reports on the backbone, so there's no way to tell directly whether a sidechain is locked or unlocked. The function rotamer.GetCount can be used to detect an unlocked sidechain of a locked segment.