Identify and annotate non-coding RNAs (tRNAs, rRNAs, snoRNAs, snRNAs, riboswitches, regulatory sRNAs) in genome assemblies with Infernal covariance-model search against Rfam, tRNAscan-SE 2.0 for tRNA, barrnap for rRNA, and ARAGORN for tmRNA. The animating principle: ncRNA homology is conserved at the level of base-paired secondary structure, not primary sequence, so covariance models (not BLAST) are the engine - and a homology annotation is a recall floor that is blind to fast-evolving and lineage-specific RNAs. miRNA and lncRNA live in expression/transcript space, not genomic search.
# Infernal + Rfam (record the Rfam release)
conda install -c bioconda infernal
wget https://ftp.ebi.ac.uk/pub/databases/Rfam/CURRENT/Rfam.cm.gz
gunzip Rfam.cm.gz && cmpress Rfam.cm
wget https://ftp.ebi.ac.uk/pub/databases/Rfam/CURRENT/Rfam.clanin
# Specialists
conda install -c bioconda trnascan-se barrnap aragorn
# Python utilities
pip install pandas biopython
Tell your AI agent what you want to do: - "Find all conserved-family non-coding RNAs in my genome assembly" - "Annotate tRNAs in my bacterial genome and report the high-confidence set" - "Search my genome for riboswitches and snoRNAs with Infernal" - "Do I have enough evidence to call miRNAs, or do I need small-RNA-seq?"
"Run Infernal cmscan against Rfam with GA thresholds and clan competition, then deoverlap, and report counts by family - and remind me this is a lower bound."
"Annotate ncRNAs in my eukaryotic genome with Infernal plus tRNAscan-SE in eukaryotic mode, and give me the tRNA high-confidence set."
"Find tRNA genes and anticodons in my bacterial genome with tRNAscan-SE bacterial mode, separating pseudogenes from the high-confidence set."
"My organellar tRNAs are being flagged as pseudogenes - run organellar mode."
"I have 180 tRNA 'genes' in a bacterium - is that real or fragments/pseudogenes?"
"Combine Infernal and tRNAscan-SE into one GFF, preferring tRNAscan-SE for tRNAs."
cmpress) and record the Rfam release--cut_ga --nohmmonly --fmt 2 --clanin and -Z set from genome sizegrep -v " = ") so one locus is not counted several times--cut_ga is correctness, not preference - Per-family curator thresholds; overriding GA genome-wide to "find more" imports the false positives the curator excluded.--fmt 2 --clanin + grep -v " = "; without it one locus matching several related models is counted several times.-B/-A/-E/-G; the wrong mode mis-scores. Report the high-confidence set, not raw hits (SINEs/pseudogenes inflate raw counts 2-10x in eukaryotes).