IMP logo
Change History
Winter 2011/2012
Fall 2011
Summer 2011
  • some functionality from the kernel has been spun off into a new module IMP.base. You probably won't notice anything. The only significant changes are that functions that accept or return IMP::base::TextInput and IMP::base::TextOutput must declare them with the base qualifier (eg base::TextInput) so that swig is happy.
  • the source for the kernel has been moved from kernel to modules/kernel. This is unlikely to effect anyone.
  • IMP::core::ExcludedVolumeRestraint now supports filters
  • IMP::domino::HDF5AssignmentTable now caches internally, which makes it several times faster than before.
  • you can now pick which python to use with the python argument to scons.
  • the units for BD diffusion coefficients changed to be consistent with other IMP units.
  • IMP::domino::get_interaction_graph() now takes an IMP::RestraintsTemp, like other functions
  • The assert failure handling function was documented and renamed to IMP::handle_error() so it is easier to find when you want to use gdb.
  • The RMF base support (stuff in the RMF namespace), has been moved to a new module, simply called RMF (no IMP). Now the functionality should be called like RMF.open_rmf_file() and headers include like RMF/RootHandle.h. This most was done in order to make the spin off of the RMF library as transparent as possible when it occurs later.
  • to work around various issues with ref counting pointers and compiler eccentricities, we added emulation of the C++0x nullptr. You should prefer that to NULL in IMP code that you want to run cross platform.
  • IMP::IntsList, IMP::FloatsList and IMP::StringsList have been added to replace the various scattered solutions for passing such types.
  • RMF::HDF5DataSetD is now templated on the dimension. Typedefs have been provided for the basic types so you can create an ::RMF::HDF5IndexDataSet2D now.
  • Various low level classes of IMP::rmf have been moved to the plain old RMF namespace as pat of cleaning things up to separate the RMF low level library from IMP. This include RMF::HDF5DataSetD.
  • IMP::Restraint::get_decomposition() and IMP::Restraint::get_current_decomposition() changed to return a single Restraint, instead of a list. This makes it easier to propagate the weight and maximum reliably.
  • IMP now supports usage of restraints without adding them to the IMP::Model scoring function. To do this, do IMP::Restraint::set_model(), passing the model. The restraint can then be evaluated.
  • IMP::domino::DominoSampler does not use the IMP::domino::OptimizeRestraints restraint optimization by default. Instead, if it is asked to create the IMP::domino::RestraintScoreSubsetFilterTable, it decomposes the restraints first (via IMP::create_decomposition()). This avoids several bugs and very fragile code.
  • the IMP::core::DiameterRestraint was ignoring the radii of the particles involved and so was giving artifically low scores. It now is on the actual diameter of this molecule.
  • the IMP::core::MonteCarlo optimizers now support incremental evaluation. This can be a lot faster when only a few particles are moved each step.
  • all the plural types in IMP have moved to bounds checked vectors when using debug builds with gcc. If you get a non-imp error about an invalid access, it is probably some code that walks off the end of an array. Please report it.
  • RMF::KeyCategory was renamed to RMF::Category
  • The deprecated constructors for various rmf/hdf5 things from files have been removed. Now use the methods RMF::open_rmf_file(), RMF::create_rmf_file(), RMF::open_rmf_file_read_only(), RMF::open_hdf5_file(), RMF::create_hdf5_file().
  • RMF:: broke backward compatibility in order to accelerate loading times of files and use a more compact storage for strings.
  • The IMP::core::MoverBase was changed to move it off of the IMP::SingletonContainer. This resulted in the IMP::core::BallMover and IMP::core::NormalMover having new constructors. Now create them from a list of particles, a list of float keys and a radius/standard deviation. This removes some complexity and inefficiencies as well is removes some scope for errors.
  • Temp and non-temp decorator lists have been merged in C++. This was done to simplifity code since no one was using the non-temp variants. Now all decorator lists are temp (non-reference counted) variants.
  • restraints and restraint sets are now evaluated only using "canonical" weights. That is, each restraint has one weight for the model (the total over all the restraint sets it is contained in and will always be evaluated with that weight). This allows the evaluation of simple restraints to be faster.
  • The IMP_LIST() macros have been changed slightly. If your usage needs to take action upon addition, removal or changes to the list, use the IMP_LIST_ACTION() variant in your header. The IMP_LIST_IMPL() macro no longer takes the actions, and the last three (generally empty arguments) will have to be removed from the call to get it to work. This is needed to move towards more flexible and efficient passing of lists of values.
  • RMF::create_hdf5_file() and RMF::open_hdf5_file() were added to avoid the dangerous and unclear bool paramter on the HDF5Group constructor. That constructor has been deprecated.
  • IMP::domino uses the new IMP::Model::evaluate_if_good() support to accelerate computations
  • IMP::core::MonteCarlo can use the IMP::Model::evaluate_if_good() support to more quickly reject very bad conformations. See IMP::core::MonteCarlo::set_maximum_difference().
  • IMP::core::ExcludedVolumeRestraint has been rewritten to be faster. It is especially faster when used with IMP::Model::evaluate_if_good()
  • a new evaluation mode IMP::Model::evaluate_if_good() and IMP::Model::evaluate_if_below() has been added. It allows restraints to shortcut score computation when the score can be shown to be worse than a maximum value.
  • as part of moving towards more efficient use of evaluate_if_good() various deprecated methods have been removed from IMP::core::ExcludedVolumeRestraint and IMP::core::RigidClosePairsFinder.
  • incremental evaluation support was removed from IMP. The reason for doing this was that the code was complicated, created overhead even when incremental support was not used and was not commonly used. Further, decomposing the restraints and using the dependency graph yields similar results and is more transparent.
  • the RMF helper binaries have been moved to their own application so that they get installed.
  • IMP::display::Writer has been revised to better support writers that write multiple frames to a single file and ones that write binary data. The noticeable changes are that the existing IMP::display::Writer instances must be created with a file name. And the IMP::display::WriteOptimizerState just takes a writer rather than a write and a file name template. IMP::display::Writer::set_frame() has been added so that you can directly control the frame being written.
  • RMF::RMFWriter has been added which writes geometry to an RMF file.
