Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PELE-451 Minor adjustments to facilitate platform compatibility #142

Merged
merged 12 commits into from
Jun 9, 2021
2 changes: 1 addition & 1 deletion .github/workflows/conda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macOS-latest]
python-version: [3.6, 3.7]
python-version: [3.6, 3.7, 3.8]
name: Python ${{ matrix.python-version }} at ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
Expand Down
55 changes: 30 additions & 25 deletions .github/workflows/master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,37 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2

- name: Set up Python 3.7
uses: actions/setup-python@v2
with:
python-version: 3.7
- name: Setup conda
uses: s-weigand/setup-conda@v1
with:
update-conda: true
python-version: 3.7
conda-channels: anaconda, omnia, conda-forge, martimunicoy

- name: Install dependencies
shell: bash -l {0}
run: |
python -m pip install --upgrade pip
if [ -f docs/requirements.txt ]; then pip install -r docs/requirements.txt; fi
- name: Install doc dependencies
shell: bash
run: |
python -m pip install --upgrade pip
if [ -f docs/requirements.txt ]; then pip install -r docs/requirements.txt; fi

- name: Build sphinx documentation
shell: bash -l {0}
run: |
cd docs/
make github
- name: Install latest peleffy version
run: conda install peleffy

# https://github.com/peaceiris/actions-gh-pages
- name: Deploy documentation
if: success()
uses: peaceiris/actions-gh-pages@v3
with:
publish_branch: gh-pages
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: docs/html/
user_name: 'Martí Municoy'
user_email: 'martimunicoy@gmail.com'
- name: Build sphinx documentation
shell: bash
run: |
cd docs/
make github

# https://github.com/peaceiris/actions-gh-pages
- name: Deploy documentation
if: success()
uses: peaceiris/actions-gh-pages@v3
with:
publish_branch: gh-pages
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: docs/html/
user_name: 'Martí Municoy'
user_email: 'martimunicoy@gmail.com'
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
| **About** | [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Python](https://img.shields.io/badge/python-3.6%2C%203.7-blue.svg)](https://martimunicoy.github.io/peleffy) [![Release](https://img.shields.io/github/release/martimunicoy/peleffy.svg?include_prereleases)](https://github.com/martimunicoy/peleffy/releases/) |
| **About** | [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Python](https://img.shields.io/badge/python-3.6%2C%203.7%2C%203.8-blue.svg)](https://martimunicoy.github.io/peleffy) [![Release](https://img.shields.io/github/release/martimunicoy/peleffy.svg?include_prereleases)](https://github.com/martimunicoy/peleffy/releases/) |
| :------ | :------- |
| **Status** | [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/martimunicoy/peleffy.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/martimunicoy/peleffy/context:python) [![Test](https://github.com/martimunicoy/peleffy/workflows/Test/badge.svg)](https://github.com/martimunicoy/peleffy/actions?query=workflow%3ATest) [![codecov](https://codecov.io/gh/martimunicoy/peleffy/branch/master/graph/badge.svg)](https://codecov.io/gh/martimunicoy/peleffy) |
| **Installation** | [![Conda](https://img.shields.io/conda/v/martimunicoy/peleffy.svg)](https://anaconda.org/martimunicoy/peleffy) [![PyPI](https://img.shields.io/pypi/v/peleffy)](https://pypi.org/project/peleffy/) |
Expand Down
6 changes: 2 additions & 4 deletions devtools/conda/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,11 @@ build:

requirements:
build:
# Note that rdkit does not support Python 3.8 yet
- python 3.6|3.7
- python
- setuptools

run:
# Note that rdkit does not support Python 3.8 yet
- python 3.6|3.7
- python
- numpy
- matplotlib
- pytest
Expand Down
2 changes: 2 additions & 0 deletions docs/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
Sphinx==3.1.2
sphinx-rtd-theme==0.5.0
m2r==0.2.1
docutils==0.16
peleffy
29 changes: 18 additions & 11 deletions peleffy/topology/conformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,9 @@

class BCEConformations(object):
"""
A class to produce a library of conformations from the output
of the BCE server.
A class to produce a library of conformations from a set of ligand PDB files.
"""
def __init__(self, topology_obj, bce_output_path):
def __init__(self, topology_obj, bce_output_path, from_bce=True):
"""
Initializes a BCEConformations object.

Expand All @@ -29,11 +28,15 @@ def __init__(self, topology_obj, bce_output_path):
A Topology object that contains the ligand's information
bce_output_path: str
Path where the output from the BCE server is stored
from_bce : bool
Whether the ligand clusters originate from the BCE server or not. Affects cluster search path in
_calculate_all_conformations method.
"""
self._topology = topology_obj
self._molecule = topology_obj.molecule
self.bce_path = bce_output_path
self.conformations_library = {}
self.from_bce = from_bce

def calculate(self):
"""
Expand All @@ -44,9 +47,11 @@ def calculate(self):
self._calculate_all_conformations()

def _calculate_all_conformations(self):
clusters = sorted(glob.glob(os.path.join(self.bce_path,
"CLUSTERS", "CL*",
"cluster*.min.imaged.pdb")))
if self.from_bce:
clusters = sorted(glob.glob(os.path.join(self.bce_path, "CLUSTERS", "CL*", "cluster*.min.imaged.pdb")))
else:
clusters = sorted(glob.glob(os.path.join(self.bce_path, "*.pdb")))

if not clusters:
raise ValueError("Path to the BCE output does not contain a "
+ "CLUSTERS folder, please check if the path "
Expand All @@ -56,7 +61,6 @@ def _calculate_all_conformations(self):
for cluster in ordered_clusters:
self.calculate_cluster_offsets(cluster)


def calculate_cluster_offsets(self, cluster_pdb):
"""
Calculate dihedral angles from PDB.
Expand All @@ -71,7 +75,8 @@ def calculate_cluster_offsets(self, cluster_pdb):
# Use the input molecule as template since the cluster structures
# probably will not have proper stereochemistry
mol = molecule.Molecule(
cluster_pdb, connectivity_template=self._molecule.rdkit_molecule)
cluster_pdb, connectivity_template=self._molecule.rdkit_molecule,
allow_undefined_stereo=self._molecule.allow_undefined_stereo)
cluster_coordinates = mol.get_conformer()
topology_to_cluster = {
i: x for i, x
Expand Down Expand Up @@ -136,7 +141,8 @@ def order_clusters_min_distances(self, clusters):
# probably will not have proper stereochemistry
cluster_molecules.append(molecule.Molecule(
cluster,
connectivity_template=self._molecule.rdkit_molecule))
connectivity_template=self._molecule.rdkit_molecule,
allow_undefined_stereo=self._molecule.allow_undefined_stereo))
for i, cluster_mol in enumerate(cluster_molecules):
for j, cluster_mol_2 in enumerate(cluster_molecules[i+1:],
start=i+1):
Expand Down Expand Up @@ -179,6 +185,7 @@ def find_optimal_path_from_matrix(distances):

return min_path


def find_heuristic_path(graph, distances, start_node):
"""
Given a graph, the corresponding distances matrix and a starting node,
Expand Down Expand Up @@ -222,13 +229,13 @@ def find_heuristic_path(graph, distances, start_node):
def find_index_root(sorted_topology, topology):
"""
It finds the index of the root atom in the original topology
that matches with the one from the topology that fullfills the Impact
that matches with the one from the topology that fulfills the Impact
template rules.

Parameters
----------
sorted_topology : a peleffy.topology.Topology object
The topology sorted to fullfill the Impact template format
The topology sorted to fulfill the Impact template format
topology : a peleffy.topology.Topology object
The original topology object

Expand Down