{% extends 'base.html' %} {% block title %}Analysis — Brew Log{% endblock %} {% block content %}

Analysis

How consistently the brews ferment, and how long each one takes.

History Active beers
{% if not rows %}

No finished brews to analyse yet.

Once a run has a final reading it appears here.

{% else %}
Average attenuation
{% if stats.avg_attenuation is not none %}{{ stats.avg_attenuation }}%{% else %}—{% endif %}
of the original gravity fermented
Spread
{% if stats.consistency %}±{{ stats.consistency.stdev }}pp{% else %}—{% endif %}
{% if stats.consistency %} standard deviation of attenuation, lower is better {% else %} needs at least two brews {% endif %}
Average brew time
{% if stats.avg_days is not none %}{{ stats.avg_days }}d{% else %}—{% endif %}
first reading to final reading
Time to 1.010
{% if stats.avg_days_to_1010 is not none %}{{ stats.avg_days_to_1010 }}d{% else %}—{% endif %}
{% if stats.reached_1010 %} average of {{ stats.reached_1010 }} brew{{ '' if stats.reached_1010 == 1 else 's' }} that got there {% else %} no brew reached 1.010 {% endif %}

Attenuation by brew

How much of the original gravity was fermented away

Fermentation curves

Progress through fermentation, 0% to 100%

Every finished brew

{{ stats.count }} brews{% if stats.suspect_count %} ({{ stats.trusted_count }} counted){% endif %}
{% for row in rows %} {% endfor %}
Run Name OG FG ABV Attenuation Days To 1.010 Finished
{{ row.beer_run_id }} {{ row.name }}{% if row.suspect %} not counted{% endif %} {% if row.og_points is not none %} {{ '%.3f' % (row.og_points / 1000) }} {% else %}—{% endif %} {% if row.fg_points is not none %} {{ '%.3f' % (row.fg_points / 1000) }} {% else %}—{% endif %} {% if row.abv is not none %}{{ '%.2f' % row.abv }}%{% else %}—{% endif %} {% if row.attenuation is not none %} {{ row.attenuation }}% {% else %}—{% endif %} {{ row.days if row.days is not none else '—' }} {{ row.days_to_1010 if row.days_to_1010 is not none else '—' }} {{ row.final_date or '—' }}
{% if suspect %}

Readings that need a second look

{{ suspect | length }} run{{ '' if suspect | length == 1 else 's' }} excluded from the averages
{% for row in suspect %} {% endfor %}
Run OG FG Problem
{{ row.beer_run_id }} {{ '%.3f' % (row.og_points / 1000) }} {{ '%.3f' % (row.fg_points / 1000) }} {{ row.problem }}
{% endif %} {% if stats.consistency %}

What the numbers say

Across {% if stats.suspect_count %}{{ stats.trusted_count }} of {{ stats.count }}{% else %}{{ stats.count }}{% endif %} finished brews the attenuation averages {{ stats.consistency.mean }}%, with a standard deviation of {{ stats.consistency.stdev }} percentage points and a total range of {{ stats.consistency.spread }} percentage points. {% if stats.consistency.stdev <= 3 %} That is a tight spread — the process is repeatable. {% elif stats.consistency.stdev <= 6 %} That is a moderate spread — some variation between batches. {% else %} That is a wide spread — something in the process is not consistent between batches. {% endif %}

{% if stats.fastest and stats.slowest and stats.fastest != stats.slowest %}

The quickest brew was {{ stats.fastest.name }} at {{ stats.fastest.days }} days; the longest was {{ stats.slowest.name }} at {{ stats.slowest.days }} days.

{% endif %} {% if stats.avg_days_to_1010 %}

On average a brew reaches gravity 1.010 after {{ stats.avg_days_to_1010 }} days — the number to plan around when deciding when to check on a fermenter.

{% endif %}
{% endif %} {% endif %} {% endblock %}