Guides

Protein classification

Build and search protein indexes with Centrifuger for translated classification against RefSeq proteins or NCBI nr.

Alongside nucleotide databases, Centrifuger can index and search protein sequences. Protein-level search is the tool of choice when the organisms in a sample are too divergent from anything in a nucleotide database for DNA matches to survive — deep-branching or poorly sampled taxa, and viruses in particular, where amino-acid sequence is conserved long after nucleotide sequence has drifted apart.

Download a protein index#

Two protein indexes are published; see pre-built indexes for the full table.

TitleDescriptionSize/~MemoryDate
cfr_protein_pvRefSeq bacteria, archaea and virus proteins25G2025/08/25
cfr_nrNCBI nr181G2026/01/31
bash
centrifuger-download cfr_protein_pv

cfr_protein_pv is notably modest at 25 GB — smaller than any of the comprehensive nucleotide indexes — which makes translated search practical on hardware that could not hold core_nt.

Build your own protein index#

Pass --protein to centrifuger-build. Everything else works as it does for genomes: reference files via -r or -l, an NCBI-style taxonomy, and a sequence-to-taxon mapping.

bash
centrifuger-build --protein \
  -l protein_files.list \
  --taxonomy-tree taxonomy/nodes.dmp \
  --name-table taxonomy/names.dmp \
  --conversion-table protein_seqid2taxid.map \
  -o cfr_protein_idx \
  -t 8 --build-mem 120G

The --conversion-table maps each protein accession to the taxonomy ID of the organism it came from, exactly as the nucleotide case maps contig accessions.

See building an index for --build-mem, --checkpoint and the other build-time options, all of which apply here too.

Classify against it#

Classification and quantification use the same commands as for a nucleotide index — only -x changes:

bash
centrifuger -x cfr_protein_pv \
  -1 sample_1.fq.gz -2 sample_2.fq.gz -t 16 > protein_classification.tsv

centrifuger-quant -x cfr_protein_pv \
  -c protein_classification.tsv > protein_report.tsv

The output columns are unchanged, described in output formats. The seqID column now names a protein accession rather than a contig, and hitLength reflects the matched extent of the read.

Nucleotide or protein?#

Nucleotide indexProtein index
Best atSpecies- and strain-level resolution among well-represented organismsDetecting divergent or poorly sampled organisms
ResolutionDown to strain, given a strain-resolved databaseCoarser — conserved proteins are shared across related taxa
Coverage of the readWhole read, including non-coding sequenceCoding sequence only
Typical index size41–301 GB25–181 GB

The two are complementary rather than competing. A common pattern is to classify against a nucleotide database first, then take the reads that came back unclassified and put them through a protein index:

bash
centrifuger -x cfr_hpv+gbsarscov2 -1 s_1.fq.gz -2 s_2.fq.gz \
  --un unclassified -t 16 > nt_classification.tsv

centrifuger -x cfr_protein_pv \
  -1 unclassified_1.fq.gz -2 unclassified_2.fq.gz \
  -t 16 > protein_classification.tsv

That keeps the fast, high-resolution nucleotide search in front and reserves translated search for the residue that needs it.

Edit this page on GitHub