ProLIF Versions Save

Interaction Fingerprints for protein-ligand complexes and more

v2.0.3

3 months ago

[2.0.3] - 2024-03-10

Fixed

  • The SMARTS pattern for halogen bond acceptors was not allowing carbonyles and other groups with double bonds to match (PR #190 by @asiomchen).

v2.0.2

3 months ago

Maintenance update:

Added

  • PROLIF_N_JOBS environment variable to control the default number of processes (used during the documentation build).

Changed

  • Updated CI pipelines to test on Python 3.8, 3.10 and 3.12.

Fixed

  • Packaging maintenance to fix the tests/ directory being included as a module rather than as plain data files. This could interfere with pytest during test collection in other packages.

v2.0.1

8 months ago

[2.0.1] - 2023-10-11

Added

  • In Complex3D you can now use the compare method to display two 3D structures side by side.

Fixed

  • The barcode plot would display artifacts due to downsampling in the underlying matplotlib imshow call when generating the plot for large fingerprints. Interpolation has been disabled to address the issue.
  • The barcode plot would skip labelling the second residue on the Y axis.
  • Parsing residue names/number was broken for TIP3 water molecules and others.

v2.0.0.post1

9 months ago

[2.0.0.post1] - 2023-09-13

This is a post-release to fix releases not containing the complete test suite.

v2.0.0.post0

9 months ago

[2.0.0.post0] - 2023-09-13

This is a post-release to fix an issue with the conda build not being able to run the tests.

v2.0.0

10 months ago

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

v1.1.0

1 year ago

[1.1.0] - 2022-11-18

Added

  • Fingerprint.run now has a converter_kwargs parameter that can pass kwargs to the underlying RDKitConverter from MDAnalysis (Issue #57).
  • Formatting with black.

Changed

  • The SMARTS for the following groups have been updated to a more accurate definition (Issue #68, PR #73 by @DrrDom, and PR #84):
    • Hydrophobic: excluded F, Cl, tetracoordinated C and S, C connected to N, O or F.
    • HBond donor: exclude charged O, S and charged aromatic N, only accept nitrogen that is in valence 3 or ammonium
    • HBond acceptor: exclude amides and some amines, exclude biaryl ethers and alkoxy oxygen from esters, include some aromatic oxygen and nitrogen,
    • Anion: include resonance forms of carboxylic, sulfonic and phosphorus acids,
    • Cation: include amidine and guanidine,
    • Metal ligand: exclude amides and some amines.
  • The Pi stacking interactions have been changed for a more accurate implementation (PR #97, PR #98).
  • The Van der Waals contact has been added to the default interactions, and the tolerance parameter has been set to 0.
  • The pdbqt_supplier will not add explicit hydrogen atoms anymore, to avoid detecting hydrogen bonds with "random" hydrogens that weren't in the PDBQT file (PR #99).
  • When using the pdbqt_supplier, irrelevant warnings and logs have been disabled (PR #99).
  • Updated the minimal RDKit version to 2021.03.1

Fixed

  • Dead link in the quickstart notebook for the MDAnalysis quickstart (PR #75, @radifar).
  • The pdbqt_supplier now correctly preserves hydrogens from the input PDBQT file (PR #99).
  • If no interaction was detected, to_dataframe would error without giving a helpful message. It now returns a dataframe with the correct number of frames in the index and no column.

v1.0.0

2 years ago

[1.0.0] - 2022-06-07

Added

  • Support for multiprocessing, enabled by default (Issue #46). The number of processes can be controlled through n_jobs in fp.run and fp.run_from_iterable.
  • New interaction: van der Waals contact, based on the sum of vdW radii of two atoms.
  • Saving/loading the fingerprint object as a pickle with fp.to_pickle and Fingerprint.from_pickle (Issue #40).

Changed

  • Molecule suppliers can now be indexed, reused and can return their length, instead of being single-use generators.

Fixed

  • ProLIF can now be installed through pip and conda (Issue #6).
  • If no interaction is detected in the first frame, to_dataframe will not complain about a KeyError anymore (Issue #44).
  • When creating a plf.Fingerprint, unknown interactions will no longer fail silently.

v0.3.4

2 years ago

[0.3.4] - 2021-09-28

This is the version corresponding to the ProLIF published paper.

Added

  • Added our J. Cheminformatics article to the citation page of the documentation and the CITATION.cff file.

Changed

  • Improved the documentation on how to properly restrict interactions to ignore the protein backbone (Issue #22), how to fix the empty dataframe issue when no bond information is present in the PDB file (Issue #15), how to save the LigNetwork diagram (Issue #21), and some clarifications on using fp.generate

Fixed

  • Mixing residue type with interaction type in the interactive legend of the LigNetwork would incorrectly display/hide some residues on the canvas (#PR 23)
  • MOL2 files starting with a comment (#) would lead to an error

v0.3.3

3 years ago

[0.3.3] - 2021-06-11

Changed

  • Custom interactions must return three values: a boolean for the interaction, and the indices of residue atoms responsible for the interaction

Fixed

  • Custom interactions that only returned a single value instead of three would raise an uninformative error message