Skip to main content

Versatile pipeline for processing protein structure data for deep learning applications.

Project description

ProteinFlow

License Code style: black PyPI Docker Image Version (latest semver) Generic badge

A data processing pipeline for all your protein design needs.

Read the documentation.

overview

Installation

Recommended: create a new conda environment and install proteinflow and mmseqs. Note that the python version has to be between 3.8 and 3.10.

conda create --name proteinflow -y python=3.9
conda activate proteinflow
conda install -y -c conda-forge -c bioconda mmseqs2
python -m pip install proteinflow

In addition, proteinflow depends on the rcsbsearch package and the latest release v0.2.3 is currently not functioning . Follow the recommended fix:

python -m pip install "rcsbsearch @ git+https://github.com/sbliven/rcsbsearch@dbdfe3880cc88b0ce57163987db613d579400c8e"

Note that you do not need to install mmseqs or rcsbsearch if you are not planning to generate a new dataset.

Finally, you can use our docker image as an alternative.

Usage

Downloading pre-computed datasets (stable)

Already precomputed datasets with consensus set of parameters and can be accessed and downloaded using the proteinflow. package. Check the output of proteinflow check_tags for a list of available tags.

proteinflow download --tag 20221110 

Running the pipeline

You can also run proteinflow with your own parameters. Check the output of proteinflow check_snapshots for a list of available PDB snapshots (naming rule: yyyymmdd).

For instance, let's generate a dataset with the following description:

  • resolution threshold: 5 angstrom,
  • PDB snapshot: 20190101,
  • structure methods accepted: all (x-ray christolography, NRM, Cryo-EM),
  • sequence identity threshold for clustering: 40% sequence similarity,
  • maximum length per sequence: 1000 residues,
  • minimum length per sequence: 5 residues,
  • maximum fraction of missing values at the ends: 10%,
  • size of validation subset: 10%.
proteinflow generate --tag new --resolution_thr 5 --pdb_snapshot 20190101 --not_filter_methods --min_seq_id 0.4 --max_length 1000 --min_length 5 --missing_ends_thr 0.1 --valid_split 0.1

See the docs (or proteinflow generate --help) for the full list of parameters and more information.

A registry of all the files that are removed during the filtering as well as description with the reason for their removal is created automatically for each generate command. The log files are save (at data/logs by default) and a summary can be accessed running proteinflow get_summary {log_path}.

Splitting

By default, both proteinflow generate and proteinflow download will also split your data into training, test and validation according to MMseqs2 clustering and homomer/heteromer/single chain proportions. However, you can skip this step with a --skip_splitting flag and then perform it separately with the proteinflow split command.

The following command will perform the splitting with a 10% validation set, a 5% test set and a 50% threshold for sequence identity clusters.

proteinflow split --tag new --valid_split 0.1 --test_split 0.5 --min_seq_id 0.5

Using the data

The output files are pickled nested dictionaries where first-level keys are chain Ids and second-level keys are the following:

  • 'crd_bb': a numpy array of shape (L, 4, 3) with backbone atom coordinates (N, C, CA, O),
  • 'crd_sc': a numpy array of shape (L, 10, 3) with sidechain atom coordinates (check proteinflow.sidechain_order() for the order of atoms),
  • 'msk': a numpy array of shape (L,) where ones correspond to residues with known coordinates and zeros to missing values,
  • 'seq': a string of length L with residue types.

Once your data is ready, you can open the files directly with pickle to access this data.

import pickle
import os

train_folder = "./data/proteinflow_new/training"
for filename in os.listdir(train_folder):
    with open(os.path.join(train_folder, filename), "rb") as f:
        data = pickle.load(f)
    crd_bb = data["crd_bb"]
    seq = data["seq"]
    ...

Alternatively, you can use our ProteinDataset or ProteinLoader classes for convenient processing. Among other things, they allow for feature extraction, single chain / homomer / heteromer filtering and randomized sampling from sequence identity clusters.

For example, here is how we can create a data loader that:

  • samples a different cluster representative at every epoch,
  • extracts dihedral angles, sidechain orientation and secondary structure features,
  • only loads pairs of interacting proteins (larger biounits are broken up into pairs),
  • has batch size 8.
from proteinflow import ProteinLoader
train_loader = ProteinLoader.from_args(
    "./data/proteinflow_new/training", 
    clustering_dict_path="./data/proteinflow_new/splits_dict/train.pickle",
    node_features_type="dihedral+sidechain_orientation+secondary_structure",
    entry_type="pair",
    batch_size=8,
)
for batch in train_loader:
    crd_bb = batch["X"] #(B, L, 4, 3)
    seq = batch["S"] #(B, L)
    sse = batch["secondary_structure"] #(B, L, 3)
    to_predict = batch["masked_res"] #(B, L), 1 where the residues should be masked, 0 otherwise
    ...

See more details on available parameters and the data format in the docs + this repository for a use case.

ProteinFlow Stable Releases

You can download them with proteinflow download --tag {tag} in the command line or browse in the interface.

Tag Date Snapshot Size Min res Min len Max len MMseqs thr Split (train/val/test) Missing thr (ends/middle) Note
paper 10.11.22 20220103 24G 3.5 30 10'000 0.3 90/5/5 0.3/0.1 first release, no mmCIF files
20230102_stable 27.02.23 20230102 28G 3.5 30 10'000 0.3 90/5/5 0.3/0.1 v1.1.1

License

The proteinflow package and data are released and distributed under the BSD 3-Clause License

Contributions

This is an open source project supported by Adaptyv Bio. Contributions, suggestions and bug-fixes are welcomed.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proteinflow-1.2.3.tar.gz (41.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

proteinflow-1.2.3-py3-none-any.whl (44.6 kB view details)

Uploaded Python 3

File details

Details for the file proteinflow-1.2.3.tar.gz.

File metadata

  • Download URL: proteinflow-1.2.3.tar.gz
  • Upload date:
  • Size: 41.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for proteinflow-1.2.3.tar.gz
Algorithm Hash digest
SHA256 745b4f3cdad15dc1ba67ee8c35b0a8d184a05f5833e550ad21af56aadf061c7e
MD5 c9d2a1aaecb62af43072fa9194bbb947
BLAKE2b-256 e8c3317c89a350b74fe9882ed2e87387d6d43920246949d3ff60eaf9b1ef7610

See more details on using hashes here.

File details

Details for the file proteinflow-1.2.3-py3-none-any.whl.

File metadata

  • Download URL: proteinflow-1.2.3-py3-none-any.whl
  • Upload date:
  • Size: 44.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for proteinflow-1.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7a9555bf36bbba3a15855fc1d9957d621600fd4986a08d0b894ee5358ecc954e
MD5 82064f01b8b779e002faa3f034a58340
BLAKE2b-256 2e2f2332e17875017d74e2b465e1c497166842a74d09900250396a17a8649a88

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page