def moonage(d, d1): # used in twilighttab (section 3) # return the moon's 'age' and percent illuminated # percent illumination is calculated at noon t12 = ts.ut1(d.year, d.month, d.day, 12, 0, 0) phase_angle = almanac.phase_angle(eph, 'moon', t12) pctrad = 50 * (1.0 + math.cos(phase_angle.radians)) pct = "{:.0f}".format(pctrad) # calculate age of moon pnm = PreviousNewMoon nnm = NextNewMoon #dt0 = datetime.date(pnm.year, pnm.month, pnm.day) #dt1 = datetime.date(nnm.year, nnm.month, nnm.day) dt = datetime.datetime.combine(d1, datetime.time(0, 0)) age1td = dt - pnm.replace(tzinfo=None) age2td = dt - nnm.replace(tzinfo=None) age1 = age1td.days age2 = age2td.days age = age1 if age2 >= 0: age = age2 return age, pct
def moonphase(d): # used in twilighttab (section 3) # returns the moon's elongation (angle to the sun) # convert python 'date' to 'date with time' ... dt = datetime.datetime(d.year, d.month, d.day, 0, 0, 0) # phase is calculated at noon dt += datetime.timedelta(hours=12) t12 = ts.ut1(d.year, d.month, d.day, 12, 0, 0) phase_angle = almanac.phase_angle(eph, 'moon', t12) elong = phase_angle.radians # phase_angle.degrees is ... # 180 at New Moon, drops to 0 at Full Moon, then rises to 180 at New Moon #pnm = PreviousNewMoon.replace(tzinfo=None) #nfm = NextFullMoon.replace(tzinfo=None) #pfm = PreviousFullMoon.replace(tzinfo=None) #nnm = NextNewMoon.replace(tzinfo=None) if WaxingMoon: phase = math.pi - phase_angle.radians else: phase = math.pi + phase_angle.radians return phase
def equation_of_time(d, d1, UpperList, LowerList, extras): # used in twilighttab (section 3) # returns equation of time, the sun's transit time, # the moon's transit-, antitransit-time, age and percent illumination. # (Equation of Time = Mean solar time - Apparent solar time) t00 = ts.ut1(d.year, d.month, d.day, 0, 0, 0) position = earth.at(t00).observe(sun) ra = position.apparent().radec(epoch='date')[0] gha00 = gha2deg(t00.gast, ra.hours) eqt00 = gha2eqt(gha00) if gha00 <= 180: eqt00 = r"\colorbox{{lightgray!80}}{{{}}}".format(eqt00) # percent illumination is calculated at noon t12 = ts.ut1(d.year, d.month, d.day, 12, 0, 0) position = earth.at(t12).observe(sun) ra = position.apparent().radec(epoch='date')[0] gha12 = gha2deg(t12.gast, ra.hours) eqt12 = gha2eqt(gha12) mpa12 = gha2mpa(gha12) if gha12 > 270: eqt12 = r"\colorbox{{lightgray!80}}{{{}}}".format(eqt12) # !! transit times are rounded to the nearest minute, # !! so the search needs to start and end 30 sec earlier # !! e.g. after 23h 59m 30s rounds up to 00:00 next day # calculate moon upper transit mp_upper = find_transit(d, UpperList, False) # calculate moon lower transit mp_lower = find_transit(d, LowerList, True) if not (extras): # omit 'age' and 'pct' return eqt00, eqt12, mpa12, mp_upper, mp_lower phase_angle = almanac.phase_angle(eph, 'moon', t12) pctrad = 50 * (1.0 + math.cos(phase_angle.radians)) pct = "{:.0f}".format(pctrad) # calculate age of moon pnm = PreviousNewMoon nnm = NextNewMoon #dt0 = datetime.date(pnm.year, pnm.month, pnm.day) #dt1 = datetime.date(nnm.year, nnm.month, nnm.day) dt = datetime.datetime.combine(d1, datetime.time(0, 0)) age1td = dt - pnm.replace(tzinfo=None) age2td = dt - nnm.replace(tzinfo=None) age1 = age1td.days age2 = age2td.days age = age1 if age2 >= 0: age = age2 return eqt00, eqt12, mpa12, mp_upper, mp_lower, age, pct