Skip to content

v2.0.0 - 2023-09-03

Compare
Choose a tag to compare
@cbouy cbouy released this 03 Sep 14:52
· 46 commits to master since this release

[2.0.0] - 2023-09-03

Summary

This is a major refactoring of the ProLIF codebase introducing new features, but also breaking changes:

  • Visualisation functions are now available through the Fingerprint object: plot_3d, plot_barcode, plot_lignetwork. A prolif.display_residues function is also available for easier debugging of structure preparation.
  • Fingerprint objects now store interaction metadata: distances, angles, and atom indices, accessible through Fingerprint.ifp.
  • ProLIF can now generate count-vectors if requested to (i.e. enumerate all the occurrences of an interaction instead of stopping at the first one) by specifying Fingerprint(count=True).
  • A new parameters argument in the Fingerprint class allows providing custom parameters for interactions (rather than having to create new interaction classes).
  • The tutorials have been rewritten and reorganized.
  • The multiprocessing backend has been switched to multiprocess and dill for better support in notebooks.
  • Refer to the Removed section for a list of breaking changes.

Added

  • Added a display_residues function to quickly visualize the residues in a Molecule
    object.
  • Added a Complex3D class for plotting interactions in 3D. Added the corresponding
    Fingerprint.plot_3d method to generate the plot directly from an FP object.
  • Added a Barcode class for plotting interactions. Added the corresponding
    Fingerprint.plot_barcode method to generate the plot directly from an FP object.
  • Added a count argument in Fingerprint. If count=True, enumerates all groups of
    atoms that satisfy interaction constraints (instead of stopping at the first one),
    allowing users to generate a count-fingerprint. The Fingerprint.to_dataframe method
    has been modified accordingly, and a Fingerprint.to_countvectors method has been
    added to generate a list of RDKit's UIntSparseIntVect from the count-fingerprint.
    The visualisation scripts have been updated to display the occurence with the shortest
    distance when a count-fingerprint is being used.
  • Added a parameters argument in Fingerprint to easily update the parameters used
    by an interaction, instead of defining a new interaction class (Issue #118).
  • Added new abstract interaction classes SingleAngle and DoubleAngle to more easily
    create custom interactions.
  • Added the vdwradii parameter to the VdWContact interaction class to update the
    radii it uses.
  • Added the Fingerprint.plot_lignetwork method to generate a LigNetwork plot directly.
  • Added LigNetwork.from_fingerprint to generate the ligplot from a Fingerprint
    instance. Added a display_all parameter for displaying all interactions instead
    of only the shortest one for a given pair of residues. Added use_coordinates and
    flatten_coordinates to control how the ligand structure is displayed.
  • Added support for displaying peptides with the LigNetwork.
  • Added Fingerprint.metadata to generate a dictionary containing metadata about
    interactions between two residues. Replaces Fingerprint.bitvector_atoms.
  • Added a vicinity_cutoff parameter in Fingerprint to control the distance cutoff
    used to automatically restrict the IFP calculation to residues within the specified
    range of the ligand.
  • Added a metadata method to the base Interaction class to easily generate metadata
    for custom interactions.
  • Added an Interaction.invert_class classmethod to easily invert the role of the
    ligand and protein residues in an interaction, e.g. to create a donor class from an
    acceptor class.

Changed

  • The tutorials have been overhauled and should now be much easier to navigate.
  • The multiprocessing and pickling backends have been switched to multiprocess and
    dill respectively, and the parallel implementation has been improved. Users should
    now be able to define custom interactions in Jupyter notebooks, IPython and so on
    without any issue (Issue #117, Issue #86).
  • The LigNetwork plot now displays the distance for each interaction on mouse hover.
  • Changed the format of the Fingerprint.ifp attribute to be a dictionary indexed by
    frame/structure index. The values are custom IFP dictionaries that can be more
    easily indexed by using residue identifier strings (e.g. ALA216.A) rather than
    ResidueId objects. Each entry contains complete interaction metadata instead of just
    atom indices.
  • All interaction classes now return more complete details about the interaction (e.g.
    distances, angles, atom indices in the residue and parent molecule).
  • Changed the default color for VanDerWaals interactions in the builtin plots.
  • Converting the IFP to a dataframe with atom indices has been optimized and now runs
    about 5 times faster (Issue #112, PR #113 by @ReneHamburger1993). Note: discarded
    by the subsequent updates to the codebase which removed the ability to have
    atom indices in the dataframe.
  • Various changes related to packaging, code formatting, linting and CI pipelines
    (PR #114).

Fixed

  • Fixed pickling properties on RDKit molecules for Windows.

Removed

  • Removed the return_atoms argument in Fingerprint.to_dataframe. Users should
    directly use Fingerprint.ifp instead (the documentation's tutorials have been
    updated accordingly).
  • Removed the Fingerprint.bitvector_atoms method, replaced by Fingerprint.metadata.
  • Removed the __wrapped__ attribute on interaction methods that are available
    from the Fingerprint object. These methods now accept a metadata parameter
    instead.
  • Removed LigNetwork.from_ifp in favor of LigNetwork.from_fingerprint.
  • Removed the match3D parameter in LigNetwork. Replaced by use_coordinates and
    flatten_coordinates to give users more control and allow them to provide their own
    2D coordinates.