OpenPathSampling 1.5 is a significant release, including many new features and enhancements. Highlights of this release are the implementation of [Spring Shooting](http://dx.doi.org/10.1063/1.4965882) and the development of new "hooks" where users can patch in custom code during the simulation process, enabling much greater flexibility.
Note that the hooks are still considered beta code, and therefore some aspects of that API may change.
**DEPRECATION:** As of OPS 1.5, `MDTrajTopology` should be imported from `openpathsampling.engines`, not from `openpathsampling.engines.openmm`.
New features and enhancements
* Spring Shooting mover/move scheme ([850](https://github.com/openpathsampling/openpathsampling/pull/850) sroet)
* "Hooks" to enable more simulation flexibility ([755](https://github.com/openpathsampling/openpathsampling/pull/755), [#911](https://github.com/openpathsampling/openpathsampling/pull/911) hejung)
* Gracious Kill Hook ([914](https://github.com/openpathsampling/openpathsampling/pull/914) hejung)
* Warn if CVDefinedVolume CVs return iterables ([1030](https://github.com/openpathsampling/openpathsampling/pull/1030))
* Shooting point selector with arbitrary bias ([1024](https://github.com/openpathsampling/openpathsampling/pull/1024))
* Add global random number generator; support in shooting pt selectors and pathmovers ([998](https://github.com/openpathsampling/openpathsampling/pull/998) sroet, [#1008](https://github.com/openpathsampling/openpathsampling/pull/1008) sroet [#1015](https://github.com/openpathsampling/openpathsampling/pull/1015))
* Move n_dofs to engine; add engine.has_constraints() ([979](https://github.com/openpathsampling/openpathsampling/pull/979))
Experimental (beta) features
* SimStore: Periodic CVs ([990](https://github.com/openpathsampling/openpathsampling/pull/990))
* SimStore: Make storable function modes customizable ([1004](https://github.com/openpathsampling/openpathsampling/pull/1004))
* SimStore bug fixes and minor improvements ([985](https://github.com/openpathsampling/openpathsampling/pull/985), [#995](https://github.com/openpathsampling/openpathsampling/pull/995), [#1002](https://github.com/openpathsampling/openpathsampling/pull/1002), [#1003](https://github.com/openpathsampling/openpathsampling/pull/1003), [#1016](https://github.com/openpathsampling/openpathsampling/pull/1016), [#1027](https://github.com/openpathsampling/openpathsampling/pull/1027)) #bugfix
Bugs fixed
* Make histogramming more robust ([1029](https://github.com/openpathsampling/openpathsampling/pull/1029) sroet)
* Fix problem with repeated ensemble names in MISTIS ([988](https://github.com/openpathsampling/openpathsampling/pull/988))
* Fix MISTIS minus ensemble not forbidding other states ([983](https://github.com/openpathsampling/openpathsampling/pull/983))
* Fix problem with Histogram.bin_range not getting set ([972](https://github.com/openpathsampling/openpathsampling/pull/972))
Miscellaneous improvements
* Move MDTrajTopology into `engines.topology` ([1012](https://github.com/openpathsampling/openpathsampling/pull/1012) sroet, [#1014](https://github.com/openpathsampling/openpathsampling/pull/1014)) #Deprecations
* Reduce unnecessary object creation ([975](https://github.com/openpathsampling/openpathsampling/pull/975), [#976](https://github.com/openpathsampling/openpathsampling/pull/976) sroet, [#978](https://github.com/openpathsampling/openpathsampling/pull/978) sroet)
* Fix problems with PyEMMA tests ([997](https://github.com/openpathsampling/openpathsampling/pull/997), [#1009](https://github.com/openpathsampling/openpathsampling/pull/1009), [#1018](https://github.com/openpathsampling/openpathsampling/pull/1018) sroet, [#1022](https://github.com/openpathsampling/openpathsampling/pull/1022) sroet, [#1023](https://github.com/openpathsampling/openpathsampling/pull/1023) sroet)
* make test less flaky ([999](https://github.com/openpathsampling/openpathsampling/pull/999) sroet)
* Switch notebook tests to nbval ([987](https://github.com/openpathsampling/openpathsampling/pull/987))
* Add automatic testing against OpenMM release candidates ([1019](https://github.com/openpathsampling/openpathsampling/pull/1019), [#1020](https://github.com/openpathsampling/openpathsampling/pull/1020), [#1021](https://github.com/openpathsampling/openpathsampling/pull/1021))
* Improve interactions with CodeCov ([980](https://github.com/openpathsampling/openpathsampling/pull/980), [#991](https://github.com/openpathsampling/openpathsampling/pull/991), [#1025](https://github.com/openpathsampling/openpathsampling/pull/1025))
* Improvements to the documentation ([939](https://github.com/openpathsampling/openpathsampling/pull/939), [#970](https://github.com/openpathsampling/openpathsampling/pull/970), [#1010](https://github.com/openpathsampling/openpathsampling/pull/1010) sroet)
* Pin OpenMM != 7.5.1 ([1017](https://github.com/openpathsampling/openpathsampling/pull/1017))
* Pin sqlalchemy!=1.4.0 ([996](https://github.com/openpathsampling/openpathsampling/pull/996))
* Add Python 3.8, 3.9 to testing matrix ([993](https://github.com/openpathsampling/openpathsampling/pull/993))
* fix numpy 1.20 DeprecationWarnings ([974](https://github.com/openpathsampling/openpathsampling/pull/974))