MultiQC Jupyter Notebook Example¶

This notebook has some example code showing how MultiQC can be used within an interactive analysis, such as a Jupyter Notebook.

MultiQC is written in Python, so must be used in a Python environment. MultiQC can be installed in a variety of ways: see the documentation for more information. Note that MultiQC must be installed into the notebook kernel.

Let's install MultiQC using pip from source. Note the % magic which installs the package into the kernel, and not the jupyter environment. In order for the environment to pick the updated package, we call the reset command to restart kernel.

In [1]:
%pip install --quiet multiqc pandas
%reset -f

Now let's import the multiqc package into your workbook.

In [2]:
import multiqc

Great! Now let's check that it's working properly by printing the version that we're using.

In [3]:
print(multiqc.__version__)
1.29

Before we can use any outputs from MultiQC, we must first run it on some data. Let's grab results from a test run of the nf-core/viralrecon pipeline.

In [4]:
!test -d "data" || (wget https://multiqc.info/examples/jupyter/data.zip && unzip -qq data.zip && rm data.zip)

You should now see a folder called data/ in your notebook work directory with a bunch of log files from read processing, assembly, alignment, and variant calling. Now let's parse some of those logs.

In [5]:
%ls data
assembly/                         pipeline_info/
fastp/                            summary_assembly_metrics_mqc.csv
fastqc/                           summary_variants_metrics_mqc.csv
kraken2/                          variants/

Parsing data¶

Let's parse some fastp logs

In [6]:
multiqc.parse_logs('./data/fastp')
            config | Loading config settings from: /Users/vlad/.multiqc_config.yaml
       file_search | Search path: /Users/vlad/git/seqeralabs/web/packages/website/public/examples/jupyter/data/fastp
        searching |                                            0% 0/6 searching
        searching | ██████▋                                   17% 1/6 data/fastp/SAMPLE2_PE.fastp.html
        searching | █████████████▎                            33% 2/6 data/fastp/SAMPLE1_PE.fastp.html
        searching | ████████████████████                      50% 3/6 data/fastp/SAMPLE3_SE.fastp.json
        searching | ██████████████████████████▋               67% 4/6 data/fastp/SAMPLE3_SE.fastp.html
        searching | █████████████████████████████████▎        83% 5/6 data/fastp/SAMPLE1_PE.fastp.json
        searching | ████████████████████████████████████████ 100% 6/6 data/fastp/SAMPLE2_PE.fastp.json
        searching | ████████████████████████████████████████ 100% 6/6                                 
        searching | ████████████████████████████████████████ 100% 6/6 
        searching | ████████████████████████████████████████ 100% 6/6 
             fastp | Found 3 reports

MultiQC parsed and loaded the fastp results into memory. Let's inspect them.

In [7]:
multiqc.list_modules()
Out[7]:
['fastp']
In [8]:
multiqc.list_samples()
Out[8]:
['SAMPLE1_PE', 'SAMPLE2_PE', 'SAMPLE3_SE']
In [9]:
multiqc.list_data_sources()
Out[9]:
['/Users/vlad/git/seqeralabs/web/packages/website/public/examples/jupyter/data/fastp/SAMPLE1_PE.fastp.json',
 '/Users/vlad/git/seqeralabs/web/packages/website/public/examples/jupyter/data/fastp/SAMPLE2_PE.fastp.json',
 '/Users/vlad/git/seqeralabs/web/packages/website/public/examples/jupyter/data/fastp/SAMPLE3_SE.fastp.json']
In [10]:
sample1_result = multiqc.get_module_data(module="fastp", sample="SAMPLE1_PE")
sample1_result["summary"]
Out[10]:
{'fastp_version': '0.23.2',
 'sequencing': 'paired end (301 cycles + 301 cycles)',
 'before_filtering': {'total_reads': 55442,
  'total_bases': 16571632,
  'q20_bases': 16267224,
  'q30_bases': 15853021,
  'q20_rate': 0.981631,
  'q30_rate': 0.956636,
  'read1_mean_length': 298,
  'read2_mean_length': 298,
  'gc_content': 0.38526},
 'after_filtering': {'total_reads': 48270,
  'total_bases': 14363465,
  'q20_bases': 14323363,
  'q30_bases': 14199841,
  'q20_rate': 0.997208,
  'q30_rate': 0.988608,
  'read1_mean_length': 298,
  'read2_mean_length': 296,
  'gc_content': 0.383991}}

The MultiQC module for fastp implements several plots. The function below lists plot sections, groupped by module name.

In [11]:
multiqc.list_plots()
Out[11]:
{'fastp': ['Filtered Reads',
  'Insert Sizes',
  {'Sequence Quality': ['Read 1: Before filtering',
    'Read 1: After filtering',
    'Read 2: Before filtering',
    'Read 2: After filtering']},
  {'GC Content': ['Read 1: Before filtering',
    'Read 1: After filtering',
    'Read 2: Before filtering',
    'Read 2: After filtering']},
  {'N content': ['Read 1: Before filtering',
    'Read 1: After filtering',
    'Read 2: Before filtering',
    'Read 2: After filtering']}]}

You can use this information to call multiqc.get_plot("<module">, "<section>") to retrieve plot object, and show it with plot.show().

When plot has several datasets (like "Sequence Quality", "GC Content", and "N Content" plots), pass the dataset name as well into plot.show(dataset_id="<dataset>").

Let's display the GC Content plot.

In [12]:
plot = multiqc.get_plot("fastp", "GC Content")
plot.show(dataset_id="Read 2: Before filtering")

You can also save plot to a file using the plot.save() method instead:

In [13]:
plot.save("gc_content.html")  # will save an interactive HTML
plot.save("gc_content.png")  # will save a flat image
              plot | Plot saved to gc_content.html
              plot | Plot saved to gc_content.png

Adding more modules¶

So far we only parsed logs for one module. Now, let's parse more. The original viralrecon workflow uses a custom script to summarize data from multiple modules, and we are going to do that interactively, and after that, generate an HTML report.

We also notice that the viralrecon workflow runs QUAST several times: for each assembler separately, and then for the consensus sequence. To keep each run in a separate section, we will use the module_order configuration option to provide path filters for each QUAST run.

Any custom settings supported by MultiQC can be passed to the function call like that, for example, extra_fn_clean_exts can be used to trim additional endings from sample names.

In [14]:
import multiqc
multiqc.parse_logs(
    "./data/assembly",
    "./data/kraken2",
    "./data/variants",
    "./data/fastqc",
    module_order=[
        dict(
            quast=dict(
                name="VARIANTS: QUAST",
                anchor="quast_variants",
                info="This section of the report shows QUAST QC results for the consensus sequence.",
                path_filters=["*/variants/*"],
            )
        ),
        dict(
            quast=dict(
                name="ASSEMBLY: QUAST (SPAdes)",
                anchor="quast_spades",
                info="This section of the report shows QUAST results from SPAdes de novo assembly.",
                path_filters=["*/spades/*"],
            )
        ),
    ],
    extra_fn_clean_exts=[".unclassified", ".pangolin", " MN908947.3", " MN908947.3"]
)
multiqc.list_modules()
            config | Loading config settings from: /Users/vlad/.multiqc_config.yaml
       file_search | Search path: /Users/vlad/git/seqeralabs/web/packages/website/public/examples/jupyter/data/assembly
       file_search | Search path: /Users/vlad/git/seqeralabs/web/packages/website/public/examples/jupyter/data/kraken2
       file_search | Search path: /Users/vlad/git/seqeralabs/web/packages/website/public/examples/jupyter/data/variants
       file_search | Search path: /Users/vlad/git/seqeralabs/web/packages/website/public/examples/jupyter/data/fastqc
        searching |                                            0% 0/339 searching
        searching |                                            0% 1/339 y/cutadapt/log/SAMPLE2_PE.primer_trim.cutadapt.log
        searching | ▏                                          1% 2/339 y/cutadapt/log/SAMPLE3_SE.primer_trim.cutadapt.log
        searching | ▎                                          1% 3/339 y/cutadapt/log/SAMPLE1_PE.primer_trim.cutadapt.log
        searching | ▍                                          1% 4/339 /cutadapt/fastqc/SAMPLE3_SE.primer_trim_fastqc.zip
        searching | ▌                                          1% 5/339 tadapt/fastqc/SAMPLE2_PE.primer_trim_2_fastqc.html
        searching | ▋                                          2% 6/339 tadapt/fastqc/SAMPLE1_PE.primer_trim_2_fastqc.html
        searching | ▊                                          2% 7/339 tadapt/fastqc/SAMPLE1_PE.primer_trim_1_fastqc.html
        searching | ▉                                          2% 8/339 utadapt/fastqc/SAMPLE2_PE.primer_trim_2_fastqc.zip
        searching | █                                          3% 9/339 utadapt/fastqc/SAMPLE1_PE.primer_trim_1_fastqc.zip
        searching | █▏                                         3% 10/339 tadapt/fastqc/SAMPLE2_PE.primer_trim_1_fastqc.html
        searching | █▎                                         3% 11/339 cutadapt/fastqc/SAMPLE3_SE.primer_trim_fastqc.html
        searching | █▍                                         4% 12/339 utadapt/fastqc/SAMPLE2_PE.primer_trim_1_fastqc.zip
        searching | █▌                                         4% 13/339 utadapt/fastqc/SAMPLE2_PE.primer_trim_1_fastqc.zip
        searching | █▌                                         4% 13/339 utadapt/fastqc/SAMPLE1_PE.primer_trim_2_fastqc.zip
        searching | █▋                                         4% 14/339 tats/SAMPLE3_SE-scaffolds_genomic_features_any.txt
        searching | █▊                                         4% 15/339 l/quast/genome_stats/genome_fraction_histogram.pdf
        searching | █▉                                         5% 16/339 l/quast/genome_stats/SAMPLE3_SE-scaffolds_gaps.txt
        searching | ██                                         5% 17/339 tats/SAMPLE1_PE-scaffolds_genomic_features_any.txt
        searching | ██                                         5% 18/339 l/quast/genome_stats/SAMPLE1_PE-scaffolds_gaps.txt
        searching | ██▏                                        6% 19/339 tats/SAMPLE2_PE-scaffolds_genomic_features_any.txt
        searching | ██▎                                        6% 20/339 al/quast/genome_stats/features_cumulative_plot.pdf
        searching | ██▍                                        6% 21/339 quast/genome_stats/complete_features_histogram.pdf
        searching | ██▌                                        6% 22/339 viral/quast/genome_stats/features_frcurve_plot.pdf
        searching | ██▋                                        7% 23/339 spades/rnaviral/quast/genome_stats/genome_info.txt
        searching | ██▊                                        7% 24/339 l/quast/genome_stats/SAMPLE2_PE-scaffolds_gaps.txt
        searching | ██▉                                        7% 25/339 sembly/spades/rnaviral/quast/transposed_report.txt
        searching | ███                                        8% 26/339 sembly/spades/rnaviral/quast/transposed_report.tex
        searching | ███▏                                       8% 27/339 data/assembly/spades/rnaviral/quast/icarus.html   
        searching | ███▎                                       8% 28/339 des/rnaviral/quast/basic_stats/cumulative_plot.pdf
        searching | ███▍                                       9% 29/339 mbly/spades/rnaviral/quast/basic_stats/Nx_plot.pdf
        searching | ███▌                                       9% 30/339 _stats/SAMPLE3_SE-scaffolds_coverage_histogram.pdf
        searching | ███▋                                       9% 31/339 sic_stats/SAMPLE2_PE.scaffolds_GC_content_plot.pdf
        searching | ███▊                                       9% 32/339 sic_stats/SAMPLE1_PE.scaffolds_GC_content_plot.pdf
        searching | ███▉                                      10% 33/339 sic_stats/SAMPLE3_SE.scaffolds_GC_content_plot.pdf
        searching | ████                                      10% 34/339 ly/spades/rnaviral/quast/basic_stats/gc.icarus.txt
        searching | ████▏                                     10% 35/339 bly/spades/rnaviral/quast/basic_stats/NGx_plot.pdf
        searching | ████▏                                     11% 36/339 des/rnaviral/quast/basic_stats/GC_content_plot.pdf
        searching | ████▎                                     11% 37/339 _stats/SAMPLE2_PE-scaffolds_coverage_histogram.pdf
        searching | ████▍                                     11% 38/339 /rnaviral/quast/basic_stats/coverage_histogram.pdf
        searching | ████▌                                     12% 39/339 _stats/SAMPLE1_PE-scaffolds_coverage_histogram.pdf
        searching | ████▋                                     12% 40/339 s/rnaviral/quast/aligned_stats/cumulative_plot.pdf
        searching | ████▊                                     12% 41/339 /spades/rnaviral/quast/aligned_stats/NGAx_plot.pdf
        searching | ████▉                                     12% 42/339 y/spades/rnaviral/quast/aligned_stats/NAx_plot.pdf
        searching | █████                                     13% 43/339 sembly/spades/rnaviral/quast/transposed_report.tsv
        searching | █████▏                                    13% 44/339 data/assembly/spades/rnaviral/quast/report.tex    
        searching | █████▎                                    13% 45/339 data/assembly/spades/rnaviral/quast/report.txt
        searching | █████▍                                    14% 46/339 data/assembly/spades/rnaviral/quast/report.tsv
        searching | █████▌                                    14% 47/339 data/assembly/spades/rnaviral/quast/report.html
        searching | █████▋                                    14% 48/339 data/assembly/spades/rnaviral/quast/report.pdf 
        searching | █████▊                                    14% 49/339 data/assembly/spades/rnaviral/quast/quast.log 
        searching | █████▉                                    15% 50/339 data/kraken2/SAMPLE3_SE.kraken2.report.txt   
        searching | ██████                                    15% 51/339 data/kraken2/SAMPLE1_PE.kraken2.report.txt
        searching | ██████▏                                   15% 52/339 data/kraken2/SAMPLE2_PE.kraken2.report.txt
        searching | ██████▎                                   16% 53/339 tie2/samtools_stats/SAMPLE3_SE.sorted.bam.idxstats
        searching | ██████▎                                   16% 54/339 tie2/samtools_stats/SAMPLE1_PE.sorted.bam.flagstat
        searching | ██████▍                                   16% 55/339 bowtie2/samtools_stats/SAMPLE2_PE.sorted.bam.stats
        searching | ██████▌                                   17% 56/339 ols_stats/SAMPLE2_PE.ivar_trim.sorted.bam.flagstat
        searching | ██████▋                                   17% 57/339 mtools_stats/SAMPLE3_SE.ivar_trim.sorted.bam.stats
        searching | ██████▊                                   17% 58/339 tie2/samtools_stats/SAMPLE2_PE.sorted.bam.flagstat
        searching | ██████▉                                   17% 59/339 bowtie2/samtools_stats/SAMPLE1_PE.sorted.bam.stats
        searching | ███████                                   18% 60/339 ols_stats/SAMPLE1_PE.ivar_trim.sorted.bam.flagstat
        searching | ███████▏                                  18% 61/339 bowtie2/samtools_stats/SAMPLE3_SE.sorted.bam.stats
        searching | ███████▎                                  18% 62/339 ols_stats/SAMPLE3_SE.ivar_trim.sorted.bam.flagstat
        searching | ███████▍                                  19% 63/339 mtools_stats/SAMPLE1_PE.ivar_trim.sorted.bam.stats
        searching | ███████▌                                  19% 64/339 tie2/samtools_stats/SAMPLE2_PE.sorted.bam.idxstats
        searching | ███████▋                                  19% 65/339 ols_stats/SAMPLE2_PE.ivar_trim.sorted.bam.idxstats
        searching | ███████▊                                  19% 66/339 mtools_stats/SAMPLE2_PE.ivar_trim.sorted.bam.stats
        searching | ███████▉                                  20% 67/339 tie2/samtools_stats/SAMPLE3_SE.sorted.bam.flagstat
        searching | ████████                                  20% 68/339 tie2/samtools_stats/SAMPLE1_PE.sorted.bam.idxstats
        searching | ████████▏                                 20% 69/339 ols_stats/SAMPLE1_PE.ivar_trim.sorted.bam.idxstats
        searching | ████████▎                                 21% 70/339 ols_stats/SAMPLE3_SE.ivar_trim.sorted.bam.idxstats
        searching | ████████▍                                 21% 71/339 mosdepth/amplicon/SAMPLE2_PE.mosdepth.coverage.tsv
        searching | ████████▍                                 21% 72/339 mosdepth/amplicon/SAMPLE2_PE.mosdepth.coverage.pdf
        searching | ████████▌                                 22% 73/339 mosdepth/amplicon/SAMPLE3_SE.mosdepth.coverage.tsv
        searching | ████████▋                                 22% 74/339 mosdepth/amplicon/SAMPLE3_SE.mosdepth.coverage.pdf
        searching | ████████▊                                 22% 75/339 mosdepth/amplicon/SAMPLE1_PE.mosdepth.coverage.pdf
        searching | ████████▉                                 22% 76/339 /mosdepth/amplicon/SAMPLE3_SE.mosdepth.summary.txt
        searching | █████████                                 23% 77/339 /mosdepth/amplicon/SAMPLE2_PE.mosdepth.summary.txt
        searching | █████████▏                                23% 78/339 mosdepth/amplicon/SAMPLE1_PE.mosdepth.coverage.tsv
        searching | █████████▎                                23% 79/339 osdepth/amplicon/all_samples.mosdepth.coverage.tsv
        searching | █████████▍                                24% 80/339 mosdepth/amplicon/all_samples.mosdepth.heatmap.pdf
        searching | █████████▌                                24% 81/339 mosdepth/amplicon/all_samples.mosdepth.heatmap.tsv
        searching | █████████▋                                24% 82/339 /mosdepth/amplicon/SAMPLE1_PE.mosdepth.summary.txt
        searching | █████████▊                                24% 83/339 2/mosdepth/genome/SAMPLE2_PE.mosdepth.coverage.tsv
        searching | █████████▉                                25% 84/339 2/mosdepth/genome/SAMPLE2_PE.mosdepth.coverage.pdf
        searching | ██████████                                25% 85/339 2/mosdepth/genome/SAMPLE3_SE.mosdepth.coverage.tsv
        searching | ██████████▏                               25% 86/339 2/mosdepth/genome/SAMPLE3_SE.mosdepth.coverage.pdf
        searching | ██████████▎                               26% 87/339 2/mosdepth/genome/SAMPLE1_PE.mosdepth.coverage.pdf
        searching | ██████████▍                               26% 88/339 e2/mosdepth/genome/SAMPLE3_SE.mosdepth.summary.txt
        searching | ██████████▌                               26% 89/339 e2/mosdepth/genome/SAMPLE2_PE.mosdepth.summary.txt
        searching | ██████████▌                               27% 90/339 2/mosdepth/genome/SAMPLE1_PE.mosdepth.coverage.tsv
        searching | ██████████▋                               27% 91/339 /mosdepth/genome/all_samples.mosdepth.coverage.tsv
        searching | ██████████▊                               27% 92/339 e2/mosdepth/genome/SAMPLE1_PE.mosdepth.summary.txt
        searching | ██████████▉                               27% 93/339 ollectMultipleMetrics.quality_distribution_metrics
        searching | ███████████                               28% 94/339 PE.CollectMultipleMetrics.quality_by_cycle_metrics
        searching | ███████████▏                              28% 95/339 MultipleMetrics.base_distribution_by_cycle_metrics
        searching | ███████████▎                              28% 96/339 SE.CollectMultipleMetrics.quality_by_cycle_metrics
        searching | ███████████▍                              29% 97/339 ollectMultipleMetrics.quality_distribution_metrics
        searching | ███████████▌                              29% 98/339 PLE2_PE.CollectMultipleMetrics.insert_size_metrics
        searching | ███████████▋                              29% 99/339 E.CollectMultipleMetrics.alignment_summary_metrics
        searching | ███████████▊                              29% 100/339 MultipleMetrics.base_distribution_by_cycle_metrics
        searching | ███████████▉                              30% 101/339 E.CollectMultipleMetrics.alignment_summary_metrics
        searching | ████████████                              30% 102/339 variants/bowtie2/log/SAMPLE2_PE.ivar_trim.ivar.log
        searching | ████████████▏                             30% 103/339 data/variants/bowtie2/log/SAMPLE3_SE.bowtie2.log  
        searching | ████████████▎                             31% 104/339 variants/bowtie2/log/SAMPLE3_SE.ivar_trim.ivar.log
        searching | ████████████▍                             31% 105/339 data/variants/bowtie2/log/SAMPLE1_PE.bowtie2.log  
        searching | ████████████▌                             31% 106/339 variants/bowtie2/log/SAMPLE1_PE.ivar_trim.ivar.log
        searching | ████████████▋                             32% 107/339 data/variants/bowtie2/log/SAMPLE2_PE.bowtie2.log  
        searching | ████████████▋                             32% 108/339 data/variants/ivar/SAMPLE1_PE.tsv               
        searching | ████████████▊                             32% 109/339 ivar/consensus/bcftools/SAMPLE1_PE.filtered.vcf.gz
        searching | ████████████▉                             32% 110/339 ivar/consensus/bcftools/SAMPLE3_SE.filtered.vcf.gz
        searching | █████████████                             33% 111/339 ts/ivar/consensus/bcftools/SAMPLE3_SE.consensus.fa
        searching | █████████████▏                            33% 112/339 s/ivar/consensus/bcftools/nextclade/SAMPLE3_SE.csv
        searching | █████████████▎                            33% 113/339 s/ivar/consensus/bcftools/nextclade/SAMPLE2_PE.csv
        searching | █████████████▍                            34% 114/339 s/ivar/consensus/bcftools/nextclade/SAMPLE1_PE.csv
        searching | █████████████▌                            34% 115/339 ivar/consensus/bcftools/SAMPLE2_PE.filtered.vcf.gz
        searching | █████████████▋                            34% 116/339 ts/ivar/consensus/bcftools/SAMPLE2_PE.consensus.fa
        searching | █████████████▊                            35% 117/339 onsensus/bcftools/pangolin/SAMPLE1_PE.pangolin.csv
        searching | █████████████▉                            35% 118/339 onsensus/bcftools/pangolin/SAMPLE2_PE.pangolin.csv
        searching | ██████████████                            35% 119/339 onsensus/bcftools/pangolin/SAMPLE3_SE.pangolin.csv
        searching | ██████████████▏                           35% 120/339 /consensus/bcftools/SAMPLE3_SE.filtered.vcf.gz.tbi
        searching | ██████████████▎                           36% 121/339 ools/base_qc/SAMPLE2_PE.consensus.ACTG_density.pdf
        searching | ██████████████▍                           36% 122/339 us/bcftools/base_qc/SAMPLE3_SE.consensus.N_run.tsv
        searching | ██████████████▌                           36% 123/339 us/bcftools/base_qc/SAMPLE3_SE.consensus.N_run.tsv
        searching | ██████████████▌                           36% 123/339 cftools/base_qc/SAMPLE2_PE.consensus.N_density.pdf
        searching | ██████████████▋                           37% 124/339 tools/base_qc/SAMPLE3_SE.consensus.base_counts.tsv
        searching | ██████████████▋                           37% 125/339 us/bcftools/base_qc/SAMPLE2_PE.consensus.N_run.tsv
        searching | ██████████████▊                           37% 126/339 cftools/base_qc/SAMPLE3_SE.consensus.N_density.pdf
        searching | ██████████████▉                           37% 127/339 ools/base_qc/SAMPLE3_SE.consensus.ACTG_density.pdf
        searching | ███████████████                           38% 128/339 us/bcftools/base_qc/SAMPLE1_PE.consensus.N_run.tsv
        searching | ███████████████▏                          38% 129/339 tools/base_qc/SAMPLE3_SE.consensus.base_counts.pdf
        searching | ███████████████▎                          38% 130/339 tools/base_qc/SAMPLE2_PE.consensus.base_counts.tsv
        searching | ███████████████▍                          39% 131/339 tools/base_qc/SAMPLE1_PE.consensus.base_counts.pdf
        searching | ███████████████▌                          39% 132/339 cftools/base_qc/SAMPLE1_PE.consensus.N_density.pdf
        searching | ███████████████▋                          39% 133/339 ools/base_qc/SAMPLE1_PE.consensus.ACTG_density.pdf
        searching | ███████████████▊                          40% 134/339 tools/base_qc/SAMPLE2_PE.consensus.base_counts.pdf
        searching | ███████████████▉                          40% 135/339 tools/base_qc/SAMPLE1_PE.consensus.base_counts.tsv
        searching | ████████████████                          40% 136/339 s/quast/genome_stats/SAMPLE2_PE-consensus_gaps.txt
        searching | ████████████████▏                         40% 137/339 s/quast/genome_stats/genome_fraction_histogram.pdf
        searching | ████████████████▎                         41% 138/339 s/quast/genome_stats/SAMPLE1_PE-consensus_gaps.txt
        searching | ████████████████▍                         41% 139/339 ls/quast/genome_stats/features_cumulative_plot.pdf
        searching | ████████████████▌                         41% 140/339 s/quast/genome_stats/SAMPLE3_SE-consensus_gaps.txt
        searching | ████████████████▋                         42% 141/339 tats/SAMPLE2_PE-consensus_genomic_features_any.txt
        searching | ████████████████▊                         42% 142/339 quast/genome_stats/complete_features_histogram.pdf
        searching | ████████████████▊                         42% 143/339 tats/SAMPLE1_PE-consensus_genomic_features_any.txt
        searching | ████████████████▉                         42% 144/339 tools/quast/genome_stats/features_frcurve_plot.pdf
        searching | █████████████████                         43% 145/339 sensus/bcftools/quast/genome_stats/genome_info.txt
        searching | █████████████████▏                        43% 146/339 tats/SAMPLE3_SE-consensus_genomic_features_any.txt
        searching | █████████████████▎                        43% 147/339 var/consensus/bcftools/quast/transposed_report.txt
        searching | █████████████████▍                        44% 148/339 var/consensus/bcftools/quast/transposed_report.tex
        searching | █████████████████▌                        44% 149/339 variants/ivar/consensus/bcftools/quast/icarus.html
        searching | █████████████████▋                        44% 150/339 sus/bcftools/quast/basic_stats/cumulative_plot.pdf
        searching | █████████████████▊                        45% 151/339 r/consensus/bcftools/quast/basic_stats/Nx_plot.pdf
        searching | █████████████████▉                        45% 152/339 consensus/bcftools/quast/basic_stats/gc.icarus.txt
        searching | ██████████████████                        45% 153/339 /consensus/bcftools/quast/basic_stats/NGx_plot.pdf
        searching | ██████████████████▏                       45% 154/339 sic_stats/SAMPLE2_PE.consensus_GC_content_plot.pdf
        searching | ██████████████████▎                       46% 155/339 sus/bcftools/quast/basic_stats/GC_content_plot.pdf
        searching | ██████████████████▍                       46% 156/339 sic_stats/SAMPLE1_PE.consensus_GC_content_plot.pdf
        searching | ██████████████████▌                       46% 157/339 sic_stats/SAMPLE3_SE.consensus_GC_content_plot.pdf
        searching | ██████████████████▋                       47% 158/339 s/bcftools/quast/aligned_stats/cumulative_plot.pdf
        searching | ██████████████████▊                       47% 159/339 nsensus/bcftools/quast/aligned_stats/NGAx_plot.pdf
        searching | ██████████████████▉                       47% 160/339 onsensus/bcftools/quast/aligned_stats/NAx_plot.pdf
        searching | ██████████████████▉                       47% 161/339 var/consensus/bcftools/quast/transposed_report.tsv
        searching | ███████████████████                       48% 162/339 /variants/ivar/consensus/bcftools/quast/report.tex
        searching | ███████████████████▏                      48% 163/339 /variants/ivar/consensus/bcftools/quast/report.txt
        searching | ███████████████████▎                      48% 164/339 /variants/ivar/consensus/bcftools/quast/report.tsv
        searching | ███████████████████▍                      49% 165/339 variants/ivar/consensus/bcftools/quast/report.html
        searching | ███████████████████▌                      49% 166/339 /variants/ivar/consensus/bcftools/quast/report.pdf
        searching | ███████████████████▋                      49% 167/339 a/variants/ivar/consensus/bcftools/quast/quast.log
        searching | ███████████████████▊                      50% 168/339 /consensus/bcftools/SAMPLE1_PE.filtered.vcf.gz.tbi
        searching | ███████████████████▉                      50% 169/339 ts/ivar/consensus/bcftools/SAMPLE1_PE.consensus.fa
        searching | ████████████████████                      50% 170/339 /consensus/bcftools/SAMPLE2_PE.filtered.vcf.gz.tbi
        searching | ████████████████████▏                     50% 171/339 data/variants/ivar/SAMPLE2_PE.vcf.gz.tbi          
        searching | ████████████████████▎                     51% 172/339 data/variants/ivar/SAMPLE1_PE.vcf.gz.tbi
        searching | ████████████████████▍                     51% 173/339 data/variants/ivar/SAMPLE1_PE.vcf.gz    
        searching | ████████████████████▌                     51% 174/339 data/variants/ivar/SAMPLE3_SE.vcf.gz.tbi
        searching | ████████████████████▋                     52% 175/339 data/variants/ivar/snpeff/SAMPLE1_PE.snpsift.txt
        searching | ████████████████████▊                     52% 176/339 data/variants/ivar/snpeff/SAMPLE1_PE.snpeff.csv 
        searching | ████████████████████▉                     52% 177/339 data/variants/ivar/snpeff/SAMPLE1_PE.snpeff.vcf.gz
        searching | █████████████████████                     53% 178/339 data/variants/ivar/snpeff/SAMPLE2_PE.snpeff.csv   
        searching | █████████████████████                     53% 179/339 /variants/ivar/snpeff/SAMPLE2_PE.snpeff.vcf.gz.tbi
        searching | █████████████████████▏                    53% 180/339 data/variants/ivar/snpeff/SAMPLE2_PE.snpsift.txt  
        searching | █████████████████████▎                    53% 181/339 /variants/ivar/snpeff/SAMPLE3_SE.snpeff.vcf.gz.tbi
        searching | █████████████████████▍                    54% 182/339 ariants/ivar/snpeff/SAMPLE3_SE.snpeff.summary.html
        searching | █████████████████████▌                    54% 183/339 a/variants/ivar/snpeff/SAMPLE2_PE.snpeff.genes.txt
        searching | █████████████████████▋                    54% 184/339 a/variants/ivar/snpeff/SAMPLE1_PE.snpeff.genes.txt
        searching | █████████████████████▊                    55% 185/339 cftools_stats/SAMPLE3_SE.snpeff.bcftools_stats.txt
        searching | █████████████████████▉                    55% 186/339 cftools_stats/SAMPLE1_PE.snpeff.bcftools_stats.txt
        searching | ██████████████████████                    55% 187/339 cftools_stats/SAMPLE2_PE.snpeff.bcftools_stats.txt
        searching | ██████████████████████▏                   55% 188/339 data/variants/ivar/snpeff/SAMPLE3_SE.snpsift.txt  
        searching | ██████████████████████▎                   56% 189/339 data/variants/ivar/snpeff/SAMPLE3_SE.snpeff.csv 
        searching | ██████████████████████▍                   56% 190/339 /variants/ivar/snpeff/SAMPLE1_PE.snpeff.vcf.gz.tbi
        searching | ██████████████████████▌                   56% 191/339 ariants/ivar/snpeff/SAMPLE1_PE.snpeff.summary.html
        searching | ██████████████████████▋                   57% 192/339 a/variants/ivar/snpeff/SAMPLE3_SE.snpeff.genes.txt
        searching | ██████████████████████▊                   57% 193/339 data/variants/ivar/snpeff/SAMPLE2_PE.snpeff.vcf.gz
        searching | ██████████████████████▉                   57% 194/339 data/variants/ivar/snpeff/SAMPLE3_SE.snpeff.vcf.gz
        searching | ███████████████████████                   58% 195/339 ariants/ivar/snpeff/SAMPLE2_PE.snpeff.summary.html
        searching | ███████████████████████▏                  58% 196/339 data/variants/ivar/variants_long_table.csv        
        searching | ███████████████████████▏                  58% 197/339 /ivar/bcftools_stats/SAMPLE1_PE.bcftools_stats.txt
        searching | ███████████████████████▎                  58% 198/339 /ivar/bcftools_stats/SAMPLE3_SE.bcftools_stats.txt
        searching | ███████████████████████▍                  59% 199/339 /ivar/bcftools_stats/SAMPLE2_PE.bcftools_stats.txt
        searching | ███████████████████████▌                  59% 200/339 data/variants/ivar/SAMPLE2_PE.tsv                 
        searching | ███████████████████████▋                  59% 201/339 e/SAMPLE2_PE/SAMPLE2_PE.MN908947.3_28094_28194.pdf
        searching | ███████████████████████▊                  60% 202/339 e/SAMPLE2_PE/SAMPLE2_PE.MN908947.3_25929_26029.pdf
        searching | ███████████████████████▉                  60% 203/339 e/SAMPLE2_PE/SAMPLE2_PE.MN908947.3_23746_23846.pdf
        searching | ████████████████████████                  60% 204/339 ome/SAMPLE2_PE/SAMPLE2_PE.MN908947.3_9427_9527.pdf
        searching | ████████████████████████▏                 60% 205/339 e/SAMPLE2_PE/SAMPLE2_PE.MN908947.3_14755_14855.pdf
        searching | ████████████████████████▎                 61% 206/339 e/SAMPLE2_PE/SAMPLE2_PE.MN908947.3_28607_28707.pdf
        searching | ████████████████████████▍                 61% 207/339 e/SAMPLE2_PE/SAMPLE2_PE.MN908947.3_28813_28913.pdf
        searching | ████████████████████████▌                 61% 208/339 ome/SAMPLE2_PE/SAMPLE2_PE.MN908947.3_1825_1925.pdf
        searching | ████████████████████████▋                 62% 209/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21102_21202.pdf
        searching | ████████████████████████▊                 62% 210/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_8272_8372.pdf
        searching | ████████████████████████▉                 62% 211/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21116_21216.pdf
        searching | █████████████████████████                 63% 212/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23454_23554.pdf
        searching | █████████████████████████▏                63% 213/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_28607_28707.pdf
        searching | █████████████████████████▎                63% 214/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21097_21197.pdf
        searching | █████████████████████████▎                63% 215/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4396_4496.pdf
        searching | █████████████████████████▍                64% 216/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23767_23867.pdf
        searching | █████████████████████████▌                64% 217/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_3789_3889.pdf
        searching | █████████████████████████▋                64% 218/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7634_7734.pdf
        searching | █████████████████████████▊                65% 219/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7644_7744.pdf
        searching | █████████████████████████▉                65% 220/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4380_4480.pdf
        searching | ██████████████████████████                65% 221/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25620_25720.pdf
        searching | ██████████████████████████▏               65% 222/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7635_7735.pdf
        searching | ██████████████████████████▎               66% 223/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25610_25710.pdf
        searching | ██████████████████████████▍               66% 224/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_14755_14855.pdf
        searching | ██████████████████████████▌               66% 225/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21118_21218.pdf
        searching | ██████████████████████████▋               67% 226/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25604_25704.pdf
        searching | ██████████████████████████▊               67% 227/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4398_4498.pdf
        searching | ██████████████████████████▉               67% 228/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_22281_22381.pdf
        searching | ███████████████████████████               68% 229/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25616_25716.pdf
        searching | ███████████████████████████▏              68% 230/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_3796_3896.pdf
        searching | ███████████████████████████▎              68% 231/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_19239_19339.pdf
        searching | ███████████████████████████▎              68% 232/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4389_4489.pdf
        searching | ███████████████████████████▍              69% 233/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_8274_8374.pdf
        searching | ███████████████████████████▌              69% 234/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4963_5063.pdf
        searching | ███████████████████████████▋              69% 235/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7624_7724.pdf
        searching | ███████████████████████████▊              70% 236/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23465_23565.pdf
        searching | ███████████████████████████▉              70% 237/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_1825_1925.pdf
        searching | ████████████████████████████              70% 238/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7632_7732.pdf
        searching | ████████████████████████████▏             71% 239/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_19247_19347.pdf
        searching | ████████████████████████████▎             71% 240/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4386_4486.pdf
        searching | ████████████████████████████▍             71% 241/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21330_21430.pdf
        searching | ████████████████████████████▌             71% 242/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_19241_19341.pdf
        searching | ████████████████████████████▋             72% 243/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_27467_27567.pdf
        searching | ████████████████████████████▊             72% 244/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_3798_3898.pdf
        searching | ████████████████████████████▉             72% 245/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21098_21198.pdf
        searching | █████████████████████████████             73% 246/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_27473_27573.pdf
        searching | █████████████████████████████▏            73% 247/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_22294_22394.pdf
        searching | █████████████████████████████▎            73% 248/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_3780_3880.pdf
        searching | █████████████████████████████▍            73% 249/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_9427_9527.pdf
        searching | █████████████████████████████▍            74% 250/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4383_4483.pdf
        searching | █████████████████████████████▌            74% 251/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_28094_28194.pdf
        searching | █████████████████████████████▋            74% 252/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23460_23560.pdf
        searching | █████████████████████████████▊            75% 253/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4382_4482.pdf
        searching | █████████████████████████████▉            75% 254/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4382_4482.pdf
        searching | █████████████████████████████▉            75% 254/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25598_25698.pdf
        searching | ██████████████████████████████            75% 255/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_11669_11769.pdf
        searching | ██████████████████████████████▏           76% 256/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21112_21212.pdf
        searching | ██████████████████████████████▎           76% 257/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_27482_27582.pdf
        searching | ██████████████████████████████▍           76% 258/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25606_25706.pdf
        searching | ██████████████████████████████▌           76% 259/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_19226_19326.pdf
        searching | ██████████████████████████████▋           77% 260/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_22285_22385.pdf
        searching | ██████████████████████████████▊           77% 261/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25612_25712.pdf
        searching | ██████████████████████████████▉           77% 262/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_19232_19332.pdf
        searching | ███████████████████████████████           78% 263/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7638_7738.pdf
        searching | ███████████████████████████████▏          78% 264/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_3802_3902.pdf
        searching | ███████████████████████████████▎          78% 265/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25600_25700.pdf
        searching | ███████████████████████████████▍          78% 266/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_20218_20318.pdf
        searching | ███████████████████████████████▌          79% 267/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_14358_14458.pdf
        searching | ███████████████████████████████▌          79% 268/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21327_21427.pdf
        searching | ███████████████████████████████▋          79% 269/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_2987_3087.pdf
        searching | ███████████████████████████████▊          80% 270/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23468_23568.pdf
        searching | ███████████████████████████████▉          80% 271/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_27470_27570.pdf
        searching | ████████████████████████████████          80% 272/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_27464_27564.pdf
        searching | ████████████████████████████████▏         81% 273/339 enome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_191_291.pdf
        searching | ████████████████████████████████▎         81% 274/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_27476_27576.pdf
        searching | ████████████████████████████████▍         81% 275/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_19244_19344.pdf
        searching | ████████████████████████████████▌         81% 276/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_27462_27562.pdf
        searching | ████████████████████████████████▋         82% 277/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21335_21435.pdf
        searching | ████████████████████████████████▊         82% 278/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7641_7741.pdf
        searching | ████████████████████████████████▉         82% 279/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_27479_27579.pdf
        searching | █████████████████████████████████         83% 280/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_22276_22376.pdf
        searching | █████████████████████████████████▏        83% 281/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4385_4485.pdf
        searching | █████████████████████████████████▎        83% 282/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23776_23876.pdf
        searching | █████████████████████████████████▍        83% 283/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21113_21213.pdf
        searching | █████████████████████████████████▌        84% 284/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7629_7729.pdf
        searching | █████████████████████████████████▋        84% 285/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_8280_8380.pdf
        searching | █████████████████████████████████▋        84% 286/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21115_21215.pdf
        searching | █████████████████████████████████▊        85% 287/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_3783_3883.pdf
        searching | █████████████████████████████████▉        85% 288/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_19229_19329.pdf
        searching | ██████████████████████████████████        85% 289/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25929_26029.pdf
        searching | ██████████████████████████████████▏       86% 290/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25601_25701.pdf
        searching | ██████████████████████████████████▎       86% 291/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_22296_22396.pdf
        searching | ██████████████████████████████████▍       86% 292/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23459_23559.pdf
        searching | ██████████████████████████████████▌       86% 293/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21109_21209.pdf
        searching | ██████████████████████████████████▋       87% 294/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_19235_19335.pdf
        searching | ██████████████████████████████████▊       87% 295/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25607_25707.pdf
        searching | ██████████████████████████████████▉       87% 296/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25613_25713.pdf
        searching | ███████████████████████████████████       88% 297/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23353_23453.pdf
        searching | ███████████████████████████████████▏      88% 298/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_4392_4492.pdf
        searching | ███████████████████████████████████▎      88% 299/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25623_25723.pdf
        searching | ███████████████████████████████████▍      88% 300/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_22278_22378.pdf
        searching | ███████████████████████████████████▌      89% 301/339 ome/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_7626_7726.pdf
        searching | ███████████████████████████████████▋      89% 302/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_25597_25697.pdf
        searching | ███████████████████████████████████▊      89% 303/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23469_23569.pdf
        searching | ███████████████████████████████████▊      90% 304/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_23778_23878.pdf
        searching | ███████████████████████████████████▉      90% 305/339 e/SAMPLE3_SE/SAMPLE3_SE.MN908947.3_21332_21432.pdf
        searching | ████████████████████████████████████      90% 306/339 ome/SAMPLE1_PE/SAMPLE1_PE.MN908947.3_1825_1925.pdf
        searching | ████████████████████████████████████▏     91% 307/339 enome/SAMPLE1_PE/SAMPLE1_PE.MN908947.3_191_291.pdf
        searching | ████████████████████████████████████▎     91% 308/339 e/SAMPLE1_PE/SAMPLE1_PE.MN908947.3_23746_23846.pdf
        searching | ████████████████████████████████████▍     91% 309/339 e/SAMPLE1_PE/SAMPLE1_PE.MN908947.3_23353_23453.pdf
        searching | ████████████████████████████████████▌     91% 310/339 ome/SAMPLE1_PE/SAMPLE1_PE.MN908947.3_2987_3087.pdf
        searching | ████████████████████████████████████▋     92% 311/339 e/SAMPLE1_PE/SAMPLE1_PE.MN908947.3_11669_11769.pdf
        searching | ████████████████████████████████████▊     92% 312/339 e/SAMPLE1_PE/SAMPLE1_PE.MN908947.3_14358_14458.pdf
        searching | ████████████████████████████████████▉     92% 313/339 e/SAMPLE1_PE/SAMPLE1_PE.MN908947.3_20218_20318.pdf
        searching | █████████████████████████████████████     93% 314/339 ta/variants/ivar/log/SAMPLE2_PE.variant_counts.log
        searching | █████████████████████████████████████▏    93% 315/339 ta/variants/ivar/log/SAMPLE3_SE.variant_counts.log
        searching | █████████████████████████████████████▎    93% 316/339 ta/variants/ivar/log/SAMPLE1_PE.variant_counts.log
        searching | █████████████████████████████████████▍    94% 317/339 data/variants/ivar/SAMPLE3_SE.tsv                 
        searching | █████████████████████████████████████▌    94% 318/339 data/variants/ivar/SAMPLE2_PE.vcf.gz
        searching | █████████████████████████████████████▋    94% 319/339 data/variants/ivar/SAMPLE3_SE.vcf.gz
        searching | █████████████████████████████████████▊    94% 320/339 data/fastqc/trim/SAMPLE2_PE_2_fastqc.html
        searching | █████████████████████████████████████▉    95% 321/339 data/fastqc/trim/SAMPLE1_PE_1_fastqc.zip 
        searching | █████████████████████████████████████▉    95% 322/339 data/fastqc/trim/SAMPLE3_SE_fastqc.zip  
        searching | ██████████████████████████████████████    95% 323/339 data/fastqc/trim/SAMPLE2_PE_1_fastqc.html
        searching | ██████████████████████████████████████▏   96% 324/339 data/fastqc/trim/SAMPLE2_PE_2_fastqc.zip 
        searching | ██████████████████████████████████████▎   96% 325/339 data/fastqc/trim/SAMPLE2_PE_1_fastqc.zip
        searching | ██████████████████████████████████████▍   96% 326/339 data/fastqc/trim/SAMPLE3_SE_fastqc.html 
        searching | ██████████████████████████████████████▌   96% 327/339 data/fastqc/trim/SAMPLE1_PE_1_fastqc.html
        searching | ██████████████████████████████████████▋   97% 328/339 data/fastqc/trim/SAMPLE1_PE_2_fastqc.zip 
        searching | ██████████████████████████████████████▊   97% 329/339 data/fastqc/trim/SAMPLE1_PE_2_fastqc.html
        searching | ██████████████████████████████████████▉   97% 330/339 data/fastqc/raw/SAMPLE2_PE_2_fastqc.html 
        searching | ███████████████████████████████████████   98% 331/339 data/fastqc/raw/SAMPLE1_PE_1_fastqc.zip 
        searching | ███████████████████████████████████████▏  98% 332/339 data/fastqc/raw/SAMPLE3_SE_fastqc.zip  
        searching | ███████████████████████████████████████▎  98% 333/339 data/fastqc/raw/SAMPLE2_PE_1_fastqc.html
        searching | ███████████████████████████████████████▍  99% 334/339 data/fastqc/raw/SAMPLE2_PE_2_fastqc.zip 
        searching | ███████████████████████████████████████▌  99% 335/339 data/fastqc/raw/SAMPLE2_PE_1_fastqc.zip
        searching | ███████████████████████████████████████▋  99% 336/339 data/fastqc/raw/SAMPLE3_SE_fastqc.html 
        searching | ███████████████████████████████████████▊  99% 337/339 data/fastqc/raw/SAMPLE1_PE_1_fastqc.html
        searching | ███████████████████████████████████████▉ 100% 338/339 data/fastqc/raw/SAMPLE1_PE_2_fastqc.zip 
        searching | ████████████████████████████████████████ 100% 339/339 data/fastqc/raw/SAMPLE1_PE_2_fastqc.html
        searching | ████████████████████████████████████████ 100% 339/339                                         
        searching | ████████████████████████████████████████ 100% 339/339 
        searching | ████████████████████████████████████████ 100% 339/339 

          bcftools | Found 3 stats reports
           bowtie2 | Found 3 reports
          cutadapt | Found 3 reports
            fastqc | Found 7 reports
            kraken | Found 3 reports
          mosdepth | Found reports for 3 samples
         nextclade | Found 3 samples
          pangolin | Found 3 samples
            picard | Found 2 AlignmentSummaryMetrics reports
            picard | Found 3 BaseDistributionByCycleMetrics reports
            picard | Found 1 InsertSizeMetrics reports
            picard | Found 2 QualityByCycleMetrics reports
            picard | Found 2 QualityScoreDistributionMetrics reports
          samtools | Found 3 stats reports
          samtools | Found 3 flagstat reports
          samtools | Found 3 idxstats reports
            snpeff | Found 3 reports
             quast | Found 3 reports
             quast | Found 3 reports
Out[14]:
['fastp',
 'bcftools',
 'bowtie2',
 'cutadapt',
 'fastqc',
 'kraken',
 'mosdepth',
 'nextclade',
 'pangolin',
 'picard',
 'samtools',
 'snpeff',
 'quast_variants',
 'quast_spades']
In [15]:
multiqc.list_samples()
Out[15]:
['SAMPLE1_PE',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_10_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_10_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_11_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_12_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_12_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_13_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_13_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_14_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_14_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_15_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_15_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_16_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_16_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_17_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_17_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_18_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_18_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_19_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_19_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_1_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_1_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_20_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_20_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_21_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_21_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_22_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_22_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_23_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_23_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_24_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_24_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_25_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_25_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_26_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_26_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_27_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_27_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_28_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_28_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_29_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_29_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_2_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_2_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_30_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_31_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_31_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_32_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_33_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_33_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_34_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_34_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_35_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_35_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_36_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_36_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_37_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_37_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_38_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_38_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_39_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_39_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_3_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_40_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_40_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_41_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_41_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_42_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_42_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_43_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_43_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_44_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_44_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_45_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_45_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_46_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_46_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_47_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_47_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_48_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_48_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_49_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_49_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_4_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_4_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_50_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_50_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_51_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_51_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_52_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_52_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_53_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_53_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_54_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_54_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_55_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_55_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_56_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_56_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_57_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_57_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_58_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_58_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_59_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_59_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_5_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_5_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_60_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_60_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_61_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_61_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_62_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_63_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_63_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_64_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_64_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_65_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_65_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_66_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_66_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_67_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_67_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_68_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_68_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_69_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_69_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_6_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_6_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_70_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_70_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_71_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_71_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_72_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_72_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_73_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_73_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_74_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_74_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_75_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_75_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_76_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_76_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_77_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_77_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_78_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_78_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_79_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_79_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_7_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_7_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_80_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_80_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_81_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_81_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_82_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_82_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_83_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_83_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_84_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_84_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_85_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_85_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_86_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_86_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_87_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_87_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_88_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_88_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_89_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_89_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_8_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_8_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_90_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_90_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_91_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_91_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_92_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_92_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_93_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_93_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_94_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_94_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_95_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_95_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_96_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_96_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_97_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_98_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_98_RIGHT(-)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_9_LEFT(+)',
 'SAMPLE1_PE - First read: Adapter nCoV-2019_9_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_10_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_10_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_11_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_11_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_12_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_12_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_13_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_13_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_14_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_14_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_15_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_15_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_16_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_16_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_17_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_17_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_18_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_18_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_19_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_19_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_1_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_1_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_20_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_20_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_21_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_21_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_22_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_22_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_23_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_23_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_24_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_24_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_25_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_25_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_26_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_26_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_27_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_27_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_28_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_28_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_29_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_29_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_2_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_2_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_30_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_30_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_31_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_31_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_32_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_32_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_33_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_33_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_34_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_34_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_35_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_35_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_36_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_36_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_37_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_37_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_38_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_38_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_39_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_39_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_3_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_3_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_40_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_40_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_41_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_41_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_42_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_42_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_43_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_43_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_44_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_44_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_45_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_45_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_46_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_46_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_47_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_47_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_48_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_48_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_49_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_49_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_4_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_4_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_50_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_50_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_51_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_51_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_52_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_52_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_53_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_53_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_54_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_54_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_55_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_55_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_56_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_56_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_57_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_57_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_58_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_58_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_59_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_59_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_5_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_5_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_60_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_60_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_61_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_61_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_62_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_62_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_63_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_63_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_64_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_64_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_65_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_65_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_66_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_66_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_67_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_67_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_68_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_68_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_69_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_69_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_6_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_6_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_70_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_70_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_71_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_71_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_72_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_72_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_73_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_73_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_74_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_74_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_75_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_75_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_76_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_76_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_77_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_77_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_78_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_78_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_79_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_79_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_7_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_7_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_80_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_80_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_81_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_81_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_82_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_82_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_83_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_83_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_84_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_84_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_85_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_85_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_86_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_86_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_87_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_87_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_88_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_88_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_89_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_89_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_8_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_8_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_90_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_90_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_91_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_91_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_92_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_92_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_93_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_93_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_94_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_94_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_95_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_95_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_96_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_96_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_97_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_97_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_98_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_98_RIGHT(-)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_9_LEFT(+)',
 'SAMPLE1_PE - Second read: Adapter nCoV-2019_9_RIGHT(-)',
 'SAMPLE1_PE_1',
 'SAMPLE1_PE_2',
 'SAMPLE2_PE',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_10_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_10_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_11_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_12_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_12_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_13_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_13_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_14_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_14_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_15_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_15_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_16_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_17_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_17_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_18_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_18_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_19_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_19_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_1_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_1_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_20_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_20_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_21_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_21_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_22_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_22_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_23_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_23_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_24_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_24_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_25_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_25_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_26_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_26_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_27_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_28_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_28_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_29_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_29_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_2_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_2_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_31_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_31_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_32_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_33_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_33_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_34_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_34_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_35_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_35_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_36_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_36_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_37_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_37_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_38_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_38_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_39_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_39_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_3_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_3_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_40_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_40_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_41_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_41_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_42_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_42_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_43_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_43_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_44_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_44_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_45_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_45_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_46_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_46_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_47_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_47_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_48_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_48_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_49_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_49_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_4_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_4_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_50_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_50_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_51_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_51_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_52_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_52_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_53_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_53_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_54_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_55_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_56_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_57_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_57_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_58_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_58_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_59_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_59_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_5_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_5_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_60_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_60_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_61_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_61_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_62_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_62_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_63_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_63_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_64_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_64_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_65_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_65_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_66_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_66_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_67_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_67_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_68_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_68_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_69_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_6_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_6_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_70_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_70_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_71_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_71_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_72_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_72_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_73_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_74_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_74_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_75_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_75_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_76_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_76_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_77_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_77_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_78_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_78_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_79_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_79_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_7_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_7_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_80_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_80_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_81_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_81_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_82_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_82_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_83_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_84_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_84_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_85_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_85_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_86_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_86_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_87_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_87_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_88_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_88_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_89_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_89_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_8_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_8_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_90_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_90_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_91_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_91_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_92_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_92_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_93_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_93_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_94_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_94_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_95_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_95_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_96_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_96_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_97_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_98_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_98_RIGHT(-)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_9_LEFT(+)',
 'SAMPLE2_PE - First read: Adapter nCoV-2019_9_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_10_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_10_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_11_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_11_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_12_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_12_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_13_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_13_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_14_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_14_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_15_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_15_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_16_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_17_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_17_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_18_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_18_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_19_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_19_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_1_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_1_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_20_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_20_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_21_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_21_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_22_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_22_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_23_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_23_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_24_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_24_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_25_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_25_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_26_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_27_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_27_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_28_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_28_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_29_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_29_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_2_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_2_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_30_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_30_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_31_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_31_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_32_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_32_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_33_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_33_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_34_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_34_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_35_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_35_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_36_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_36_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_37_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_37_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_38_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_38_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_39_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_39_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_3_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_40_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_41_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_41_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_42_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_42_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_43_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_43_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_44_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_44_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_45_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_45_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_46_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_46_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_47_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_47_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_48_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_48_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_49_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_4_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_4_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_50_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_50_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_51_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_51_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_52_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_52_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_53_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_53_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_54_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_54_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_55_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_55_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_56_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_56_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_57_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_57_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_58_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_58_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_59_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_59_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_5_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_5_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_60_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_60_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_61_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_61_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_62_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_62_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_63_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_63_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_64_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_64_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_65_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_65_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_66_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_66_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_67_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_67_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_68_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_68_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_69_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_6_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_6_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_70_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_70_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_71_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_71_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_72_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_72_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_73_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_74_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_74_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_75_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_76_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_76_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_77_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_77_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_78_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_78_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_79_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_79_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_7_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_7_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_80_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_80_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_81_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_81_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_82_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_82_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_83_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_84_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_84_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_85_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_85_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_86_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_86_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_87_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_87_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_88_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_88_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_89_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_89_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_8_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_8_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_90_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_90_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_91_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_91_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_92_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_92_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_93_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_93_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_94_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_95_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_95_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_96_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_96_RIGHT(-)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_97_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_98_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_9_LEFT(+)',
 'SAMPLE2_PE - Second read: Adapter nCoV-2019_9_RIGHT(-)',
 'SAMPLE2_PE_1',
 'SAMPLE2_PE_2',
 'SAMPLE2_PE_R1',
 'SAMPLE2_PE_R2',
 'SAMPLE3_SE',
 'SAMPLE3_SE - Adapter nCoV-2019_10_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_10_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_11_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_12_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_12_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_13_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_13_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_14_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_14_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_15_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_15_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_16_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_16_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_17_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_17_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_18_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_18_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_19_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_19_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_1_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_1_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_20_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_20_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_21_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_21_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_22_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_22_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_23_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_23_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_24_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_24_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_25_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_25_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_26_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_26_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_27_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_27_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_28_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_28_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_29_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_29_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_2_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_2_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_30_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_31_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_31_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_32_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_32_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_33_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_33_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_34_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_34_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_35_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_35_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_36_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_36_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_37_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_37_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_38_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_38_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_39_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_39_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_3_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_3_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_40_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_40_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_41_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_41_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_42_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_42_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_43_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_43_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_44_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_44_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_45_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_45_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_46_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_46_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_47_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_47_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_48_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_48_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_49_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_49_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_4_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_4_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_50_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_50_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_51_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_51_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_52_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_52_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_53_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_53_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_54_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_54_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_55_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_55_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_56_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_56_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_57_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_57_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_58_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_58_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_59_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_59_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_5_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_5_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_60_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_60_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_61_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_61_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_62_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_62_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_63_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_63_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_64_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_64_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_65_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_65_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_66_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_66_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_67_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_67_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_68_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_68_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_69_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_69_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_6_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_6_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_70_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_70_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_71_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_71_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_72_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_72_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_73_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_73_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_74_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_74_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_75_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_75_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_76_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_76_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_77_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_77_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_78_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_78_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_79_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_79_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_7_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_7_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_80_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_80_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_81_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_81_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_82_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_82_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_83_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_83_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_84_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_84_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_85_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_85_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_86_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_86_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_87_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_87_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_88_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_88_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_89_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_89_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_8_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_8_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_90_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_90_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_91_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_91_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_92_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_92_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_93_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_93_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_94_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_94_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_95_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_95_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_96_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_96_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_97_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_98_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_98_RIGHT(-)',
 'SAMPLE3_SE - Adapter nCoV-2019_9_LEFT(+)',
 'SAMPLE3_SE - Adapter nCoV-2019_9_RIGHT(-)']

Now there are many more plots available in the session

In [16]:
from pprint import pprint
pprint(multiqc.list_plots())
{'bcftools': ['Variant Substitution Types',
              {'Variant Quality': ['Count SNP',
                                   'Count Transitions',
                                   'Count Transversions',
                                   'Count Indels']},
              'Indel Distribution',
              'Variant depths'],
 'bowtie2': ['Single-end alignments', 'Paired-end alignments'],
 'cutadapt': ['Filtered Reads',
              {'Trimmed Sequence Lengths': ['Counts', 'Obs/Exp']}],
 'fastp': ['Filtered Reads',
           'Insert Sizes',
           {'Sequence Quality': ['Read 1: Before filtering',
                                 'Read 1: After filtering',
                                 'Read 2: Before filtering',
                                 'Read 2: After filtering']},
           {'GC Content': ['Read 1: Before filtering',
                           'Read 1: After filtering',
                           'Read 2: Before filtering',
                           'Read 2: After filtering']},
           {'N content': ['Read 1: Before filtering',
                          'Read 1: After filtering',
                          'Read 2: Before filtering',
                          'Read 2: After filtering']}],
 'fastqc': ['Sequence Counts',
            'Sequence Quality Histograms',
            'Per Sequence Quality Scores',
            {'Per Sequence GC Content': ['Percentages', 'Counts']},
            'Per Base N Content',
            'Sequence Length Distribution',
            'Sequence Duplication Levels',
            'Overrepresented sequences by sample',
            'Top overrepresented sequences',
            'Status Checks'],
 'kraken': [{'Top taxa': ['Genus',
                          'Family',
                          'Order',
                          'Class',
                          'Phylum',
                          'Domain',
                          'Unclassified']}],
 'mosdepth': [],
 'nextclade': ['Run table'],
 'pangolin': ['Run table'],
 'picard': [{'Alignment Summary': ['Aligned Reads', 'Aligned Bases']},
            'Mean read length',
            {'Base Distribution': ['% Adenine',
                                   '% Cytosine',
                                   '% Guanine',
                                   '% Thymine',
                                   '% Undetermined']},
            {'Insert Size': ['Counts', 'Percentages']},
            'Mean Base Quality by Cycle',
            'Base Quality Distribution'],
 'quast': ['Assembly Statistics', 'Number of Contigs'],
 'samtools': ['Percent mapped',
              'Alignment stats',
              'Flagstat',
              'Flagstat: Percentage of total',
              {'Mapped reads per contig': ['Normalised Counts',
                                           'Observed over Expected Counts',
                                           'Raw Counts']}],
 'snpeff': ['Variants by Genomic Region',
            'Variant Effects by Impact',
            'Variants by Effect Types',
            'Variants by Functional Class']}
In [17]:
plot = multiqc.get_plot(module="ASSEMBLY: QUAST (SPAdes)", section="Number of Contigs")
plot.show()

Now let's re-summarize the data and add a custom section into the report.

It will be a table, so we will need to define titles for the table columns (headers) along with a value for each sample for each column.

We will use the multiqc.get_module_data() and multiqc.get_general_stats_data() methods to pull data parsed and summarized by modules.

In [18]:
headers = {
    "input_reads": {
        "title": "# Input reads",
        "description": "Total number of reads in raw fastq file",
    },
    "trimmed_read_pairs": {
        "title": "# Trimmed reads (Cutadapt)",
        "description": "Total number of reads remaining after adapter/quality trimming with fastp",
    },
    "num_mapped_reads": {
        "title": "# Mapped reads",
        "description": "Total number of Bowtie2 mapped reads relative to the viral genome",
    },
    "pct_mapped_reads": {
        "title": "% Mapped reads",
        "description": "Percentage of Bowtie2 mapped reads relative to the viral genome",
        "suffix": "%",
    },
    "non_host_reads": {
        "title": "% Non-host reads (Kraken 2)",
        "description": "Total number of non-host reads identified by Kraken2",
    },
    "cov_mean": {
        "title": "Coverage",
        "description": "Mean coverage calculated by mosdepth"
    },
    "number_of_SNPs": {
        "title": "# SNPs",
        "description": "Total number of SNPs",
    },
    "number_of_indels": {
        "title": "# SNPs",
        "description": "Total number of INDELs",
    },
    "missense": {
        "title": "# Missense variants",
        "description": "Total number of variants identified as missense mutations with SnpEff",
    },
    "n_contigs": {
        "title": "# Contigs",
        "description": "Total number of contigs in SPAdes assembly as calculated by QUAST",
    },
    "largest_contig": {
        "title": "Largest contig",
        "description": "Size of largest contig in SPAdes assembly as calculated by QUAST"
    },
    "genome_fraction": {
        "title": "Genome fraction",
        "suffix": "%",
        "description": "% genome fraction for SPAdes assembly as calculated by QUAST",
    },
    "n50": {
        "title": "N50",
        "description": "N50 metric for SPAdes assembly as calculated by QUAST",
    },
    "lineage": {
        "title": "Pangolin lineage",
        "description": "Pangolin lineage inferred from the consensus sequence",
    },
    "clade": {
        "title": "Nextclade clade",
        "description": "Nextclade clade inferred from the consensus sequence",
    },
}

from collections import defaultdict
summarized_data = defaultdict(dict)
for s in multiqc.list_samples():
    if data := multiqc.get_module_data(sample=s, module="fastp"):
        summarized_data[s]["input_reads"] = data["summary"]["before_filtering"]["total_reads"]

    if data := multiqc.get_module_data(sample=s, module="Cutadapt"):
        summarized_data[s]["trimmed_read_pairs"] = data.get("pairs_written")

    if data := multiqc.get_module_data(sample=s, module="Bowtie 2 / HiSAT2"):
        summarized_data[s]["pct_mapped_reads"] = data.get("overall_alignment_rate")

    if data := multiqc.get_general_stats_data(sample=s):
        summarized_data[s]["non_host_reads"] = data.get("Kraken.pct_unclassified")
        summarized_data[s]["mean_coverage"] = data.get("Mosdepth.mean_coverage")

    if data := multiqc.get_module_data(sample=s, module="Mosdepth"):
        summarized_data[s]["cov_mean"] = data["mean_coverage"]
        
    if data := multiqc.get_module_data(sample=s, module="SnpEff"):
        summarized_data[s]["missense_variants"] = data["MISSENSE"]

    if data := multiqc.get_module_data(sample=s, module="Bcftools"):
        summarized_data[s]["number_of_SNPs"] = data["number_of_SNPs"]
        summarized_data[s]["number_of_indels"] = data["number_of_indels"]

    if data := multiqc.get_module_data(sample=s, module="VARIANTS: QUAST"):
        summarized_data[s]["n_contigs"] = data["# contigs (>= 0 bp)"]
        summarized_data[s]["largest_contig"] = data["Largest contig"]
        summarized_data[s]["genome_fraction"] = data["Genome fraction (%)"]
        summarized_data[s]["n50"] = data["N50"]

    if data := multiqc.get_module_data(sample=s, module="Pangolin"):
        summarized_data[s]["lineage"] = data["lineage"]

    if data := multiqc.get_module_data(sample=s, module="Nextclade"):
        summarized_data[s]["clade"] = data["clade"]

summarized_data = {
    s: {
        k: v for k, v in d.items() if v is not None
    } for s, d in summarized_data.items()
}
summarized_data = {s: d for s, d in summarized_data.items() if d}
pprint(dict(summarized_data))
{'SAMPLE1_PE': {'input_reads': 55442,
                'mean_coverage': 433.22,
                'non_host_reads': 99.95856639734825},
 'SAMPLE2_PE': {'input_reads': 42962,
                'mean_coverage': 343.94,
                'non_host_reads': 99.78127278408499},
 'SAMPLE3_SE': {'input_reads': 49202,
                'mean_coverage': 411.97,
                'non_host_reads': 99.90141237489016}}

Let's show this table:

In [19]:
from multiqc.plots import table
plot = table.plot(
    data=summarized_data,
    headers=headers,
    pconfig={
        "id": "summary_assembly_metrics",
        "title": "Summary Assembly Metrics",
    },
)
plot.show()
Out[19]:
shape: (4, 4)
columncolumn_0column_1column_2
strstrstrstr
"sample_idx""0""1""2"
"sample""SAMPLE1_PE""SAMPLE2_PE""SAMPLE3_SE"
"input_reads""55442""42962""49202"
"non_host_reads""99.95856639734825""99.78127278408499""99.90141237489016"

We can also display this data as a violin plot, which is a more compact representation for very wide or very tall tables.

In [20]:
plot.show(violin=True)

Let's add this plot into the report. We will prepend th new section to make it appear in the beginning of the report.

In [21]:
module = multiqc.BaseMultiqcModule(
    name="nf-core/viralrecon summary",
    anchor="custom_data",
)
module.add_section(
    name="De novo assembly metrics",
    anchor="de_novo_assembly_metrics",
    description="Summary of input reads, trimmed reads, and non-host reads. Generated by the nf-core/viralrecon pipeline",
    plot=plot,
)
multiqc.report.modules = [module] + multiqc.report.modules

We can write the updated report to a file. Since our new section is designed to replace general stats, we will tell MultiQC not to render the general stats table.

In [22]:
multiqc.write_report(
    force=True,
    title="nf-core/viralrecon report",
    filename="multiqc_report",
    exclude_modules=["general_stats"],   
)
%ls
            config | Loading config settings from: /Users/vlad/.multiqc_config.yaml
     update_config | Report title: nf-core/viralrecon report
       file_search | Excluding modules 'general_stats'
     write_results | Data        : multiqc_report_data
     write_results | Report      : multiqc_report.html
data/                        multiqc_report_data/
data.zip                     multiqc_report.html
gc_content.html              notebook.html
gc_content.png               notebook.ipynb
multiqc_config_illumina.yml

Now we have a report, we can show it inside the notebook.

In [23]:
import IPython

# Best if using Google Colab
# IPython.display.HTML(filename='./multiqc_report.html')

# Best if running locally
IPython.display.IFrame('./multiqc_report.html', '100%', 600)
Out[23]:

If you want to restart the session from scratch, you can either restart the kernel, or call multiqc.reset()

In [24]:
multiqc.reset()

Like the command line tool, all interactive commands will load the config in the same order. Any config passed directly to a function (like module_order or exclude_modules that we specified above) will apply to this function call on top of any config loaded from file. You can also manually load a custom user config with multiqc.load_config():

In [25]:
multiqc.load_config("multiqc_config_illumina.yml")
            config | Loading config settings from: /Users/vlad/.multiqc_config.yaml
            config | Loading config settings from: multiqc_config_illumina.yml