4 # For IMP 2.3.1 # {#changelog_2_3_1}
6 - Update to IMP::pmi to support the Nup84 and rnapolii biological systems.
8 # For IMP 2.3.0 # {#changelog_2_3_0}
9 - 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.
10 - Binary installers
for 64-bit Windows are now available.
11 - The `.py` extension has been removed from all Python applications, so that they are consistent with the C++ applications.
12 -
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.
13 - The integrative docking (idock) application now employs SOAP to improve the scoring.
14 - 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.
15 - 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.
17 # For IMP 2.2.1 # {#changelog_2_2_1}
18 - Bugfix: PoseScore (see the ligand_score application) should now match that used by the Pose&Rank web server (http:
20 # For IMP 2.2.0 # {#changelog_2_2_0}
21 - 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.
22 - 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.
25 - 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.
26 - Command line options are now divided into normal and advanced ones. You
do `--help_advanced` to
show the advanced ones.
28 - IMP::atom::reate_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.
29 - IMP::atom::
get_rmsd(IMP::atom::Selection, IMP::atom::Selection, const IMP::algebra::Transformation3D&) was deprecated. Use IMP::atom::
get_rmsd_transforming_first() instead.
31 - 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 when available.
32 - 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.
33 - The container implementations has been cleaned up and simplified a bit. This should not change most usage.
35 - [Eigen](
#Eigen) is now included with IMP.
36 - The deprecated
function IMP::kernel::Optimizer::set_restraints() was removed. Use IMP::kernel::
Optimizer::set_scoring_function() instead.
37 - 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.
38 - 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.
39 - 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/base/random.h.
40 - 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.
41 - 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:
43 # For IMP 2.1.1 # {#changelog_2_1_1}
44 - Added support
for Mac OS 10.9
46 # For IMP 2.1 # {#changelog_2_1}
47 - 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 a summary of where IMP has spent time.
48 - 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.
49 - Class name OwnerPointer was switched to PointerMember, to denote more clearly a ref-counting pointer that is a class member.
50 - 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).
51 - 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.
52 - 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.
53 - Support and rules for deprecating code in IMP have been updated. There are new macros and instructions on 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 deprecation.
54 - IMP is now much more selective about when it invalidates the dependency graph. See [Dependencies](http:
55 - 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 bugs.
56 - 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` messages.
57 - The generated `cmake` files are no longer stored 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`).
58 - Generation of documentation using `doxygen` has been refactored. It is now done on a per-module basis, 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.
59 - The restraint and score state statistics functions were removed from IMP::
Model. They had been broken for quite a while, with no one complaining. Statistics can be added back easily if requested.
60 - 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.
64 # For IMP 2.0 # {#changelog_2_0}
66 - Modules and applications now have a _Maintainer_ in their `README.md`, giving the github
id of the person to whom issues should be assigned.
67 - `setup_git.py` supports the `--module` flag which will set up git hooks and things
for a git repository that contains a module.
68 - To clean up
for the release, the module dependencies are now described in a file called `dependencies.py` and the module docs in a `README.md`, both in the main module directory.
72 - Scons support was removed. Use cmake to build IMP, it is way better.
73 - Examples are run with a `--test` argument when IMP is built with
internal checks. Expensive examples should check
this flag and shorten what they
do in order to
try to test all their code without taking too
long.
75 - The IMP_BIG_ENDIAN and IMP_LITTLE_ENDIAN preprocessor symbols are deprecated in favor of the BOOST_BIG_ENDIAN and BOOST_LITTLE_ENDIAN symbols.
77 -
IMP::base::WarningContext now outputs warnings immediately. This change was needed as the previous behavior resulted in occasional core dumps when the libraries
for log support were unloaded before the libraries where
static IMP::base::WarningContexts were declared. And there was no easy way to detect such problems.
78 - You can now (probably) build IMP with [CMake on IMP wiki](https:
79 - The maximum logging level and check level can now be controlled independently of the build mode. To, for example, enable progress level logging in a fast build, add maxlog="
PROGRESS" to your config. The maximum check level for `release` has been reduced to IMP::
USAGE as that speeds things up a bit.
80 - The way applications are structured and specified has been regularized and simplified. Python files are automatically copied/installed and binary executables are compiled from each found `.cpp` file linked with any `.cpp` files contained in a subdirectory called `lib`. Nothing needs to be put into the SConscript file.
81 - The Python constants like IMP.algebra.has_cgal went away as swig autogenerates ones like IMP.algebra.IMP_ALGEBRA_HAS_IMP_CGAL. While the latter are a bit uglier, the constants aren't used much and having them be auto generated is nice.
82 - There have been some major changes to the build system. The main one is that the SConscripts in the directories below the module directory aren't really used. They are being removed from the repository. Now everything really is off of file locations (eg all test_* in test is a test, each *.cpp in bin becomes a program etc). This greatly simplifies the build system, which has, historically been a disaster. You can now define dependencies by dropping files into a dependency subdirectory in your module, no need to mess with the SConscript.
83 - Building IMP now always requires specifying a `repository` argument. This was always required for out of source builds, which is what one should be doing, but is now required for in source builds to, so as to make accidentally polluting your source with an in-source build harder. Use `repository="."` in that case.
84 - The HDF5 functionality in RMF was reorganized. Specifically, the headers were moved into `RMF/HDF5`, the Python functionality into `RMF_HDF5` and the code into namespace `RMF::HDF5` and all mentions of `HDF5` or `hdf5` in the class and function names were removed.
85 - Support for IMP-wide command line flags have been added to IMP::base in the base/flags.h file. They provide a simple command line parsing interface that can be used from C++ and Python. In addition, various functionality in IMP is automatically exposed on the command line when those functions are used. For example, one can control logging, checks or profiling. See IMP/base/flags.h for (some) more info.
86 - OpenMP support in IMP is officially released. All tests pass. But there has been little specific testing so far.
87 - Access to attributes using IMP::
ParticleIndex and the IMP::
Model now works from Python. See IMP::
Model::add_attribute() and kin.
88 - IMP::ParticleKey and IMP::ParticlesKey were renamed to IMP::
ParticleIndexKey and IMP::
ParticleIndexesKey respectively as that is what they store. Typedefs were provided to support old code.
89 - Indexes have been added to the docs connecting classes with all the methods that return them, examples that use them and methods that take them. And all methods that are used in examples with the examples they are used in. Please check them out and
report issues and ways to improve things. You can find links on the main page.
90 - The docs for a modules/biological systems/applications should now be found in an `overview.dox` in the module `doc` folder. Modules in IMP svn have been updated. For external modules, you can just move a `overview.dox` from that was previously generated into your `doc` folder and (eventually) remove the lines from your `doc/SConscript`. This makes it easier to use the full range of doxygen markup, as well as removes the need to escape doxygen markup for Python.
91 - Examples have now been simplified into full blown doxygen examples. This involves merging the `.py` and `.readme` files (putting `\
#\#` in front of each line of the `.readme`) and adding a `## \\example module/examplename.py` line at the begginning. You can use `./tools/updaters/update_examples.py modules/mymodule` to update a module that was not already updated.
92 - IMP::base::FailureHandler has been removed as it wasn
't used.
93 - Handling of data and includes has been simplified. All appropriate files in the corresponding directories are linked into build/installed. This is only likely to be a problem if you had broken headers sitting around `include`. If so, just comment them out, or move them some place nicer.
94 - Modules now must be in a folder called `modules`, which must have an `description.py` file.
95 - The build system should now be a little better about cleaning up after itself.
96 - How headers/doc files/data/examples
97 - The IMP_PROTECTED macros didn't work out well, and are now deprecated. Sorry. 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.
98 - Nice version numbers will now be generated
if you use git. You need to rerun
99 tools/git/developer_tools/init_git
if you have an existing clone.
102 - 11/9: RMF is now an external library shipped with IMP. IMP will build it and install it automatically
if you have cmake version 2.8 or higher installed.
103 - 11/9: Updated support macros
for IMP::Restraint and
IMP::ScoreState classes have been added (IMP_RESTRAINT_2() and IMP_SCORE_STATE_2()) that make it easier to return dependencies on things other than IMP::
Particle and IMP::
ScoreState objects. In addition, the dependency functions on scores and modifiers have been updated similarly and standardized. In general this should not cause backward compatibility problems unless you were overriding the IMP::
ModelObject::do_get_inputs() in IMP::Restraint and using the IMP_RESTRAINT() macro. In that case update to the IMP_RESTRAINT_2() macro.
104 - 11/8: Support has been added for the C++11 keywords override (
IMP_OVERRIDE) and final (
IMP_FINAL). They allow you to tell the compiler to produce an error if the marked method does not override/implement a parent's method and if anything overrides a given method, respectively.
105 - 11/8: IMP::
SingletonModifier::apply_indexes() and IMP::
SingletonScore::evaluate_indexes() now require an upper and lower bound index (you can just pass 0 and the size of the array). We can make them option if there is a good reason.
106 - 11/8: IMP::SingletonDerivativeModifier and kin were merged into IMP::
SingletonModifier and kin as the only difference, the presence of the IMP::
DerivativeAccumulator (whose weight was always 1) wasn't very interested and the split added lots of complexity. If this has an impact on your code, let us know.
107 - 11/8; Evaluation with containers was greatly simplified, moving many methods on containers. We can add backwards compatibility versions if that is interesting.
108 - 11/7: Predicates, scores and modifiers written in Python need to update their methods for returning inputs and outputs. They should now have a method \c _do_get_outputs(self, m, particle_indexes) which should probably just return \c [m.get_particle(i) for in in particle_indexes] to return all the passed particles.
109 - 11/7: It is now preferred that IMP::Restraint and IMP::
ScoreState descendents
report dependencies directly using IMP::
ModelObject::do_get_inputs() and IMP::
ModelObject::do_get_outputs(). To do this, you should use the IMP_RESTRAINT_2() and IMP_CONSTRAINT_2() macros instead. Methods like IMP::Restraint::
get_input_particles() are now deprectated. This change was made as the old mechanism introduced a lot of extra complication and made it so that there was no way to directly depend on something that was not a
Particle or a
Container.
110 - 11/3: IMP::container::InContainerPairFilter and friends now treat pairs as unordered. A flag was added to control this.
111 - 9/5: IMP::base::Object classes now have a method IMP::base::Object::clear_caches() that clears all cache data in the
object. This is not universally implemented, but now provides a correct path for doing that. The
IMP_LIST() type macros call that method when their contents changes.
113 - 7/3: IMP_PERIODIC_OPTIMIZER_STATE() was superceeded by the class IMP::core::PeriodicOptimizerState as it is rather cleaner than the macro.
114 - 7/2: in order to make various base classes in IMP more Python friendly, macros IMP_PROTECTED_METHOD(), IMP_PROTECTED_CONSTRUCTOR() were added that properly expose such methods to Python. The standards checks now complain if \c protected is used an a class in the API.
115 - 6/24: Executables from \c module/bin are now put in \b build/module_bin/module. This removes a recurring source of errors in the build script due to the origin and destination directory have the same name in scons.
116 - 6/24: Benchmarks are now put
int \c module/benchmark and build to \c build/benchmark/module to remove a recurring source of errors.
117 - 6/18: The IMP::benchmark module supports the GPerfTools profilers when available. Benchmark executables (things in \c bin whose name starts with \c benchmark_) that use the IMP_BENCHMARK() macro have command line flags to turn on and cpu and memory profiling.
118 - 6/12: The naming rules for .i files that are in module \c pyext directories changed. They should now be \c IMP_modulename.name.i instead of \c IMP_modulename_name.i. This is to better support underscores in names.
121 - 4/4: the filter types were superceeded by the predicate types. You will only see a difference
if you develop a filter
class (eg IMP::PairFilter -derived
class) or directly call methods on filters (specifically IMP::PairFilter::get_contains()).
122 - 29/3: IMP::Particle::get_has_model() has been changed to IMP::ModelObject::get_is_part_of_model() to be consistent with other classes.
123 - 28/3: IMP::core::Mover changed slightly, adding an extra method IMP::core::Mover::
get_output_particles() and requiring the IMP::
Model be passed to the constructor. All movers in IMP SVN were updated without any difficulty. This allows movers to use information contained in the dependency graph amongst particles so they can, for example, weight moves based on scores.
124 - 26/3: IMP::SingletonContainerInput etc were added. Methods that take these as their arguments can be passed either containers or lists of particles (or tuples), as convenient. All methods that take IMP::
SingletonContainer objects should eventually move over to taking this (changing just requires changing the argument from a pointer to an Input).
125 - 22/3: Over the last week or so, which IMP headers include which other heads have been substantially simplified. This may result in compilation errors for code outside of \c svn that depended on IMP headers including other headers. In general, you want to explicitly include the header defining each thing you use.
126 - 15/3: The vector used throughout IMP is now exposed at IMP::base::Vector and what it does it documented.
127 - 10/3: IMP::domino::RestraintCache was introduced to provide a documented centeralized place to handle restraint evaluation and caching in DOMINO. In the switch various bugs involving maximum scores and IMP::
RestraintSet objects were fixed.
128 - 10/3: Scoring functions in IMP are now implemented in IMP::
ScoringFunction objects. All restraint evaluation is handled by them and they can cache various useful information to aid in accelerating restraint evaluation. Backward compatibility interfaces have mostly been provided, please complain if some important interface went away. This has greatly simplified the code as well as fixed various bugs in various types of restraint evaluation (particularly in the handling of maximum scores on IMP::Restraint and IMP::
RestraintSet objects.
129 - 29/2: The macros IMP_NAMED_TUPLE_1(),IMP_NAMED_TUPLE_2(),IMP_NAMED_TUPLE_3() were added for easy generation of simply struct for use in passing and returning values. The generated structs support comparison, output, hashing and have constructors. Use the macros instead of a boost::tuple or a a POD struct.
130 - 16/2:
Restraints now are evaluated with the correct weights when evaluated by themselves as opposed to always returning their weight as seen by the model as a whole.
131 - 15/2: The IMP::algebra grid support was rearranged and simplified. Most of the changes should be transparent. However, the IMP::algebra::grids namespace got folded into IMP::algebra, which might break some code. And various (obscure) constructors of IMP::algebra::GridD were removed. All code in svn has been changed as needed.
132 - 3/2: The IMP::domino HDF5 container has been revamped. This involves splitting it into a write version (IMP::domino::WriteHDF5AssignmentContainer) and a read version (IMP::domino::ReadHDF5AssignmentContainer).
133 - 3/2: IMP::domino::WriteAssignmentContainer and IMP::domino::ReadAssignmentContainer were added to do direct binary file writing. This is faster than the HDF5 versions.
134 - 3/2: The installation instructions have been revamped and the developer instruction, in particular, have been greatly simplified.
135 - 24/1: \c tools/
show-changes has been added that shows the changes in the history log since you last updated.
136 - 24/1: \c tools/make-source has been added that adds a source/header pair to a module
137 - 24/1: principal components analysis in IMP::algebra was generalized to work in any dimension. This required renaming the class to IMP::algebra::PrincipalComponentAnalysisD.
138 - 24/1: the output of the IMP::algebra::PrincipalComponentAnalysisD::
show() was changed to reflect the standards (values produce compact, single line output on
show). The old
show has been moved to IMP::multifit
139 - 19/1: IMP::container::ConsecutivePairContainer had IMP::container::ExclusiveConsecutivePairContainer split off of it to make the two operating mode clearer and so that there could be a clear IMP::container::ExclusiveConsecutivePairFilter to use.
140 - IMP::algebra::Grid::apply was added to provide faster access to all (or, later, part of a grid). It can be an order of magnitude or more faster than using the iterators when doing simple operations.
141 - the scons config options \c pretty and \c color were added (defaulting to True). When they are true, build commands are mostly suppressed and a much briefer description of what is being done is printed out (in color). Note that \c color mode and compilation in emacs don't get along too well.
142 - IMP::algebra::ParabolicFit was renamed to IMP::algebra::ParabolicFit2D (a backwards compatibility typedef is currently provided)
143 - IMP::algebra::LinearFit was renamed to IMP::algebra::LinearFit2D. It now supports error bars on the y-values.
145 - IMP::compatibility::checked_vector was renamed to IMP::compatibility::vector and made available to IMP as IMP::vector. Typedefs should use
this type (IMP::vector).
146 - Various IMP::algebra plural typedefs which had been
using std::vector (since they never were updated), have now been moved to IMP::vector.
150 - the core
generic restraint and score state support was moved to the kernel to avoid breaking various scores outside of IMP svn.
152 - Decomposition of restraints now results in restraints that are faster to evaluate, using the generic restraint mechanism in IMP kernel.
153 - IMP::algebra::get_unit_bounding_box_d() was changed to return a bounding box with radius 1 to be consistent with IMP::algebra::get_unit_sphere_d()
154 - A general purpose scheme to associate data with tuples of hierarchy nodes was added to the RMF format. This deprecates the special purpose bond support.
155 - the way various types of geometry is stored in RMF files was changed, breaking backwards compatibility.
157 - 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 \c base qualifier (eg base::TextInput) so that swig is happy.
158 - the source
for the kernel has been moved from \c kernel to \c modules/kernel. This is unlikely to effect anyone.
160 - IMP::domino::HDF5AssignmentTable now caches internally, which makes it several times faster than before.
161 - you can now pick which Python to use with the \c python argument to scons.
162 - the units
for BD diffusion coefficients changed to be consistent with other IMP units.
164 - 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.
165 - to work around various issues with ref counting pointers and compiler eccentricities, we added emulation of the C++0x \c
nullptr. You should prefer that to \c NULL in IMP code that you want to run cross platform.
167 - 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.
168 - 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.
169 - 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.
170 - 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.
171 - the IMP::core::MonteCarlo optimizers now support incremental evaluation. This can be a lot faster when only a few particles are moved each step.
172 - 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.
173 - 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.
174 - 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.
175 - 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.
176 - 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.
177 - IMP::domino uses the new IMP::
Model::evaluate_if_good() support to accelerate computations
178 - IMP::core::MonteCarlo can use the IMP::
Model::evaluate_if_good() support to more quickly reject
179 very bad conformations. See IMP::core::MonteCarlo::set_maximum_difference().
180 - IMP::core::ExcludedVolumeRestraint has been rewritten to be faster. It is especially
181 faster when used with IMP::
Model::evaluate_if_good()
182 - 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.
183 - 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.
184 - 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.
185 - the RMF helper binaries have been moved to their own application so that they get installed.
186 - 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.
189 - 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.
190 - Functions IMP::domino::set_assignments() and IMP::domino::get_assignments() were added which support
191 writing subset assignments to data fields in hdf5 files. These can be used to helping to distribute
192 domino on a cluster as well as debugging the sampling process.
193 - a Python function IMP.
show_graphviz() has been added that attempts to render a graph with \c dot and then open the pdf.
194 - 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.
195 - IMP.atom.
create_cover() was added to facilitate creating a summary particle for part of a hierarchy in order to accelerate restraints.
196 - 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.
197 - 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.
198 - The Python graph interface now has a remove_vertex method.
199 - 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.
200 - 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.
201 - Preliminary symmetry support has been added via the IMP::core::TransformationSymmetry and IMP::core::TransformationAndReflectionSymmetry classes.
204 - 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()
205 - IMP::core::MonteCarlo::set_temperature() was renamed to IMP::core::MonteCarlo::set_kt() as that is what it is doing.
206 - 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).
207 - IMP::algebra::grids::GridD now supports dense grids in arbitrary dimension through use of IMP::algebra::grids::DenseGridStorageD.
208 - IMP::
Optimizer now can use a list of restraint sets to compute the score rather than the complete
Model score.
209 - each IMP::Restraint now has its own weight. This is lightly tested.
210 - 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.
211 - IMP::domino::TrivialParticleStates renamed to IMP::domino::IndexParticleStates to be less judgmental
212 - IMP::domino::CompoundParticleStates and IMP::domino::RecursiveParticleStates added
213 - IMP::domino::DominoSampler now supports maximum scores on IMP::
RestraintSets (untested).
214 - the name of the clustering methods have been changed to create_ from get_ since they create objects.
215 - the names of the recently added metric based clustering support has been changed to Metric rather than Distance.
216 - 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.
217 - the fuction IMP::display::create_restraint_geometry() was added to do what its name says.
218 - 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.
219 - IMP::atom::DopePairScore has been added to IMP.
220 - IMP::atom::CHARMMStereochemistryRestraint provides a high-level simplified
221 interface to the bonded part of the CHARMM forcefield.
222 - 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.
223 - Instructions and scripts have been added for building modules and things externally to the IMP build. See the installation guide.
224 - IMP::atom::CHARMMParameters can now automatically map CHARMM-style atom and
225 residue naming to PDB-style, so CHARMM topology files can be used unmodified.
226 - IMP::atom::CHARMMTopology::add_sequence() provides a simple way to generate a topology from a
string of amino acid one-letter codes.
227 - IMP::atom::CHARMMTopology::add_coordinates() will generate atomic Cartesian coordinates from CHARMM internal coordinate information.
228 - IMP::atom::CHARMMTopology::add_missing_atoms() and
230 read from a PDB file match the CHARMM topology.
231 - building of deprecated functionality is now false by default
232 - 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, \c This typedef and makes them more consistent with the other macros in IMP.
233 - 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 \c pythonpath, \c ldpath).
234 - 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.
235 - 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.
236 - rename IMP::restrainer::Restraint::print_all_restraints() to IMP::restrainer::Restraint::show_all_restraints() to be consistent with the rest of IMP.
237 - renamed IMP::atom::get_conect_record_string() to IMP::atom::get_pdb_conect_record_string() to make clearer what it is.
238 - class and method names are now spell checked. Add missing words to spelling_exceptions in the module test call.
239 - the plural names (eg IMP.Particles()) have been removed from the Python side as they are just Python lists.
240 - 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.
241 -
IMP_VALUES() now includes IMP_OUTPUT_OPERATOR() so you no longer need two namespace macros for each value.
242 - 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.
243 - the IMP::atom::PDBSelector and IMP::atom::Mol2Selector became IMP::Object classes. All this
244 means is that they need to be created with \c new in C++ code. It also means that one is
245 no longer prohibited from storing them (not that there is much use in doing that).
246 - 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.
247 - IMP::core::RigidBody::lazy_set_reference_frame() was renamed to IMP::core::RigidBody::set_reference_frame_lazy() to fit with the standards better.
248 - the
transform based methods on referene frame which have been deprecated for a while were removed
249 - 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.
250 - IMP::atom::NonhydrogenMol2Selector was renamed IMP::atom::NonHydrogenMol2Selector to be consistent with the PDB version
254 - 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
255 benifit from better checking.
256 - 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.
257 - 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()
258 - IMP::core::WriteModelOptimizerState is going away as it duplicated IMP::WriteParticlesOptimizerState.
259 - 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.
260 - 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.
261 - 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.
262 - Logging has been improved to better
report the name of methods producing the log messages
263 - a macro
IMP_FUNCTION_LOG has been added which should be added to the start of non-member functions which produce significant logging output.
264 - 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.
265 - IMP.domino2 was renamed to IMP.domino and the old IMP.domino was moved
266 - 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.
267 - applications and biological systems now have their own documentatin pages
268 - IMP::atom::Hierarchy requires radii on its leaves
269 - IMP::atom::
read_pdb add radii to the atoms
270 - IMP::helper was merged into IMP::restrainer as all the functionality there was primarily to provide support for restrainer
271 - IMP::domino2::SubsetEvaluatorTable was removed. Pass the model and IMP::domino2::ParticleStatesTable to the IMP::domino2::RestraintScoreSubsetFilterTable instead.
272 - 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.
273 - a new example was added in the kernel to
show IMP used on a biological system
274 - IMP::display::PymolWriter now supports adding labels to things
275 - IMP::display::PairRestraintGeometry and IMP::display::ConnectivityRestraintGeometry were added to aid in visualizing those restraints.
276 - IMP::bullet was added with an optimizer to use hard body physics to resolve local collisions.
277 - 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.
278 - IMP::core::KClosePairsPairScore was added to have count based cutoffs for close pair scoring.
282 - 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.
283 - Javi added his 2D EM scoring functionality as IMP::em2D
285 - 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).
286 - 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.
287 - 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).
288 - 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
289 - a better explaination of how to use reference counted pointers has been added to IMP::Pointer.
290 - all simple, planar polygons are now supported for display when CGAL is present
292 ## Week of April 1, 2010
294 - All plural objects in Python are now simply Python lists rather than C++ recreations of Python lists. This makes compilation of the wrappers much, much, much faster. The visible changes are
295 - types are not checked until the lists are passed to C++
296 - passing std::vector types by pointer and storing passed std::vector types by pointer will not work (but should never have been done anyway from code exposed to Python)
297 - swig has issues with some overloads (not always
for obvious reasons). These are being sorted out. None are commonly used.
298 -
get_particles() on a plural
object doesn't work in Python (and is not needed in C++). Implicit conversions will always work.
300 - All containers need to know the model at time of construction. If, after updating, you get an error on a container constructor, just add the model as the first argument. This also means that emtpy lists of particles in the constructors cause check failures. We can figure out a work around if this is too annoying.
302 ## Week of March 13, 2010
303 -
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.
305 - Added IMP::algebra::ReferenceFrame3D. As part of the cleanup, IMP::core::RigidBody::set_reference_frame() replaces set_transformation(). And the reference-frame related transformation construction functions were replaced. IMP::algebra::
get_rotation_from_x_y_axes() was added to aid in the construction of reference frames (and replaces the algebra function taking three vectors).
307 ## Week of March 6, 2010
308 - 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.
311 ## Week of Feb 27, 2010
312 - IMP::algebra::decompose_rotation_into_axis_angle() was renamed to IMP::algebra::get_angle_and_axis().
314 - renamed IMP::atom::bond() and IMP::atom::unbond() to IMP::atom::
create_bond() and IMP::atom::
destroy_bond() to be more consistent with things
316 - renamed IMP::core::root() to IMP::core::
get_root()
319 ## Week of Feb 21, 2010
321 - IMP::Object::set_was_owned() was changed to IMP::Object::set_was_used() as that better reflects what the flag means.
322 - various more interpolation and endian methods had their names fixed (by adding \c get_)
325 - IMP::algebra::almost_equal() is now IMP::algebra::
get_are_almost_equal() to fit the naming conventions.
326 - the random vector generators have been cleaned up to remove redundant ones and make the names more consistent. They now have the form of either
328 - or IMP::algebra::
get_uniform_surface_cover() where the first argument is the primitive whose surface we are covering and the second is the number of points.
329 Some good sed strings are
330 - "s\
#random_vector_in_unit_sphere()\#get_random_vector_in(IMP.algebra.get_unit_sphere_3d())\#g"
331 -
"s\#random_vector_in_unit_box()\#get_random_vector_in(IMP.algebra.get_unit_bounding_box_3d())\#g"
332 -
"s\#random_vector_on_unit_sphere()\#get_random_vector_on(IMP.algebra.get_unit_sphere_3d())\#g"
333 -
"s\#random_vector_on_unit_box()\#get_random_vector_on(IMP.algebra.get_unit_bounding_box_3d())\#g"
334 -
"s\#random_vector_in_box(\#get_random_vector_in(\#g"
335 -
"s\#random_vector_on_box(\#get_random_vector_on(\#g"
336 -
"s\#random_vector_in_sphere(\#get_random_vector_in(\#g"
337 -
"s\#random_vector_on_sphere(\#get_random_vector_on(\#g"
338 -
"s\#grid_cover\#get_grid_surface_cover\#g"
339 -
"s\#uniform_coverr\#get_uniform_surface_cover\#g"
342 - Many methods in IMP::algebra were renamed to be more consistent with other methods or general conventions. Most of these simply involved adding \c get_ as a prefix and/or add a \c _3d suffix when they did not take any arguments.
346 - IMP::algebra::
get_distance(), this also carries over to the IMP::core::get_distance()
347 The following global replacements are probably safe (in sed expressions)
348 - "s\
#core.distance(\#core.get_distance\#g"
349 -
"s\#algebra.distance(\#algebra.get_distance\#g"
350 -
"s\#\.transform(\#.get_transformed(\#g" Only in C++
351 -
"s\#\.rotate(\#.get_rotated(\#g" Only in C++
352 -
"s\#rotation_from\#get_rotation_from\#g"
353 -
"s\#rotation_in\#get_rotation_in\#g"
354 -
"s\#identity_rotation(\#get_indentity_rotation_3d("
355 -
"s\#::distance(\#::get_distance(\#g"
357 -
IMP::algebra::Vector3D and
IMP::algebra::Vector3Ds were replaced by the expanded (non-
typedef) version in functions parsed by SWIG as the current situation was extremely brittle. For the moment, you should not use the typedefs in definitions that swig sees. Sorry.
358 - IMP::algebra::Sphere3DPatch was renamed to IMP::algebra::SpherePatch3D to be consistent with the other geometry and allow us to support higher dimensions in the future.
361 ## Week of Feb 14, 2010
363 - The
IMP::atom::Bond types were rearranged to reconcile the protein-centric classification with ligand support.
369 - IMP::atom::Selector and descendents renamed to IMP::atom::PDBSelector since we will soon have Mol2Selectors. In addition, the IMP::atom::IgnoreAlteriativesSelector is now IMP::atom::NonAlternativeSelector to keep the name positive, like the others. In the IMP body, all instances of the
string Selector were for
PDBSelectors and so sed was safe to use.
371 - IMP::atom::
read_pdb() lost the "ignore_alternatives" argument. Instead, all of the provided selectors, other than IMP::atom::AllSelector ignore alternatives internally. Code that uses the IMP::atom::AllSelector should probably change to the IMP::atom::NonAlternativeSelector.
373 - IMP::example renamed (from examples)
377 ## Week of February 3, 2010
379 - The model io code as moved into the kernel so it is now IMP::write_model() and IMP::read_model()
381 - Remove the version_info argument from the implementation macros. Instead, just pick up the module version info automatically.
383 - Add a function Object::get_type_name() and Object::get_module() to get the respective bits of information about each
object.
385 - Change Object::
show() to be a non-virtual wrapper which prints the
object name and other info before passing control off to Object::do_show().
387 - The containers were moved to IMP.container. See that module page for a full list of what moved. In the process, the backwards compatability functions were removed from IMP::container::PairsRestraint and kin.
393 - IMP.helper.clone() has been renamed to IMP.atom.
create_clone()
395 - IMP.misc.ConnectingPairContainer has been moved to IMP.core.ConnectingPairContainer
397 - The locations for pixels in IMP::em::DensityMap have been moved to the center of the corresponding voxel from the lower left corner.
401 - The documentation has been majorly cleaned up and simplified. Please look around and see if you like it. There are now two main pages, the introduction and the developers guide, rather than the previous plethora of pages.
403 - IMP::algebra::Cone3D::
get_bounding_sphere() has been removed since it was not of general use, not returning the bounding sphere you would expect and was trivial to implement.
405 - IMP::algebra::projection() was removed since it didn't actually project onto the segment and the name didn't follow the normal conventions. And it wasn't used.
409 ## Week of January 22, 2010
411 - A
generic geometry layer has been added (see \ref genericgeometry). Using it, IMP::atom::rmsd(),
412 IMP::algebra::alignment_taking_first_to_second() and the new IMP::atom::native_overlap() all
413 can work on either collections of either IMP::core::XYZ particles or IMP::algebra::
Vector3Ds.
415 - Deprecated functionality has been removed from IMP.core. For those still using it, IMP::core::ClosePairsScoreState was replaced by IMP::core::ClosePairContainer and IMP::core::CloseBipartitePairsScoreState was replaced by IMP::core::CloseBipartitePairContainer.
417 - The macros for Scores changed slightly. Scores not in IMP svn which use the IMP_*_SCORE macros now have to implement the get_is_changed() function outside of the class declaration and scores which use the IMP_SIMPLE_*_SCORE now don't have to implement the functions to get interactions and used particles.
419 - Rename IMP::core::MinimumPairScoreRestraint (and kin, Maximum, Singleton, Triplet and Quad) to IMP::core::MinimumPairRestraint.
421 - Add IMP::core::MinumumPairScore (and kin).
423 ## Week of January 1, 2010
425 - IMP::em is now
using Particles to resample density maps and
for fitting restraints. The previous ParticleAccessPoint mechanism is removed.
427 - IMP::UsageException and IMP::InternalException are now reserved
for their respective
428 checks (and cannot be thrown by
IMP_THROW()). This makes the distinction between API
429 exceptions (which are thrown in any build mode and should be documented and tested)
430 and helper exceptions which are only thrown when checks are turned on (and hence
431 should not be documented) clearer.
434 with weights which the model traverses as opposed to being an opaque
IMP::Restraint themselves.
435 This means that incremental evaluation of restraints in restraint sets now works and that
436 restraints in restraint sets can be individually evaluated. Existing working usage should not
437 have changed (so \c sed should manage updates just fine), but the
internal
438 implementation is completely
new, so pay attention.
440 - IMP now has a text i/o layer consisting of IMP::TextInput and IMP::TextOutput. These classes are
441 convertible to C++ streams and implicitly constructable from both streams and file paths. As a result,
442 functions that take them will work when called with a
string for a file path, a Python file or a
445 - The IMP.examples module now documents how to use the needed aspects of scons and SWIG.
447 - The IMP.examples module is used as the basis
for new modules created by the make-module script, so those include more documentation and are tested.
449 - Module overview pages are now generated from the information passed in the SConscript file, rather than from the (now removed) modulename.dox file. See the examples file
for an example of the things you can
do there.
451 - boost program options is now a checked
for dependency.
455 - Functions on rigid bodies no longer provide the IMP::core::RigidMemberRefiner as a default as it is, pretty much always, the wrong thing to use. That class may go away without notice in the future and is no longer documented.
457 - the IMP::helper::create_simple_connectivity_on_rigid_bodies() and IMP::helper::create_simple_excluded_volume_on_rigid_bodies() now both take an IMP::
Refiner as an (optional) final argument. This makes it so they can be used with the rigid bodies created from molecular hierarchies. This code still needs to be updated and the docs don't reflect what the code was or is doing, so use with caution (see notes in the header file).
459 - The IMP::helper create* functions now all take non-Object inputs as const& to make clear what is input and that there are no memory management gotchas.
461 - a new base class IMP::
Constraint has been added for constraints. Various
462 other classes have been renamed to be consistent.
464 ## Week of December 11
466 - The
interface of
IMP::PairScore changed slightly to make the
function signatures more uniform across various methods. Now all methods that take a pair of
IMP::Particle objects take a
const IMP::ParticlePair&. Previously some took that, some took an
IMP::ParticlePair and some took two
IMP::Particle*s. If you have an implementation of an
IMP::PairScore outside of svn, you will have to update your
function signatures (the compiler will tell you where). Backward compatible
IMP::PairScore::evaluate() methods have been provided, so simple users of pair scores shouldn't see a difference.
468 - IMP::core::PairRestraint takes a IMP::
ParticlePair in the constructor instead of two IMP::
Particle*s. A backwards compatible constructor can be added if needed.
470 - IMP::
ParticlePair::first and second went away since no one claimed to be using it and it complicated the implementation.
472 - The generic restraints/score states/scores infrastructure has been extended to triplets and quads (for angles and torsion angles).
474 ## Week of December 4
476 - IMP now makes use of Boost.Filesystem to manipulate paths. Things may not work well on systems where boost libs are not available which does not support posix paths. But libless boost installs generally don
't exist outside of our test systems.
478 - new functions like IMP::core::get_example_path(filename) and IMP::core::get_data_path(filename) allow one to easily find a data file named 'filename
' for the examples and library internal data.
480 - The IMP::display module has been revamped in order to support non-linear geometry. VRML support has been dropped. CMM support will be dropped unless someone requests it (as IMP::display::ChimeraWriter does all it does and more).
482 ## Week of November 19
484 - imp.xcodeproj was moved into tools and updated accordingly
486 - the bin directory finally went away
488 - IMP::display::ChimeraWriter now supports the latest version of Chimera
490 - IMP::display::CGOWriter was renamed to IMP::display::PymolWriter as it can do more than just CGO.
492 - IMP::VectorOfRefCounted::operator[] can now be used for assignments just like a normal vector. No more need to use the IMP::VectorOfRefCounted::set() method.
494 - the IMP::atom::Hierarchy constructor from an IMP::Particle* is now explicit (as were the ther decorator constructors)
497 ## Week of November 12
499 - All exception types are now mapped to equivalent classes in Python. The
500 class hierarchy is similar (e.g. IMP::ModelException derives from IMP::Exception
501 in both C++ and Python) so all IMP exceptions can be caught in Python using
502 "except IMP.Exception". For convenience, the IMP::IOException,
503 IMP::ValueException and IMP::IndexException classes in Python also derive from
504 the similarly-named standard Python classes (IOError, ValueError and IndexError
507 ## week of October 29 Update
509 - You can now add members to rigid bodies via IMP::core::RigidBody::add_member(). These members can be other rigid bodies (although this functionality is only lightly tested).
511 - The code to get bounding volumes for IMP::atom::Hierarchy has been moved to the atom module, as as the clone and destroy code. They can be found at IMP::atom::clone(), IMP::atom::destroy(), IMP::atom::get_bounding_box().
513 - Added IMP::core::VolumeRestraint.
515 - Several functions have been added to helper in creating restraints. They are create_simple_connectivity_on_rigid_bodies(), create_simple_connectivitiy_on_molecules(), create_simple_distance(), create_simple_diameter(), create_simple_em_fit(), and create_simple_excluded_volume_on_rigid_bodies(). Functions load_em_density_map() and set_rigid_bodies() are added as well. See IMP::helper for more information.
518 - IMP::ScoreStates are further hidden. Namely, IMP::core::RigidBody constructs the needed score states internally, doing away with the need for the create functions (which have been done away with). In addition there are new decorators IMP::core::Cover and IMP::core::Centroid which manage their respective score states, further doing away with more create methods. The hierarchy-based create method for rigid bodies has been moved to the atom module and is called IMP::atom::rigid_body_setup_hierarchy().
520 - IMP::em::read_map() will figure out the file type to use automatically from the extension. Other such methods should follow suite.
522 - A class IMP::core::StructureSet has been added to provide a convenient way to manage solutions of optimization runs.
524 - IMP::core::RigidBodyMover now takes its angle argument in radians and is documented as such.
526 - IMP::core::ClosePairsScoreState and IMP::core::CloseBipartitePairsScoreState have been replaced by IMP::core::ClosePairContainer and IMP::core::CloseBipartitePairContainer. The score states have been marked as deprecated and are mostly still there, but are more limited than they were.
528 - IMP::core::AllPairsPairContainer has been renamed to IMP::core::AllPairContainer and a bipartite version has been added.
530 - All containers now keep track of what they looked like on the previous time step.
532 - The IMP::core::ListPairContainer and IMP::core::ListSingletonContainer have had their interface reduced a bit in order to make implementing change tracking easier.
534 - The set of exceptions has been simplified to go along with simplification of the checks. We now have IMP::InternalException and IMP::UsageException which are thrown by the respective checks (and the former is thrown by IMP_FAILURE()). When you want to to pass an exception back to Python use one of IMP::ValueException or IMP::IndexException or IMP::IOException. There is also a new macro, IMP_THROW() to be used when you want to throw an exception with a nice error message. Please look at code you have worked on and make sure that the exceptions make sense given the new clarifications.
536 - An IMP::ModelException is now thrown when IMP::Particle attributes attain invalid values. This exception can be caught to recover from failures of IMP::core::ConjugateGradients or difficult restraints.
538 ## Week of October 15
540 - The set of functions needed to get meta information about IMP::Restraint and IMP::ScoreState objects has hopefully stabilized. Sorry about the thrashing. If you have restraints or score states not in SVN, see the corresponding IMP_RESTRAINT type macros, the IMP::Interaction class and base classes for what exactly you need to implement.
544 - IMP::Interaction was modified to split IMP::interaction::get_used_particles() into IMP::interaction::get_read_particles() and IMP::interaction::get_write_particles(). This makes it possible to check for IMP::ScoreState objects being in an inconsistent order (so that the input to one is updated after it is read). Later, we will be able to automatically order the score states ensure that there are no problems.
546 - IMP::atom::Hierarchy has been modifier to get rid of the IMP::atom::Hierarchy::Type. Instead, all types are contained in the decorators. IMP::atom::get_by_type() was also updated to reflect this.
548 - IMP_check() and IMP_assert() have been
549 replaced with IMP_USAGE_CHECK() and IMP_INTERNAL_CHECK()
550 respectively. Hopefully this makes it clearer when to use
551 which. IMP::set_check_level() has been revised accordingly (to use
552 IMP::USAGE and IMP::USAGE_AND_INTERNAL). Also, IMP_failure() and
553 IMP_not_implemented() have been renamed to IMP_FAILURE() and
554 IMP_NOT_IMPLEMENTED() to make all macros be all caps. To update
556 - replace IMP.EXPENSIVE with IMP.USAGE_AND_INTERNAL
557 - replace IMP.CHEAP with IMP.USAGE
558 - replace IMP_assert and IMP_check as above.
561 - 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.
563 - .cpp, .h, .py and SConscript files which contain the string "DO NOT COMMIT" will be rejected on checkin. Use this to make experimental or debugging changes you are making so you don't accidentally commit them.
565 - The search module is no longer built by
default and is not longer supported. It will
get moved out of svn shortly.
569 ## Week of September 27
571 - Some support
for gather statistics has been added to
IMP::Model (see IMP::Model::set_gather_statistics()). If requested, an API can be provided so that the individual data points can be returned to programs.
575 - The SWIG input files were renamed from swig.i to swig.i-in to aid in dependency tracking.
577 - rigid bodies now have two sets of particles associated with them in the various places they are used. One is the
IMP::core::RigidBodyMember particles, as was previously the
case. The other is defined through a refiner (and could be the RigidBodyMember particles
if a IMP::core::RigidMembersRefiner is used). The idea is that you sometimes want some particles which are transformed along with the rigid body, but which are not really part of the representation of the rigid body. Examples would include marker points or multiresolution representations of proteins.
579 ## Week of September 20
581 - all \c .i files have been renamed to start with \c IMP_ to help make dependency tracking easier.
583 -
static builds (builds with \c
static=True) build both the static and dynamic libraries and just static executables
585 - the \c profile build target has been removed as \c static=True does the important bit of what is needed. Just do \c linkflags=['-pg'] to add the needed link flag for \c gprof.
587 -
Restraints should now implement IMP::Restraint::unprotected_evaluate() instead of IMP::Restraint::evaluate(). The latter can now be called outside of IMP::
Model::evaluate() and will return the right answer always.
589 - \c bin/imppy.sh no longer works, as was previously warned. Use \c tools/imppy.sh instead. The bin directory will go away eventually, for now the script just tells you to use the tools version.
596 - str should now work better in Python when applied to IMP::Object objects and a few others.
Objects
598 functions directory to make it so that they work in Python. It is now a bug to \c print or \c str
599 to not
return something useful in Python
for any IMP
object.
603 - each module now has a version, eg IMP::get_module_version_info() which is also returned by the various restraions of the module. The Python code checkes that loaded libraries have the expected version numbers to try to provide better messages when runtime linking problems occur.
605 - the various bounding_box methods have been renamed to ::get_bounding_box() to be more consistent with the other names.
607 - Python documentation is now parsed by doxygen
611 - The Object::get_version_info() result now includes the SVN revision info when building from SVN. This means you can use it to more easily tell exactly what a built version of IMP was built from.
615 - Treatment of hetatoms in hierarchies (and hence pdbs) is now documented. See
IMP::atom::Hierarchy. This involved broadening
IMP::atom::Residue to handle ligands and having IMP::atom::Hierarchy::LIGAND, IMP::atom::Hierarchy::AMINOACID and IMP::atom::Hierarchy::NUCLEICACID be handled by
IMP::atom::Residue.
617 -
IMP::atom::read_pdb() currently drops HOH ATOM records on the floor. We should add a IMP::atom::Water decorator if anyone wants to handle them (since they aren't atoms and don't have elements).
619 - IMP::atom::Mass() has been added for decorating particles with mass. IMP::atom::Atom mass has been moved to that.
621 - The scheme for generating atom types is now fully specified. See the IMP::atom::AtomType documentation.
623 - IMP::atom::Atom and IMP::atom::Residue have been somewhat restructured. Some of the helper functions have been renamed to be more descriptive or removed (if they duplicated other easily accessible functionality). get_residue_index() has been removed (since you can just call
get_index() on the return result of the IMP::atom::
get_residue()). IMP::atom::
get_chain() now returns an IMP::atom::Chain. root() was renamed to IMP::atom::
get_root() for consistency.
625 - SWIG files are now generated from a file called swig.i in the pyext directory. This file only has to contain module-specific commands such as lines to wrap headers and instantiate module templates. No more boilerplate.
627 - The contents of bin are moving to tools since the two directories both contained assorted development tools
628 (not all of which were executable). For now, bin/imppy.sh will still work, but that will go away soon.
630 - IMP::
Decorator::
show() now just takes the stream (it used to take a prefix also, which was often ignored).
631 Anyone who implemented a decorator will have to delete the second argument of their
show function.
635 -
Containers now have methods IMP::SingletonContainer::evaluate(), IMP::PairContainer::evaluate(),
637 faster than looping over the particles externally. Similarly, there is IMP::
SingletonScore::evaluate(),
640 - The decorator functions have been renamed to IMP::
Decorator::setup_particle(), IMP::
Decorator::decorate_particle()
641 and IMP::
Decorator::particle_is_instance(). A shell script \c tools/update-decorators is provided which
642 updates the names in all code in subdirectories of the current directory. Please backup things first.
644 - a function, IMP::Restraint::safe_evaluate() has been added to be used
645 when requesting the value of restraints outside of the IMP::
Model::evaluate().
649 - The atom::BondPairContainer has been renamed to atom::BondPairFilter
650 since it wasn
't a real container. A real atom::BondPairContainer has
653 - Out of source builds mostly works. To do an out of source build, make a link
654 to \c scons_tools and \c SConstruct from the source directory in the build
655 directory and then add the line \command{repository="../path_to_src_dir"} in
656 the \c config.py in the build directory. Then running \c scons in the build
657 directory will put generated files there. This allows you to make both a
658 \c release and \c fast build off of the same set of sources. Proper docs
661 - The SConscript setup for a module has been greatly simplified so it should
662 be easy enough for users to maintain their own module and updates to the
663 build system shouldn't involve changes to user SConscripts any more. This does
664 mean that any non-svn modules need to be updated. Look at IMP.core or another
665 module and copy what is there. Again, proper docs will be added soon.
670 - Per Javi
's suggestion, the conventions have been split into \ref
671 devguide_conventions "Coding conventions" and \ref introduction_conventions
672 "API conventions" and linked from the main page.
674 - benchmarks got moved to their own module, IMP::benchmark and will
675 now be tracked over time
679 - FilteredListSingletonContainer and FilteredPairSingletonContainer
680 went away as there was too much hard to factor code shared with
681 IMP::core::ListSingletonContainer and IMP::core::PairSingletonContainer. The
682 IMP::core::ClosePairsScoreState is now handled by a list of filters
683 on the class itself. That is, do
684 IMP::core::ClosePairsScoreState::add_close_pair_filter() to add a
687 - Hooks have been added to allow actions to be taken on an assertion
688 or check failure. See IMP::HandleFailure and its descendants for
691 - IMP::display::CGOWriter has been much improved and now allows
692 provides lots of display-time control and easy building of
695 - Generic optimizer states have been added
696 (IMP::core::SingletonsOptimizerState and
697 IMP::core::PairsOptimizerState).
701 - box distributions (IMP::algebra::random_vector_on_box(),
702 IMP::algebra::random_vector_in_box()) take bounding boxes
704 - IMP::em::DensityMap are now IMP::Object objects. Some current
705 allocations on the stack may need to be changed (since ref counted
706 objects can't be stack allocated).
708 - IMP::em::DensityMap::Read() is now deprecated (as is
709 IMP::em::DensityMap::Write) as they violated a slew of
718 - Hierarchys to IMP::atom::Hierarchies
720 - IMP::Particles has been changed to a new type. It no longer plays
721 quite so well with Python lists (you can't create one from an
722 arbitrary Python list).
724 - The containers for multiple decorators have been revised to make them
725 more useful. See IMP::Decorators. You can now implicitly convert,
726 for %example, a IMP::core::XYZs to an IMP::Particles (as well as use
728 collection of particles with a certain type now instead take a
731 - A method that has expectations about the particles it takes should
732 take decorators rather than particles. That is, anything which
733 expects IMP::core::XYZ particles, should take an IMP::core::XYZs
734 instead of IMP::Particles.
736 -
IMP_LIST() now takes an extra argument (the name of the plural
739 - In C++ IMP::
Decorator objects are implicitly convertible to
740 IMP::
Particle* objects. Unfortunately, making this work in Python is
743 - More methods take and return decorators rather than
744 IMP::Particles. This means it is clearer what their expectations are
745 and what they produce.
749 - The IMP::helper module was added and various functionality moved
750 there. See its documentation page
for a list of what is there.
752 - IMP::algebra::SphericalCoords was renamed to
757 with the other similar classes.
759 - We are trying to be a bit more specific about what is expected from
761 extracting a representation from a hierarchy,
762 IMP::atom::get_detailed_representation(), and
763 IMP::atom::get_simplified_representation()
765 - A method has been added to produce a simplified copy of an
767 benefit from other people inspecting the output and saying how it
772 methods like IMP::algebra::bound_box(
Sphere3D) which gets the
773 bounding box of a sphere.
775 - Each IMP::Object has its own log level. If
776 IMP::Object::
set_log_level() is called with a value other than
777 IMP::
DEFAULT, the value is used for code within and called by the
778 object. To support this in your objects you need to add
779 IMP_OBJECT_LOG to the start of each major method. It has been added
780 to some of the core objects.
784 - IMP::atom::MolecularHierarchy has been renamed to
786 "s\#MolecularHierarchy\#Hierarchy\#g" my_files}
788 - the
long-deprecated Name(
Decorator) was removed
790 - The decorator suffix has been removed from decorator names.
792 - Unit conventions have been established and documented for distance,
793 energy, force and angle.
795 - there is a function IMP::atom::
create_protein() to create a coarse
796 grained protein. The function is crude so far, but the idea is that
797 we should have standard ways of generating such things so that
798 everyone can benefit from best practices.
800 - a class IMP::atom::BondGraph has been added so Boost.Graph
801 algorithms can be used with bond graphs
803 - the IMP-specific doxygen commands have been documented.
805 - the doxygen commands unstable{name} and untested{name} have been
806 added to doxygen to be used
for marking methods and functions as
807 likely to change or not well tested. Pass the name of the
class or
810 - bonds can now be added to molecular hierarchies automatically see
815 - There is a IMP::Rotation2D
817 - You can now extract fixed Euler ZYZ angles from a
818 IMP::Rotation3D. This code can serve as a
template for extracting
819 other Euler angle conventions
if they are needed.
821 - IMP::algebra::rotation_between_two_vectors() changed to
822 IMP::algebra::rotation_taking_first_to_second() to make it clear
823 which direction the rotation goes.
827 -
IMP::Decorator derived objects are now convertible to
bool. So code
828 like \code
if (d) { blah } \endcode works.
830 - IMP::Decorator::cast now returns a null decorator (\c
831 DecoratorName()) rather than throwing an exception. This might make
834 - New IMP::statistics module for statistical methods
839 - Support
for taking advantage of rigid bodies in collision detection
842 - All IMP::core::ClosePairsScoreState-related functinality has been
843 optimized and should be noticeably faster.
845 - The EMBED project has been merged into the IMP::em module. Thus, it
846 is no longer necessary to obtain EMBED separately to build IMP::em.
848 - All C++ methods which work with std::istream or std::ostream
849 arguments should now be usable from Python: any Python file-like
852 - The SWIG
interface now ties in to the reference counting mechanism
853 used in the C++ code,
for all classes derived from
854 IMP::RefCounted. So,
for %example, deleting a Python
object should
855 not free the underlying C++
object if another C++
object holds a
856 reference to it, and unrefing a C++
object should not
delete it
if a
857 Python
object still holds a reference to it. There should be no
858 further need to manually keep references to Python objects to
859 prevent things from being prematurely cleaned up. This should be
860 transparent to the user; please
report any problems.
862 - IMP::atom::AtomDecorator no longer inherits from
863 IMP::core::XYZDecorator.
867 - The decorators IMP::atom::AtomDecorator, IMP::atom::ChainDecorator,
868 IMP::atom::ResidueDecorator etc. now inhertic from
869 IMP::atom::MolecularHierarchyDecorator. This means they can set
870 their IMP::atom::MolecularHierarchyDecorator::Type properly and
871 saves a lot of typing in the common
case. We can always make
872 hierarchy decorators zero memory overhead
if we find that the cost
875 - The base classes IMP::Comparable, IMP::NullDefault,
876 IMP::ValidDefault and IMP::UninitializedDefault were added to
877 document what the
default constructors
do for various objects in
882 - IMP::Object now defines pure
virtual methods
883 IMP::Object::get_version_info() and IMP::Object::
show(). All
884 non-abstract classes which inherit from IMP::Object must implement
885 them. Doing this means they are more uniformly implemented and are
886 documented in one place.
888 - IMP::Object is now reference counted (the only objects this changes
890 IMP::
Model objects must be created on the heap.
892 - IMP::RefCounted has had its name changed and no longer inherits from
893 IMP::Object. This makes it easier to use independently.
895 - the docs for reference counting (IMP::RefCounted) and and IMP::
Decorator
898 - running doxygen produces no warnings. Let's try to keep it that
899 way. Run \command{scons doc > /dev/null} before you check in large
900 blocks of
new code to make sure that you didn
't introduce warnings.
902 - Helper classes have been added to make SingletonModifier and
903 PairModifier objects look like functors for C++ and Python. This
904 makes it so you can use \c map in Python and \c for_each in C++. See
905 IMP::SingletonFunctor and IMP::PairFunctor for more information.
907 - The recent changes page has moved to a doxygen page to make it
908 easier to link changes back to the relevant source code.
912 - create_rigid_body(), create_rigid_bodies(), create_centroid()
913 etc. now require you to add the score state to the model
914 yourself. Whether the rigid body is enforced or not can be
915 controlled by adding or removing the returned IMP::ScoreState.
917 - All previously deprecated code has been removed. This includes
918 indexes in particles, the no-argument constructor for particles and
919 the functionality that was moved from core to atom.
921 - The IMP::core::RigidBodyDecorator and
922 IMP::core::RigidMemberDecorator have been simplified by removing the
923 traits classes. There is now only one type of rigid body and it
924 stores the list of member particles internally.
926 - IMP::core::NameDecorator has been deprecated as IMP::Particles have
927 built in names (use IMP::Particle::get_name(),
928 IMP::Particle::set_name()).
930 - IMP::atom::ChainDecorator has been added
934 - A new IMP::display::Writer, IMP::display::ChimeraWriter has been
935 added which exports geometry to native Chimera constructs. It
936 probably should be used instead of bild and cmm for most purposes as
937 it combines the best of both types.
939 - compose() for transformation is now a free function so
940 compose(rotation, vector) will work via promotions.
942 - the geometry classes have been cleaned up and are now more
943 consistent with IMP standards (and more likely to do what their
944 names/comments suggest). See IMP::algebra::Sphere3D,
945 IMP::algebra::Cylinder3D, IMP::algebra::Segment3D,
946 IMP::algebra::Plane3D etc.
948 - ParticleRefiner has been renamed to IMP::Refiner since the Particle
949 was long and unnecessary.
Restraints create_decomposition(const RestraintsTemp &rs)
Return the decomposition of a list of restraints.
BoundingBoxD<-1 > BoundingBoxKD
Typedef for Python.
void report(std::string benchmark, std::string algorithm, double time, double check)
Report a benchmark result in a standard way.
IMP::base::Vector< IMP::base::Pointer< Container > > Containers
IMP::kernel::PairModifier PairModifier
Transformation2D get_transformation_aligning_pair(const Vector2Ds &set_from, const Vector2Ds &set_to)
#define IMP_WEIGHTED_GRAPH(Name, directionality, VertexData, ShowVertex)
Define a graph object in IMP.
SphereD< 3 > Sphere3D
Typedef for Python.
VectorD< D > get_random_vector_on(const BoundingBoxD< D > &bb)
Generate a random vector on a box with uniform density.
IMP::kernel::ModelObject ModelObject
void show_timings(TextOutput out)
Chain get_chain(Hierarchy h)
double get_mean(const cv::Mat &mat, const cvIntMat &mask)
#define IMP_COMPARISONS_2(Name, f0, f1)
Implement comparison in a class using field as the variable to compare.
Key< 6, true > ParticleIndexesKey
The type used to identify a particle attribute in the Particles.
#define IMP_SHOWABLE_INLINE(Name, how_to_show)
Declare the methods needed by an object that can be printed.
algebra::Sphere3D get_bounding_sphere(const Hierarchy &h)
Rotation3D get_rotation_from_x_y_axes(const Vector3D &x, const Vector3D &y)
void remove_charmm_untyped_atoms(Hierarchy hierarchy)
Remove any atom from the Hierarchy that does not have a CHARMM type.
base::Vector< VectorD< D > > get_uniform_surface_cover(const SphereD< D > &s, unsigned int n)
Generate a set of vectors which covers a sphere uniformly.
IMP::base::Vector< IMP::base::Pointer< Object > > Objects
A list of objects.
Ints get_index(const kernel::ParticlesTemp &particles, const Subset &subset, const Subsets &excluded)
IMP::kernel::ScoreState ScoreState
ParticlesTemp get_output_particles(const ModelObjectsTemp &mos)
Return all the output particles for a given ModelObject.
IMP::base::Vector< Strings > StringsList
Standard way to pass a bunch of Strings values.
IMP::kernel::PairScore PairScore
A member of a rigid body, it has internal (local) coordinates.
IMP::kernel::DerivativeAccumulator DerivativeAccumulator
IMP::base::Vector< IMP::base::Pointer< RestraintSet > > RestraintSets
Stores a 2D rotation matrix.
IMP::kernel::SingletonContainer SingletonContainer
IMP::core::RigidBody create_compatible_rigid_body(Hierarchy h, Hierarchy reference)
Rigidify a molecule or collection of molecules.
#define IMP_FINAL
Have the compiler report an error if anything overrides this method.
Hierarchy create_simplified_along_backbone(Hierarchy input, int num_res, bool keep_detailed=false)
Hierarchy create_clone(Hierarchy d)
Clone the Hierarchy.
void set_log_level(LogLevel l)
Set the current global log level.
#define IMP_FUNCTION_LOG
Beginning logging for a non-member function.
IMP::kernel::Constraint Constraint
IMP::base::Vector< IMP::base::Pointer< PDBSelector > > PDBSelectors
#define IMP_GRAPH(Name, directionality, VertexData, EdgeData, ShowVertex)
Define a graph object in IMP.
#define IMP_OBJECT_LOG
Set the log level to the object's log level.
void add_radii(Hierarchy d, const ForceFieldParameters *ffp=get_all_atom_CHARMM_parameters(), FloatKey radius_key=FloatKey("radius"))
ParticlesTemp get_particles(kernel::Model *m, const ParticleIndexes &ps)
#define IMP_DECORATOR_METHODS(Name, Parent)
IMP::base::Vector< IMP::base::WeakPointer< Restraint > > RestraintsTemp
double get_slack_estimate(const kernel::ParticlesTemp &ps, double upper_bound, double step, const kernel::RestraintsTemp &restraints, bool derivatives, Optimizer *opt, ClosePairContainer *cpc)
Object used to hold a set of restraints.
double get_volume(const Cone3D &g)
IMP::kernel::ScoringFunction ScoringFunction
Sample best solutions using Domino.
IMP::base::Vector< IMP::base::Pointer< Restraint > > Restraints
IMP::kernel::SingletonPredicate SingletonPredicate
void set_progress_display(std::string description, unsigned int steps)
Set up the progress bar with the passed description.
#define IMP_BASE_SMALL_ORDERED_SET
Macro to support platform independent declaration of a small ordered set.
#define IMP_SHOWABLE(Name)
base::Array< 2, base::WeakPointer< Particle >, Particle * > ParticlePair
IMP::kernel::Optimizer Optimizer
ParticlesTemp get_input_particles(const ModelObjectsTemp &mos)
Return all the input particles for a given ModelObject.
IMP::base::Vector< Floats > FloatsList
Standard way to pass a bunch of Floats values.
#define IMP_COMPARISONS(Name)
Implement comparison in a class using a compare function.
void destroy_bond(Bond b)
Destroy the bond connecting two particles.
virtual double evaluate(const kernel::ParticlePair &vt, DerivativeAccumulator *da) const
Compute the score and the derivative if needed.
ScoreStates maintain invariants in the Model.
Score particles based on how far outside a box they are.
DensityMap * read_map(std::string filename, MapReaderWriter *reader)
Read a density map from a file and return it.
LogLevel get_log_level()
Get the currently active global log level.
InteractionGraph get_interaction_graph(ScoringFunctionAdaptor rs, const ParticleStatesTable *pst)
Rotation3D get_rotation_about_axis(const Vector3D &axis, double angle)
Generate a Rotation3D object from a rotation around an axis.
A decorator for a point particle that has an electrostatic charge.
A class to store an fixed array of same-typed values.
IMP::base::Vector< IMP::base::Pointer< ScoreState > > ScoreStates
Hierarchy read_pdb(base::TextInput input, kernel::Model *model, PDBSelector *selector=get_default_pdb_selector(), bool select_first_model=true)
Abstract class for scoring object(s) of type ParticlePair.
IMP::algebra::Transformation3D get_transformation_aligning_first_to_second(const Vector3DsOrXYZs0 &source, const Vector3DsOrXYZs1 &target)
Compute the rigid transform bringing the first point set to the second.
IMP::kernel::Container Container
IMP::kernel::SingletonModifier SingletonModifier
const VectorD< C::DIMENSION > & get_vector_geometry(const C &g)
#define IMP_VALUES(Name, PluralName)
Define the type for storing sets of values.
base::Vector< VectorD< 3 > > Vector3Ds
Hierarchy get_root(Hierarchy h)
Return the root of the hierarchy.
void read_particles_from_buffer(const base::Vector< char > &buffer, const ParticlesTemp &particles, const FloatKeys &keys)
load found attributes into the particles
Accelerated computation of the distance between two rigid bodies.
double get_distance(const Plane3D &pln, const Vector3D &p)
Return the distance between a plane and a point in 3D.
Simple Brownian dynamics simulator.
void transform(Hierarchy h, const algebra::Transformation3D &tr)
Transform a hierarchy. This is aware of rigid bodies.
core::XYZR create_cover(const Selection &s, std::string name=std::string())
The standard decorator for manipulating molecular structures.
Simple molecular dynamics optimizer.
Display an IMP::SingletonContainer of IMP::atom::Hierarchy particles as balls.
A decorator for wrapping a particle representing a molecular bond.
A decorator for a particle representing an atom.
void write_map(DensityMap *m, std::string filename, MapReaderWriter *writer)
Write a density map to a file.
Bond create_bond(Bonded a, Bonded b, Int t)
Connect the two wrapped particles by a bond.
base::Vector< char > write_particles_to_buffer(const ParticlesTemp &particles, const FloatKeys &keys)
return a binary buffer with the data
IMP::kernel::Refiner Refiner
#define IMP_DECORATOR_SETUP_0(Name)
A base class for classes which perturb particles.
BoundingBoxD< 3 > get_bounding_box(const Cone3D &g)
double evaluate(bool tf, bool warn=true)
bool get_are_almost_equal(const double a, const double b, const double epsilon)
Compares two values (intended for doubles)
Key< 3, true > ParticleIndexKey
The type used to identify a particle attribute in the Particles.
std::string show_graphviz(Graph g)
double get_rmsd(const Vector3DsOrXYZs0 &m1, const Vector3DsOrXYZs1 &m2)
A restraint is a term in an IMP ScoringFunction.
VectorD< D > get_random_vector_in(const BoundingBoxD< D > &bb)
Generate a random vector in a box with uniform density.
double get_surface_area(const Cone3D &g)
double get_density(const DensityMap *m, const algebra::Vector3D &v)
Hierarchy read_mol2(base::TextInput mol2_file, kernel::Model *model, Mol2Selector *mol2sel=nullptr)
Create a hierarchy from a Mol2 file.
Out gather(H h, F f, Out out)
Gather all the particles in the hierarchy that meet some criteria.
FloatPair get_surface_area_and_volume(const algebra::Sphere3Ds &ss)
void write_mol2(Hierarchy rhd, base::TextOutput file_name)
Write a ligand hierarchy as a mol2 file.
Display a Bond particle as a segment.
Abstract predicate function.
Class to handle individual model particles.
void handle_error(const char *msg)
Rotation2D get_rotation_to_x_axis(const Vector2D &v)
A decorator for a particle that is part of a rigid body but not rigid.
An axis-aligned bounding box.
IMP::kernel::Sampler Sampler
Vector3D get_centroid(const Vector3Ds &ps)
Returns the centroid of a set of vectors.
IMP::base::Vector< Ints > IntsList
Standard way to pass a bunch of Ints values.
Class to represent a 3D point in spherical coordinates.
Transformation3D get_identity_transformation_3d()
Return a transformation that does not do anything.
networkx::DiGraph get_networkx_graph(Graph g)
#define IMP_THROW(message, exception_name)
Throw an exception with a message.
void show_altgraph(Graph g)
A decorator for a residue.
Transformation3D get_transformation_3d(const Transformation2D &t2d)
Builds a 3D transformation from a 2D one.
Display a plane as truncated to a bounding box.
base::Index< ParticleIndexTag > ParticleIndex
void show(Hierarchy h, std::ostream &out=std::cout)
Print out a molecular hierarchy.
IMP::base::Vector< Float > Floats
Standard way to pass a bunch of Float values.
IMP::kernel::Particle Particle
Residue get_residue(Atom d, bool nothrow=false)
Return the Residue containing this atom.
Rotation3D get_identity_rotation_3d()
Return a rotation that does not do anything.
Hierarchy create_protein(kernel::Model *m, std::string name, double target_radius, int number_of_residues, int first_residue_index=0, double volume=-1)
Create a coarse grained molecule.
Prevent a set of particles and rigid bodies from inter-penetrating.
#define IMP_LIST(protection, Ucname, lcname, Data, PluralData)
A macro to provide a uniform interface for storing lists of objects.
#define IMP_USAGE_CHECK(expr, message)
A runtime test for incorrect usage of a class or method.
IMP::kernel::PairContainer PairContainer
virtual double do_optimize(unsigned int ns)=0
override this function to do actual optimization
Sphere3Ds get_simplified_from_volume(Sphere3Ds in, double maximum_allowed_error_angstroms)
IMP::kernel::OptimizerState OptimizerState
#define IMP_COMPARISONS_1(Name, field)
Implement comparison in a class using field as the variable to compare.
void apply(const SingletonModifier *sm) const
Apply a SingletonModifier to the contents.
IMP::kernel::Decorator Decorator
A decorator for a rigid body.
double get_rmsd_transforming_first(const Transformation3D &tr, const Vector3DsOrXYZs0 &m1, const Vector3DsOrXYZs1 &m2)
Calculate the root mean square deviation between two sets of 3D points.
Dynamically build a histogram embedded in D-dimensional space.
IMP::kernel::SingletonScore SingletonScore
IMP::kernel::Restraint Restraint
IMP::core::RigidBody create_rigid_body(const Hierarchies &h, std::string name=std::string("created rigid body"))
Rigidify a molecule or collection of molecules.
IMP::kernel::RestraintSet RestraintSet
SphereD<-1 > SphereKD
Typedef for Python.
Select hierarchy particles identified by the biological name.
Applies a list of movers one at a time.
Represent a sphere in D-dimensions.
DensityMap * get_resampled(DensityMap *input, double scaling)
Get a resampled version of the map.
kernel::Restraint * create_restraint(Score *s, Container *c, std::string name=std::string())
void add_bonds(Hierarchy d, const ForceFieldParameters *ffp=get_all_atom_CHARMM_parameters())
#define IMP_OVERRIDE
Cause a compile error if this method does not override a parent method.
Display an IMP::atom::Hierarchy particle as balls.
Perform more efficient close pair finding when rigid bodies are involved.
Class for storing model, its restraints, constraints, and particles.
Display an IMP::core::XYZR particle as a ball.
ConnollySurfacePoints get_connolly_surface(const algebra::Sphere3Ds &spheres, double density, double probe_radius)
#define IMP_LIST_IMPL(Class, Ucname, lcname, Data, PluralData)
This should go in a .cpp file for the respective class.