|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: Release 2.8.0 of MDAnalysis |
| 4 | +--- |
| 5 | + |
| 6 | +We are happy to release version 2.8.0 of MDAnalysis! |
| 7 | + |
| 8 | +This is a minor release of the MDAnalysis library, which means that it |
| 9 | +contains enhancements, bug fixes, deprecations, and other |
| 10 | +backwards-compatible changes. |
| 11 | + |
| 12 | +However, in this case *minor* does not quite do justice to what is |
| 13 | +happening in this release, given that we have (at least) three big |
| 14 | +changes/additions: |
| 15 | + |
| 16 | +1. The [license was changed](#license-change-to-lgpl) to the **GNU |
| 17 | + Lesser General Public License** so that MDAnalysis can be used by |
| 18 | + packages under *any* license while keeping the source code itself |
| 19 | + free and protected. |
| 20 | +2. We introduce the **[Guesser][guesser modules docs] API** for |
| 21 | + guessing missing topology attributes such as element or mass in a |
| 22 | + *context-dependent* manner. Until release 3.0, you should not |
| 23 | + notice any differences but under the hood we are getting ready to |
| 24 | + make it easier to work with simulations in a different *context* |
| 25 | + (e.g., with the MARTINI force field or experimental PDB |
| 26 | + files). With consistent attributes, such as elements, it becomes a |
| 27 | + lot easier to interface with tools like the cheminformatics RDKit |
| 28 | + (via the [converters][converter modules docs]). |
| 29 | + |
| 30 | + The guessers are the [GSoC 2022 project][] of @aya9aladdin with |
| 31 | + help from @lilyminium, @IAlibay, and @jbarnoud.[^guesserPR] |
| 32 | +3. We are introducing **[parallel analysis][]** for tools in |
| 33 | + [MDAnalysis.analysis][] following the simple |
| 34 | + *split-apply-combine* paradigm that we originally prototyped in |
| 35 | + [PMDA][] [^PMDApaper]. What's really exciting is that *any* analysis code |
| 36 | + that is based on [MDAnalysis.analysis.base.AnalysisBase][] can |
| 37 | + enable parallelization with a few lines of extra code---all the |
| 38 | + hard work is done behind the scenes in the base class (in a way |
| 39 | + that is fully backwards compatible!). |
| 40 | + |
| 41 | + This new feature is the work of @marinegor who brought his |
| 42 | + [GSoC 2023 project][] to completion, with great contributions by |
| 43 | + @p-j-smith, @yuxuanzhuang and @RMeli [^parallelizationPR]. |
| 44 | + |
| 45 | + Not all MDAnalysis analysis classes have parallelization enabled |
| 46 | + yet but @talagayev has been working tirelessly on already updating |
| 47 | + `GNMAnalysis`, `BAT`, `Dihedral`, `Ramachandran`, `Janin`, `DSSP` |
| 48 | + (yes, MDAnalysis has _finally_ got DSSP, based on [pydssp][], also |
| 49 | + thanks to @marinegor), `HydrogenBondAnalysis`, in addition to |
| 50 | + `RMSD`. |
| 51 | + |
| 52 | +Read on for more details on the license change and the usual |
| 53 | +information on [supported environments](#supported-environments), |
| 54 | +[upgrading](#upgrading-to-mdanalysis-version-280) your version of MDAnalysis, and a |
| 55 | +[summary of the most important changes](#notable-changes). |
| 56 | + |
| 57 | + |
| 58 | +## License change to LGPL |
| 59 | + |
| 60 | +<a href="https://www.gnu.org/licenses/lgpl-3.0.en.html"> |
| 61 | +<img src="https://www.gnu.org/graphics/lgplv3-with-text-154x68.png" |
| 62 | +title="LGPLv3" alt="LGPLv3 logo" style="float: right"/> |
| 63 | +</a> |
| 64 | + |
| 65 | +This is the first release of MDAnalysis under the **Lesser General |
| 66 | +Public License**. We have been working towards this license change for |
| 67 | +the last 3 years; this release (almost) concludes the process that we |
| 68 | +described in our [licensing update blog post][licensing update]. |
| 69 | + |
| 70 | + |
| 71 | +* **All code** is now under [LGPLv2.1 |
| 72 | + license](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) |
| 73 | + or any higher version. |
| 74 | +* The package is under the [LGPLv3 |
| 75 | + license](https://www.gnu.org/licenses/lgpl-3.0.html) or any higher |
| 76 | + version. However, once we have removed dependencies that prevent |
| 77 | + licensing under LGPLv2.1+ at the moment, we will also license the |
| 78 | + package under the same **LGPLv2.1+** as the code itself. |
| 79 | + |
| 80 | +We would like to thank all our contributors who granted us permission to |
| 81 | +change the license. We would also like to thank a number of |
| 82 | +institutions who were especially supportive of our open source |
| 83 | +efforts, namely Arizona State University, Australian National |
| 84 | +University, Johns Hopkins University, and the Open Molecular Science |
| 85 | +Foundation. We are also grateful to [NumFOCUS][] for legal |
| 86 | +support. The [relicensing team][roles] was lead by @IAlibay and @orbeckst. |
| 87 | + |
| 88 | +## Supported environments |
| 89 | + |
| 90 | +The minimum required NumPy version is 1.23.3; MDAnalysis now builds |
| 91 | +against NumPy 2.0. |
| 92 | + |
| 93 | +Supported Python versions: **3.10, 3.11, 3.12, 3.13**. Support for version |
| 94 | +3.13 has been added in this release and support for 3.9 has been |
| 95 | +dropped (following [SPEC 0][]). |
| 96 | + |
| 97 | +Please note that Python 3.13 is limited to [PyPi][] for now, the [conda-forge channel][] installs only provide support for Python 3.10 to 3.12. |
| 98 | + |
| 99 | +Supported Operating Systems: |
| 100 | + - **Linux** (on [x86-64][]) |
| 101 | + - **Windows** (on [x86-64][]) |
| 102 | + - **MacOS** (on [x86-64][] and [ARM64][]) |
| 103 | + |
| 104 | + |
| 105 | +## Upgrading to MDAnalysis version 2.8.0 |
| 106 | + |
| 107 | +To update with `mamba` (or `conda`) from the [conda-forge channel][] run |
| 108 | + |
| 109 | +```bash |
| 110 | +mamba update -c conda-forge mdanalysis |
| 111 | +``` |
| 112 | + |
| 113 | +To update from [PyPi][] with `pip` run |
| 114 | + |
| 115 | +```bash |
| 116 | +python -m pip install --upgrade MDAnalysis |
| 117 | +``` |
| 118 | + |
| 119 | +For more help with installation see the [installation instructions in the User Guide][]. |
| 120 | +Make sure you are using a Python version compatible with MDAnalysis |
| 121 | +before upgrading (Python >= 3.10). |
| 122 | + |
| 123 | + |
| 124 | +## Notable changes |
| 125 | + |
| 126 | +For a full list of changes, bugfixes and deprecations see the [CHANGELOG][]. |
| 127 | + |
| 128 | +#### Enhancements: |
| 129 | + |
| 130 | +* Added `guess_TopologyAttrs()` API to the Universe to handle attribute |
| 131 | + guessing (PR #3753) |
| 132 | +* Added the `DefaultGuesser` class, which is a general-purpose guesser with |
| 133 | + the same functionalities as the existing guesser.py methods (PR #3753) |
| 134 | +* Introduce parallelization API to `AnalysisBase` and to `analysis.rms.RMSD` class |
| 135 | + (Issue #4158, PR #4304) |
| 136 | +* Add `analysis.DSSP` module for protein secondary structure assignment, based on [pydssp](https://github.com/ShintaroMinami/PyDSSP) |
| 137 | +* Improved performance of PDBWriter (Issue #2785, PR #4472) |
| 138 | +* Added parsing of arbitrary columns of the LAMMPS dump parser. (Issue #3504) |
| 139 | +* Implement average structures with iterative algorithm from |
| 140 | + DOI 10.1021/acs.jpcb.7b11988. (Issue #2039, PR #4524) |
| 141 | +* Add support for TPR files produced by Gromacs 2024.1 (PR #4523) |
| 142 | + |
| 143 | +#### Fixes: |
| 144 | + |
| 145 | + * Fix Bohrium (Bh) atomic mass in tables.py (PR #3753) |
| 146 | + * Catch higher dimensional indexing in GroupBase & ComponentBase (Issue #4647) |
| 147 | + * Do not raise an Error reading H5MD files with datasets like |
| 148 | + `observables/<particle>/<property>` (part of Issue #4598, PR #4615) |
| 149 | + * Fix failure in double-serialization of TextIOPicklable file reader. |
| 150 | + (Issue #3723, PR #3722) |
| 151 | + * Fix failure to preserve modification of coordinates after serialization, |
| 152 | + e.g. with transformations |
| 153 | + (Issue #4633, PR #3722) |
| 154 | + * Fix PSFParser error when encountering string-like resids |
| 155 | + (Issue #2053, Issue #4189 PR #4582) |
| 156 | + * Convert openmm Quantity to raw value for KE and PE in OpenMMSimulationReader. |
| 157 | + * Atomname methods can handle empty groups (Issue #2879, PR #4529) |
| 158 | + * Fix bug in PCA preventing use of `frames=...` syntax (PR #4423) |
| 159 | + * Fix `analysis/diffusionmap.py` iteration through trajectory to iteration |
| 160 | + over `self._sliced_trajectory`, hence supporting |
| 161 | + `DistanceMatrix.run(frames=...)` (PR #4433) |
| 162 | + |
| 163 | + |
| 164 | +#### Changes: |
| 165 | + |
| 166 | + * Relicense code contributions from GPLv2+ to LGPLv2.1+ |
| 167 | + and the package from GPLv3+ to LGPLv3+ (PR #4794) |
| 168 | + * only use distopia < 0.3.0 due to API changes (Issue #4739) |
| 169 | + * The `fetch_mmtf` method has been removed as the REST API service |
| 170 | + for MMTF files has ceased to exist (Issue #4634) |
| 171 | + * MDAnalysis now builds against numpy 2.0 rather than the |
| 172 | + minimum supported numpy version (PR #4620) |
| 173 | + |
| 174 | + |
| 175 | + |
| 176 | +#### Deprecations: |
| 177 | + |
| 178 | +* Deprecations of old guessing functionality (in favor of the new |
| 179 | + Guesser API) |
| 180 | + * `MDAnalysis.topology.guessers` is deprecated in favour of the new |
| 181 | + Guessers API and will be removed in version 3.0 (PR #4752) |
| 182 | + * The `guess_bonds`, `vdwradii`, `fudge_factor`, and `lower_bound` |
| 183 | + kwargs are deprecated for bond guessing during Universe |
| 184 | + creation. Instead, pass `("bonds", "angles", "dihedrals")` into |
| 185 | + `to_guess` or `force_guess` during Universe creation, and the |
| 186 | + associated `vdwradii`, `fudge_factor`, and `lower_bound` kwargs |
| 187 | + into `Guesser` creation. Alternatively, if `vdwradii`, |
| 188 | + `fudge_factor`, and `lower_bound` are passed into |
| 189 | + `Universe.guess_TopologyAttrs`, they will override the previous |
| 190 | + values of those kwargs. (Issue #4756, PR #4757) |
| 191 | + * `MDAnalysis.topology.tables` is deprecated in favour of |
| 192 | + `MDAnalysis.guesser.tables` and will be removed in version 3.0 (PR #4752) |
| 193 | + * Element guessing in the `ITPParser` is deprecated and will be removed in version 3.0 |
| 194 | + (Issue #4698) |
| 195 | + * **Unknown masses are still set to 0.0 for current version**, this |
| 196 | + will be changed **in version 3.0.0 and replaced by |
| 197 | + `Masses` "no_value_label" attribute (`np.nan`)** (PR #3753) |
| 198 | +* A number of analysis modules have been moved into their own |
| 199 | + [MDAKits][], following the [3.0 roadmap towards a trimmed down core |
| 200 | + library][roadmap]. Until release 3.0, these modules are still |
| 201 | + available through `MDAnalysis.analysis` (either as an import of the |
| 202 | + MDAKit as an automatically installed dependency of the MDAnalysis |
| 203 | + package or as the original code) but from 3.0 onwards, users must |
| 204 | + install the MDAKit explicitly and then import it by themselves. |
| 205 | + |
| 206 | + * The `MDAnalysis.analysis.encore` module has been deprecated in |
| 207 | + favour of the [mdaencore]() MDAKit and will be removed in version |
| 208 | + 3.0.0 (PR #4737) |
| 209 | + * The `MDAnalysis.analysis.waterdynamics` module has been deprecated in favour |
| 210 | + of the [waterdynamics][] MDAKit and will be removed in version 3.0.0 (PR #4404) |
| 211 | + * The `MDAnalysis.analysis.psa` module has been deprecated in favour of |
| 212 | + the [PathSimAnalysis][] MDAKit and will be removed in version 3.0.0 |
| 213 | + (PR #4403) |
| 214 | +* The MMTF Reader is deprecated and will be removed in version 3.0 as |
| 215 | + the MMTF format is no longer supported (Issue #4634). |
| 216 | + |
| 217 | + |
| 218 | + |
| 219 | +## Author statistics |
| 220 | + |
| 221 | +This release was the work of 22 contributors, **10** of which are **new contributors**. |
| 222 | + |
| 223 | +Our **new contributors** are: |
| 224 | +- @aditya292002 |
| 225 | +- @pstaerk |
| 226 | +- @kainszs |
| 227 | +- @SampurnaM |
| 228 | +- @leonwehrhan |
| 229 | +- @PythonFZ |
| 230 | +- @kurtmckee |
| 231 | +- @laksh-krishna-sharma |
| 232 | +- @MattTDavies, |
| 233 | +- @talagayev |
| 234 | + |
| 235 | +## Acknowledgements |
| 236 | + |
| 237 | +MDAnalysis thanks [NumFOCUS][] for its continued support as our fiscal sponsor and |
| 238 | +the [Chan Zuckerberg Initiative][] for supporting MDAnalysis under EOSS4 and EOSS5 awards. |
| 239 | + |
| 240 | +— @IAlibay ([release manager][roles]) on behalf of the [MDAnalysis Team][] |
| 241 | + |
| 242 | + |
| 243 | +---- |
| 244 | + |
| 245 | + |
| 246 | +[^guesserPR]: The Guesser API was a _big_ undertaking: Her merged [PR |
| 247 | + #3753][] totalled 668 (!) comments. We look forward to the |
| 248 | + community providing Guessers for specific context. |
| 249 | + |
| 250 | +[^PMDApaper]: Shujie Fan, Max Linke, Ioannis Paraskevakos, Richard |
| 251 | + J. Gowers, Michael Gecht, and Oliver Beckstein. *PMDA - Parallel |
| 252 | + Molecular Dynamics Analysis.* In Chris Calloway, David Lippa, |
| 253 | + Dillon Niederhut, and David Shupe, editors, *Proceedings of the |
| 254 | + 18th Python in Science Conference*, 134 – 142. Austin, |
| 255 | + TX, 2019. SciPy. doi:[10.25080/Majora-7ddc1dd1-013](https://doi.org/10.25080/Majora-7ddc1dd1-013). |
| 256 | + |
| 257 | +[^parallelizationPR]: Adding parallelization in a transparent manner |
| 258 | + was quite a difficult undertaking that touched many parts of the |
| 259 | + analysis code and required a lot of thought. Feedback is very |
| 260 | + welcome! See [PR #4162][] with 713 (!) comments. |
| 261 | + |
| 262 | +[guesser modules docs]: https://docs.mdanalysis.org/stable/documentation_pages/guesser_modules.html |
| 263 | +[converter modules docs]: https://docs.mdanalysis.org/stable/documentation_pages/converters.html |
| 264 | + |
| 265 | +[GSoC 2022 project]: {{ site.baseurl }}{% post_url 2022-12-9-Aya-gsoc-final-report %} |
| 266 | +[GSoC 2023 project]: {{ site.baseurl }}{% post_url 2024-01-18-gsoc2023_marinegor %} |
| 267 | +[parallel analysis]: https://docs.mdanalysis.org/stable/documentation_pages/analysis/parallelization.html |
| 268 | +[MDAnalysis.analysis.base.AnalysisBase]: https://docs.mdanalysis.org/stable/documentation_pages/analysis/base.html#MDAnalysis.analysis.base.AnalysisBase |
| 269 | +[PR #3753]: https://github.com/MDAnalysis/mdanalysis/pull/3753 |
| 270 | +[PR #4162]: https://github.com/MDAnalysis/mdanalysis/pull/4162 |
| 271 | +[pydssp]: https://github.com/ShintaroMinami/PyDSSP |
| 272 | +[MDAnalysis.analysis]: https://docs.mdanalysis.org/stable/documentation_pages/analysis_modules.html |
| 273 | +[PMDA]: https://github.com/mdanalysis/pmda |
| 274 | +[SPEC 0]: https://scientific-python.org/specs/spec-0000/ |
| 275 | +[x86-64]: https://en.wikipedia.org/wiki/X86-64 |
| 276 | +[ARM64]: https://en.wikipedia.org/wiki/Apple_M1 |
| 277 | +[installation instructions in the User Guide]: https://userguide.mdanalysis.org/stable/installation.html |
| 278 | +[conda-forge channel]: https://anaconda.org/conda-forge/mdanalysis |
| 279 | +[PyPi]: https://pypi.org/project/MDAnalysis/ |
| 280 | +[NumFOCUS]: https://www.numfocus.org |
| 281 | +[CHANGELOG]: https://github.com/MDAnalysis/mdanalysis/blob/release-2.8.0/package/CHANGELOG |
| 282 | +[Chan Zuckerberg Initiative]: https://chanzuckerberg.com/ |
| 283 | +[licensing update]: {{ site.baseurl }}{% post_url 2023-09-22-licensing-update %} |
| 284 | +[roles]: {{ site.baseurl }}/pages/team/#roles |
| 285 | +[MDAnalysis Team]: {{ site.baseurl }}/pages/team |
| 286 | +[MDAKits]: https://mdakits.mdanalysis.org/ |
| 287 | +[roadmap]: {{ site.baseurl }}{% post_url 2023-10-25-towards_3.0 %}#a-trimmed-down-core-library |
| 288 | +[mdaencore]: https://mdakits.mdanalysis.org/mdaencore.html |
| 289 | +[waterdynamics]: https://mdakits.mdanalysis.org/waterdynamics.html |
| 290 | +[PathSimAnalysis]: https://mdakits.mdanalysis.org/PathSimAnalysis.html |
0 commit comments