Merge pull request #71 from RosettaCommons/nollikai/BoltzmannRotamerMover
Adding BoltzmannRotamerMover to protocols/simple_moves
Created a new mover that calculates Boltzmann probabilities for each rotamer at a given position and then selects a rotamer based on these probabilities. If the position is designable, the mover will calculate a Boltzmann probability for each amino acid and then select an amino acid based on these probabilities.
Boltzmann probabilities are calculated as p_i = e^(E_i / kT) / Z, where E_i is the change in energy of substituting the current rotamer with rotamer i, Z is the partition function (sum of Boltzmann factors for all rotamers), and kT can be set using set_temperature( Real ).
The mover only changes one rotamer per apply. If randomize_resnum is set to true, the mover will select a random position out of the repackable and designable residues on which to perform the move. This position can be set using set_resnum( Size ).
This mover solves a common problem I have encountered with traditional design, where multiple runs tend to output the same low energy sequence. Instead, the goal of this mover is to sample around local minima to obtain a large number of diverse low energy sequences. This is especially true when combined with local backbone moves, and I will commit another mover that performs coupled backrub and Boltzmann rotamer moves in the near future.