IMP 2.5.0 release
- Documentation has been revised and updated; the main manual now gives a
gentler introduction to IMP, with more technical details on the code
provided in a separate reference guide.
- The IMP::base and IMP::kernel namespaces are now deprecated. Functionality
in both base and kernel now lives in the top-level "IMP" namespace.
- IMP::atom::Selection::get_selected_particle_indexes() has a new
'with_representation' parameter. If turned on (the default), Selection
returns all representational (XYZ) particles that match the request -
for example, selecting a residue will typically return all of its atoms.
If turned off, Selection returns the highest matching particle instead -
so, in this case, the residue particle itself.
- All IMP::RAII objects (e.g. IMP::SetLogState) now support the context
manager protocol in Python (e.g. "with IMP.SetLogState() as s:")
- Several long-deprecated functions have been removed. These include:
- Several Restraint constructors that take Particles. Use equivalent
constructors that take an IMP::Model pointer and ParticleIndexes instead.
- IMP::core::MonteCarlo::get_number_of_forward_steps() (use
- IMP::Model::remove_restraint(), IMP::Model::get_restraints(),
Store your restraints in an IMP::RestraintSet or use an
IMP::core::RestraintsScoringFunction. Related methods such as
IMP::Model::evaluate() will be removed in the next IMP release.
- IMP::Model::set_maximum_score() and related methods. Set the maximum
scores on the IMP::Restraint or IMP::RestraintSet directly, using
- IMP::Restraint::get_input_containers() and
IMP::Restraint::get_input_particles(). Use IMP::Restraint::get_inputs()
instead (similarly for get_outputs()).
- IMP::rmf::save_frame() no longer takes a frame index argument (it was
previously ignored anyway).
- Several functions have been deprecated in this release (and will be removed
in the next). These include several Restraint constructors that take Particle
or Particles objects (use constructors that take an IMP::Model and
ParticleIndex or ParticleIndexes) instead; and add_particle*(),
set_particle*() and clear_particle*() in several Container objects (use add(),
set() and clear() with particle indexes instead).
- On platforms that support it, OpenMP is turned on by default. To speed up
some parts of IMP, call IMP::base::set_number_of_threads(). By default,
only a single thread is used.
- The RPM packages now include an -mpich subpackage that can be installed
to enable parallel computation, using the IMP.mpi module in concert
with the mpich library.
- We now provide packages for both of the currently-supported Ubuntu LTS
releases: Ubuntu 12.04 (Precise Pangolin) and Ubuntu 14.04 (Trusty Tahr).
- The default log level has changed from NONE to WARNING.
- A new command line tool, `multi_foxs`, allows for enumeration and scoring
of multi-state models against SAXS profiles.
- A new command line tool, `ligand_score_multiple`, acts similarly to the
existing `ligand_score` tool but scores each ligand pose generated by
docking software (such as PatchDock).
- New applications of IMP are now available:
- Multi-state modeling of the histidine kinase, PhoQ
- Determination of the molecular architecture of the 40S•eIF1•eIF3
translation initiation complex
- IMP::domino::DiscreteSampler::set_restraints() now allows the set of
restraints used in DOMINO filtering to be controlled (previously, all
restraints in the IMP::Model were used).
- IMP::modeller::IMPRestraints now transfers an IMP::ScoringFunction into the
MODELLER score, not the implicit (and deprecated) score of the
- Bugfix #775: coordinates of voxels in EM maps were previously inconsistently
treated (they are supposed to be the centers of the voxels, but in some
cases they were the lower left edge). The fix may result in maps and their
bounding boxes appearing shifted by half the voxel size.
IMP 2.4.0 release
- Python 3 is now supported.
- Command line tools are now placed in the `bin` directory of modules (the
old `bin` directory, used for utility programs that are not installed, is
now called `utility`). The `applications` directory is removed.
- Several Python modules that were only used by EMageFit have been moved from
IMP::em2d to IMP::EMageFit.
- A new tutorial that uses the IMP::pmi module is now available (modeling of
the RNA Polymerase II stalk).
IMP 2.3.0 release
- A new IMP::pmi module was added, containing high-level Python classes to
simplify the representation, scoring, sampling and analyzing of models
in IMP. This module is still under heavy development, and should be
- Binary installers for 64-bit Windows are now available.
- The `.py` extension has been removed from all Python applications, so that
they are consistent with the C++ extensions.
- IMP::atom::Selection objects can now be combined using basic set operations
(union, intersection, difference, symmetric difference). In Python the
equivalent operators (|, &, -, ^ respectively) can be used.
- The integrative docking (idock) application now employs SOAP to improve
- IMP::atom::CHARMMParameters::create_topology() now works with a wider range
of hierarchies (previously it would only accept Residues that were direct
children of Chains). For example, it should do the right thing when given
a Hierarchy that contains no Chain particles, or one where Residues are
grouped under Fragments.
- Only Python 2.6 or later is now supported. We still provide IMP for
RedHat Enterprise 5 (which ships with Python 2.4) but you will need to use
the `python26` binary (part of EPEL) rather than the system default Python.
IMP 2.2.1 release
- Bugfix: PoseScore (see the ligand_score application) should now match
that used by the Pose&Rank web server (http://salilab.org/poseandrank/)
- Minor other build and documentation fixes.
IMP 2.2.0 release
- A module IMP.template was added to act as a template for creating new
external modules. It includes setting up git hooks for format checks and
things like that.
- The python support for grids was cleaned up. Hopefully this makes it more
robust. If you were using a grid in python that no longer exists, ping us,
we can add it back.
- The generic geometry functions were simplified slightly and renamed to
- The IMP::base::Flag class was added to simplify adding flags in C++.
- The `--log_level` and `--check_level` command line argument now take
strings (eg VERBOSE) to specify their values, rather than cryptic (and a
bit unstable) numbers.
- Command line options are now divided into normal and advanced ones.
You do `--help_advanced` to show the advanced ones.
- Support for computing Connolly surfaces was added with
IMP::algebra::get_connolly_surface(). In addition, there is now
to sample the surface of a collection of balls.
- IMP::atom:: create_simplified_from_volume() was added to create a simplified
representation of a hierarchy that preserves the surface are and occupied
volume. It uses IMP::algebra::get_simplified_from_volume(). If you want to
play with such representations, you can use the rmf_simply application.
- IMP::atom::get_rmsd(IMP::atom::Selection, IMP::atom::Selection,
const IMP::algebra::Transformation3D&) was deprecated.
Use IMP::atom::get_rmsd_transforming_first() instead.
- IMP::algebra::get_rmsd() and IMP::algebra::get_rmsd_transforming_first()
- The family of macros IMP_BASE_[SMALL,LARGE]_[UNORDERED,ORDERED]_[MAP,SET]
have been added (eg IMP_BASE_SMALL_ORDERED_SET ()). They provide platform
and boost-version independent ways to take advantage of the best set/map for
an application. In particular, they use boost::container::flat_set and kin
- IMP::atom::State and IMP::atom::Representation decorators have been added
to provide support for multiple states and multiple representation schemes.
They are integrated with RMFs and IMP::atom::Selection.
See atom/multiresolution.py and atom/multistate.py for examples.
- The container implementations has been cleaned up and simplified a bit.
This should not change most usage.
- [RMF](http://salilab.github.io/rmf) has been updated. There are a few minor
API changes, in addition to a new, faster format (`.rmf3`).
- [Eigen](#Eigen) is now included with IMP.
- The deprecated function IMP::kernel::Optimizer::set_restraints() was
removed. Use IMP::kernel::Optimizer::set_scoring_function() instead.
- The deprecated constructor for IMP::kernel::ModelObject that does not take
an IMP::kernel::Model was removed. This propagates to constructors
IMP::kernel::Restraint, IMP::kernel::ScoreState and kin. Make sure you pass
an IMP::kernel::Model as the first constructor argument. Related to this,
deprecated functions like get_is_part_of_model(), set_model() were removed
as they don't serve any purpose.
- The deprecated methods in IMP::kernel::Optimizer that pertain to attribute
optimization were removed. Inherit from IMP::kernel::AttributeOptimizer
instead if you want to use them in your optimizer.
- Some deprecated functionality was removed. If you encounter problems,
replace IMP::base::OwnerPointer with IMP::base::PointerMember, find logging
stuff in IMP/base/log.h, object in IMP/base/Object.h and random in
- IMP::atom::Chain now uses strings for the chain ids, to be consistent with
changes in the PDB. PDB files are written using the first character of
the chain string.
- Added orientation-dependent SOAP scoring (IMP::score_functor::OrientedSoap
and IMP::atom::OrientedSoapPairScore). Orientation-dependent SOAP scores
include those that score loops (SOAP-Loop), protein-peptide interfaces
(SOAP-Peptide) and proteins (SOAP-Protein). The library files themselves
are rather large (~1.5GB) and so are not included with IMP. They can be
downloaded separately from http://salilab.org/SOAP/.
IMP 2.1 release
- There is now some limited IMP-wide gathering of timing
statistics. You can add `--statistics=filename` to the command line
or use the IMP::base::show_timings() function to view of summary of
where IMP has spent time.
- Slack was being used inconsistently (and not always correctly) among
the various containers and restraints. If you had heavily optimized
the slack value for speed, you may want to revisit it.
- class name OwnerPointer was switched to PointerMember, to denote
more clearly a ref-counting pointer that is a class member
- The dependency handling in IMP has been rewritten to simplify it and
fix a bunch of bugs. There are now more checks of correctness, so
behavior that might have silently worked (or not worked) before may
now trigger errors. In particular, restraints/score states must have
access to the IMP::kernel::Model to do much of anything, so either
use constructors that take the model or call
IMP::kernel::ModelObject::set_model(). Also, changing your set of
inputs or outputs without calling
IMP::kernel::ModelObject::set_has_dependencies(false) is now likely
to trigger a check failure (it would just silently do the wrong
- Decorators have been cleaned up to make them behave consistently
regarding IMP::kernel::Particle vs
IMP::kernel::ParticleIndexes. This change shouldn't break existing
code, but decorators should move to the new macros
IMP_DECORATOR_METHODS(), IMP_DECORATOR_SETUP_0() etc.
- The IMP_GRAPH() and IMP_WEIGHTED_GRAPH() macros got an extra
argument describing how to show the vertexes in the graph. They also
now expose a method, eg IMP::kernel::show_as_graphviz() that writes
the graph in graphviz format to an IMP::base::TextOutput.
- Support and rules for deprecating code in IMP have been
updated. There are new macros and instructions how to use them that
should result in much better visibility about changes. See the C++
wiki for IMP for more information. And there is now an encoded
policy of keeping deprecated things around for 1 release after
- IMP is now much more selective about when it invalidates the
dependency graph. See
more information. This change should make evaluation of isolated
restraints much faster in certain situations where they were
unexpectedly slow before.
- IMP::atom::Selection has been completely rewritten as it was very
brittle. The set of particles returned may change in some cases, in
some cases because it was buggy before, in some cases because of new
- Reminder: the IMP_PROTECTED macros didn't work out well, and are now
deprecated. If you had python implementations on top of IMP base
classes that implement protected virtual methods, you may need to
remove a leading `_` on the method name, if you get `Swig director
pure virtual method called IMP::kernel::PairScore::do_get_inputs`
- The generated `cmake` files are no longer store in the
repository. Instead `tools/build/setup_cmake.py` is run after
checkouts and other git events that change the repository tree
(assuming you have run `setup_git.py`).
- Generation of documenation using `doxygen` has been refactored. It
is now done on a per-module bases, via targets like
`IMP.core-doc`. The main advantage is that changes to the doc for a
module can be tested comparatively quickly, just by building that
module's docs. On the down side, docs are no longer quite so heavily
interconnected, so dependencies only work to things that the module
actually depends on.
- The restraint and score state statistics functions were remove from
IMP::Model. They had been broken for quite a while, with no one
complaining. Statistics can be added back easily if requested.
- Added an IMP-specific fork of `git-flow`. It handles things like
`README.md` files when you start and finish feature branches and
provides a tool to nicely update IMP and display the change log. The
main commands of use are `git imp feature start <feature_name>`,
`git imp feature finish <feature_name>`, and `git imp update`. You
may want to remove the `git-flow` lines from your `.git/config` file
as you may accidentally type `git flow` instead of `git imp`. You
need to run `setup_git.py` to set things up.
- [RMF](http://salilab.github.com/rmf) is now included as a git
submodule rather than copied into the IMP repository. You should
rerun `setup_git.py` to make sure submodule stuff is initialized.