Given a set of Cq values, return the Cq value that represents the
    average expression level of the input.

    The intent is to average the expression levels of the samples,
    since the average of Cq values is not biologically meaningful.

    :param iterable seq: A sequence (e.g. list, array, or Series) of Cq values.
    :param float efficiency: The fractional efficiency of the PCR reaction; i.e.
        1.0 is 100% efficiency, producing 2 copies per amplicon per cycle.
    :return: Cq value representing average expression level
    :rtype: float

def average_cq(seq, efficiency=1.0):
    """Given a set of Cq values, return the Cq value that represents the
    average expression level of the input.

    The intent is to average the expression levels of the samples,
    since the average of Cq values is not biologically meaningful.

    :param iterable seq: A sequence (e.g. list, array, or Series) of Cq values.
    :param float efficiency: The fractional efficiency of the PCR reaction; i.e.
        1.0 is 100% efficiency, producing 2 copies per amplicon per cycle.
    :return: Cq value representing average expression level
    :rtype: float
    """
    denominator = sum( [pow(2.0*efficiency, -Ci) for Ci in seq] )
    return log(len(seq)/denominator)/log(2.0*efficiency)