def writeADESHeader(
        observatory_code,
        submitter,
        telescope_design,
        telescope_aperture,
        telescope_detector,
        observers,
        measurers,
        observatory_name=None,
        submitter_institution=None,
        telescope_name=None,
        telescope_fratio=None,
        comment=None
    ):
    """
    Write the ADES PSV headers.

    Parameters
    ----------
    observatory_code : str
        MPC-assigned observatory code
    submitter : str
        Submitter's name.
    telescope_design : str
        Telescope's design, eg. Reflector.
    telescope_aperture : str
        Telescope's primary aperture in meters.
    telescope_detector : str
        Telescope's detector, eg. CCD.
    observers : list of str
        First initial and last name (J. Smith) of each of the observers.
    measurers : list of str
        First initial and last name (J. Smith) of each of the measurers.
    observatory_name : str, optional
        Observatory's name.
    submitter_insitution : str, optional
        Name of submitter's institution.
    telescope_name : str, optional
        Telescope's name.
    telescope_fratio : str, optional
        Telescope's focal ratio.
    comment : str
        Additional comment to add to the ADES header.


    Returns
    -------
    list : str
        A list of each line in the ADES header.
    """
    # Start header with version number
    header = [
        "# version=2017",
    ]

    # Add observatory [required]
    header += ["# observatory"]
    header += [f"! mpcCode {observatory_code}"]
    if observatory_name is not None:
        header += [f"! name {observatory_name}"]

    # Add submitter [required]
    header += ["# submitter"]
    header += [f"! name {submitter}"]

    if submitter_institution is not None:
        header += ["! institution {}".format(submitter_institution)]

    # Add telescope details [required]
    header += ["# telescope"]
    if telescope_name is not None:
        header += [f"! name {telescope_name}"]
    header += [f"! design {telescope_design}"]
    header += [f"! aperture {telescope_aperture}"]
    header += [f"! detector {telescope_detector}"]
    if telescope_fratio is not None:
        header += [f"! fRatio {telescope_fratio}"]

    # Add observer details
    header += ["# observers"]
    if type(observers) is not list:
        err = (
            "observers should be a list of strings."
        )
        raise ValueError(err)
    for name in observers:
        header += [f"! name {name}"]

    # Add measurer details
    header += ["# measurers"]
    if type(measurers) is not list:
        err = (
            "measurers should be a list of strings."
        )
        raise ValueError(err)
    for name in measurers:
        header += [f"! name {name}"]

    # Add comment
    if comment is not None:
        header += ["# comment"]
        header += ["! line {}".format(comment)]

    header = [i + "\n" for i in header]
    return header