Roumiana Alexandrova
09/16/2026, 6:07 PMThomas Danhorn
09/20/2026, 4:33 AM--extra_trimgalore_args it somehow prevented removal of the actual sequencing adapters? If so, you can look at the Trimgalore command in the execution_report_*.html file: Go to the table with all the processes, use the search box to find the TRIMGALORE ones, scroll to the right to the script column and click to expand it. (Alternatively, find a .command.sh file for a Trimgalore process in the work directory; the subdirectory is named after the hash, and you can find this and the path in the .nextflow.log.) This way you can compare the Trimgalore command from runs with and without the --extra_trimgalore_args.
Regarding speeding up tests, I'm not sure there is no good way to have the rnaseq pipeline skip the major steps. You can skip a lot of the extra QC, etc., with the --skip_* parameters (click Show hidden to see everything), and there are also --skip_pseudo_alignment and --skip_alignment, but I'm not sure you can use both without breaking something. You could try making a config that kills the processes and `ignore`s the errors (with errorStrategy), but I think the easiest is to just make a test data set with a single sample of something like 10k or 100k reads (pick ones that have a lot of adapters and poly-A/G runs) -- this should run very quickly, especially when skipping nonessential processes.
Regarding your poly-A/G reads, I suspect that most of them have next to no useful information in them -- especially the poly-G ones are typically just garbage reads (mRNA has poly-A tails, so the reads from the very 3'-end could have some extra `A`s). The mapper (e.g. STAR) will just not map these -- no harm done. Even if you have a read from the 3-end of an mRNA with some poly-A, the most likely outcome is that this would get softclipped and the read would map just fine if most of the sequence is from the genome. (I like to use the % of bases that were clipped off in my QC, so not trimming would influence that, but unless it's a large fraction of your reads it should not make that much difference.) In short, I recommend not wasting too much time and energy on worrying about such reads -- RNAseq analysis is remarkably robust to all kinds of noise.Roumiana Alexandrova
09/23/2026, 6:01 PMRoumiana Alexandrova
09/23/2026, 6:01 PMRoumiana Alexandrova
09/23/2026, 6:12 PMThomas Danhorn
09/25/2026, 2:05 AMRoumiana Alexandrova
09/25/2026, 4:08 PMRoumiana Alexandrova
09/25/2026, 4:09 PMRoumiana Alexandrova
09/25/2026, 4:11 PMRoumiana Alexandrova
09/25/2026, 4:15 PMRoumiana Alexandrova
09/25/2026, 4:15 PMRoumiana Alexandrova
09/25/2026, 4:15 PMRoumiana Alexandrova
09/25/2026, 4:16 PMRoumiana Alexandrova
09/25/2026, 4:16 PMRoumiana Alexandrova
09/25/2026, 4:17 PMRoumiana Alexandrova
09/25/2026, 4:17 PMRoumiana Alexandrova
09/25/2026, 4:18 PMRoumiana Alexandrova
09/25/2026, 4:24 PMThomas Danhorn
09/26/2026, 12:20 AM--poly_a error didn't come up when you ran the pipeline the first time, did it? What is different between the two runs?
To submit an issue in GItHub you need to be logged in, then it should work -- it does for me. (Also check any ad or script blockers in your browser.)Roumiana Alexandrova
11/02/2026, 9:11 PMRoumiana Alexandrova
11/02/2026, 9:11 PMRoumiana Alexandrova
11/02/2026, 9:12 PMRoumiana Alexandrova
11/02/2026, 9:12 PMRoumiana Alexandrova
11/02/2026, 9:12 PMRoumiana Alexandrova
11/02/2026, 9:13 PMFelix Krueger
11/02/2026, 9:14 PMFelix Krueger
11/02/2026, 9:26 PM-a replaces adapter auto-detection rather than adding to it, so -a G{10} -a A{10} told Trim Galore that the adapter is a G or A homopolymer — the Illumina sequence was never searched for. Adding --stranded_illumina didn’t change that, because an explicit -a wins over the presets. That’s why the adapters survived.
Don’t use -a for poly tails: --poly_a and --poly_g are separate trimming stages and they leave auto-detection alone. That’s exactly why your standalone run worked.
So the command you want is the one you already proved:
--nextseq 20 --poly_a --poly_g -n 3
with no `-a`/`-a2` at all.
The duplication is a pipeline bug, in conf/modules/trimgalore.config. It parses --extra_trimgalore_args into a map with:
def parts = arg.trim().split(/\s+/, 2)
extra_args_map[parts.first()] = parts.last()
For a flag that takes no value, that split returns a single-element array, so first() and last() are the same thing — the map ends up holding "--poly_a" -> "--poly_a" and renders it as --poly_a --poly_a. It only hits the flag that isn’t followed by a single-dash argument, because the splitter breaks on`--only, so-n 3` stays attached to the flag before it and accidentally acts as its value. That is why swapping --poly_a and --poly_g moved the error.
I’ll open an issue on nf-core/rnaseq with that detail. In the meantime, --nextseq 20 on its own goes through the config unharmed, and you can reach the rest by putting a
single-dash argument after each valueless flag — --poly_a -n 3 --poly_g -n 3 comes out intact, if inelegantly.
Separately, I’ll make Trim Galore tolerate a repeated flag instead of refusing it. Perl Trim Galore accepted repeats silently, so this is a v2 regression in a place nobody should have to think about.
One additional word regarding Poly-G trimming which is arguably more than the flag duplication in your case: you’re on v2.1.0, and --poly_g was broken for Read 2 until v2.3.0 (#321). On 2.1.0 it looked for poly-C at R2's 5' end instead of poly-G at the 3' end, so it both missed R2's real poly-G and clipped legitimate 5' bases off R2 where they happened to be C-rich. I’d not trust R2 from any paired run you’ve done with --poly_g on 2.1.0 — please upgrade to 2.3.0.
The pipeline pins 2.1.0, so that pin needs bumping too; I’ll raise it that too while we are at it.
And one for the next release: with --poly_a and --poly_g together, a poly-A tail sitting behind a poly-G run was not removed, because poly-A ran first and the G-run
blocked its scan. Fixed on dev, shipping in v2.4.0 — which is likely the rest of the poly-A you are still seeing.Roumiana Alexandrova
11/02/2026, 9:35 PMFelix Krueger
11/02/2026, 9:41 PM--poly_g was broken for Read 2 until 2.3.0 (#321), looking for poly-C at R2's 5' end rather than poly-G at the 3'. On 2.1.0 it both missed R2's real poly-G and clipped legitimate 5' bases off R2 where they were C-rich, so I would not trust R2 from any
paired run you have done with --poly_g on 3.26.0.
The flag duplication is already fixed on the pipeline’s dev branch, so 3.27.0 still has it. Until the next release, put a single-dash argument after each valueless flag and it comes through intact: --nextseq 20 --poly_a -n 3 --poly_g -n 3.Felix Krueger
11/02/2026, 9:53 PM