def test_getSunSet(self): sun = Sun() # close to the winter solstice dt = date(2011, 12, 25) set = TimeAgent.quarter(sun.getSunSet(dt)) # 22:00 UT self.assertEqual(datetime(2011, 12, 25, 22, 0), set) # close to the summer solstice dt = date(2012, 6, 25) set = TimeAgent.quarter(sun.getSunSet(dt)) # 00:45 UT ON THE NEXT DAY self.assertEqual(datetime(2012, 6, 26, 0, 45), set)
def test_getSunRise(self): sun = Sun() # close to the winter solstice dt = date(2011, 12, 25) rise = TimeAgent.quarter(sun.getSunRise(dt)) # 12:30 UT self.assertEqual(datetime(2011, 12, 25, 12, 30), rise) # close to the summer solstice dt = date(2012, 6, 25) rise = TimeAgent.quarter(sun.getSunRise(dt)) # 10 UT self.assertEqual(datetime(2012, 6, 25, 10, 0), rise)
def test_getPTCSRiseSet(self): sun = Sun() dt = date(2011, 12, 25) rise, set = sun.getPTCSRiseSet(dt) self.assertEqual(datetime(2011, 12, 25, 12,30) , TimeAgent.quarter(rise)) self.assertEqual(datetime(2011, 12, 26, 1, 0) , TimeAgent.quarter(set)) # close to the summer solstice dt = date(2012, 6, 25) rise, set = sun.getPTCSRiseSet(dt) self.assertEqual(datetime(2012, 6, 25, 10, 0) , TimeAgent.quarter(rise)) self.assertEqual(datetime(2012, 6, 26, 3, 45) , TimeAgent.quarter(set))
def test_getRiseSet(self): sun = Sun() dt = date(2011, 12, 25) rise, set = sun.getRiseSet(dt) # 12:30 UT self.assertEqual(datetime(2011, 12, 25, 12,30) , TimeAgent.quarter(rise)) self.assertEqual(datetime(2011, 12, 25, 22, 0) , TimeAgent.quarter(set)) # close to the summer solstice dt = date(2012, 6, 25) rise, set = sun.getRiseSet(dt) # 00:45 UT ON THE NEXT DAY self.assertEqual(datetime(2012, 6, 25, 10, 0) , TimeAgent.quarter(rise)) self.assertEqual(datetime(2012, 6, 26, 0, 45) , TimeAgent.quarter(set)) # close to the summer solstice dts = (date(2012, 8, 1) , date(2012, 8, 2) , date(2012, 8, 3) , date(2013, 1, 29) , date(2013, 1, 30) ) expected = ((datetime(2012, 8, 1, 10, 21, 31), datetime(2012, 8, 2, 0, 30, 12)) , (datetime(2012, 8, 2, 10, 22, 24), datetime(2012, 8, 3, 0, 29, 12)) , (datetime(2012, 8, 3, 10, 23, 16), datetime(2012, 8, 4, 0, 28, 10)) , (datetime(2013, 1, 29, 12, 26, 38), datetime(2013, 1, 29, 22, 38, 52)) , (datetime(2013, 1, 30, 12, 25, 49), datetime(2013, 1, 30, 22, 40, 0)) ) for dt, (exp_rise, exp_set) in zip(dts, expected): rise, set = sun.getRiseSet(dt) self.assertEqual(exp_rise, rise) self.assertEqual(exp_set, set)
def adjustForLstDrift(self, dts): """ Assuming the first datetime is the target LST, adjust all datetimes to be on the same LST (when they are on different dates. Finally, make sure adjusted dates fall on quarter boundaries. """ if len(dts) == 0: return [] # what's the target LST? start = dts[0] lst = sla.Absolute2RelativeLST(start) # make sure each datetime stays on this lst adjusted = [start] for dt in dts[1:]: newDt = sla.RelativeLST2AbsoluteTime(lst, dt) if newDt > dt: dt2 = dt - timedelta(days = 1) newDt = sla.RelativeLST2AbsoluteTime(lst, dt2) adjusted.append(TimeAgent.quarter(newDt)) return adjusted