def _validate_hazard_metadata(md):
    """
    Validate metadata `dict` of attributes, which are more or less the same for
    hazard curves, hazard maps, and disaggregation histograms.

    :param dict md:
        `dict` which can contain the following keys:

        * statistics
        * gsimlt_path
        * smlt_path
        * imt
        * sa_period
        * sa_damping

    :raises:
        :exc:`ValueError` if the metadata is not valid.
    """
    if md.get('statistics') is not None and (md.get('smlt_path') is not
        None or md.get('gsimlt_path') is not None):
        raise ValueError(
            'Cannot specify both `statistics` and logic tree paths')
    if md.get('statistics') is not None:
        if md.get('statistics') not in ('mean', 'max', 'quantile', 'std'):
            raise ValueError(
                '`statistics` must be either `mean`, `max`, or `quantile`')
    elif md.get('smlt_path') is None or md.get('gsimlt_path') is None:
        raise ValueError(
            'Both logic tree paths are required for non-statistical results')
    if md.get('statistics') == 'quantile':
        if md.get('quantile_value') is None:
            raise ValueError(
                'quantile stastics results require a quantile value to be specified'
                )
    if not md.get('statistics') == 'quantile':
        if md.get('quantile_value') is not None:
            raise ValueError(
                'Quantile value must be specified with quantile statistics')
    if md.get('imt') == 'SA':
        if md.get('sa_period') is None:
            raise ValueError('`sa_period` is required for IMT == `SA`')
        if md.get('sa_damping') is None:
            raise ValueError('`sa_damping` is required for IMT == `SA`')
