def _get_norm_procedure(norm, parameter):
    """
    Returns methods description of the provided `norm`

    Parameters
    ----------
    norm : str
        Normalization procedure

    Returns
    -------
    procedure : str
        Reporting procedures
    """

    if parameter not in ('sample_norm', 'gene_norm'):
        raise ValueError(f'Invalid norm parameter {parameter}')

    if parameter == 'sample_norm':
        mod = ('tissue sample expression values across genes')
        suff = ('tissue sample across genes')
    else:
        mod = ('gene expression values across tissue samples')
        suff = ('gene across tissue samples')

    sigmoid = r"""
    independently for each donor using a sigmoid function [F2016P]:<br>

    $$ x_{{norm}} = \frac{{1}}{{1 + \exp(-\frac{{(x - \overline{{x}})}}
    {{\sigma_{{x}}}})}} $$<br>

    where $\bar{{x}}$ is the arithmetic mean and $\sigma_{{x}}$ is the
    sample standard deviation of the expression of a single
    """
    robust_sigmoid = r"""
    using a robust sigmoid function [F2013J]:<br>

    $$ x_{{norm}} = \frac{{1}}{{1 + \exp(-\frac{{(x-\langle x \rangle)}}
    {{\text{{IQR}}_{{x}}}})}} $$<br>

    where $\langle x \rangle$ is the median and $\text{{IQR}}_{{x}}$
    is the normalized interquartile range of the expression of a single
    """
    rescale = r"""
    Normalized expression values were then rescaled to the unit interval: <br>

    $$ x_{{scaled}} = \frac{{x_{{norm}} - \min(x_{{norm}})}}
    {{\max(x_{{norm}}) - \min(x_{{norm}})}} $$<br>
    """

    procedure = ''
    if norm in ['center', 'demean']:
        procedure += """
        by demeaning {mod} independently for each donor.
        """.format(mod=mod)
    elif norm == 'zscore':
        procedure += """
        by mean- and variance-normalizing (i.e., z-scoring) {mod} independently
        for each donor.
        """.format(mod=mod)
    elif norm == 'minmax':
        procedure += r"""
        by rescaling {mod} to the unit interval independently for each donor:
        <br>

        $$ x_{{{{scaled}}}} = \frac{{{{x - \min(x)}}}}{{{{\max(x) - \min(x)}}}}
        $$<br>
        """.format(mod=mod)
    elif norm in ['sigmoid', 'sig']:
        procedure += r"""
        by normalizing {mod} {sigmoid} {suff}.
        """.format(mod=mod, sigmoid=sigmoid, suff=suff)
    elif norm in ['scaled_sigmoid', 'scaled_sig']:
        procedure += r"""
        by normalizing {mod} {sigmoid} {suff}. {rescale}
        """.format(mod=mod, sigmoid=sigmoid, suff=suff, rescale=rescale)
    elif norm in ['scaled_sigmoid_quantiles', 'scaled_sig_qnt']:
        procedure += r"""
        by normalizing {mod} {sigmoid} {suff}, calculated using only data in
        the 5–95th percentile range to downweight the impact of outliers.
        {rescale}
        """.format(mod=mod, sigmoid=sigmoid, suff=suff, rescale=rescale)
    elif norm in ['robust_sigmoid', 'rsig', 'rs']:
        procedure += r"""
        by normalizing {mod} {robust_sigmoid} {suff}.
        """.format(mod=mod, robust_sigmoid=robust_sigmoid, suff=suff)
    elif norm in ['scaled_robust_sigmoid', 'scaled_rsig', 'srs']:
        procedure += r"""
        by normalizing {mod} {robust_sigmoid} {suff}. {rescale}
        """.format(mod=mod, robust_sigmoid=robust_sigmoid, suff=suff,
                   rescale=rescale)
    elif norm in ['mixed_sigmoid', 'mixed_sig']:
        procedure += r"""
        by normalizing {mod} using a mixed sigmoid function [F2013J]:<br>

        $$ x_{{{{norm}}}} = \left\{{{{\begin{{{{array}}}}{{{{r r}}}}
        \frac{{{{1}}}}{{{{1 + \exp(-\frac{{{{(x-\overline{{{{x}}}})}}}}
        {{{{\sigma_{{{{x}}}}}}}})}}}} ,& \text{{{{IQR}}}}_{{{{x}}}} = 0
        \frac{{{{1}}}}{{{{1 + \exp(-\frac{{{{(x-\langle x \rangle)}}}}
        {{{{\text{{{{IQR}}}}_{{{{x}}}}}}}})}}}} ,& \text{{{{IQR}}}}_{{{{x}}}}
        \neq 0 \end{{{{array}}}}\right. $$<br>

        where $\bar{{{{x}}}}$ is the arithmetic mean, $\sigma_{{{{x}}}}$ is the
        sample standard deviation, $\langle x \rangle$ is the median, and
        $\text{{{{IQR}}}}_{{{{x}}}}$ is the normalized interquartile range of
        the expression value of a single {suff}. {rescale}
        """.format(mod=mod, suff=suff, rescale=rescale)

    return procedure