This release is a pre-release and may not be stable for production use.
b2bTools
b2bTools is the Bio2Byte Python package for predicting biophysical properties
from protein sequences and multiple-sequence alignments. It also provides
lightweight readers for FASTA, alignment, NEF, and NMR-STAR files.
ELIXIR Belgium infrastructure b2bTools is an ELIXIR Belgium Core Service. Explore the ELIXIR Belgium services.
Installation
Install the package with python -m pip install b2bTools.
Supported Python versions are 3.7 through 3.12 (>=3.7, <3.13).
Optional external tools are required only for particular workflows:
- HMMER is required for PSPer.
- T-Coffee is required when b2bTools creates an alignment from two input sequence files.
For the command-line interface, run the following after installation.
python -m b2bTools --help
Choose a workflow
| Input | Entry point | Use it for |
|---|---|---|
| One or more unaligned protein sequences | SingleSeq |
Per-residue predictions from FASTA input. |
| A multiple-sequence alignment | MultipleSeq |
Predictions mapped to an existing alignment. |
| NMR chemical shifts | ShiftCrypt |
Residue-level biophysical indices from NEF or NMR-STAR data. |
| File parsing only | b2bTools.general.parsers |
Reading supported formats without importing predictor models. |
Quick start
Predict properties for a FASTA file
Create a FASTA file named proteins.fasta, then run DynaMine and write its
results as JSON. Add other predictor constants from the reference table below
when needed.
from pathlib import Path
import json
from b2bTools import SingleSeq, constants
input_fasta = Path("proteins.fasta")
predictor = SingleSeq(str(input_fasta), short_id=False)
predictor.predict(tools=[constants.TOOL_DYNAMINE])
results = predictor.get_all_predictions()
Path("predictions.json").write_text(json.dumps(results, indent=2), encoding="utf-8")
results["proteins"] maps each sequence identifier to its per-residue values.
results["metadata"] records the requested tools and package metadata. Use
get_all_predictions_tabular(path, sep=",") for CSV or
get_all_predictions_tabular(path, sep="\t") for TSV output.
Predict properties for an existing alignment
Use an existing, aligned FASTA file when the relationship between residues must be preserved across sequences.
from pathlib import Path
from b2bTools import MultipleSeq, constants
input_alignment = Path("alignment.fasta")
predictor = MultipleSeq()
predictor.from_aligned_file(str(input_alignment), tools=[constants.TOOL_DYNAMINE])
results = predictor.get_all_predictions_msa()
results["proteins"] contains the aligned prediction values. To select one
sequence, pass its identifier to get_all_predictions_msa(sequence_key).
Predictor reference
| Predictor | Constant | Produces |
|---|---|---|
| DynaMine | constants.TOOL_DYNAMINE |
Backbone and side-chain dynamics; helix, sheet, coil, and polyproline-II propensities. |
| EFoldMine | constants.TOOL_EFOLDMINE |
Early-folding propensity. |
| DisoMine | constants.TOOL_DISOMINE |
Disorder propensity. |
| AgMata | constants.TOOL_AGMATA |
Beta-aggregation propensity. |
| PSPer | constants.TOOL_PSP |
Phase-separation features and a protein-level score. |
Dependencies are resolved automatically. For example, requesting PSPer also runs the predictors whose outputs it requires. Runtime depends on the selected tools, sequence lengths, and the number of sequences.
Understanding prediction outputs
The prediction APIs preserve positional correspondence: element n in a
per-residue prediction list describes residue_index n. This makes the JSON
results suitable for programmatic analysis and the tabular exports suitable for
spreadsheets and statistical tools.
JSON result structure
SingleSeq.get_all_predictions() returns proteins and metadata.
proteins maps each sequence identifier to its sequence and prediction lists;
metadata records the requested tools and package information. For an existing
alignment, MultipleSeq.get_all_predictions_msa() returns proteins together
with sequences, which retains the aligned sequence (including gap positions)
for every identifier.
Every numeric prediction key contains one value per residue or aligned
position. viterbi is the exception: it contains PSPer's categorical state
labels. A value can be null when a property was not calculated for that
position, for example at an alignment gap.
Per-residue CSV and TSV columns
get_all_predictions_tabular(path, sep=",") writes a CSV file; pass
sep="\t" for TSV. Each row represents one sequence position. Numeric values
are rounded to three decimal places in this export.
| Column | Meaning | Type in the table |
|---|---|---|
sequence_id |
Identifier of the input sequence. | Text |
residue |
One-letter residue code. In an MSA export, this can be the gap character -. |
Text |
residue_index |
Zero-based position in the sequence or alignment. | Integer |
| Prediction key | Value for the property described below. A blank cell means that the predictor was not selected or no value is available at that position. | Numeric, except viterbi |
The following keys are included as prediction columns. Their JSON values are ordered lists; in the CSV or TSV, each list is expanded into its corresponding residue row.
| Predictor | Output keys | Value type |
|---|---|---|
| DynaMine | backbone, sidechain, ppII, coil, sheet, helix |
Numeric per residue |
| EFoldMine | earlyFolding |
Numeric per residue |
| DisoMine | disoMine |
Numeric per residue |
| AgMata | agmata |
Numeric per residue |
| PSPer | complexity, arg, tyr, RRM, disorder |
Numeric per residue |
| PSPer | viterbi |
Categorical state per residue |
PSPer also supplies protein_score, a single score for the complete protein.
It is available in the JSON result and metadata statistics rather than as a
per-residue column.
MSA distribution outputs
MultipleSeq.get_all_predictions_msa_distrib() summarises the numeric
predictions across sequences at every alignment position. Its results value
is organised as prediction_key → summary_name → ordered values. Use
get_msa_distrib_tabular(path, sep=",") to write the same data as columns
named prediction_key_summary_name, alongside the zero-based
residue_index.
| Summary name | Meaning at each alignment position |
|---|---|
median |
Median of available numeric values. |
firstQuartile |
25th percentile. |
thirdQuartile |
75th percentile. |
bottomOutlier |
Lower outlier boundary: first quartile minus 1.5 times the interquartile range. |
topOutlier |
Upper outlier boundary: third quartile plus 1.5 times the interquartile range. |
viterbi is categorical, so it is intentionally excluded from MSA distribution
statistics. When an alignment column has no numeric values, all of its summary
values are null (or blank in the tabular export).
File-parser reference
The parser modules are safe to import in services that do not need PyTorch or other predictor-model dependencies.
FASTA
FastaIO.read_fasta_from_file and FastaIO.read_fasta_from_string return a
list of (sequence_id, sequence) pairs. By default, short_id=False retains
the complete header, collapses whitespace to _, and sanitises spaces, full
stops, vertical bars, and commas. Pass short_id=True to use the first header
token, capped at 20 characters.
from pathlib import Path
from b2bTools.general.parsers.fasta import FastaIO
records = FastaIO.read_fasta_from_file(Path("proteins.fasta"), short_id=False)
for sequence_id, sequence in records:
print(sequence_id, len(sequence))
Alignments
AlignmentsIO reads FASTA, A3M, BLAST, BaliBase, CLUSTAL, PSI, PHYLIP, and
Stockholm alignments. Each read_alignments* method returns a dictionary that
maps sequence identifiers to aligned sequences.
short_id=False is the default. Where the format provides a complete header,
the parser retains it with whitespace collapsed to _; short_id=True uses
the first header token capped at 20 characters. Write helpers and NMR readers
do not take short_id because they do not derive sequence identifiers from
FASTA-style headers.
from pathlib import Path
from b2bTools.general.parsers.alignments import AlignmentsIO
alignment = AlignmentsIO.read_alignments("alignment.fasta", short_id=False)
for sequence_id, aligned_sequence in alignment.items():
print(sequence_id, len(aligned_sequence))
NEF and NMR-STAR
NefIO reads NEF projects and sequence/chemical-shift data. NMRStarIO
provides the equivalent NMR-STAR readers. Neither API uses short_id.
from pathlib import Path
from b2bTools.general.parsers.nef import NefIO
sequence_shifts = NefIO.read_nef_file_sequence_shifts(Path("example.nef"))
print(sequence_shifts.keys())
ShiftCrypt
Use ShiftCrypt when your input contains NMR chemical shifts. modelClass="2"
is the default model; model classes "1" and "3" are available for the full
chemical-shift set and the N/H-only model, respectively.
from pathlib import Path
from b2bTools.nmr.shiftCrypt.Predictor import ShiftCrypt
from b2bTools.nmr.shiftCrypt.shiftcrypt_pkg.parser import parse_official
protein_shifts = parse_official(Path("example.nef"))
results = ShiftCrypt().predictShifts(protein_shifts, modelClass="2")
predictShifts returns one dictionary per parsed chain. Its fields are:
| Field | Meaning | Type |
|---|---|---|
ID_file |
Identifier supplied by the input file. | Text |
sequence |
Residue sequence. | List of one-letter residue codes |
seqCodes |
Residue numbering from the source data. | List of integers |
shiftCrypt |
Residue-level ShiftCrypt values. | List of numeric values |
chainCode |
Chain identifier from the source data. | Text |
Command-line interface
The CLI processes a FASTA file in single-sequence mode by default. Use
--mode msa for an existing alignment; add predictor flags such as
--disomine or --psper to request additional outputs. --short_ids selects
the 20-character identifier mode.
Required options are --input_file and --output_json_file. Optional
--output_tabular_file, --metadata_file, and, for MSA runs,
--distribution_json_file and --distribution_tabular_file write additional
outputs. Use --help for the authoritative option list in the installed
version.
Development
From the repository root, run make test to execute the maintained test suite.
Run make generate-docs to generate API documentation in
wrapper_documentation.
Further documentation and citations
The Bio2Byte package documentation contains detailed API material and method-level documentation. The Bio2Byte tools page describes the scientific background of each predictor.
If you use b2bTools in published work, cite the relevant predictor:
| Predictor | Citation |
|---|---|
| DynaMine | Cilia et al. (2013), Nature Communications 4:2741. DOI |
| DisoMine | Orlando et al. (2022), Journal of Molecular Biology. DOI |
| EFoldMine | Raimondi et al. (2017), Scientific Reports 7:8826. DOI |
| AgMata | Orlando et al. (2020), Bioinformatics 36:2076–2081. DOI |
| PSPer | Orlando et al. (2019), Bioinformatics 35:4617–4623. DOI |
| ShiftCrypt | Orlando et al. (2020), Nucleic Acids Research 48:W36–W40. DOI |
Licence and terms of use
b2bTools is distributed under the GNU General Public License v3.0 (GPLv3).
Bio2Byte promotes open science by providing freely available online services, databases, and software for the life sciences, with a focus on proteins. Please attribute Bio2Byte services, databases, and software in publications, services, or products according to good scientific practice and the relevant citation guidance above. Bio2Byte is not liable for loss or damage arising from the use of this software.
Questions about these terms may be sent to bio2byte@vub.be.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file b2btools-3.0.9rc2.tar.gz.
File metadata
- Download URL: b2btools-3.0.9rc2.tar.gz
- Upload date:
- Size: 19.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6a14559f9b40b294ad7a989f455dba0d0fcae837f630642d0b00c2163c8ecac
|
|
| MD5 |
17240259f902da4fffd7be0e0c9dc900
|
|
| BLAKE2b-256 |
74d422b160c2db8e34951e21a9efd1a977d890cd4dc808cfea06b0f68f507720
|
File details
Details for the file b2btools-3.0.9rc2-py3-none-any.whl.
File metadata
- Download URL: b2btools-3.0.9rc2-py3-none-any.whl
- Upload date:
- Size: 20.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d0eef2adfd4bae084b52f6438050871c4122ca50d31e3c3f79ab2a52d7c130b
|
|
| MD5 |
680f0bc69da05989916bb89ab3a48af4
|
|
| BLAKE2b-256 |
1e48c189d866edb379e36406dbe94c91533eef6f191ca7ecb46e3b1a7198361d
|