def build_data_type_name(sources, properties, statistic, subtype=None):
    """
    Parameters
    ----------
    sources: str or list[str]
        type(s) of astrophysical sources to which this applies

    properties: str or list[str]
        feature(s)/characterisic(s) of those sources/fields to
        which the statistic applies

    statistic_type: str
        mathematical type of the statistic

    statistic_subtype: str or None
        optional additional specifier.  Default is None

    Returns
    -------
    name: str
        Type name of the form:
           {sources}_{properties}_{statistic_type}[_{statistic_subtype}]
    """
    if not isinstance(sources, str):
        sources = "".join([sources[0]] + [s.lower().capitalize()
                                          for s in sources[1:]])
    if not isinstance(properties, str):
        properties = "".join([properties[0]] + [s.lower().capitalize()
                                                for s in properties[1:]])
    if subtype:
        return f"{sources}_{properties}_{statistic}_{subtype}"
    else:
        return f"{sources}_{properties}_{statistic}"