Summary Report

Report Date: {{ report_date }}

VNtyper Version: {{ pipeline_version }}

{% if input_files %}

Input Files: {% if input_files.fastq1 and input_files.fastq2 %} {{ input_files.fastq1 }}, {{ input_files.fastq2 }} {% elif input_files.bam %} {{ input_files.bam }} {% endif %}

{% endif %} {% if reference_assembly_requested %}

Reference assembly requested: {{ reference_assembly_requested }}

{% if reference_key_used %}

Reference key used: {{ reference_key_used }}

{% endif %} {% if reference_path %}

Reference path: {{ reference_path }}

{% endif %} {% if reference_source_effective %}

Effective reference source: {{ reference_source_effective }}

{% endif %}
{% endif %} {% if alignment_pipeline or assembly_text or assembly_contig or header_warning %}
{% if alignment_pipeline %}

Alignment pipeline: {{ alignment_pipeline }}

{% endif %} {% if assembly_text %}

Assembly detected from BAM header: {{ assembly_text }} {% if assembly_contig %} (Contig: {{ assembly_contig }}) {% endif %}

{% endif %} {% if header_warning %}

Warning: {{ header_warning }}

{% endif %}
{% endif %}

VNTR Region Coverage

Mean Coverage: {{ mean_vntr_coverage }} {{ mean_vntr_coverage_icon|safe }}
Over {{ vntr_region_length }} bp, as this assembly represents the region. Not comparable with another assembly's mean — the builds contain different amounts of the repeat array.

Flank depth: {{ vntr_flank_mean_depth }}
Mean depth over {{ vntr_flank_bases }} bp of unique sequence either side of the repeat array. This is the figure to compare between assemblies, because unique sequence measures the sample rather than the reference.

{% if fastp_available %}

fastp Quality Metrics

Sequencing Setup: {{ sequencing_str }}

Metric Value Status
Duplication Rate (Cutoff: 10%) {% if duplication_rate is not none %} {{ (duplication_rate * 100)|round(2) }}% {% else %} N/A {% endif %} {{ duplication_rate_icon|safe }}
Q20 Rate (Cutoff: 80%) {{ (q20_rate * 100)|round(2) if q20_rate is not none else 'N/A' }}% {{ q20_icon|safe }}
Q30 Rate (Cutoff: 70%) {{ (q30_rate * 100)|round(2) if q30_rate is not none else 'N/A' }}% {{ q30_icon|safe }}
Passed Filter Rate (Cutoff: 80%) {{ (passed_filter_rate * 100)|round(2) if passed_filter_rate is not none else 'N/A' }}% {{ passed_filter_icon|safe }}
{% endif %}

Screening Summary

{# Emphasis comes from the computed screening state, never from the text. The message is written by configuration and its wording is not evidence of anything: a condition that searched it for a word would put a positive style on whichever messages happened to contain that word, "No variant detected by either genotyping method" among them. `tests/unit/test_generate_report.py` pins this. #}

{{ summary_text|safe }}

{% if cross_match_message and advntr_available %}

Cross-Match Summary

{# Same rule as the screening summary above, and the same defect: this asked whether the sentence contained "match", and both fixed sentences do - so "No matches were found" rendered in the positive style. The state is computed in `build_cross_match_summary` and passed in. #}

{{ cross_match_message|safe }}

{% endif %}

Kestrel Identified Variants

{{ kestrel_highlight | safe }}
{% if advntr_available and advntr_highlight %}

adVNTR Identified Variants

{{ advntr_highlight | safe }}
{% else %}

adVNTR genotyping was not performed or no adVNTR results are available.

{% endif %}

IGV Alignment Visualization

Pipeline Log

{{ log_content }}