A way to interact with the data from the NCBI Pathogen Detection Portal. This specific repo was not developed by anyone at NCBI however.
For more information: https://www.ncbi.nlm.nih.gov/pathogens
Usage: pdtk.pl [options]
SUBCOMMANDS
--list List which taxa are available
--download Download data to ~/.pdtk
--query Query from S1
--clean Clean up any unneeded files in ~/.pdtk
--veryclean Cleans up anything in --clean, plus
removes any files created in --download.
The database remains intact.
--find-target S1 Find rows matching an accession.
Useful for finding PDT accessions.
Searches fields: sample_name, biosample_acc, target_acc, gencoll_acc, PDS_acc
Use SQLite syntax for wildcards, e.g., %
--help This useful help menu
--version Print the version and exit
OPTIONS
--db DBPATH Location of sqlite database (default: ~/.pdtk/pdtk.sqlite3)
If --download, temporary files will be placed in
the same directory that the database is in.
--sample1 S1 PDT accession to query from
--within X Number of SNPs to query away from S1
--sample2 S2 PDT accession to query from S1
--amr (TODO) When querying, also include AMR results
--limit LMT How many database entries to return at once.
Default: 0 (unlimited)
--debug When --download, only downloads the first two taxa
When --query, prints the SQL command
When --find-target, prints the SQL command
Simply run the script directly or bring it into your path.
cd ~/bin
git clone git@github.com:lskatz/pdtk.git
export PATH=$HOME/bin/pdtk/scripts:$PATH
- Perl
- SQLite3
perl scripts/pdtk.pl --list | shuf | head -n 5 | sort
Enterobacter_kobei
Kosakonia_oryzendophytica
Pluralibacter_gergoviae
Staphylococcus_aureus
Yersinia_ruckeri
To run the rest of this toolkit, you will need the data locally. This subcommand downloads from the FTP site, then indexes with SQLite.
perl pdtk.pl --download
The toolkit is very limited at this time to simple querying. To request anything, please make an issues ticket on github and be specific.
Querying is done using PDT accessions.
Distance is measured in compatible_distance
which is derived from SNP distances.
Output columns match what is found in the NCBI files but the order of those columns is not stable.
In this example, we are looking for anything within 1 SNP of our accession.
pdtk.pl --query --sample1 PDT000503455.1 --taxon Listeria --within 1 | column -t
compatible_distance target_acc_2 aligned_bases_pre_filtered sample_name_2 biosample_acc_1 informative_positions sample_name_1 total_positions delta_positions_both_N delta_positions_one_N delta_positions_unambiguous pairwise_bases_post_filtered target_acc_1 PDS_acc compatible_positions gencoll_acc_1 aligned_bases_post_filtered gencoll_acc_2 biosample_acc_2
1 PDT000503469.1 2855359 NULL SAMN11784268 2 NULL 2 0 0 1 NULL PDT000503455.1 PDS000045942.1 2 GCA_005875935.1 2855359 GCA_005875995.1 SAMN11784285
1 PDT000503497.1 2846243 NULL SAMN11784268 2 NULL 2 0 0 1 NULL PDT000503455.1 PDS000045942.1 2 GCA_005875935.1 2846243 GCA_005876095.1 SAMN11784330
In this example, we are looking for a specific distance between two accessions
perl pdtk.pl --query --sample1 PDT000503455.1 --taxon Listeria --sample2 PDT000503497.1 | column -t
delta_positions_unambiguous biosample_acc_1 target_acc_2 delta_positions_both_N sample_name_1 pairwise_bases_post_filtered target_acc_1 compatible_positions compatible_distance sample_name_2 total_positions informative_positions aligned_bases_post_filtered delta_positions_one_N biosample_acc_2 gencoll_acc_1 aligned_bases_pre_filtered gencoll_acc_2 PDS_acc
1 SAMN11784268 PDT000503497.1 0 NULL NULL PDT000503455.1 2 1 NULL 2 2 2846243 0 SAMN11784330 GCA_005875935.1 2846243 GCA_005876095.1 PDS000045942.1
If you sort of know what you want to query with but don't quite know what the exact target names are,
you can search on these fields: sample_name
, biosample_acc
, target_acc
, gencoll_acc
, PDS_acc
.
perl pdtk.pl --taxon Listeria --find-target PDT000503497% | column -t
target_acc_1 biosample_acc_1 gencoll_acc_1 sample_name_1 target_acc_2 biosample_acc_2 gencoll_acc_2 sample_name_2 PDS_acc aligned_bases_pre_filtered aligned_bases_post_filtered delta_positions_unambiguous delta_positions_one_N delta_positions_both_N informative_positions total_positions pairwise_bases_post_filtered compatible_distance compatible_positions
PDT000503469.1 SAMN11784285 GCA_005875995.1 NULL PDT000503497.1 SAMN11784330 GCA_005876095.1 NULL PDS000045942.1 2848432 2848432 0 0 0 2 2 NULL 0 2
PDT000503455.1 SAMN11784268 GCA_005875935.1 NULL PDT000503497.1 SAMN11784330 GCA_005876095.1 NULL PDS000045942.1 2846243 2846243 1 0 0 2 2 NULL 1 2
PDT000503463.1 SAMN11784293 GCA_005875955.1 NULL PDT000503497.1 SAMN11784330 GCA_005876095.1 NULL PDS000045942.1 2844832 2844766 1 0 0 2 2 NULL 1 2
Aha the full name is PDT000503497.1
from the results!
Or, a question like which samples are in this particular SNP tree?
perl pdtk.pl --taxon Listeria --find-target PDS000045942%
target_acc_1 biosample_acc_1 gencoll_acc_1 sample_name_1 target_acc_2 biosample_acc_2 gencoll_acc_2 sample_name_2 PDS_acc aligned_bases_pre_filtered aligned_bases_post_filtered delta_positions_unambiguous delta_positions_one_N delta_positions_both_N informative_positions total_positions pairwise_bases_post_filtered compatible_distance compatible_positions
PDT000503455.1 SAMN11784268 GCA_005875935.1 NULL PDT000503469.1 SAMN11784285 GCA_005875995.1 NULL PDS000045942.1 2855359 2855359 1 0 0 2 2 NULL 1 2
PDT000503463.1 SAMN11784293 GCA_005875955.1 NULL PDT000503469.1 SAMN11784285 GCA_005875995.1 NULL PDS000045942.1 2852801 2852710 1 0 0 2 2 NULL 1 2
PDT000503469.1 SAMN11784285 GCA_005875995.1 NULL PDT000503497.1 SAMN11784330 GCA_005876095.1 NULL PDS000045942.1 2848432 2848432 0 0 0 2 2 NULL 0 2
PDT000503455.1 SAMN11784268 GCA_005875935.1 NULL PDT000503463.1 SAMN11784293 GCA_005875955.1 NULL PDS000045942.1 2850363 2850272 2 0 0 2 2 NULL 2 2
PDT000503455.1 SAMN11784268 GCA_005875935.1 NULL PDT000503497.1 SAMN11784330 GCA_005876095.1 NULL PDS000045942.1 2846243 2846243 1 0 0 2 2 NULL 1 2
PDT000503463.1 SAMN11784293 GCA_005875955.1 NULL PDT000503497.1 SAMN11784330 GCA_005876095.1 NULL PDS000045942.1 2844832 2844766 1 0 0 2 2 NULL 1 2
There is an underlying database under ~/.pdtk/pdtk.sqlite3 with this schema
erDiagram
all_isolates{
string target_acc
int min_dist_same
int min_dist_opp
int PDS_acc
}
cluster_list{
string PDS_acc
string target_acc
string biosample_acc
string gencoll_acc
}
new_isolates{
string target_acc
int min_dist_same
int min_dist_opp
string PDS_acc
}
SNP_distances{
string target_acc_1
string biosample_acc_1
string gencoll_acc_1
string sample_name_1
string target_acc_2
string biosample_acc_2
string gencoll_acc_2
string sample_name_2
string PDS_acc
int aligned_bases_pre_filtered
int aligned_bases_post_filtered
int delta_positions_unambiguousdelta_positions_one_N
int delta_positions_both_N
int informative_positions
int total_positions
int pairwise_bases_post_filtered
int compatible_distance
int compatible_positions
}
amr_metadata{
string FDA_lab_id
string HHS_region
string IFSAC_category
string LibraryLayout
string PFGE_PrimaryEnzyme_pattern
string PFGE_SecondaryEnzyme_pattern
string Platform
string Runasm_acc
string asm_level
string asm_stats_contig_n50
string asm_stats_length_bp
string asm_stats_n_contig
string assembly_method
string attribute_package
string bioproject_acc
string bioproject_center
string biosample_acc
string isolate_identifiers
string collected_by
string collection_date
string epi_type
string fullasm_id
string geo_loc_name
string host
string host_diseaseisolation_source
string lat_lon ontological_term
string outbreak
string sample_name
string scientific_name
string serovar
string source_type
string species_taxid
string sra_center sra_release_date
string strain
string sequenced_by
string project_name
string target_acc
string target_creation_date
string taxid
string wgs_acc_prefix
string wgs_master_acc
string minsame
string mindiff
string computed_types
string number_drugs_resistant
string number_drugs_intermediate
string number_drugs_susceptible
string number_drugs_tested
string number_amr_genes
string number_core_amr_genes
string AST_phenotypes
string AMR_genotypes
string AMR_genotypes_core
string number_stress_genes
string stress_genotypes
int number_virulence_genes
string virulence_genotypes
string amrfinder_version
string refgene_db_version
string amrfinder_analysis_type
string amrfinder_applied
}
all_isolates ||--|| cluster_list : "target_acc, PDS_acc"
all_isolates ||--|| amr_metadata : "target_acc"
all_isolates ||--|| new_isolates : "target_acc, PDS_acc"
all_isolates }|--|{ SNP_distances : "target_acc_[12], PDS_acc"