def onDecrDay(self, event): h, mi, s = util.decToDeg(self.t) yt, mt, dt = util.decrDay(self.y+self.cnt, self.m, self.d) tim = chart.Time(yt, mt, dt, h, mi, s, self.chart.time.bc, self.chart.time.cal, self.chart.time.zt, self.chart.time.plus, self.chart.time.zh, self.chart.time.zm, self.chart.time.daylightsaving, self.chart.place, False) if tim.jd > self.chart.time.jd: y, self.m, self.d = util.decrDay(self.y+self.cnt, self.m, self.d) if y != self.y+self.cnt: self.cnt -=1 self.show(self.y, self.m, self.d, self.t, self.cnt)
def getDateHour(self, tim, place, newmoonorig): while True: h, m, s = util.decToDeg(tim.time) y, mo, d = tim.year, tim.month, tim.day h -= 1 if h < 0: h = 23 y, mo, d = util.decrDay(y, mo, d) if y == 0: y = 1 tim = chart.Time(y, mo, d, h, m, s, False, tim.cal, chart.Time.GREENWICH, True, 0, 0, False, place, False) return True, tim, True tim = chart.Time(y, mo, d, h, m, s, False, tim.cal, chart.Time.GREENWICH, True, 0, 0, False, place, False) sun = planets.Planet(tim.jd, astrology.SE_SUN, self.flags) moon = planets.Planet(tim.jd, astrology.SE_MOON, self.flags) lonsun = sun.data[planets.Planet.LONG] lonmoon = moon.data[planets.Planet.LONG] d, m, s = util.decToDeg(lonsun) lonsun = d+m/60.0+s/3600.0 d, m, s = util.decToDeg(lonmoon) lonmoon = d+m/60.0+s/3600.0 diff = lonmoon-lonsun newmoon, ready = self.isNewMoon(diff) if newmoon != newmoonorig or ready: return True, tim, ready return False, tim
def getDateHour(self, tim, place, newmoonorig): while True: h, m, s = util.decToDeg(tim.time) y, mo, d = tim.year, tim.month, tim.day h -= 1 if h < 0: h = 23 y, mo, d = util.decrDay(y, mo, d) if y == 0: y = 1 tim = chart.Time(y, mo, d, h, m, s, False, tim.cal, chart.Time.GREENWICH, True, 0, 0, False, place, False) return True, tim, True tim = chart.Time(y, mo, d, h, m, s, False, tim.cal, chart.Time.GREENWICH, True, 0, 0, False, place, False) sun = planets.Planet(tim.jd, astrology.SE_SUN, self.flags) moon = planets.Planet(tim.jd, astrology.SE_MOON, self.flags) lonsun = sun.data[planets.Planet.LONG] lonmoon = moon.data[planets.Planet.LONG] d, m, s = util.decToDeg(lonsun) lonsun = d + m / 60.0 + s / 3600.0 d, m, s = util.decToDeg(lonmoon) lonmoon = d + m / 60.0 + s / 3600.0 diff = lonmoon - lonsun newmoon, ready = self.isNewMoon(diff) if newmoon != newmoonorig or ready: return True, tim, ready return False, tim
def __init__(self, rtime, rplace, pId, arc, lat, ascmc2, topo): direct = True if arc < 0.0: arc *= -1 direct = False if arc > 180.0: arc = 360.0 - arc direct = not direct if not direct and arc > 0.0: arc *= -1 flag = astrology.SEFLG_SWIEPH + astrology.SEFLG_SPEED if topo: flag += astrology.SEFLG_TOPOCTR #calc new time rate = arc / 15.0 ut = rate * SecMotion.ST2UTCONV newtime = rtime.time + ut year, month, day = rtime.year, rtime.month, rtime.day #check overflow if newtime >= chart.Time.HOURSPERDAY: newtime -= chart.Time.HOURSPERDAY year, month, day = util.incrDay(year, month, day) elif newtime < 0.0: newtime += chart.Time.HOURSPERDAY year, month, day = util.decrDay(year, month, day) calflag = astrology.SE_GREG_CAL if rtime.cal == chart.Time.JULIAN: calflag = astrology.SE_JUL_CAL tjd_ut = astrology.swe_julday(year, month, day, newtime, calflag) #self.planet contains the new position of the planet(it proceeded on its way during the PD(arc)) self.planet = planets.Planet(tjd_ut, pId, flag, lat, ascmc2)
def find(self): rnge = 3000 checker = rangechecker.RangeChecker() if checker.isExtended(): rnge = 5000 y = 1973 #year doesn't matter m = 3 d = 21 for i in range(int(self.ftdata[astrology.SE_SUN][findtimedlg.FindTimeDlg.LON])): y, m ,d = util.incrDay(y, m ,d) #Because the Sun's velocity is not exactly one degree per day. It is variable. The targetdate (from Sun's long) won't exactly be in the middle of the range tim = chart.Time(y, m, d, 0, 0, 0, self.bc, chart.Time.GREGORIAN, chart.Time.GREENWICH, True, 0, 0, False, None, False) tmpSun = planets.Planet(tim.jd, astrology.SE_SUN, self.flags) lonSun = tmpSun.data[planets.Planet.LONG] lontofind = self.ftdata[astrology.SE_SUN][findtimedlg.FindTimeDlg.LON] if lonSun > FindTime.CIRCLE-FindTime.OFFSET and lontofind < FindTime.OFFSET: lontofind += FindTime.CIRCLE if lontofind > FindTime.CIRCLE-FindTime.OFFSET and lonSun < FindTime.OFFSET: lonSun += FindTime.CIRCLE diff = int(math.fabs(int(lonSun)-int(lontofind))) if int(self.ftdata[astrology.SE_SUN][findtimedlg.FindTimeDlg.LON]) < int(lonSun): for i in range(diff): y, m, d = util.decrDay(y, m, d) else: for i in range(diff): y, m, d = util.incrDay(y, m, d) ybeg, mbeg, dbeg = y, m, d yend, mend, dend = y, m, d DATEOFFS = 7 #adjust range for i in range(DATEOFFS): ybeg, mbeg, dbeg = util.decrDay(ybeg, mbeg ,dbeg) yend, mend, dend = util.incrDay(yend, mend ,dend) tfnd = (1, 1, 1, 1.0, 1.0) y = 1; m = mbeg; d = dbeg while (y < rnge): if self.abort.abort: return fnd = self.day(y, m, d, astrology.SE_SUN, self.ftdata[astrology.SE_SUN][findtimedlg.FindTimeDlg.LON]) if fnd != None: found = True #The order of the search is chaldean (i.e. acc. to speed) for i in range(FindTime.TRADPL_NUM): j = self.mapChaldeanToModern(i) if j != 3: #SUN tfnd = self.day(y, m, d, j, self.ftdata[j][findtimedlg.FindTimeDlg.LON]) if tfnd == None: found = False break if found: #update wnd evt = findtimedlg.FTDataReadyEvent(attr1=tfnd) wx.PostEvent(self.win, evt) yt = y if m == mend and d == dend: y += 1 m = mbeg d = dbeg else: y, m, d = util.incrDay(y, m, d) if yt != y and yt%50 == 0: evt = findtimedlg.FTYearEvent(attr1=yt) wx.PostEvent(self.win, evt)
def compute(self): y = self.chart.time.year m = self.chart.time.month d = self.chart.time.day hour = self.chart.time.hour minute = self.chart.time.minute second = self.chart.time.second hr = 0.0 #GMT to LocalMean t = (self.chart.place.deglon+self.chart.place.minlon/60.0)*4 #long * 4min meantime = 0.0 if self.chart.place.east: meantime = self.chart.time.time+t/60.0 else: meantime = self.chart.time.time-t/60.0 #check over/underflow HOURSPERDAY = 24.0 if meantime >= HOURSPERDAY: meantime -= HOURSPERDAY y, m, d = util.incrDay(y, m, d) elif meantime < 0.0: meantime += HOURSPERDAY y, m, d = util.decrDay(y, m, d) if self.soltime: calflag = astrology.SE_GREG_CAL if self.chart.time.cal == chart.Time.JULIAN: calflag = astrology.SE_JUL_CAL yt = y if self.chart.time.bc: yt = -y jdmean = astrology.swe_julday(yt, m, d, meantime, calflag) #Get jdapp ret, te, serr = astrology.swe_time_equ(jdmean) jdapp = jdmean-te y, m, d, hr = astrology.swe_revjul(jdapp, calflag) hour,minute,second = util.decToDeg(hr) # print '%d:%02d:%02d' % (hour,minute,second) else: hour,minute,second = util.decToDeg(meantime) for i in range(self.age): if self.direct: y, m, d = util.incrDay(y, m, d) else: y, m, d = util.decrDay(y, m, d) if self.soltime: #Back to meantime on the last day yt = y if self.chart.time.bc: yt = -y calflag = astrology.SE_GREG_CAL if self.chart.time.cal == chart.Time.JULIAN: calflag = astrology.SE_JUL_CAL jdapp = astrology.swe_julday(yt, m, d, hr, calflag) ret, te, serr = astrology.swe_time_equ(jdapp) jdmean = jdapp+te y, m, d, hr = astrology.swe_revjul(jdmean, calflag) hour,minute,second = util.decToDeg(hr) # print '%d:%02d:%02d' % (hour,minute,second) return y, m, d, hour, minute, second
def calcTrueSolarArcRegressive(self, arc): LIM = 120.0 #arbitrary value y = self.chart.time.year m = self.chart.time.month d = self.chart.time.day h, mi, s = util.decToDeg(self.chart.time.time) tt = 0.0 #Subtract arc from Suns's pos (long or ra) prSunPos = self.chart.planets.planets[astrology.SE_SUN].dataEqu[planets.Planet.RAEQU] if self.options.pdkeyd == primdirs.PrimDirs.TRUESOLARECLIPTICALARC: prSunPos = self.chart.planets.planets[astrology.SE_SUN].data[planets.Planet.LONG] prSunPosEnd = prSunPos-arc transition = False #Pisces-Aries if prSunPosEnd < 0.0: prSunPos += 360.0 prSunPosEnd += 360.0 transition = True # Find day in ephemeris while (prSunPos >= prSunPosEnd): y, m, d = util.decrDay(y, m, d) ti = chart.Time(y, m, d, 0, 0, 0, False, self.chart.time.cal, chart.Time.GREENWICH, True, 0, 0, False, self.chart.place, False) sun = planets.Planet(ti.jd, astrology.SE_SUN, astrology.SEFLG_SWIEPH) pos = sun.dataEqu[planets.Planet.RAEQU] if self.options.pdkeyd == primdirs.PrimDirs.TRUESOLARECLIPTICALARC: pos = sun.data[planets.Planet.LONG] if transition and pos < LIM: pos += 360.0 prSunPos = pos if (prSunPos != prSunPosEnd): if transition: prSunPosEnd -= 360.0 trlon = 0.0 if self.options.pdkeyd == primdirs.PrimDirs.TRUESOLARECLIPTICALARC: trlon = prSunPosEnd else: #to Longitude... trlon = util.ra2ecl(prSunPosEnd, self.chart.obl[0]) trans = transits.Transits() trans.day(y, m, d, self.chart, astrology.SE_SUN, trlon) if len(trans.transits) > 0: tt = trans.transits[0].time else: #the time is midnight tt = 0.0 #difference th, tm, ts = util.decToDeg(tt) d1 = datetime.datetime(y, m, d, th, tm, ts) #in GMT d2 = datetime.datetime(self.chart.time.year, self.chart.time.month, self.chart.time.day, h, mi, s) #in GMT diff = d2-d1 ddays = diff.days dtime = diff.seconds/3600.0 #dtime to days dtimeindays = dtime/24.0 tt = ddays+dtimeindays return tt
def onDecrDay(self, event): y, m, d = util.decrDay(self.chart.time.origyear, self.chart.time.origmonth, self.chart.time.origday) self.show(y, m, d, self.chart.time.hour, self.chart.time.minute, self.chart.time.second)
def find(self): rnge = 3000 checker = rangechecker.RangeChecker() if checker.isExtended(): rnge = 5000 y = 1973 #year doesn't matter m = 3 d = 21 for i in range( int(self.ftdata[astrology.SE_SUN][ findtimedlg.FindTimeDlg.LON])): y, m, d = util.incrDay(y, m, d) #Because the Sun's velocity is not exactly one degree per day. It is variable. The targetdate (from Sun's long) won't exactly be in the middle of the range tim = chart.event.DateTime(y, m, d, 0, 0, 0, self.bc, chart.event.DateTime.GREGORIAN, chart.event.DateTime.GREENWICH, True, 0, 0, False, None, False) tmpSun = planets.Planet(tim.jd, astrology.SE_SUN, self.flags) lonSun = tmpSun.data[planets.Planet.LONG] lontofind = self.ftdata[astrology.SE_SUN][findtimedlg.FindTimeDlg.LON] if lonSun > FindTime.CIRCLE - FindTime.OFFSET and lontofind < FindTime.OFFSET: lontofind += FindTime.CIRCLE if lontofind > FindTime.CIRCLE - FindTime.OFFSET and lonSun < FindTime.OFFSET: lonSun += FindTime.CIRCLE diff = int(math.fabs(int(lonSun) - int(lontofind))) if int(self.ftdata[astrology.SE_SUN][ findtimedlg.FindTimeDlg.LON]) < int(lonSun): for i in range(diff): y, m, d = util.decrDay(y, m, d) else: for i in range(diff): y, m, d = util.incrDay(y, m, d) ybeg, mbeg, dbeg = y, m, d yend, mend, dend = y, m, d DATEOFFS = 7 #adjust range for i in range(DATEOFFS): ybeg, mbeg, dbeg = util.decrDay(ybeg, mbeg, dbeg) yend, mend, dend = util.incrDay(yend, mend, dend) tfnd = (1, 1, 1, 1.0, 1.0) y = 1 m = mbeg d = dbeg while (y < rnge): if self.abort.abort: return fnd = self.day( y, m, d, astrology.SE_SUN, self.ftdata[astrology.SE_SUN][findtimedlg.FindTimeDlg.LON]) if fnd != None: found = True #The order of the search is chaldean (i.e. acc. to speed) for i in range(FindTime.TRADPL_NUM): j = self.mapChaldeanToModern(i) if j != 3: #SUN tfnd = self.day( y, m, d, j, self.ftdata[j][findtimedlg.FindTimeDlg.LON]) if tfnd == None: found = False break if found: #update wnd evt = findtimedlg.FTDataReadyEvent(attr1=tfnd) wx.PostEvent(self.win, evt) yt = y if m == mend and d == dend: y += 1 m = mbeg d = dbeg else: y, m, d = util.incrDay(y, m, d) if yt != y and yt % 50 == 0: evt = findtimedlg.FTYearEvent(attr1=yt) wx.PostEvent(self.win, evt)
def __init__(self, year, month, day, hour, minute, second, bc, cal, zt, plus, zh, zm, daylightsaving, place, full = True): #zt is zonetime, zh is zonehour, zm is zoneminute, full means to calculate everything e.g. FixedStars, MidPoints, ... self.year = year self.month = month self.day = day self.origyear = year self.origmonth = month self.origday = day self.hour = hour self.minute = minute self.second = second self.bc = bc self.cal = cal self.zt = zt self.plus = plus self.zh = zh self.zm = zm self.daylightsaving = daylightsaving self.time = hour+minute/60.0+second/3600.0 self.dyear, self.dmonth, self.dday, self.dhour, self.dmin, self.dsec = year, month, day, hour, minute, second if self.daylightsaving: self.time -= 1.0 self.dhour -= 1 #check daylightsaving underflow if self.time < 0.0: self.time += Time.HOURSPERDAY self.year, self.month, self.day = util.decrDay(self.year, self.month, self.day) self.dhour += int(Time.HOURSPERDAY) self.dyear, self.dmonth, self.dday = self.year, self.month, self.day if zt == Time.ZONE:#ZONE ztime = zh+zm/60.0 if self.plus: self.time-=ztime else: self.time+=ztime elif zt == Time.LOCALMEAN:#LMT t = (place.deglon+place.minlon/60.0)*4.0 #long * 4min if place.east: self.time-=t/60.0 else: self.time+=t/60.0 if bc: self.year = 1-self.year #check over/underflow if self.time >= Time.HOURSPERDAY: self.time -= Time.HOURSPERDAY self.year, self.month, self.day = util.incrDay(self.year, self.month, self.day) elif self.time < 0.0: self.time += Time.HOURSPERDAY self.year, self.month, self.day = util.decrDay(self.year, self.month, self.day) calflag = astrology.SE_GREG_CAL if self.cal == Time.JULIAN: calflag = astrology.SE_JUL_CAL self.jd = astrology.swe_julday(self.year, self.month, self.day, self.time, calflag) if zt == Time.LOCALAPPARENT:#LAT ret, te, serr = astrology.swe_time_equ(self.jd) self.jd += te #LMT #Back to h,m,s(self.time) from julianday fromat self.year, self.month, self.day, self.time = astrology.swe_revjul(self.jd, calflag) #To GMT t = (place.deglon+place.minlon/60.0)*4.0 #long * 4min if place.east: self.time-=t/60.0 else: self.time+=t/60.0 #check over/underflow if self.time >= Time.HOURSPERDAY: self.time -= Time.HOURSPERDAY self.year, self.month, self.day = util.incrDay(self.year, self.month, self.day) elif self.time < 0.0: self.time += Time.HOURSPERDAY self.year, self.month, self.day = util.decrDay(self.year, self.month, self.day) #GMT in JD (julianday) self.jd = astrology.swe_julday(self.year, self.month, self.day, self.time, calflag) self.sidTime = astrology.swe_sidtime(self.jd) #GMT self.ph = None if full: self.calcPHs(place) self.profy = None self.profm = None self.profd = None self.profho = None self.profmi = None self.profse = None
def calcTrueSolarArcRegressive(self, arc): LIM = 120.0 #arbitrary value y = self.chart.time.year m = self.chart.time.month d = self.chart.time.day h, mi, s = util.decToDeg(self.chart.time.time) tt = 0.0 #Subtract arc from Suns's pos (long or ra) prSunPos = self.chart.planets.planets[astrology.SE_SUN].dataEqu[ planets.Planet.RAEQU] if self.options.pdkeyd == primdirs.PrimDirs.TRUESOLARECLIPTICALARC: prSunPos = self.chart.planets.planets[astrology.SE_SUN].data[ planets.Planet.LONG] prSunPosEnd = prSunPos - arc transition = False #Pisces-Aries if prSunPosEnd < 0.0: prSunPos += 360.0 prSunPosEnd += 360.0 transition = True # Find day in ephemeris while (prSunPos >= prSunPosEnd): y, m, d = util.decrDay(y, m, d) ti = chart.Time(y, m, d, 0, 0, 0, False, self.chart.time.cal, chart.Time.GREENWICH, True, 0, 0, False, self.chart.place, False) sun = planets.Planet(ti.jd, astrology.SE_SUN, astrology.SEFLG_SWIEPH) pos = sun.dataEqu[planets.Planet.RAEQU] if self.options.pdkeyd == primdirs.PrimDirs.TRUESOLARECLIPTICALARC: pos = sun.data[planets.Planet.LONG] if transition and pos < LIM: pos += 360.0 prSunPos = pos if (prSunPos != prSunPosEnd): if transition: prSunPosEnd -= 360.0 trlon = 0.0 if self.options.pdkeyd == primdirs.PrimDirs.TRUESOLARECLIPTICALARC: trlon = prSunPosEnd else: #to Longitude... trlon = util.ra2ecl(prSunPosEnd, self.chart.obl[0]) trans = transits.Transits() trans.day(y, m, d, self.chart, astrology.SE_SUN, trlon) if len(trans.transits) > 0: tt = trans.transits[0].time else: #the time is midnight tt = 0.0 #difference th, tm, ts = util.decToDeg(tt) d1 = datetime.datetime(y, m, d, th, tm, ts) #in GMT d2 = datetime.datetime(self.chart.time.year, self.chart.time.month, self.chart.time.day, h, mi, s) #in GMT diff = d2 - d1 ddays = diff.days dtime = diff.seconds / 3600.0 #dtime to days dtimeindays = dtime / 24.0 tt = ddays + dtimeindays return tt
def compute(self): y = self.chart.time.year m = self.chart.time.month d = self.chart.time.day hour = self.chart.time.hour minute = self.chart.time.minute second = self.chart.time.second hr = 0.0 #GMT to LocalMean t = (self.chart.place.deglon + self.chart.place.minlon / 60.0) * 4 #long * 4min meantime = 0.0 if self.chart.place.east: meantime = self.chart.time.time + t / 60.0 else: meantime = self.chart.time.time - t / 60.0 #check over/underflow HOURSPERDAY = 24.0 if meantime >= HOURSPERDAY: meantime -= HOURSPERDAY y, m, d = util.incrDay(y, m, d) elif meantime < 0.0: meantime += HOURSPERDAY y, m, d = util.decrDay(y, m, d) if self.soltime: calflag = astrology.SE_GREG_CAL if self.chart.time.cal == chart.Time.JULIAN: calflag = astrology.SE_JUL_CAL yt = y if self.chart.time.bc: yt = -y jdmean = swisseph.julday(yt, m, d, meantime, calflag) #Get jdapp ret, te, serr = swisseph.time_equ(jdmean) jdapp = jdmean - te y, m, d, hr = swisseph.revjul(jdapp, calflag) hour, minute, second = util.decToDeg(hr) # print '%d:%02d:%02d' % (hour,minute,second) else: hour, minute, second = util.decToDeg(meantime) for i in range(self.age): if self.direct: y, m, d = util.incrDay(y, m, d) else: y, m, d = util.decrDay(y, m, d) if self.soltime: #Back to meantime on the last day yt = y if self.chart.time.bc: yt = -y calflag = astrology.SE_GREG_CAL if self.chart.time.cal == chart.Time.JULIAN: calflag = astrology.SE_JUL_CAL jdapp = swisseph.julday(yt, m, d, hr, calflag) ret, te, serr = swisseph.time_equ(jdapp) jdmean = jdapp + te y, m, d, hr = swisseph.revjul(jdmean, calflag) hour, minute, second = util.decToDeg(hr) # print '%d:%02d:%02d' % (hour,minute,second) return y, m, d, hour, minute, second