hmmscan(1)

πŸ“¦
version 3.4 Β· 2 versions
, in debian trixie, nixos 26.05, nixpkgs unstable, ubuntu noble, ubuntu resolute, ubuntu stonking

hmmscan πŸ’…βœ¨

okay bestie, welcome to hmmscan(1) β€” straight out of the HMMER Manual, and she is that girl. Let's get into it 🫢


✨ NAME ✨

hmmscan β€” search sequence(s) against a profile database 🌸


πŸŽ€ SYNOPSIS πŸŽ€

hmmscan [options] hmmdb seqfile

πŸ’– DESCRIPTION πŸ’–

So here's the vibe: hmmscan searches protein sequences against collections of protein profiles. For every single sequence in seqfile, it takes that query sequence, searches the target database of profiles sitting in hmmdb, and then hands you back ranked lists of the profiles that match your sequence the most significantly. πŸ‘‘

And no, seqfile isn't limited to one sequence β€” it can hold more than one query sequence, and each one gets searched in turn against hmmdb. One at a time, no skipping, no cutting the line. πŸ’…

🚨 IMPORTANT: your hmmdb has to be press'ed with hmmpress before hmmscan can even search it. That step creates four binary files, suffixed .h3{fimp}. No press, no search, periodt.

Also! Your query seqfile can literally just be - (a single dash character), and then the query sequences get read from a stdin pipe instead of a file. Cute, right? πŸ™ˆ BUT β€” the hmmdb can not be read from a stdin stream, because it needs those four auxiliary binary files that hmmpress generated. She has requirements, okay?

Now, about the output: the format is designed to be human-readable, but honestly it's often so voluminous that reading it is impractical and parsing it is a genuine pain 😭. That's why the --tblout and --domtblout options exist β€” they save output in simple tabular formats that are concise and way easier to parse. And the -o option lets you redirect the main output, including just yeeting it into /dev/null. Iconic.


✨ OPTIONS ✨

  • -h β€” Help! Prints a brief reminder of the command line usage and every available option. Your little cheat sheet. πŸŽ€

🌸 OPTIONS FOR CONTROLLING OUTPUT 🌸

  • -o <f> β€” Sends the main human-readable output to a file <f> instead of the default stdout. Bye bye terminal spam πŸ‘‹
  • --tblout <f> β€” Saves a simple tabular (space-delimited) file summarizing the per-target output, with one data line per homologous target model found. Clean, tidy, parseable. ✨
  • --domtblout <f> β€” Saves a simple tabular (space-delimited) file summarizing the per-domain output, with one data line per homologous domain detected in a query sequence for each homologous model. More granular, same energy. πŸ’…
  • --pfamtblout <f> β€” Saves an especially succinct tabular (space-delimited) file summarizing the per-target output, with one data line per homologous target model found. Extra minimal. Extra cute. πŸŽ€
  • --acc β€” Use accessions instead of names in the main output, wherever accessions are available for profiles and/or sequences. πŸ”–
  • --noali β€” Omit the alignment section from the main output. This can greatly reduce the output volume. Less scrolling, more slaying. πŸ’€
  • --notextw β€” Unlimit the length of each line in the main output. The default is a limit of 120 characters per line, which helps display the output cleanly on terminals and in editors β€” but it can truncate target profile description lines. So like, pick your fighter. 🌈
  • --textw <n> β€” Sets the main output's line length limit to <n> characters per line. The default is 120. ⭐

πŸ’œ OPTIONS FOR REPORTING THRESHOLDS πŸ’œ

Reporting thresholds control which hits get reported in output files β€” that's the main output, --tblout, and --domtblout. So this is the "what even shows up" crew.

  • -E <x> β€” In the per-target output, report target profiles with an E-value of <= <x>. The default is 10.0, meaning that on average about 10 false positives will be reported per query β€” so you can peek at the top of the noise and decide for yourself if it's really noise. It's giving "trust your gut" πŸ™ˆ
  • -T <x> β€” Instead of thresholding per-profile output on E-value, instead report target profiles with a bit score of >= <x>. πŸ”₯
  • --domE <x> β€” In the per-domain output, for target profiles that have already satisfied the per-profile reporting threshold, report individual domains with a conditional E-value of <= <x>. The default is 10.0. And a conditional E-value means the expected number of additional false positive domains in the smaller search space of those comparisons that already satisfied the per-profile reporting threshold (and thus must have at least one homologous domain already). iykyk πŸ’…
  • --domT <x> β€” Instead of thresholding per-domain output on E-value, instead report domains with a bit score of >= <x>. ⭐

