Awesome
pbptyper
In silico Penicillin Binding Protein (PBP) typer for Streptococcus pneumoniae assemblies
A Quick Note
The original CDC StrepLab implementation is available at BenJamesMetcalf/Spn_Scripts_Reference and BenJamesMetcalf/JanOw_Dependencies.
I'll be the first to admit, my Perl skills aren't what they used to be. I tried. But I also wanted to
simplify things a little. The original method uses FASTQs as inputs, then trims adapters, assembles with Velvet,
predicts genes, Blast genes, etc... I think these days its much easier to just start with assemblies.
I changed things so that, all that's needed is an assembly and tblastn
to predict the PBP type.
Introduction
pbptyper
is a tool to identify the Penicillin Binding Protein (PBP) of Streptococcus pneumoniae assemblies.
Using an input assembly (uncompressed or gzip-compressed), the PBP 1A, 2B, and 2X proteins are blasted against
the assembly from which a PBP type is predicted.
The PBP typing scheme is based methods described in Li et. al. (citation below).
Conda
pbptyper
is available from Bioconda
mamba create -n pbptyper -c conda-forge -c bioconda pbptyper
conda activate pbptyper
pbptyper --help
Usage
Usage: pbptyper [OPTIONS]
In silico Penicillin Binding Protein (PBP) typer for Streptococcus pneumoniae assemblies
╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────╮
│ --version Show the version and exit. │
│ * --assembly TEXT Input assembly in FASTA format (gzip is OK) [required] │
│ --db TEXT Input database in uncompressed FASTA format [default: db/] │
│ --prefix TEXT Prefix to use for output files [default: basename of input] │
│ --outdir TEXT Directory to save output files [default: ./] |
│ --min_pident INTEGER Minimum percent identity to count a hit [default: 95] │
│ --min_coverage INTEGER Minimum percent coverage to count a hit [default: 95] │
│ --min_ani INTEGER Minimum S. pneumoniae ANI to predict PBP Type [default: 95] │
│ --check Check dependencies are installed, then exit │
│ --quiet Suppress all output │
│ --help Show this message and exit. │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────╯
--assembly
An assembly in FASTA format (compressed with gzip, or uncompressed) to predict the PBP type on.
--db
A path to a directory containing FASTA files for 1A, 2B, and 2X proteins. In most cases using the default value will be all that is needed.
--prefix
The prefix to use for the output files. If a prefix is not given, the basename of the input assembly will be used.
--outdir
The directory to save result files. If the directory does not exist is will be created.
--min_pident
The minimum percent identity for a blast hit to be considered for typing. The is compared
against the pident
column of the blast output.
--min_coverage
The minimum coverage of a PBP to be considered for typing. The is compared
against the qcovs
column of the blast output.
--min_ani
The minimum S. pneumoniae ANI required to predict PBP type. The ANI is calculated using FastANI and the GCF_000006885 reference genome.
--check
Check that the fastANI
and tblastn
dependencies are available from the PATH.
--quiet
This will quiet STDOUT quite a bit.
Output Files
Filename | Description |
---|---|
{PREFIX}.tsv | A tab-delimited file with the predicted PBP type |
{PREFIX}.fastani.tsv | A tab-delimited file of fastANI results |
{PREFIX}-1A.tblastn.tsv | A tab-delimited file of all blast hits against 1A |
{PREFIX}-2B.tblastn.tsv | A tab-delimited file of all blast hits against 2B |
{PREFIX}-2X.tblastn.tsv | A tab-delimited file of all blast hits against 2X |
Example {PREFIX}.tsv
This file will contain the final predicted PBP type based on highest coverage, percent identity, and bitscore (ties are broken in that order). Here's what to expect the output to look like:
sample pbptype ani 1A_coverage 1A_pident 1A_bitscore 2B_coverage 2B_pident 2B_bitscore 2X_coverage 2X_pident 2X_bitscore comment
SRR2912551 23:0:2 98.70 100 100.000 556 100 100.000 567 100 100.000 741
Column Name | Description |
---|---|
sample | Name of the sample processed |
pbptype | The predicted PBP type (1A:2B:2X) |
ani | ANI against a S. pneumoniae (GCF_000006885) reference genome |
1A_coverage | The percent coverage of the top hit against the 1A PBP protein |
1A_pident | The percent identity of the top hit against the 1A PBP protein |
1A_bitscore | The bitscore of the top hit against the 1A PBP protein |
2B_coverage | The percent coverage of the top hit against the 2B PBP protein |
2B_pident | The percent identity of the top hit against the 2B PBP protein |
2B_bitscore | The bitscore of the top hit against the 2B PBP protein |
2X_coverage | The percent coverage of the top hit against the 2X PBP protein |
2X_pident | The percent identity of the top hit against the 2X PBP protein |
2X_bitscore | The bitscore of the top hit against the 2X PBP protein |
comment | Any comments associated with the analysis |
PBPType Interpretation
In the example above pbptyper
predicted the PBP Type to be 23:0:2. This means for 1A, allele 23 had
a perfect match, for 2B, allele 0 had a perfect match, and finally for 2X, allele 2 had a perfect
match.
Here's a break down of possible ID values:
Allele ID | Description |
---|---|
0+ (any number) | A perfect match was found against an existing allele ID (yes the count starts at 0!) |
MULTIPLE | There was a perfect match against multiple allele IDs for a loci, and a ID could not be determined |
NEW | A hit was made that was not perfect but exceeded the min_pident and min_coverage thresholds |
NA | No hits exceeded the min_pident and min_coverage thresholds |
NOTSPN | Input assembly did not exceed min_ani threshold against S. pneumoniae |
Merging Multiple Runs
You can a tool like csvtk - concat from Wei Shen to easily merge the results from multiple samples. Here's an example of how to do so:
csvtk concat --tabs --out-tabs --out-file pbptyper.tsv $(ls *.tsv | grep -v "tblastn")
This is just one way to do it, there are many other ways.
Example {PREFIX}-{1A|2B|2X}.tblastn.tsv
The blast results include sequences which will not display very nicely here. But, don't fret,
it is the standard -outfmt 6
, so tab-delimited and easy to parse.
Naming
The original implementation was called PBP-Gene_Typer.pl. For this rewrite in Python, I just shortened it to
pbptyper
. Haha not much else to the naming!
Citation
If you use this tool please cite the following:
PBP Typing Method
Li Y, Metcalf BJ, Chochua S, et al. Penicillin-binding protein transpeptidase signatures for tracking and predicting β-lactam resistance levels in Streptococcus pneumoniae mBio 7(3):60 pii:e00756–16. (2016)
pbptyper
Petit III RA pbptyper: In silico Penicillin Binding Protein (PBP) typer for Streptococcus pneumoniae assemblies (GitHub)
BLAST+
Camacho C, Coulouris G, Avagyan V, Ma N, Papadopoulos J, Bealer K, Madden TL BLAST+: architecture and applications. BMC Bioinformatics 10, 421 (2009)
fastANI
Jain C, Rodriguez-R LM, Phillippy AM, Konstantinidis KT, Aluru S High throughput ANI analysis of 90K prokaryotic genomes reveals clear species boundaries. Nat. Commun. 9, 5114 (2018)