def GetPrevConjunction(date, earth, forward=False): prevSun = 0.0 prevMoon = 0.0 prevDiff = 0.0 nowSun = 0.0 nowMoon = 0.0 nowDiff = 0.0 dir = 1.0 if forward else -1.0 moon = GCMoonData.MOONDATA() d = GCGregorianDate(date=date) d.shour = 0.5 d.tzone = 0.0 jd = d.GetJulian() # set initial data for input day # NOTE: for grenwich moon.Calculate(jd, earth) prevSun = GCSunData.GetSunLongitude(d) prevMoon = moon.longitude_deg prevDiff = GCMath.putIn180(prevSun - prevMoon) for bCont in range(32): if forward: d.NextDay() else: d.PreviousDay() jd += dir moon.Calculate(jd, earth) nowSun = GCSunData.GetSunLongitude(d) nowMoon = moon.longitude_deg nowDiff = GCMath.putIn180(nowSun - nowMoon) if IsConjunction(nowMoon, nowSun, prevSun, prevMoon): # now it calculates actual time and zodiac of conjunction if prevDiff == nowDiff: return 0 x = math.fabs(nowDiff) / math.fabs(prevDiff - nowDiff) if x < 0.5: if forward: d.PreviousDay() d.shour = x + 0.5 else: if not forward: d.NextDay() d.shour = x - 0.5 date.Set(d) prevSun = GCMath.putIn360(prevSun) nowSun = GCMath.putIn360(nowSun) if math.fabs(prevSun - nowSun) > 10.0: return GCMath.putIn180(nowSun) + (GCMath.putIn180(prevSun) - GCMath.putIn180(nowSun)) * x else: return nowSun + (prevSun - nowSun) * x prevSun = nowSun prevMoon = nowMoon prevDiff = nowDiff return 1000.0
def writeXml(xml, loc, vc): date = GCGregorianDate() xml.write("<xml>\n") xml.write("\t<request name=\"Tithi\" version=\"") xml.write(GCStrings.getString(130)) xml.write("\">\n") xml.write("\t\t<arg name=\"longitude\" val=\"") xml.write(str(loc.m_fLongitude)) xml.write("\" />\n") xml.write("\t\t<arg name=\"latitude\" val=\"") xml.write(str(loc.m_fLatitude)) xml.write("\" />\n") xml.write("\t\t<arg name=\"timezone\" val=\"") xml.write(str(loc.m_fTimezone)) xml.write("\" />\n") xml.write("\t\t<arg name=\"startdate\" val=\"") xml.write(str(vc)) xml.write("\" />\n") xml.write("\t</request>\n") xml.write("\t<result name=\"Tithi\">\n") d1 = GCGregorianDate() d2 = GCGregorianDate() dn = GCGregorianDate() dt = GCTime() earth = loc.GetEarthData() day = GCDayData() day.DayCalc(vc, earth) d = GCGregorianDate(date=vc) d.tzone = loc.m_fTimezone d.shour = day.sun.sunrise_deg / 360.0 + loc.m_fTimezone / 24.0 GCTithi.GetPrevTithiStart(earth, d, d1) GCTithi.GetNextTithiStart(earth, d, d2) dt.SetDegTime(d1.shour * 360) # start tithi at t[0] xml.write("\t\t<tithi\n\t\t\tid=\"") xml.write(str(day.nTithi)) xml.write("\"\n") xml.write("\t\t\tname=\"") xml.write(GCStrings.GetTithiName(day.nTithi)) xml.write("\"\n") xml.write("\t\t\tstartdate=\"") xml.write(str(d1)) xml.write("\"\n") xml.write("\t\t\tstarttime=\"") xml.write(repr(dt)) xml.write("\"\n") dt.SetDegTime(d2.shour * 360) xml.write("\t\t\tenddate=\"") xml.write(str(d2)) xml.write("\"\n") xml.write("\t\t\tendtime=\"") xml.write(repr(dt)) xml.write("\"\n />") xml.write("\t</result>\n") xml.write("</xml>\n") return 1
def CalcTithiEnd(nGYear, nMasa, nPaksa, nTithi, earth, endTithi): d = GCGregorianDate(date=GetFirstDayOfYear(earth, nGYear + 1486)) d.shour = 0.5 d.tzone = earth.tzone return CalcTithiEndEx(d, nGYear, nMasa, nPaksa, nTithi, earth, endTithi)
def CalcTithiDate(nGYear, nMasa, nPaksa, nTithi, earth): i = 0 gy = 0 d = GCGregorianDate() dtemp = GCGregorianDate() day = GCDayData() tithi = 0 counter = 0 tmp = 0 if nGYear >= 464 and nGYear < 572: tmp = gGaurBeg[(nGYear - 464) * 26 + nMasa * 2 + nPaksa] d.month = (tmp & 0x3e0) >> 5 d.day = (tmp & 0x1f) d.year = (tmp & 0xfffc00) >> 10 d.tzone = earth.tzone d.NextDay() day.DayCalc(d, earth) day.nMasa = day.MasaCalc(d, earth) gy = day.nGaurabdaYear else: #d = GetFirstDayOfYear(earth, nGYear + 1486) d.day = 15 d.month = 2 + nMasa d.year = nGYear + 1486 if d.month > 12: d.month -= 12 d.year += 1 d.shour = 0.5 d.tzone = earth.tzone i = 0 while True: d.AddDays(13) day.DayCalc(d, earth) day.nMasa = day.MasaCalc(d, earth) gy = day.nGaurabdaYear i += 1 if i >= 30: break if (day.nPaksa == nPaksa) and (day.nMasa == nMasa): break if i >= 30: d.year = d.month = d.day = -1 return d # we found masa and paksa # now we have to find tithi tithi = nTithi + nPaksa * 15 if day.nTithi == tithi: # loc1 # find tithi juncts in this day and according to that times, # look in previous or next day for end and start of this tithi d.PreviousDay() day.DayCalc(d, earth) if (day.nTithi > tithi) and (day.nPaksa != nPaksa): d.NextDay() return d if day.nTithi < tithi: # do increment of date until nTithi == tithi # but if nTithi > tithi # then do decrement of date counter = 0 while counter < 16: d.NextDay() day.DayCalc(d, earth) if day.nTithi == tithi: return d if (day.nTithi < tithi) and (day.nPaksa != nPaksa): return d if day.nTithi > tithi: return d counter += 1 # somewhere is error d.year = d.month = d.day = 0 return d else: # do decrement of date until nTithi <= tithi counter = 0 while counter < 16: d.PreviousDay() day.DayCalc(d, earth) if day.nTithi == tithi: return d if (day.nTithi > tithi) and (day.nPaksa != nPaksa): d.NextDay() return d if day.nTithi < tithi: d.NextDay() return d counter += 1 # somewhere is error d.year = d.month = d.day = 0 return d # now we know the type of day-accurancy # nType = 0 means, that we dont found a day # nType = 1 means, we find day, when tithi was present at sunrise # nType = 2 means, we found day, when tithi started after sunrise # but ended before next sunrise # return d
def Calculate(self, dateTime, location): self.currentDay.Set(dateTime) self.currentDay.InitWeekDay() vc2 = GCGregorianDate(date = self.currentDay, addDays=-4) vc2.tzone = location.m_fTimezone self.calendar.CalculateCalendar(location, vc2, 9)