src/Utils.h

Thu, 07 Jul 2022 14:57:24 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 07 Jul 2022 14:57:24 +0200
changeset 340
b9af88bfe972
parent 339
2f3cfb983fcc
child 343
67e645b9d23f
permissions
-rw-r--r--

Added cooling parameters to the toIBU function.

#ifndef _UTILS_H
#define	_UTILS_H

#include <QString>
#include <QColor>

// #define Ka1 0.0000004445
// #define Ka2 0.0000000000468


/**
 * @namespace Utils
 *
 * @brief Global math functions.
 */
namespace Utils {

    double lintner_to_kolbach(double lintner);
    double kolbach_to_lintner(double kolbach);
    double ebc_to_srm(double ebc);
    double srm_to_ebc(double srm);
    double get_kt(int ebc);
    double plato_to_sg(double plato);
    double sg_to_plato(double sg);
    double brix_to_sg(double brix);
    double sg_to_brix(double sg);
    double brix_to_fg(double o_plato, double refracto);
    double calc_svg(double og, double fg);
    double estimate_sg(double sugars, double batch_size);
    double estimate_fg(double psugar, double pcara, double wgratio, double mashtime, double mashtemp, double svg, double og);
    double kw_to_srm(int colormethod, double c);
    double kw_to_ebc(int colormethod, double c);
    double kw_to_newebc(int colormethod, double c);
    double abvol(double og, double fg);

    /**
     * @brief Calculate standar air pressure at the brewery.
     *        Assume 20°C and use the global setup height.
     * @return Pressure in hPa.
     */
    double brewery_hPa();

    /**
     * @brief Return boil temperature in °C at the brewery height.
     * @return Temperature in °C
     */
    double boilPoint();

    /**
     * @brief Calculate IBU reduction at given temperature.
     * @param Tc temperature in °C.
     * @return The reduction factor.
     */
    double IBU_reduction(double Tc);

    /**
     * @brief Calculate IBU's of a hop at 100°C using the Tinseth formula.
     * @param SG the density
     * @param Volume in liters
     * @param Amount in kilograms
     * @param Time in minutes
     * @param Alpha in procent
     * @return The calculated IBU's
     */
    double TinsethIBU(double SG, double Volume, double Amount, double Time, double Alpha);

    /**
     * @brief Calculate IBU's of a hop during the whole production process.
     * @param Use HOP_USEAT_MASH HOP_USEAT_FWH HOP_USEAT_BOIL HOP_USEAT_AROMA HOP_USEAT_WHIRLPOOL HOP_USEAT_DRY_HOP HOP_USEAT_BOTTLING
     * @param Form HOP_FORMS_PELLET HOP_FORMS_PLUG HOP_FORMS_LEAF HOP_FORMS_LEAF_WET HOP_FORMS_CRYO HOP_FORMS_EXTRACT
     * @param SG the density
     * @param Volume in liters
     * @param Amount in kilograms
     * @param Boiltime in minutes
     * @param Alpha in procent
     * @param Method, 0 = Tinseth, 1 = Tinseth++ (+flamout, +whirlpool etc).
     * @param Whirlpool9 time in whirlpool above 80°C or zero.
     * @param Whirlpool7 time in whirlpool between 72°C and 77°C.
     * @param Whirlpool6 time in whirlpool between 60°C amd 66°C.
     * @param Fulltime, full boiltime, even for aroma hops.
     * @param Cooltype 0 = N/A, 1 = Emersion chiller, 2 = Counterflow, 3 = Au bain marie, 4 = natural
     * @param Coolparm1 to define later
     * @param Coolparm2 to define later
     * @return The calculated IBU's
     */
    double toIBU(int Use, int Form, double SG, double Volume, double Amount, double Boiltime, double Alpha,
                 int Method, double Whirlpool9, double Whirlpool7, double Whirlpool6, double Fulltime,
		 int Cooltype, double Coolparm1, double Coolparm2);

    double hopFlavourContribution(double bt, double vol, int use, double amount);
    double hopAromaContribution(double bt, double vol, int use, double amount);
    QString hours_to_string(int hours);
    double kettle_cm(double volume, double kettle_volume, double kettle_height);
    double kettle_vol(double cm, double kettle_volume, double kettle_height);

    /**
     * @brief Map SRM color to RGB and return as QColor.
     * @param srm The srm value.
     * @return QColor
     */
    QColor srm_to_color(int srm);

    /**
     * @brief Map EBC color to RGB and return as QColor.
     * @param ebc The ebc value.
     * @return QColor
     */
    QColor ebc_to_color(int ebc);

    /**
     * @brief Map SRM color to a QString for stylesheets.
     * @param srm The srm value.
     * @return A QString with stylesheet colors.
     */
    QString srm_to_style(int ebc);

    /**
     * @brief Map EBC color to a QString for stylesheets.
     * @param ebc The ebc value.
     * @return A QString with stylesheet colors.
     */
    QString ebc_to_style(int srm);

    /**
     * @brief Mix water volumes and ingredients.
     *
     */
    double mix(double v1, double v2, double c1, double c2);

    /**
     * @brief Return mg/l as CaCO3
     */
    double ResidualAlkalinity(double total_alkalinity, double calcium, double magnesium);

    double PartCO3(double pH);

    double PartHCO3(double pH);

    double Charge(double pH);

    double CalcFrac(double TpH, double pK1, double pK2, double pK3);
}

#endif

mercurial