πŸ¦‹ OPTIONS FOR INCLUSION THRESHOLDS πŸ¦‹

Inclusion thresholds are stricter than reporting thresholds, bestie. They control which hits are considered reliable enough to be included in an output alignment or a subsequent search round.

But here's the tea about hmmscan specifically: it doesn't have any alignment output (unlike hmmsearch or phmmer) and it doesn't do any iterative search steps (unlike jackhmmer). So in hmmscan, inclusion thresholds have little effect. They only affect what domains get marked as significant (!) or questionable (?) in the domain output. That's it. That's the whole job. 😭

  • --incE <x> β€” Use an E-value of <= <x> as the per-target inclusion threshold. The default is 0.01, meaning that on average about 1 false positive would be expected in every 100 searches with different query sequences. 🌸
  • --incT <x> β€” Instead of using E-values to set the inclusion threshold, use a bit score of >= <x> as the per-target inclusion threshold. But ngl β€” it would be unusual to use bit score thresholds with hmmscan, because you don't expect a single score threshold to work for different profiles; different profiles have slightly different expected score distributions. So like… maybe don't. πŸ™ˆ
  • --incdomE <x> β€” Use a conditional E-value of <= <x> as the per-domain inclusion threshold, in targets that have already satisfied the overall per-target inclusion threshold. The default is 0.01. πŸ’œ
  • --incdomT <x> β€” Instead of using E-values, use a bit score of >= <x> as the per-domain inclusion threshold. And as with --incT above, it would be unusual to use a single bit score threshold in hmmscan. ⚠️

πŸ‘‘ OPTIONS FOR MODEL-SPECIFIC SCORE THRESHOLDING πŸ‘‘

So curated profile databases may define specific bit score thresholds for each profile, superseding any thresholding based on statistical significance alone. She's custom, she's curated, she's main character. ✨

To use these options, the profile must contain the appropriate (GA, TC, and/or NC) optional score threshold annotation β€” and this gets picked up by hmmbuild from Stockholm format alignment files. πŸ“

Each thresholding option has two scores: the per-sequence threshold <x1> and the per-domain threshold <x2>. These act as if:

-T <x1> --incT <x1> --domT <x2> --incdomT <x2>

has been applied specifically using each model's curated thresholds.

  • --cut_ga β€” Use the GA (gathering) bit scores in the model to set per-sequence (GA1) and per-domain (GA2) reporting and inclusion thresholds. GA thresholds are generally considered to be the reliable curated thresholds defining family membership; for example, in Pfam, these thresholds define what gets included in Pfam Full alignments based on searches with Pfam Seed models. πŸ‘‘
  • --cut_nc β€” Use the NC (noise cutoff) bit score thresholds in the model to set per-sequence (NC1) and per-domain (NC2) reporting and inclusion thresholds. NC thresholds are generally considered to be the score of the highest-scoring known false positive. 🚫
  • --cut_tc β€” Use the NC (trusted cutoff) bit score thresholds in the model to set per-sequence (TC1) and per-domain (TC2) reporting and inclusion thresholds. TC thresholds are generally considered to be the score of the lowest-scoring known true positive that is above all known false positives. βœ…
🫠 Yes, the original really does say "NC (trusted cutoff)" for --cut_tc. I'm not fixing it, I'm not merging it, I'm reporting it exactly as it is. Facts are facts.

πŸ”₯ CONTROL OF THE ACCELERATION PIPELINE πŸ”₯

HMMER3 searches are accelerated in a three-step filter pipeline: the MSV filter, the Viterbi filter, and the Forward filter. The first filter is the fastest and most approximate; the last is the full Forward scoring algorithm. And there's also a bias filter step between MSV and Viterbi. Targets that pass all the steps in the acceleration pipeline then get subjected to postprocessing β€” that's domain identification and scoring using the Forward/Backward algorithm. πŸ’…

