{% for key, val in patient_info.items() %}
{{ key }}: {{ val }}
{% endfor %}

Package version info
{% for key, val in package_versions.items() %}
    {{ key }}: {{ val }}
{% endfor %}
---

{% if variants %}
{% for v in variants %}
{{ v.num }}) {{ v.short_description }} ({{ v.variant_data['Gene name'] }})
        {% for key, val in v.variant_data.items() %}
        {{ key }}: {{ val }}
        {% endfor %}

        {% for key, val in v.effect_data.items() %}
        {{ key }}: {{ val }}
        {% endfor %}

        Vaccine antigens:
        {% for p in v.peptides %}
                {{ p.header_display_data.num }}. {{ p.header_display_data.aa_before_mutation }}_{{ p.header_display_data.aa_mutant }}_{{ p.header_display_data.aa_after_mutation }} (score = {{ v.variant_data["Top score"] }})
                  {% for key, val in p.peptide_data.items() %}
                  - {{ key }}: {{ val }}
                  {% endfor %}
                  {% if include_manufacturability %}

                  Manufacturability:
                  {% for key, val in p.manufacturability_data.items() %}
                  - {{ key }}: {{ val }}
                  {% endfor %}
                  {% endif %}
                  
                  Predicted mutant epitopes:
                  {{ p.ascii_epitopes|indent(18) }}

                  {% if include_wt_epitopes and p.wt_epitopes %}
                  Predicted strong binders that do not overlap the mutation:
                  {{ p.ascii_wt_epitopes|indent(18) }}
                  {% endif %}

        {% endfor %}
{% endfor %}
{% else %}
No variants with sufficient ranked antigens were found.
{% endif %}

{% if mrna_ranking %}
---

mRNA vaccine antigen selection
  Selected ({{ mrna_ranking.selected|length }} of {{ mrna_ranking.total_ranked }} ranked) at --mrna-antigens-per-construct={{ mrna_ranking.antigens_per_construct }} × --mrna-max-constructs={{ mrna_ranking.max_constructs }} = {{ mrna_ranking.cap }} antigen slots:
  {% for a in mrna_ranking.selected %}
    {{ a.rank }}. {{ a.description }}    combined_score = {{ '%.3f' % a.combined_score }}
  {% endfor %}
  {% if mrna_ranking.dropped %}

  Not selected — past the cap (raise --mrna-max-constructs to include more):
  {% for a in mrna_ranking.dropped %}
    {{ a.rank }}. {{ a.description }}    combined_score = {{ '%.3f' % a.combined_score }}
  {% endfor %}
  {% endif %}
{% endif %}
