Skip to content


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
    get_number_of_accepted_steps() instead).
  - IMP::Model::remove_restraint(), IMP::Model::get_restraints(),
    IMP::Model::get_number_of_restraints(), 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
  entire IMP::Model.

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

Read release notes


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.1 release
- Minor bug fixes.

- Update to IMP::pmi to support the Nup84 and rnapolii biological systems.


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
  considered experimental.

- 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
  the scoring.

- 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 (

- 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
  IMP::algebra::get_uniform_surface_cover(const IMP::algebra::Sphere3Ds&,double)
  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()
  were added.

  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
  when available.

- 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/ and atom/ for examples.

- The container implementations has been cleaned up and simplified a bit.
  This should not change most usage.

- [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


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

- 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

- 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
  [Dependencies]( for
  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/` is run after
  checkouts and other git events that change the repository tree
  (assuming you have run ``).

- 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
  `` 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 `` to set things up.

- [RMF]( is now included as a git
  submodule rather than copied into the IMP repository. You should
  rerun `` to make sure submodule stuff is initialized.


The 2.0.1 point release.


Release 2.0.0 at long last.
Something went wrong with that request. Please try again.