Spring 2011
  • An interactive mode has been added to IMP::domino::DominoSampler. The interactive mode is useful for understanding domino sampling runs and distributing domino comptutations across a cluster.
  • Functions IMP::domino::set_assignments() and IMP::domino::get_assignments() were added which support writing subset assignments to data fields in hdf5 files. These can be used to helping to distribute domino on a cluster as well as debugging the sampling process.
  • a python function IMP.show_graphviz() has been added that attempts to render a graph with dot and then open the pdf.
  • The python functions IMP.show_altgraph() and IMP.get_networkx_graph() have been added to provide alternatives for quick viewing of IMP graphs. Unfortunately, they still pale compared to graphviz.
  • IMP.atom.create_cover() was added to facilitate creating a summary particle for part of a hierarchy in order to accelerate restraints.
  • IMP.hdf5 was renamed to IMP.rmf, the proposed name of the file format that it supports. That also better separates the hdf5 support from the file format support.
  • The old I/O functions have been marked as deprecated in favor of IMP.hdf5. You may need to compile with deprecated="yes" if you use them.
  • The python graph interface now has a remove_vertex method.
  • One can now access the model restraint evaluation statistics programmatically using IMP::Model::get_restaint_statistics(). Restraint statistics can be logged to a file during optimization using IMP::core::WriteRestraintScoreStatisticsOptimizerState.
  • IMP::domino::DominoSampler now allows you to specify the tree on which merges occur directly. Also, you now need to specify the merge tree rather than the JunctionTree if you want to do non-loopy inference and specify something about how it is done. Sorry, it makes the code a lot easier.
  • Preliminary symmetry support has been added via the IMP::core::TransformationSymmetry and IMP::core::TransformationAndReflectionSymmetry classes.
