denoise failure

Hi QIIME2 team,

I have worked with QIIME2 to analyze 16S v4-5 data for several datasets and encountered an error I have never seen before in the steps from import, demux, to denoise. Because our lab recently also had some error code with read demultiplexing from sequenceing platform and I am just not sure where the error is acturally from. I have my qiime codes and errors copied below and the demux summary attached. My current suspicion is the reads number of 1/3 of my samples were too low, (<10,000 per sample ) so they failed denoise even if I set all the parameters to allow every reads imported.

Looking forward to your comments, thanks so much.

Best,

Shuqi

(qiime2-amplicon-2023.9) [host@compute-b-16-192 16s]$ cat qiime2.sbatch
#!/bin/bash

#SBATCH --job-name=qiime2
#SBATCH -p short
#SBATCH -t 0-12:00
#SBATCH --mem=64G
#SBATCH -c 16
#SBATCH -o %j.out
#SBATCH -e %j.err

module load conda/miniforge3/24.11.3-0
conda activate qiime2-amplicon-2023.9

cd 16s/

qiime tools import \

--type 'SampleData[PairedEndSequencesWithQuality]' \

--input-path 01-raw/ \

--output-path 02-demux/demux-paired-end.qza \

--input-format CasavaOneEightSingleLanePerSampleDirFmt

qiime demux summarize \

--i-data 02-demux/demux-paired-end.qza \

--o-visualization 02-demux/demux-paired-end.qzv

qiime dada2 denoise-paired
--p-n-threads 0
--i-demultiplexed-seqs 02-demux/demux-paired-end.qza
--p-trunc-len-f 0
--p-trunc-len-r 0
--o-representative-sequences 03-features/unfiltered-rep-seqs.qza
--o-table 03-features/unfiltered-table.qza
--o-denoising-stats 03-features/denoising-stats.qza

(qiime2-amplicon-2023.9) [host@compute-b-16-192 16s]$ cat err.log

Plugin error from dada2:

No reads passed the filter. trunc_len_f (0) or trunc_len_r (0) may be individually longer than read lengths, or trunc_len_f + trunc_len_r may be shorter than the length of the amplicon + 12 nucleotides (the length of the overlap). Alternatively, other arguments (such as max_ee or trunc_q) may be preventing reads from passing the filter.

Debug info has been saved to /tmp/qiime2-q2cli-err-85pe8y_a.log

P.S. I am working on remote cluster and have no access to the tmp file due to permission issue.

Hello @Shuqi

Thank you for the detailed post!

Good to know!

To start, let's go back to the last step that worked before the script broke:
02-demux/demux-paired-end.qzv

Can you upload that qzv file from demux summarize? Thanks!

1 Like

Hi Colin,

Please check the file here, sorry I accidentally submitted the post without an attachment.

demux-paired-end.qzv (374.6 KB)

1 Like

I opened up the file you shared with Qiime2 view:

The first thing I noticed was some low quality spikes in the reverse reads, right near the start:

I also noticed that many of the samples had very few reads.


There are a number of things to try, but I would start by adding --p-trunc-q 10 and rerunning. This should remove those <5 Qscores in the reverse read.

This will also remove the samples that only had one read, but they only had one read to start with anyway...

More than 30 of the samples in that table only had 1 read in them. Is that correct?

Another option I've tried is omitting these very small files. I don't even import import files under 10 kb or something.

Thank you Colin!

Yes about 40 samples in the table had 1 read only, I guess this is more related to the sequencer/demultiplex, or even more upstream at library prep where it had large chances that the primers did not work well.

I agreed it may just be the best not to import those low read count samples from the beginning and your 10kb cutoff actually ends up equivalent to my estimate of 10,000 reads per sample. Since I have already imported everything, is there a filter in qiime2 that is able to filter sample by total reads detected?

In the meantime, I tried --p-trunc-q 10 and --p-trunc-q 1, and unsurprisingly they both returned the same error msg as before: Plugin error from dada2:

No reads passed the filter. trunc_len_f (0) or trunc_len_r (0) may be individually longer than read lengths, or trunc_len_f + trunc_len_r may be shorter than the length of the amplicon + 12 nucleotides (the length of the overlap). Alternatively, other arguments (such as max_ee or trunc_q) may be preventing reads from passing the filter

Looking forward to your further comments, thanks very much.

Best,

Shuqi

You can try qiime demux filter-samples

No examples in docs, so I'm not sure how that works.

Perhaps an easier option is to simply not import the very small files. This is how I did this when I worked with low-biomass samples.

1 Like