@dereneaton and @isaacovercast , the docs (under assembly parameters) suggest that low quality bases are converted to N during step 2, and per-read counts of Ns are subsequently used for filtering. But looking at the source I don't see this happening anywhere. cutadapt uses the quality threshold to trim poor base calls on the edges, but as far as I can tell doesn't do anything to bases on the interior of the read. In contrast, in the pyrad source (i.e. editraw_pairs.py, lines 158-163), there's masking of low quality bases ... are the docs wrong or am I being silly?