Accelerating IMP
The purpose of this page is to discuss methods for making IMP faster, particularly by changing core data structures and algorithms.
Replacement of generic scoring functions by specialized ones
Replacing eg SphereDistancePairScore with a HarmonicLowerBound by a SoftSpherePairScore creates a considerable speedup. Doing this automatically would be really nice.
If you are programming in C++, you can use IMP::container::create_restraint() to create a restraint from a container and a pair score. This removes a few more virtual function calls. If you are creating a restraint with only a single particle or pair, use IMP::core::create_restraint() instead.
Adjusting slack parameters on non-bonded lists
IMP::container::ClosePairContainer and IMP::core::ExcludedVolumeRestraint have "slack" parameters which adjust how often the non-bonded lists that are used are recomputed. Changing this parameter does not change the computed score, just how often the lists are updated. As a rough guideline, you want the slack to be larger than the total amount any particle moves in, say 20 evaluates (e.g. 20 MD steps). Experiment with changing the parameter to see what yields the best results or try the IMP::container::get_slack_estimate() function to try to estimate the best value to use automatically.