As per Keren's suggestion, I'll start sending out a summary email of IMP-related changes. Once Ben updates the web page, the change list can go on web page and so be frequently updated in addition to the email.
- Sphere3D and Cylinder3D have been added to algebra. So we now have standard ways of specifying rotations, transformations, spheres, and cylinders. If your function takes a description of one of those, please have it take an instance of the appropriate class instead.
- a new module, 'display' has been added to support exporting geometry to external programs. It currently supports spheres, cylinders, XYZRDecorator particles, BondDecorators, axis aligned boxes, and triangles, and supports output to Bild, CMM, VRML and CGO (a pymol format).
- functions to generate a cover of the surface of a cylinder and sphere have been added in addition to existing functions to randomly sample in and on spheres and axis aligned boxes.
- the build script has been changed so that you can add a module locally (by putting it in modules) and you don't have to change modules/SConscript (use the localmodules=True flag)
- particle indexes are still scheduled to disappear (and get_particle(unsigned int) is linear time) so stop using them
- rigid body support has been added both via snapping the members to preserve rigidity and via direct optimization of the rigid body orientation and translation. The code has only been tested in a limited manner.
- a check has been added to IMP for incorrectly defined functions. If you get a linker error involving link_0.cpp and link_1.cpp and duplicate symbols, it probably means you defined a function in a header and forgot to make it inline.
- transformations are now composable
and probably a few other things I have forgotten.
Before you implement something, check if it is already there by using the search in the manual and, if not, by emailing imp-dev. Emailing such questions to the list lets people know what you are using and refreshes people's picture of what is in IMP. In addition, many of us have useful code around that isn't in IMP, but easily could be.
It is good practice to keep a second (or 10th) copy of IMP around that you never change directly and simply keep in sync with the current svn. When you commit changes to SVN, update your svn copy and run the tests there to check that you haven't forgotten to commit anything important (such as an SConscript or a related file in another directory).