Winter 2011
  • There now is a common base class IMP::atom::Simulation for IMP::atom::BrownianDynamics and IMP::atom::MolecularDynamics. In merging them there were several minor changes made to both. The most noticeable may be that the function for setting the maximum time step length is now IMP::atom::Simulation::set_maximum_time_step(). The last time step length can be extracted by IMP::atom::Simulation::get_last_time_step()
  • IMP::core::MonteCarlo::set_temperature() was renamed to IMP::core::MonteCarlo::set_kt() as that is what it is doing.
  • A new module IMP.hdf5 has been added to provide more general support for saving and loading IMP::atom::Hierarchy structures to files. Multiple conformations of each hierarchy can be saved as well as information about geometry and restraints (although these can't be read at the moment, so they are not so useful).
  • IMP::algebra::grids::GridD now supports dense grids in arbitrary dimension through use of IMP::algebra::grids::DenseGridStorageD.
  • IMP::Optimizer now can use a list of restraint sets to compute the score rather than the complete Model score.
  • each IMP::Restraint now has its own weight. This is lightly tested.
  • A new log level IMP::PROGRESS has been added. The idea is that IMP::Sampler::get_sample() calls and other expensive loops can show a boost progress meter at this log level to give some idea when things are moving forward.
  • IMP::domino::TrivialParticleStates renamed to IMP::domino::IndexParticleStates to be less judgmental
  • IMP::domino::CompoundParticleStates and IMP::domino::RecursiveParticleStates added
  • IMP::domino::DominoSampler now supports maximum scores on IMP::RestraintSets (untested).
  • the name of the clustering methods have been changed to create_ from get_ since they create objects.
  • the names of the recently added metric based clustering support has been changed to Metric rather than Distance.
  • IMP now has the ability to have certain tests designated as expensive and to skip those tests when test-fast is run. The motivation for this is that the tests take a really long time making it impractical to run before every commit. And it is hard to tell which tests have not been run when running with the necessary multiple build processes. My thought is that tests that take about a second or less on a debug build should be left along (this is probably >95% of the tests), but the few that take longer should be marked as expensive. To do that, rename the test to expensive_text_XXX.py (from test_XXX.py) and add expensive_python_tests= env.IMPModuleGetExpensivePythonTests() to the IMPModuleTest call in the test SConscript.
  • the fuction IMP::display::create_restraint_geometry() was added to do what its name says.
  • runtime dimensional geometric objects have been added. These include IMP::algebra::VectorKD, IMP::algebra::BoundingBoxKD and IMP::algebra::SphereKD. The IMP::statistics::Embedding classes now use IMP::algebra::VectorKD instead of Floats. The sparse grids also support variable dimensions as to the nearest neighbor searches.
  • IMP::atom::DopePairScore has been added to IMP.
  • IMP::atom::CHARMMStereochemistryRestraint provides a high-level simplified interface to the bonded part of the CHARMM forcefield.
  • IMP modules are now built by first combining all the .cpp files into one, and then building that file. This greatly accelerates building of a module from scratch as build time is dominated by parsing headers. This does change the semantics of .cpp files as they see headers included by and functions declared by an arbitrary subset of other .cpp files. For now they are still required to be able to be compiled separately. To get the only behavior back either globally or on a per-module basis, see the percppcompilation parameter to scons.
  • Instructions and scripts have been added for building modules and things externally to the IMP build. See the installation guide.
  • IMP::atom::CHARMMParameters can now automatically map CHARMM-style atom and residue naming to PDB-style, so CHARMM topology files can be used unmodified.
  • IMP::atom::CHARMMTopology::add_sequence() provides a simple way to generate a topology from a string of amino acid one-letter codes.
  • IMP::atom::CHARMMTopology::add_coordinates() will generate atomic Cartesian coordinates from CHARMM internal coordinate information.
  • IMP::atom::CHARMMTopology::add_missing_atoms() and IMP::atom::remove_charmm_untyped_atoms() can now be used to ensure that atoms read from a PDB file match the CHARMM topology.
  • building of deprecated functionality is now false by default
  • the IMP_COMPARISONS(), IMP_COMPARISONS_1(), IMP_COMPARISONS_2() macros now take the name of the class as an additional (first) argument. This avoids the formerly needed, This typedef and makes them more consistent with the other macros in IMP.
  • modules can now be built externally to the IMP svn in addition to applications and biological systems. To do so, create a directory with your module in a subdir containing links to the IMP SConscript file and scons_tools and a config.py that has information needed to run IMP (eg an appropriate pythonpath, ldpath).
  • removed IMP::algebra::GridD::get_index(VectorD) as it wasn't very safe (in that vectors coordinates can get rounded between the IMP::algebra::GridD::get_has_index() and IMP::algebra::GridD::get_index() calls. Use IMP::algebra::GridD::get_nearest_index() or IMP::algebra::GridD::get_extended_index() or IMP::algebra::GridD::operator[]() instead.
  • renamed IMP::domino::ParticleStatesTable::get_particles() to IMP::domino::ParticleStatesTable::get_subset() as it is more useful to be able to get the subset containing all the particles.
  • rename IMP::restrainer::Restraint::print_all_restraints() to IMP::restrainer::Restraint::show_all_restraints() to be consistent with the rest of IMP.
  • renamed IMP::atom::get_conect_record_string() to IMP::atom::get_pdb_conect_record_string() to make clearer what it is.
  • class and method names are now spell checked. Add missing words to spelling_exceptions in the module test call.
  • the plural names (eg IMP.Particles()) have been removed from the python side as they are just python lists.
  • biological systems can now include internal modules. These provide a conventient place to put application specific C++ and python code. See the example system for more info.
  • IMP_VALUES() now includes IMP_OUTPUT_OPERATOR() so you no longer need two namespace macros for each value.
  • the function IMP::core::Harmonic::k_from_standard_deviation was renamed to IMP::core::Harmonic::get_k_from_standard_deviation() to conform to the standards.
  • the IMP::atom::PDBSelector and IMP::atom::Mol2Selector became IMP::Object classes. All this means is that they need to be created with new in C++ code. It also means that one is no longer prohibited from storing them (not that there is much use in doing that).
  • the standards tests have been improved to test more useful aspects. Now class and function names are checked some as well as all modules have the checks for show and plural types. The error messages should explain how to fix things.
  • IMP::core::RigidBody::lazy_set_reference_frame() was renamed to IMP::core::RigidBody::set_reference_frame_lazy() to fit with the standards better.
  • the transform based methods on referene frame which have been deprecated for a while were removed
  • the hierarchy visiting and searching functions have been renamed to better fit the IMP naming scheme as we don't expect they were used outside of the IMP source.
  • IMP::atom::NonhydrogenMol2Selector was renamed IMP::atom::NonHydrogenMol2Selector to be consistent with the PDB version
Fall 2010
  • IMP::display::PlaneGeometry was added to display planes
  • the optimize methods on optimizers was moved to a "non-virtual interface". Usage has not changed, but optimizers should implement IMP::Optimizer::do_optimize() instead of IMP::Optimizer::optimize() to benifit from better checking.
  • the two-vector constructor for IMP::algebra::Plane3D now expects the second vector to be a unit vector as otherwise one could switch the order around without noticing.
  • the io functions in the kernel have been cleaned up a bit (the old ones are there for backwards compatibility). See IMP::write_particles(), IMP::write_particles_binary(), IMP::write_particles_to_buffer() and IMP::read_particles(), IMP::read_particles_binary(), IMP::read_particles_from_buffer()
  • IMP::core::WriteModelOptimizerState is going away as it duplicated IMP::WriteParticlesOptimizerState.
  • the IMP::algebra::Grid3D has been changed to make it support any (fixed) dimension when used with sparse storage. The template arguments have also been changed to remove a redundant one. See IMP::algebra::GridD.
  • the biological systems specification has been improved a little adding ability to run some rudamentary tests to make sure the scripts are ok and to not require that everything be run from the svn directory.
  • A new method IMP::atom::create_compatible_rigid_body() which creates a rigid body from a hierarchy which has the same internal coordinates as another rigid body. A way to make the rigid body construction more canonical would be nice (so we don't need this function), but I'm not sure how to do that.
  • Logging has been improved to better report the name of methods producing the log messages
  • a macro IMP_FUNCTION_LOG has been added which should be added to the start of non-member functions which produce significant logging output.
  • IMP::algebra::get_distance(const Rotation3D&,const Rotation3D&) was changed to use the Euclidean distance in R4 as that seems better behaved than the prior metric.
  • IMP.domino2 was renamed to IMP.domino and the old IMP.domino was moved to https://svn.salilab.org/imp/branches/salilab/domino1
  • the documentation for classes and some methods now includes a list of all examples which use the class. Please report any incorrect links or phantom classes appearing in the docs. Unfortunately, functions have to be added individually. Please request any functions of particular interest.
  • applications and biological systems now have their own documentatin pages
  • IMP::atom::Hierarchy requires radii on its leaves
  • IMP::atom::read_pdb add radii to the atoms
  • IMP::helper was merged into IMP::restrainer as all the functionality there was primarily to provide support for restrainer
  • IMP::domino2::SubsetEvaluatorTable was removed. Pass the model and IMP::domino2::ParticleStatesTable to the IMP::domino2::RestraintScoreSubsetFilterTable instead.
  • IMP::atom::Selection was added to allow specification of parts of IMP::atom::Hierarchy using biological sorts of names. A few functions to create restraints from them were added too.
  • a new example was added in the kernel to show IMP used on a biological system
  • IMP::display::PymolWriter now supports adding labels to things
  • IMP::display::PairRestraintGeometry and IMP::display::ConnectivityRestraintGeometry were added to aid in visualizing those restraints.
  • IMP::bullet was added with an optimizer to use hard body physics to resolve local collisions.
  • IMP::atom::setup_as_rigid_body() has been deprecated and replaced by IMP::atom::create_rigid_body(). The latter creates the rigid body as a separtate particle so that the molecular hierarchy doesn't have to worry about having its bounding sphere large enough to enclose all the members.
  • IMP::core::KClosePairsPairScore was added to have count based cutoffs for close pair scoring.
  • IMP::algebra::get_surface_area_and_volume() was added to compute the two numbers for a set of balls
  • Two examples were added to the kernel, Nup84 CG and Nup84 RB which illustrate the usage of many aspects of IMP.
Summer 2010
  • The IMP::core::RigidDistancePairScore and IMP::core::ClosePairsPairScore have been revised to remove certain inconsistencies and ambiguities and to make them faster. Existing code using them will need to be minorly tweaked to work.
  • Javi added his 2D EM scoring functionality as IMP::em2D
  • some new ways to speed up scons have been added. See IMP::core::HarmonicDistancePairScore, IMP::core::SoftSpherePairScore and, for C++ users, the generic restraint support IMP::container::create_restraint() and IMP::core::create_restraint(). These each offer between 2x and 1.2x speedup when using simple scores (like harmonics on distances). In addition, a function IMP::container::get_slack_estimate() has been added which will estimate the correct slack to use with a IMP::container::ClosePairContainer. This will be extended to support IMP::core::ExcludedVolumeRestraint eventually.
  • support for dense and sparse grids have been added to IMP::algebra. See the IMP::algebra module page (I'm still working on how to make the docs clearer).
  • all write functions now have associated IMP::OptimizerState and IMP::FailureHandler classes. For examples, see IMP::WriteOptimizerState, IMP::WriteBinaryOptimizerState, IMP::WriteFailureHandler, IMP::atom::WritePDBOptimizerState etc.
  • functions IMP::write_binary_model(), IMP::read_binary_model() and IMP::read_configurations() have been added to support space and filesystem efficient storage of model configurations. Multiple configuration can be written to a single file. This functionality requires NetCDF be installed (NetCDF is a standard library for reading and writing binary data).
  • domino2 has been added. It provides a simpler interface on Keren's domino optimize as well as a number of new optimization and hooks for customizing the optimization process
  • a better explaination of how to use reference counted pointers has been added to IMP::Pointer.
  • all simple, planar polygons are now supported for display when CGAL is present
Week of April 1, 2010
Week of March 13, 2010
  • function get_rotation_in_radians_about_axis() was renamed to get_rotation_about_axis() as it didn't parse and we don't have the "in radians" elsewhere.
Week of March 6, 2010
  • Publications now have a description field to give browsers an indication of what is in the publication to aid selection of what to read/cite.
Week of Feb 27, 2010
  • IMP::algebra::decompose_rotation_into_axis_angle() was renamed to IMP::algebra::get_angle_and_axis().
Week of Feb 21, 2010
Week of Feb 14, 2010
Week of February 3, 2010
Week of January 22, 2010
Week of January 1, 2010
Week of December 11
Week of December 4
Week of November 19
Week of November 12
week of October 29 Update
Week of October 15
Week of October 8
Week of October 1
  • IMP::ScoreState and IMP::Restraint now better track the set of particles that they use and the dependencies between the particles. To this end, a new base class IMP::Interaction has been added with methods to get the inter-particle interactions and the set of particles used.
Week of September 27
Week of September 20
Week of August 30
Week of August 23
Week of August 15
Week of August 8
Week of August 1
Week of July 18
Week of July 11
Week of July 4
Week of June 15
Week of June 8
Week of May 15
Week of May 8
Week of May 1
Week of April 27
Week of April 20
Week of April 13
Week of April 6
Week of March 20:
Week of March 13:

Generated on Thu Feb 9 2012 23:36:19 for IMP by doxygen 1.7.5.1