⚠️ Big important caveat: changing filter thresholds only removes or includes targets from consideration. Changing filter thresholds does not alter bit scores, E-values, or alignments β€” all of those are determined solely in postprocessing. So don't come for the filters when the numbers look a way, okay? 😌
  • --max β€” Turn off all filters, including the bias filter, and run full Forward/Backward postprocessing on every target. This increases sensitivity somewhat, at a large cost in speed. Powerful but she's expensive πŸ’€
  • --F1 <x> β€” Set the P-value threshold for the MSV filter step. The default is 0.02, meaning that roughly 2% of the highest scoring nonhomologous targets are expected to pass the filter. 🌈
  • --F2 <x> β€” Set the P-value threshold for the Viterbi filter step. The default is 0.001. ⭐
  • --F3 <x> β€” Set the P-value threshold for the Forward filter step. The default is 1e-5. ✨
  • --nobias β€” Turn off the bias filter. This increases sensitivity somewhat, but can come at a high cost in speed β€” especially if the query has biased residue composition (such as a repetitive sequence region, or if it's a membrane protein with large regions of hydrophobicity). Without the bias filter, too many sequences may pass the filter with biased queries, leading to slower than expected performance as the computationally intensive Forward/Backward algorithms shoulder an abnormally heavy load. She's gonna be tired 😭

✨ OTHER OPTIONS ✨

okay bestie, this is the extras drawer πŸ’… the odds and ends that didn't fit anywhere else, but they still matter, so no skipping.

  • --nonull2 β€” turn off the null2 score corrections for biased composition. that's it, that's the whole vibe.
  • -Z <x> β€” assert that the total number of targets in your searches is <x>, for the purposes of per-sequence E-value calculations, rather than the actual number of targets seen. so you're basically telling hmmscan "pretend the search space was this big," and it does the math like that.
  • --domZ <x> β€” assert that the total number of targets in your searches is <x>, for the purposes of per-domain conditional E-value calculations, rather than the number of targets that passed the reporting thresholds. same energy as -Z, but for the per-domain conditional E-value side of things.
  • --seed <n> β€” set the random number seed to <n>. some steps in postprocessing require Monte Carlo simulation. the default is to use a fixed seed (42), so results are exactly reproducible. any other positive integer will give different (but also reproducible) results. a choice of 0 uses an arbitrarily chosen seed. so yes, you can manifest chaos, but it will be documented chaos 😭
  • --qformat <s> β€” assert that input seqfile is in format <s>, bypassing format autodetection. common choices for <s> include: fasta, embl, genbank. alignment formats also work; common choices include: stockholm, a2m, afa, psiblast, clustal, phylip. for more information, and for codes for some less common formats, see main documentation. the string <s> is case-insensitive (fasta or FASTA both work). she's flexible, she's iconic.
  • --cpu <n> β€” set the number of parallel worker threads to <n>. the default is 0, meaning off (no thread-level parallelization), because hmmscan is typically i/o bound and the extra overhead of our current multithreaded implementation isn't worthwhile. you can also control this number by setting an environment variable, HMMER_NCPU. there is also a master thread, so the actual number of threads that HMMER spawns is at least <n>+1.
this option is not available if HMMER was compiled with POSIX threads support turned off. so if it's missing, that's why, don't come for her πŸ’€
  • --stall β€” for debugging the MPI master/worker version: pause after start, to enable the developer to attach debuggers to the running master and worker(s) processes. send SIGCONT signal to release the pause. (under gdb: (gdb) signal SIGCONT)
only available if optional MPI support was enabled at compile-time.
  • --mpi β€” run under MPI control with master/worker parallelization (using mpirun, for example, or equivalent). only available if optional MPI support was enabled at compile-time. parallel bestie behavior, but only if your build said yes.

πŸ‘€ SEE ALSO πŸ‘€

  • see hmmer(1) for a master man page with a list of all the individual man pages for programs in the HMMER package.
  • for complete documentation, see the user guide that came with your HMMER distribution (Userguide.pdf); or see the HMMER web page (http://hmmer.org/).

Copyright (C) 2023 Howard Hughes Medical Institute.

Freely distributed under the BSD open source license.

for additional information on copyright and licensing, see the file called COPYRIGHT in your HMMER source distribution, or see the HMMER web page (http://hmmer.org/).


🫢 AUTHOR 🫢

http://eddylab.org


and that's the whole page, bestie. this lil legend is from HMMER 3.4, dated Aug 2023, and yes, it's hmmscan(1). slay, read responsibly, and may your E-values be ever in your favor πŸŒΈβœ¨πŸ’…

πŸ“¦ where this page comes from