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).