import math


def tau(lambda_nm, h=0.0, aod=0.1):
    """
    from: Hayes et Latham dans Ap. J, 197, 593 (1975)
    in http://www.astrosurf.com/aras/extinction/calcul.htm
    :param lambda_nm: wavelength [nm]
    :param h: height observatory [m]
    :param aod: Aerosol Optical Depth (AOD) tau = -ln(transmission(550nm)) = A*ln(10)
        Un air très sec de montage correspond à un AOD de 0,02.
        Dans un désert sec le AOD vaut 0.04.
        En France, le AOD est de 0,07 en hiver, de 0,21 en été, et en moyenne sur l'année de 0,13.
        Lorsque le temps est très chauds et orageux, le AOD peut atteindre 0,50.
    :return tau: optical depth for air mass 1 (zenith)
            = 0.921 * absorption in magnitudes for air mass 1 (zenith)
    """
    lm = lambda_nm/1000
    h_km = h/1000
    # absorbance measured at sea_level, air_mass 1, from Buil
    a_rayleigh = 9.4977e-3 / lm**4 * (0.23465 + 1.076e2/(146 - lm**-2) + 0.93161/(41 - lm**-2))**2
    tau_r = 0.4*math.log(10)*math.exp(-h_km/7.996) * a_rayleigh
    tau_oz = 0.0168 * math.exp(-15.0 * abs(lm - 0.59))
    tau_ae = aod * (lm/0.55)**-1.3
    tau_0 = tau_r + tau_oz + tau_ae  # for air mass 1 (AM1) zenith
    return tau_0