private void CalculateSunRasi(GCLocation loc, GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCConfigRatedEvents rec) { int nData; GregorianDateTime vcNext = new GregorianDateTime(); int ndst; GCEarthData earth = loc.GetEarthData(); vcAdd.SubtractDays(30); while (vcAdd.IsBeforeThis(vcEnd)) { vcNext.Set(GCSankranti.GetNextSankranti(vcAdd, earth, out nData)); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); vcNext.AddHours(loc.TimeZone.GetBiasMinutesForDay(vcNext) / 60.0); //AddEvent(vcNext, CoreEventType.CCTYPE_SANK, nData, ndst); AddRating(vcNext, rec.rateGrahaRasi[0, nData], rec.rateGrahaRasi[0, Prev(nData, 12)]); } else { break; } vcAdd.Set(vcNext); vcAdd.NextDay(); } }
private int CalculateYoga(GCLocation loc, GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCEarthData earth, GCConfigRatedEvents rec) { int nData = 0; GregorianDateTime vcNext = new GregorianDateTime(); int ndst; vcAdd.SubtractDays(1); while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCYoga.GetNextYogaStart(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); vcNext.AddHours(loc.TimeZone.GetBiasMinutesForDay(vcNext) / 60.0); //AddEvent(vcNext, CoreEventType.CCTYPE_YOGA, nData, ndst); AddRating(vcNext, rec.rateYoga[nData], rec.rateYoga[Prev(nData, 27)]); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } return(nData); }
private int CalculateNaksatras(GCLocation loc, GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCEarthData earth, GCConfigRatedEvents rec) { int nData = 0; GregorianDateTime vcNext; int ndst; bool prevNaksatraValid = false; GregorianDateTime prevNaksatra = new GregorianDateTime(); vcAdd.SubtractDays(1); while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCNaksatra.GetNextNaksatra(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); vcNext.AddHours(loc.TimeZone.GetBiasMinutesForDay(vcNext) / 60.0); //AddEvent(vcNext, CoreEventType.CCTYPE_NAKS, nData, ndst); AddRating(vcNext, rec.rateNaksatra[nData], rec.rateNaksatra[Prev(nData, 27)]); if (prevNaksatraValid) { double padaLength = (vcNext.GetJulianComplete() - prevNaksatra.GetJulianComplete()) / 4.0; for (int j = 0; j < 4; j++) { //AddEvent(prevNaksatra, CoreEventType.CCTYPE_NAKS_PADA1 + j, nData, ndst); int prevPada = (nData * 4 + j + 107) % 108; AddRating(vcNext, rec.rateNaksatraPada[nData, j], rec.rateNaksatraPada[prevPada / 4, prevPada % 4]); prevNaksatra.shour += padaLength; prevNaksatra.NormalizeValues(); } } prevNaksatra.Set(vcNext); prevNaksatraValid = true; } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } return(nData); }
private void CalculateMoonTimes(GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCEarthData earth, GCConfigRatedEvents rec) { GregorianDateTime vcNext = new GregorianDateTime(); vcAdd.SubtractDays(2); while (vcAdd.IsBeforeThis(vcEnd)) { vcNext.Set(GCMoonData.GetNextRise(earth, vcAdd, true)); vcNext.AddHours(earth.TimeZone.GetBiasMinutesForDay(vcNext) / 60.0); //AddEvent(vcNext, CoreEventType.CCTYPE_M_RISE, 0, ndst); AddRating(vcNext, rec.rateMoonTime[0], rec.rateMoonTime[1]); vcNext.Set(GCMoonData.GetNextRise(earth, vcNext, false)); vcNext.AddHours(earth.TimeZone.GetBiasMinutesForDay(vcNext) / 60.0); //AddEvent(vcNext, CoreEventType.CCTYPE_M_SET, 0, ndst); AddRating(vcNext, rec.rateMoonTime[1], rec.rateMoonTime[0]); vcNext.shour += 0.05; vcNext.NormalizeValues(); vcAdd.Set(vcNext); } }
/// <summary> /// Main function for CALENDAR calculations /// </summary> /// <param name="loc"></param> /// <param name="begDate"></param> /// <param name="iCount"></param> /// <returns></returns> public int CalculateCalendar(GCLocation loc, GregorianDateTime begDate, int iCount) { int i, weekday; int nTotalCount = BEFORE_DAYS + iCount + BEFORE_DAYS; GregorianDateTime date; GCEarthData earth; int lastMasa = 0; int lastGYear = 0; String tempStr; bool bCalcMoon = (GCDisplaySettings.Current.getValue(4) > 0 || GCDisplaySettings.Current.getValue(5) > 0); m_nCount = 0; m_Location = loc; m_vcStart = new GregorianDateTime(begDate); m_vcCount = iCount; earth = loc.GetEarthData(); // alokacia pola m_pData = new VAISNAVADAY[nTotalCount]; // inicializacia poctovych premennych m_nCount = nTotalCount; m_PureCount = iCount; date = new GregorianDateTime(); date.Set(begDate); date.shour = 0.0; date.TimezoneHours = loc.OffsetUtcHours; date.SubtractDays(BEFORE_DAYS); date.InitWeekDay(); weekday = date.dayOfWeek; GCFestivalSpecialExecutor exec = new GCFestivalSpecialExecutor(this); long utcDayStart = -1; long utcDayEnd = -1; // 1 // initialization of days for (i = 0; i < nTotalCount; i++) { m_pData[i] = new VAISNAVADAY(); m_pData[i].date = new GregorianDateTime(date); m_pData[i].date.dayOfWeek = weekday; date.NextDay(); weekday = (weekday + 1) % 7; m_pData[i].moonrise.SetValue(-1); m_pData[i].moonset.SetValue(-1); if (utcDayStart < 0) { utcDayStart = Convert.ToInt64(m_pData[i].date.GetJulianComplete() * 86400); } m_pData[i].UtcDayStart = utcDayStart; utcDayStart += 86400; } for (i = 0; i < nTotalCount; i++) { m_pData[i].Previous = i > 0 ? m_pData[i - 1] : null; m_pData[i].Next = i < nTotalCount - 1 ? m_pData[i + 1] : null; } TResultCoreEvents recentEvents = null; // 2 // calculating DST data and core events foreach (VAISNAVADAY t in m_pData) { t.BiasMinutes = loc.TimeZone.GetBiasMinutesForDay(t.date); if (t.Previous != null) { t.DstDayType = (t.BiasMinutes == 0 ? (t.Previous.BiasMinutes == 0 ? DstTypeChange.DstOff : DstTypeChange.DstEnd) : (t.Previous.BiasMinutes == 0 ? DstTypeChange.DstStart : DstTypeChange.DstOn)); } utcDayStart = t.UtcDayStart - (t.Previous != null ? t.Previous.BiasMinutes * 60 : 0); utcDayEnd = t.UtcDayStart + 86400 - t.BiasMinutes * 60; if (recentEvents == null || recentEvents.p_events.Count == 0 || recentEvents.Year != t.date.year) { recentEvents = GCCoreAstronomy.GetCoreEventsYear(loc, t.date.year); } recentEvents.GetCoreEvents(t.coreEvents, utcDayStart, utcDayEnd); utcDayStart = utcDayEnd; } // 3 if (bCalcMoon) { foreach (VAISNAVADAY t in m_pData) { GCMoonData.CalcMoonTimes(earth, t.date, Convert.ToDouble(t.BiasMinutes / 60.0), out t.moonrise, out t.moonset); if (!EkadasiOnly && GCDisplaySettings.Current.getValue(GCDS.CAL_MOON_RISE) != 0 && t.moonrise.hour >= 0) { tempStr = t.Format(GCStrings.Localized("Moonrise {moonRiseTime} ({dstSig})")); t.AddEvent(DisplayPriorities.PRIO_MOON, GCDS.CAL_MOON_RISE, tempStr); } if (!EkadasiOnly && GCDisplaySettings.Current.getValue(GCDS.CAL_MOON_SET) != 0 && t.moonset.hour >= 0) { tempStr = t.Format(GCStrings.Localized("Moonset {moonSetTime} ({dstSig})")); t.AddEvent(DisplayPriorities.PRIO_MOON, GCDS.CAL_MOON_SET, tempStr); } } } // 4 // init of astro data foreach (VAISNAVADAY t in m_pData) { t.astrodata = new GCAstroData(); t.astrodata.DayCalc(t.date, earth); t.coreEvents.InsertByTime(new TCoreEvent() { Time = t.UtcDayStart + (long)t.astrodata.sunArunodaya.TotalSeconds, nType = CoreEventType.CCTYPE_S_ARUN }); t.coreEvents.InsertByTime(new TCoreEvent() { Time = t.UtcDayStart + (long)t.astrodata.sunRise.TotalSeconds, nType = CoreEventType.CCTYPE_S_RISE }); t.coreEvents.InsertByTime(new TCoreEvent() { Time = t.UtcDayStart + (long)t.astrodata.sunNoon.TotalSeconds, nType = CoreEventType.CCTYPE_S_NOON }); t.coreEvents.InsertByTime(new TCoreEvent() { Time = t.UtcDayStart + (long)t.astrodata.sunSet.TotalSeconds, nType = CoreEventType.CCTYPE_S_SET }); } // 5 // init of masa foreach (VAISNAVADAY t in m_pData) { if (t.Previous == null || t.astrodata.sunRise.Paksa != t.Previous.astrodata.sunRise.Paksa) { t.astrodata.MasaCalc(t.date, earth); lastMasa = t.astrodata.Masa; lastGYear = t.astrodata.GaurabdaYear; } t.astrodata.Masa = lastMasa; t.astrodata.GaurabdaYear = lastGYear; if (!EkadasiOnly && GCDisplaySettings.Current.getValue(GCDS.CAL_SUN_LONG) != 0) { tempStr = string.Format("{0}: {1} (*)", GCStrings.Localized("Sun Longitude") , t.astrodata.sunRise.longitude); t.AddEvent(DisplayPriorities.PRIO_ASTRO, GCDS.CAL_SUN_LONG, tempStr); } if (!EkadasiOnly && GCDisplaySettings.Current.getValue(GCDS.CAL_MOON_LONG) != 0) { tempStr = string.Format("{0}: {1} (*)", GCStrings.Localized("Moon Longitude") , t.astrodata.sunRise.longitudeMoon); t.AddEvent(DisplayPriorities.PRIO_ASTRO, GCDS.CAL_MOON_LONG, tempStr); } if (!EkadasiOnly && GCDisplaySettings.Current.getValue(GCDS.CAL_AYANAMSHA) != 0) { tempStr = string.Format("{0} {1} ({2}) (*)", GCStrings.Localized("Ayanamsha") , t.astrodata.Ayanamsa , GCAyanamsha.GetAyanamsaName(GCAyanamsha.GetAyanamsaType())); t.AddEvent(DisplayPriorities.PRIO_ASTRO, GCDS.CAL_AYANAMSHA, tempStr); } if (!EkadasiOnly && GCDisplaySettings.Current.getValue(GCDS.CAL_JULIAN) != 0) { tempStr = string.Format("{0} {1} (*)", GCStrings.Localized("Julian Time") , t.astrodata.JulianDay); t.AddEvent(DisplayPriorities.PRIO_ASTRO, GCDS.CAL_JULIAN, tempStr); } } if (!EkadasiOnly && GCDisplaySettings.Current.getValue(GCDS.CAL_MASA_CHANGE) != 0) { String str; foreach (VAISNAVADAY t in m_pData) { if (t.Previous != null && t.Previous.astrodata.Masa != t.astrodata.Masa) { str = t.Format(GCStrings.Localized("First day of {masaName} Masa")); t.AddEvent(DisplayPriorities.PRIO_MASA_CHANGE, GCDS.CAL_MASA_CHANGE, str); } if (t.Next != null && t.Next.astrodata.Masa != t.astrodata.Masa) { str = t.Format(GCStrings.Localized("Last day of {masaName} Masa")); t.AddEvent(DisplayPriorities.PRIO_MASA_CHANGE, GCDS.CAL_MASA_CHANGE, str); } } } if (!EkadasiOnly && GCDisplaySettings.Current.getValue(GCDS.CAL_DST_CHANGE) != 0) { foreach (VAISNAVADAY t in m_pData) { if (t.Previous != null && t.Previous.BiasMinutes == 0 && t.BiasMinutes != 0) { t.AddEvent(DisplayPriorities.PRIO_DST_CHANGE, GCDS.CAL_DST_CHANGE, GCStrings.Localized("First day of Daylight Saving Time")); } else if (t.Next != null && t.BiasMinutes != 0 && t.Next.BiasMinutes == 0) { t.AddEvent(DisplayPriorities.PRIO_DST_CHANGE, GCDS.CAL_DST_CHANGE, GCStrings.Localized("Last day of Daylight Saving Time")); } } } // 6 // init of mahadvadasis foreach (VAISNAVADAY t in m_pData) { t.MahadvadasiCalc(earth); } // // init for Ekadasis foreach (VAISNAVADAY t in m_pData) { if (t.Previous == null) { continue; } t.EkadasiCalc(earth); if (t.Previous.nFastID == FastType.FAST_EKADASI) { t.CalculateEParana(earth); } } if (EkadasiOnly) { return(1); } // init ksaya data // init of second day of vriddhi CalculateKsayaVriddhiTithis(); // // calculate sankrantis CalculateSankrantis(); // 7 // init of festivals AddMatchedFestivals(exec); // // apply daylight saving time ApplyDaylightSavingHours(); // // resolve festivals fasting for (i = BEFORE_DAYS; i < m_PureCount + BEFORE_DAYS; i++) { ResolveFestivalsFasting(i); if (GCDisplaySettings.Current.getValue(GCDS.CAL_SUN_RISE) != 0) { tempStr = string.Format("{0}-{1}-{2} {3} - {4} - {5} ({6})", GCStrings.Localized("Sunrise"), GCStrings.Localized("Noon"), GCStrings.Localized("Sunset"), m_pData[i].astrodata.sunRise.ToShortTimeString(), m_pData[i].astrodata.sunNoon.ToShortTimeString(), m_pData[i].astrodata.sunSet.ToShortTimeString(), GCStrings.GetDSTSignature(m_pData[i].BiasMinutes)); m_pData[i].AddEvent(DisplayPriorities.PRIO_SUN, GCDS.CAL_SUN_RISE, tempStr); } if (GCDisplaySettings.Current.getValue(GCDS.CAL_SUN_SANDHYA) != 0) { tempStr = string.Format("{0}: {1} | {2} | {3} ({4})", GCStrings.Localized("Sandhyas"), m_pData[i].astrodata.sunRise.ShortSandhyaString(), m_pData[i].astrodata.sunNoon.ShortSandhyaString(), m_pData[i].astrodata.sunSet.ShortSandhyaString(), GCStrings.GetDSTSignature(m_pData[i].BiasMinutes)); m_pData[i].AddEvent(DisplayPriorities.PRIO_SUN, GCDS.CAL_SUN_SANDHYA, tempStr); } if (GCDisplaySettings.Current.getValue(GCDS.CAL_BRAHMA_MUHURTA) != 0) { tempStr = string.Format("{0}: {1} ({2})", GCStrings.Localized("Brahma Muhurta"), m_pData[i].astrodata.sunRise.ShortMuhurtaString(-2), GCStrings.GetDSTSignature(m_pData[i].BiasMinutes)); m_pData[i].AddEvent(DisplayPriorities.PRIO_SUN, GCDS.CAL_BRAHMA_MUHURTA, tempStr); } } if (GCDisplaySettings.Current.getValue(GCDS.CAL_COREEVENTS) != 0) { int number = 1; foreach (VAISNAVADAY today in m_pData) { foreach (TCoreEvent tde in today.coreEvents) { m_pData[i].AddEvent(DisplayPriorities.PRIO_ASTRO + number, GCDS.CAL_COREEVENTS, tde.TypeString + " " + today.GetCoreEventTime(tde)); number++; } } } // sorting day events according priority VAISNAVAEVENTComparer vec = new VAISNAVAEVENTComparer(); foreach (VAISNAVADAY t in m_pData) { t.dayEvents.Sort(vec); } return(1); }
public static int writeGaurabdaNextTithiXml(string fileName, GCLocation loc, GregorianDateTime vcStart, GaurabdaDate vaStart) { int gmasa, gpaksa, gtithi; GCHourTime sunRise; using (StreamWriter xml = new StreamWriter(fileName)) { gmasa = vaStart.masa; gpaksa = vaStart.tithi / 15; gtithi = vaStart.tithi % 15; 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(loc.Longitude); xml.Write("\" />\n"); xml.Write("\t\t<arg name=\"latitude\" val=\""); xml.Write(loc.Latitude); xml.Write("\" />\n"); xml.Write("\t\t<arg name=\"timezone\" val=\""); xml.Write(loc.OffsetUtcHours); xml.Write("\" />\n"); xml.Write("\t\t<arg name=\"start date\" val=\""); xml.Write(vcStart); xml.Write("\" />\n"); xml.Write("\t\t<arg name=\"masa\" val=\""); xml.Write(gmasa); xml.Write("\" />\n"); xml.Write("\t\t<arg name=\"paksa\" val=\""); xml.Write(gpaksa); xml.Write("\" />\n"); xml.Write("\t\t<arg name=\"tithi\" val=\""); xml.Write(gtithi); xml.Write("\" />\n"); xml.Write("\t</request>\n"); xml.Write("\t<result name=\"Tithi\">\n"); GCEarthData earth = loc.GetEarthData(); GregorianDateTime vcs = new GregorianDateTime(), vce = new GregorianDateTime(), today = new GregorianDateTime(); //GCSunData sun = new GCSunData(); int A; double sunrise; GCAstroData day = new GCAstroData(); int oTithi, oPaksa, oMasa, oYear; today.Set(vcStart); today.PreviousDay(); vcStart.SubtractDays(15); for (A = 0; A <= 3; A++) { vcs.Set(GCTithi.CalcTithiEndEx(vcStart, 0, gmasa, gpaksa, gtithi, earth, out vce)); if (!vcs.IsBeforeThis(today)) { oTithi = gpaksa * 15 + gtithi; oMasa = gmasa; oPaksa = gpaksa; oYear = 0; xml.Write("\t<celebration\n"); // xml.Write("\t\t<tithi\n"; xml.Write("\t\trtithi=\""); xml.Write(GCTithi.GetName(oTithi)); xml.Write("\"\n"); xml.Write("\t\trmasa=\""); xml.Write(GCMasa.GetName(oMasa)); xml.Write("\"\n"); xml.Write("\t\trpaksa=\""); xml.Write((oPaksa != 0 ? "Gaura" : "Krsna")); xml.Write("\"\n"); // test ci je ksaya today.Set(vcs); today.shour = 0.5; sunRise = GCSunData.CalcSunrise(today, earth); sunrise = sunRise.TotalDays; if (sunrise < vcs.shour) { today.Set(vce); sunRise = GCSunData.CalcSunrise(today, earth); sunrise = sunRise.TotalDays; if (sunrise < vce.shour) { // normal type vcs.NextDay(); xml.Write("\t\ttype=\"normal\"\n"); } else { // ksaya vcs.NextDay(); day.DayCalc(vcs, earth); oTithi = day.sunRise.Tithi; oPaksa = day.sunRise.Paksa; oMasa = day.MasaCalc(vcs, earth); oYear = day.GaurabdaYear; xml.Write("\t\ttype=\"ksaya\"\n"); } } else { // normal, alebo prvy den vriddhi today.Set(vce); sunRise = GCSunData.CalcSunrise(today, earth); if (sunRise.TotalDays < vce.shour) { // first day of vriddhi type xml.Write("\t\ttype=\"vriddhi\"\n"); } else { // normal xml.Write("\t\ttype=\"normal\"\n"); } } xml.Write("\t\tdate=\""); xml.Write(vcs); xml.Write("\"\n"); xml.Write("\t\totithi=\""); xml.Write(GCTithi.GetName(oTithi)); xml.Write("\"\n"); xml.Write("\t\tomasa=\""); xml.Write(GCMasa.GetName(oMasa)); xml.Write("\"\n"); xml.Write("\t\topaksa=\""); xml.Write(GCPaksa.GetName(oPaksa)); xml.Write("\"\n"); xml.Write("\t/>\n"); break; } else { vcStart.Set(vcs); vcs.NextDay(); } } xml.Write("\t</result>\n"); xml.Write("</xml>\n"); } return(1); }