public List <CoreEventFindRec> GetRecentCoreTimes(int nTypeStart, int nTypeFind, int count) { List <CoreEventFindRec> dayList = new List <CoreEventFindRec>(); VAISNAVADAY cursor = this; int idx = 0; idx = coreEvents.FindIndexOf(nTypeStart, idx); if (idx >= 0) { while (cursor != null && dayList.Count < count) { idx = cursor.coreEvents.FindBackIndexOf(nTypeFind, idx - 1); if (idx < 0) { cursor = cursor.Previous; idx = 1000; } else { CoreEventFindRec cer = new CoreEventFindRec(); cer.day = cursor; cer.coreEvent = cursor.coreEvents[idx]; cer.dateTimeOfEvent = cursor.GetGregorianDateTime(cursor.coreEvents[idx]); dayList.Insert(0, cer); } } } return(dayList); }
// test if today is tithi of given masa, or day after tithi of given masa // while in second cas yesterday is tithi before given tithi and masa public bool testFestival(GCFestivalSpecialExecutor exec, bool stickToMasa) { VAISNAVADAY yesterday = exec.day(-DayOffset - 1); VAISNAVADAY today = exec.day(-DayOffset); VAISNAVADAY tomorrow = exec.day(-DayOffset + 1); if (today.astrodata.Masa == nMasa && today.astrodata.sunRise.Tithi == nTithi) { if (yesterday.astrodata.Masa == nMasa && yesterday.astrodata.sunRise.Tithi == nTithi) { return(false); } else { return(true); } } if (stickToMasa || GCMasa.IS_EXTRA(today.astrodata.Masa)) { if (today.ksayaMasa == nMasa && today.ksayaTithi == nTithi) { return(true); } } else { if (yesterday.ksayaMasa == nMasa && yesterday.ksayaTithi == nTithi) { return(true); } } return(false); }
public override bool IsFestivalDay(GCFestivalSpecialExecutor exec) { VAISNAVADAY t = exec.day(-DayOffset); if (nMasaMin <= nMasaMax) { if (t.astrodata.Masa < nMasaMin || t.astrodata.Masa > nMasaMax) { return(false); } } else { if (t.astrodata.Masa < nMasaMin && t.astrodata.Masa > nMasaMax) { return(false); } } GSCore c = exec.ExecuteElement(script); if (c is GSReturn) { bool retval = c.getBooleanValue(); return(retval); } return(false); }
private void ApplyDaylightSavingHours() { for (int i = BEFORE_DAYS; i < m_PureCount + BEFORE_DAYS; i++) { VAISNAVADAY today = m_pData[i]; if (today.eparana_time1 != null) { today.eparana_time1.ApplyDstType(today.UtcDayStart, today.DstDayType); } if (today.eparana_time2 != null) { today.eparana_time2.ApplyDstType(today.UtcDayStart, today.DstDayType); } if (today.astrodata.sunRise.longitude > 0.0) { today.astrodata.sunRise.AddMinutes(today.BiasMinutes); today.astrodata.sunSet.AddMinutes(today.BiasMinutes); today.astrodata.sunNoon.AddMinutes(today.BiasMinutes); today.astrodata.sunArunodaya.AddMinutes(today.BiasMinutes); } foreach (TCoreEvent core in today.coreEvents) { core.ApplyDstType(today.UtcDayStart, today.DstDayType); } } }
public List <CoreEventFindRec> GetNextCoreTimes(int nTypeStart, int nTypeFind, int count) { List <CoreEventFindRec> dayList = new List <CoreEventFindRec>(); VAISNAVADAY cursor = this; int idx = 0; idx = coreEvents.FindIndexOf(nTypeStart, idx); if (idx >= 0) { while (cursor != null && dayList.Count < count) { idx = cursor.coreEvents.FindIndexOf(nTypeFind, idx++); if (idx < 0) { cursor = cursor.Next; idx = -1; } else { CoreEventFindRec cer = new CoreEventFindRec(); cer.day = cursor; cer.coreEvent = cursor.coreEvents[idx]; cer.dateTimeOfEvent = cursor.GetGregorianDateTime(cursor.coreEvents[idx]); dayList.Add(cer); } } } return(dayList); }
// test for MAHADVADASI 5 TO 8 public bool IsMhd58(out int nMahaType) { VAISNAVADAY t = this; nMahaType = MahadvadasiType.EV_NULL; if (t.Next == null) { return(false); } int sunRiseNaksatra = t.astrodata.sunRise.Naksatra; if (sunRiseNaksatra != t.Next.astrodata.sunRise.Naksatra) { return(false); } if (t.astrodata.sunRise.Paksa != 1) { return(false); } if (t.astrodata.sunRise.Tithi == t.astrodata.sunSet.Tithi) { if (sunRiseNaksatra == GCNaksatra.N_PUNARVASU) // punarvasu { nMahaType = MahadvadasiType.EV_JAYA; return(true); } else if (sunRiseNaksatra == GCNaksatra.N_ROHINI) // rohini { nMahaType = MahadvadasiType.EV_JAYANTI; return(true); } else if (sunRiseNaksatra == GCNaksatra.N_PUSYAMI) // pusyami { nMahaType = MahadvadasiType.EV_PAPA_NASINI; return(true); } else if (sunRiseNaksatra == GCNaksatra.N_SRAVANA) // sravana { nMahaType = MahadvadasiType.EV_VIJAYA; return(true); } else { return(false); } } else { if (sunRiseNaksatra == GCNaksatra.N_SRAVANA) // sravana { nMahaType = MahadvadasiType.EV_VIJAYA; return(true); } } return(false); }
public override bool IsFestivalDay(GCFestivalSpecialExecutor exec) { VAISNAVADAY testDay = exec.day(-DayOffset); return(testDay.astrodata.Masa == nMasa && testDay.astrodata.sunRise.Paksa == nPaksa && (GCTithi.TITHI_EKADASI(testDay.astrodata.sunRise.Tithi) || GCTithi.TITHI_DVADASI(testDay.astrodata.sunRise.Tithi)) && testDay.nFastID == FastType.FAST_EKADASI); }
/// <summary> /// /// </summary> /// <param name="exec"></param> /// <param name="offsetWithToday">If value of this parameter is 0, then current day is processed, /// -1 is for yesterday, +1 is for tomorrow</param> /// <param name="currFestTop"></param> /// <param name="fb"></param> /// <returns></returns> private int AddEventToDay(GCFestivalSpecialExecutor exec, int offsetWithToday, int currFestTop, GCFestivalBase fb) { VAISNAVADAY t = exec.day(offsetWithToday); VAISNAVAEVENT md = t.AddEvent(DisplayPriorities.PRIO_FESTIVALS_0 + fb.BookID * 100 + currFestTop, GCDS.CAL_FEST_0 + fb.BookID, fb.Text); currFestTop += 5; if (fb.FastID > 0) { md.fasttype = fb.FastID; md.fastsubject = fb.FastingSubject; } if (GCDisplaySettings.Current.getValue(51) != 2 && fb.StartYear > -7000) { String ss1; int years = t.astrodata.GaurabdaYear - (fb.StartYear - 1496); string appx = "th"; if (years % 10 == 1) { appx = "st"; } else if (years % 10 == 2) { appx = "nd"; } else if (years % 10 == 3) { appx = "rd"; } if (GCDisplaySettings.Current.getValue(51) == 0) { ss1 = string.Format("{0} ({1}{2} anniversary)", md.text, years, appx); } else { ss1 = string.Format("{0} ({1}{2})", md.text, years, appx); } md.text = ss1; } if (fb.EventsCount > 0) { foreach (GCFestivalBase re in fb.Events) { if (re is GCFestivalRelated) { GCFestivalRelated related = re as GCFestivalRelated; AddEventToDay(exec, fb.DayOffset + related.DayOffset, 0, related); } } } return(currFestTop); }
public static string getDayBkgColorCode(VAISNAVADAY p) { if (p == null) { return("white"); } if (p.nFastID == FastType.FAST_EKADASI) { return("#FFFFBB"); } if (p.nFastID != 0) { return("#BBFFBB"); } return("white"); }
protected void CalculateSankrantis() { VAISNAVADAY targetDay = null; foreach (VAISNAVADAY today in m_pData) { targetDay = null; int n = 0; foreach (TCoreEvent ce in today.coreEvents) { switch (ce.nType) { case CoreEventType.CCTYPE_SANK: switch (GCSankranti.GetSankrantiType()) { case 0: targetDay = today; break; case 1: targetDay = (n >= 1 ? today : today.Previous); break; case 2: targetDay = (n >= 2 ? today.Next : today); break; case 3: targetDay = (n >= 3 ? today.Next : today); break; } if (targetDay != null) { targetDay.sankranti_day = today.GetGregorianDateTime(ce); targetDay.sankranti_zodiac = ce.nData; } break; case CoreEventType.CCTYPE_S_RISE: n = 1; break; case CoreEventType.CCTYPE_S_NOON: n = 2; break; case CoreEventType.CCTYPE_S_SET: n = 3; break; } if (targetDay != null) { string str = targetDay.Format(GCStrings.Localized(" {sankranti.rasiName} Sankranti (Sun enters {sankranti.rasiNameEn} on {sankranti.day} {sankranti.monthAbr}, {sankranti.hour}:{sankranti.minRound}) ({dstSig})")); VAISNAVAEVENT dc = targetDay.AddEvent(DisplayPriorities.PRIO_SANKRANTI, GCDS.CAL_SANKRANTI, str); dc.spec = "sankranti"; break; } } } }
public bool NextNewFullIsVriddhi(GCEarthData earth) { int i = 0; int nTithi; int nPrevTithi = 100; VAISNAVADAY t = this; for (i = 0; i < 8 && t != null; i++) { nTithi = t.astrodata.sunRise.Tithi; if ((nTithi == nPrevTithi) && GCTithi.TITHI_FULLNEW_MOON(nTithi)) { return(true); } nPrevTithi = nTithi; t = t.Next; } return(false); }
private void CalculateKsayaVriddhiTithis() { GCEarthData earth = m_Location.GetEarthData(); foreach (VAISNAVADAY t in m_pData) { VAISNAVADAY s = t.Previous; if (s == null) { continue; } if (t.astrodata.sunRise.Tithi == s.astrodata.sunRise.Tithi) { t.vriddhiDayNo = 2; if (GCDisplaySettings.Current.getValue(GCDS.CAL_VRDDHI) != 0) { t.AddEvent(DisplayPriorities.PRIO_KSAYA, GCDS.CAL_VRDDHI, GCStrings.getString(90)); } } else if (t.astrodata.sunRise.Tithi != GCTithi.NEXT_TITHI(s.astrodata.sunRise.Tithi)) { s.ksayaTithi = GCTithi.NEXT_TITHI(s.astrodata.sunRise.Tithi); s.ksayaMasa = (s.ksayaTithi == 0 ? t.astrodata.Masa : s.astrodata.Masa); int idx = 0; String str; List <VAISNAVADAY.CoreEventFindRec> tithiTimes = t.GetRecentCoreTimes(CoreEventType.CCTYPE_S_RISE, CoreEventType.CCTYPE_TITHI, 2); if (tithiTimes.Count == 2) { str = t.Format(GCStrings.Localized("Kshaya tithi: {prevTithiName} — {0} to {1} ({dstSig})"), tithiTimes[0].dateTimeOfEvent.Format("{day} {monthAbr} {hour}:{minRound}"), tithiTimes[1].dateTimeOfEvent.Format("{day} {monthAbr} {hour}:{minRound}")); t.AddEvent(DisplayPriorities.PRIO_KSAYA, GCDS.CAL_KSAYA, str); } } } }
// test if today is tithi of given masa, or day after tithi of given masa // while in second cas yesterday is tithi before given tithi and masa public bool testFestival(GCFestivalSpecialExecutor exec, bool stickToMasa) { VAISNAVADAY yesterday = exec.day(-DayOffset - 1); VAISNAVADAY today = exec.day(-DayOffset); VAISNAVADAY tomorrow = exec.day(-DayOffset + 1); if (today.astrodata.Masa == nMasa && today.astrodata.sunRise.Tithi == nTithi) { if (yesterday.astrodata.Masa == nMasa && yesterday.astrodata.sunRise.Tithi == nTithi) { return(false); } else { return(true); } } // in case tithi is ksaya, and we want to observe festival on the calendar day, when tithi is ksaya, return yes if (today.ksayaMasa == nMasa && today.ksayaTithi == nTithi && GCDisplaySettings.Current.AdvFestivalFirstDay) { return(true); } if (stickToMasa || GCMasa.IS_EXTRA(today.astrodata.Masa)) { if (today.ksayaMasa == nMasa && today.ksayaTithi == nTithi) { return(true); } } else { if (yesterday.ksayaMasa == nMasa && yesterday.ksayaTithi == nTithi && GCDisplaySettings.Current.AdvFestivalFirstDay == false) { return(true); } } return(false); }
public void ResolveFestivalsFasting(int nIndex) { VAISNAVADAY s = m_pData[nIndex - 1]; VAISNAVADAY t = m_pData[nIndex]; VAISNAVADAY u = m_pData[nIndex + 1]; String str; String subject = string.Empty; int fastForDay = 0; int fastForEvent = 0; string ch; VAISNAVAEVENT md; if (t.nMahadvadasiID != MahadvadasiType.EV_NULL) { str = string.Format(GCStrings.Localized("Fasting for {0}"), t.ekadasi_vrata_name); t.AddEvent(DisplayPriorities.PRIO_EKADASI, GCDS.CAL_EKADASI_PARANA, str); } ch = GCEkadasi.GetMahadvadasiName((int)t.nMahadvadasiID); if (ch != null) { t.AddEvent(DisplayPriorities.PRIO_MAHADVADASI, GCDS.CAL_EKADASI_PARANA, ch); } if (t.ekadasi_parana) { str = t.GetTextEP(); t.AddEvent(DisplayPriorities.PRIO_EKADASI_PARANA, GCDS.CAL_EKADASI_PARANA, str); } for (int h = 0; h < t.dayEvents.Count(); h++) { md = t.dayEvents[h]; fastForEvent = FastType.FAST_NULL; if (md.fasttype != FastType.FAST_NULL) { fastForEvent = md.fasttype; subject = md.fastsubject; } if (fastForEvent != FastType.FAST_NULL) { if (s.nFastID == FastType.FAST_EKADASI) { if (GCDisplaySettings.Current.getValue(42) == 0) { str = string.Format(GCStrings.Localized("(Fast today for {0})"), subject); s.AddEvent(DisplayPriorities.PRIO_FASTING, GCDS.DISP_ALWAYS, str); t.AddEvent(md.prio + 1, md.dispItem, GCStrings.Localized("(Fasting is done yesterday)")); //"(Fasting is done yesterday)" } else { str = string.Format(GCStrings.Localized("(Fast till noon for {0}, with feast tomorrow)"), subject); s.AddEvent(DisplayPriorities.PRIO_FASTING, GCDS.DISP_ALWAYS, str); t.AddEvent(md.prio + 1, md.dispItem, GCStrings.Localized("(Fasting is done yesterday, today is feast)")); //"(Fasting is done yesterday, today is feast)"; } } else if (t.nFastID == FastType.FAST_EKADASI) { if (GCDisplaySettings.Current.getValue(42) != 0) { t.AddEvent(md.prio + 1, md.dispItem, GCStrings.Localized("(Fasting till noon, with feast tomorrow)")); } //"(Fasting till noon, with feast tomorrow)"; else { t.AddEvent(md.prio + 1, md.dispItem, GCStrings.Localized("(Fast today)")); } //"(Fast today)" } else { /* OLD STYLE FASTING * if (GCDisplaySettings.Current.getValue(42) == 0) * { * if (nftype > 1) * nftype = 7; * else nftype = 0; * }*/ if (fastForEvent != FastType.FAST_NULL) { t.AddEvent(md.prio + 1, md.dispItem, GCStrings.GetFastingName(fastForEvent)); } } } if (fastForDay < fastForEvent) { fastForDay = fastForEvent; } } if (fastForDay != FastType.FAST_NULL) { if (s.nFastID == FastType.FAST_EKADASI) { t.nFeasting = FeastType.FEAST_TODAY_FAST_YESTERDAY; s.nFeasting = FeastType.FEAST_TOMMOROW_FAST_TODAY; } else if (t.nFastID == FastType.FAST_EKADASI) { u.nFeasting = FeastType.FEAST_TODAY_FAST_YESTERDAY; t.nFeasting = FeastType.FEAST_TOMMOROW_FAST_TODAY; } else { t.nFastID = fastForDay; } } }
/// <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 int EkadasiCalc(GCEarthData earth) { VAISNAVADAY t = this; if (t.Previous == null || t.Next == null) { return(0); } VAISNAVADAY s = t.Previous; VAISNAVADAY u = t.Next; if (GCTithi.TITHI_EKADASI(t.astrodata.sunRise.Tithi)) { // if TAT < 11 then NOT_EKADASI if (GCTithi.TITHI_LESS_EKADASI(t.astrodata.sunArunodaya.Tithi)) { t.nMahadvadasiID = MahadvadasiType.EV_NULL; t.ekadasi_vrata_name = ""; t.nFastID = FastType.FAST_NULL; } else { // else ak MD13 then MHD1 and/or 3 if (GCTithi.TITHI_EKADASI(s.astrodata.sunRise.Tithi) && GCTithi.TITHI_EKADASI(s.astrodata.sunArunodaya.Tithi)) { if (GCTithi.TITHI_TRAYODASI(u.astrodata.sunRise.Tithi)) { t.nMahadvadasiID = MahadvadasiType.EV_UNMILANI_TRISPRSA; t.ekadasi_vrata_name = GCEkadasi.GetEkadasiName(t.astrodata.Masa, t.astrodata.sunRise.Paksa); t.nFastID = FastType.FAST_EKADASI; } else { t.nMahadvadasiID = MahadvadasiType.EV_UNMILANI; t.ekadasi_vrata_name = GCEkadasi.GetEkadasiName(t.astrodata.Masa, t.astrodata.sunRise.Paksa); t.nFastID = FastType.FAST_EKADASI; } } else { if (GCTithi.TITHI_TRAYODASI(u.astrodata.sunRise.Tithi)) { t.nMahadvadasiID = MahadvadasiType.EV_TRISPRSA; t.ekadasi_vrata_name = GCEkadasi.GetEkadasiName(t.astrodata.Masa, t.astrodata.sunRise.Paksa); t.nFastID = FastType.FAST_EKADASI; } else { // else ak U je MAHADVADASI then NOT_EKADASI if (GCTithi.TITHI_EKADASI(u.astrodata.sunRise.Tithi) || (u.nMahadvadasiID >= MahadvadasiType.EV_SUDDHA)) { t.nMahadvadasiID = MahadvadasiType.EV_NULL; t.ekadasi_vrata_name = ""; t.nFastID = FastType.FAST_NULL; } else if (u.nMahadvadasiID == MahadvadasiType.EV_NULL) { // else suddha ekadasi t.nMahadvadasiID = MahadvadasiType.EV_SUDDHA; t.ekadasi_vrata_name = GCEkadasi.GetEkadasiName(t.astrodata.Masa, t.astrodata.sunRise.Paksa); t.nFastID = FastType.FAST_EKADASI; } } } } } // test for break fast return(1); }
/* * Function before is writen accoring this algorithms: * * * 1. Normal - fasting day has ekadasi at sunrise and dvadasi at next sunrise. * * 2. Viddha - fasting day has dvadasi at sunrise and trayodasi at next * sunrise, and it is not a naksatra mahadvadasi * * 3. Unmilani - fasting day has ekadasi at both sunrises * * 4. Vyanjuli - fasting day has dvadasi at both sunrises, and it is not a * naksatra mahadvadasi * * 5. Trisprsa - fasting day has ekadasi at sunrise and trayodasi at next * sunrise. * * 6. Jayanti/Vijaya - fasting day has gaura dvadasi and specified naksatra at * sunrise and same naksatra at next sunrise * * 7. Jaya/Papanasini - fasting day has gaura dvadasi and specified naksatra at * sunrise and same naksatra at next sunrise * * ============================================== * Case 1 Normal (no change) * * If dvadasi tithi ends before 1/3 of daylight * then PARANA END = TIME OF END OF TITHI * but if dvadasi TITHI ends after 1/3 of daylight * then PARANA END = TIME OF 1/3 OF DAYLIGHT * * if 1/4 of dvadasi tithi is before sunrise * then PARANA BEGIN is sunrise time * but if 1/4 of dvadasi tithi is after sunrise * then PARANA BEGIN is time of 1/4 of dvadasi tithi * * if PARANA BEGIN is before PARANA END * then we will write "BREAK FAST FROM xx TO yy * but if PARANA BEGIN is after PARANA END * then we will write "BREAK FAST AFTER xx" * * ============================================== * Case 2 Viddha * * If trayodasi tithi ends before 1/3 of daylight * then PARANA END = TIME OF END OF TITHI * but if trayodasi TITHI ends after 1/3 of daylight * then PARANA END = TIME OF 1/3 OF DAYLIGHT * * PARANA BEGIN is sunrise time * * we will write "BREAK FAST FROM xx TO yy * * ============================================== * Case 3 Unmilani * * PARANA END = TIME OF 1/3 OF DAYLIGHT * * PARANA BEGIN is end of Ekadasi tithi * * if PARANA BEGIN is before PARANA END * then we will write "BREAK FAST FROM xx TO yy * but if PARANA BEGIN is after PARANA END * then we will write "BREAK FAST AFTER xx" * * ============================================== * Case 4 Vyanjuli * * PARANA BEGIN = Sunrise * * PARANA END is end of Dvadasi tithi * * we will write "BREAK FAST FROM xx TO yy * * ============================================== * Case 5 Trisprsa * * PARANA BEGIN = Sunrise * * PARANA END = 1/3 of daylight hours * * we will write "BREAK FAST FROM xx TO yy * * ============================================== * Case 6 Jayanti/Vijaya * * PARANA BEGIN = Sunrise * * PARANA END1 = end of dvadasi tithi or sunrise, whichever is later * PARANA END2 = end of naksatra * * PARANA END is earlier of END1 and END2 * * we will write "BREAK FAST FROM xx TO yy * * ============================================== * Case 7 Jaya/Papanasini * * PARANA BEGIN = end of naksatra * * PARANA END = 1/3 of Daylight hours * * if PARANA BEGIN is before PARANA END * then we will write "BREAK FAST FROM xx TO yy * but if PARANA BEGIN is after PARANA END * then we will write "BREAK FAST AFTER xx" * * * */ public int CalculateEParana(GCEarthData earth) { VAISNAVADAY t = this; if (t.Previous == null) { return(0); } t.nMahadvadasiID = MahadvadasiType.EV_NULL; t.ekadasi_parana = true; t.nFastID = FastType.FAST_NULL; TCoreEvent naksEnd; TCoreEvent parBeg = null; TCoreEvent parEnd = null; TCoreEvent tithiStart = null; TCoreEvent tithiEnd = null; TCoreEvent sunRise = t.FindCoreEvent(CoreEventType.CCTYPE_S_RISE); TCoreEvent sunSet = t.FindCoreEvent(CoreEventType.CCTYPE_S_SET); if (sunRise == null || sunSet == null) { GCLog.Write("Cannot find sunrise of sunset for day " + t.date.ToString()); return(0); } TCoreEvent third_day = new TCoreEvent() { nData = sunRise.nData, nType = CoreEventType.CCTYPE_THIRD_OF_DAY, nDst = sunRise.nDst, Time = (sunSet.Time - sunRise.Time) / 3 + sunRise.Time }; List <CoreEventFindRec> tempTimes = GetRecentCoreTimes(CoreEventType.CCTYPE_S_RISE, CoreEventType.CCTYPE_TITHI, 1); if (tempTimes.Count != 1) { GCLog.Write("Start or End of tithi was not found for date " + t.ToString()); return(0); } else { tithiStart = tempTimes[0].coreEvent; } tempTimes = GetNextCoreTimes(CoreEventType.CCTYPE_S_RISE, CoreEventType.CCTYPE_TITHI, 1); if (tempTimes.Count != 1) { GCLog.Write("End of tithi was not found for date " + t.ToString()); tempTimes = GetNextCoreTimes(CoreEventType.CCTYPE_S_RISE, CoreEventType.CCTYPE_TITHI, 1); return(0); } else { tithiEnd = new TCoreEvent(tempTimes[0].coreEvent) { nType = CoreEventType.CCTYPE_TITHI_END }; tithiEnd.ApplyDstType(UtcDayStart, DstDayType); } if (Previous == null) { return(0); } tempTimes = Previous.GetNextCoreTimes(CoreEventType.CCTYPE_S_RISE, CoreEventType.CCTYPE_NAKS, 1); if (tempTimes.Count != 1) { GCLog.Write("End of naksatra was not found for date " + t.ToString()); return(0); } else { naksEnd = new TCoreEvent(tempTimes[0].coreEvent) { nType = CoreEventType.CCTYPE_NAKS_END }; naksEnd.ApplyDstType(UtcDayStart, DstDayType); } TCoreEvent tithi_quart = new TCoreEvent() { nType = CoreEventType.CCTYPE_TITHI_QUARTER, nData = tithiStart.nData, Time = (tithiEnd.Time - tithiStart.Time) / 4 + tithiStart.Time, nDst = tithiStart.nDst }; tithi_quart.ApplyDstType(UtcDayStart, DstDayType); switch (t.Previous.nMahadvadasiID) { case MahadvadasiType.EV_UNMILANI: parEnd = GCMath.Min(tithiEnd, third_day); parBeg = sunRise; break; case MahadvadasiType.EV_VYANJULI: parBeg = sunRise; parEnd = GCMath.Min(tithiEnd, third_day); break; case MahadvadasiType.EV_TRISPRSA: parBeg = sunRise; parEnd = third_day; break; case MahadvadasiType.EV_JAYANTI: case MahadvadasiType.EV_VIJAYA: if (GCTithi.TITHI_DVADASI(t.astrodata.sunRise.Tithi)) { if (naksEnd.Time < tithiEnd.Time) { if (naksEnd.Time < third_day.Time) { parBeg = naksEnd; parEnd = GCMath.Min(tithiEnd, third_day); } else { parBeg = naksEnd; parEnd = tithiEnd; } } else { parBeg = sunRise; parEnd = GCMath.Min(tithiEnd, third_day); } } else { parBeg = sunRise; parEnd = GCMath.Min(naksEnd, third_day); } break; case MahadvadasiType.EV_JAYA: case MahadvadasiType.EV_PAPA_NASINI: if (GCTithi.TITHI_DVADASI(t.astrodata.sunRise.Tithi)) { if (naksEnd.Time < tithiEnd.Time) { if (naksEnd.Time < third_day.Time) { parBeg = naksEnd; parEnd = GCMath.Min(tithiEnd, third_day); } else { parBeg = naksEnd; parEnd = tithiEnd; } } else { parBeg = sunRise; parEnd = GCMath.Min(tithiEnd, third_day); } } else { if (naksEnd.Time < third_day.Time) { parBeg = naksEnd; parEnd = third_day; } else { parBeg = naksEnd; parEnd = null; } } break; default: // first initial parEnd = GCMath.Min(tithiEnd, third_day); parBeg = GCMath.Max(sunRise, tithi_quart); if (GCTithi.TITHI_DVADASI(t.Previous.astrodata.sunRise.Tithi)) { parBeg = sunRise; } break; } if (parBeg.Time >= parEnd.Time) { parEnd = null; } t.eparana_time1 = parBeg; t.eparana_time2 = parEnd; return(1); }
public int MahadvadasiCalc(GCEarthData earth) { VAISNAVADAY t = this; if (t.Previous == null || t.Next == null) { return(0); } int nMahaType = MahadvadasiType.EV_NULL; //int nMhdDay = -1; VAISNAVADAY s = t.Previous; VAISNAVADAY u = t.Next; VAISNAVADAY mahaDay = null; // if yesterday is dvadasi // then we skip this day if (GCTithi.TITHI_DVADASI(s.astrodata.sunRise.Tithi)) { return(1); } if (TithiId.TITHI_GAURA_DVADASI == t.astrodata.sunRise.Tithi && TithiId.TITHI_GAURA_DVADASI == t.astrodata.sunSet.Tithi && t.IsMhd58(out nMahaType)) { t.nMahadvadasiID = nMahaType; mahaDay = t; } else if (GCTithi.TITHI_DVADASI(t.astrodata.sunRise.Tithi)) { if (GCTithi.TITHI_DVADASI(u.astrodata.sunRise.Tithi) && GCTithi.TITHI_EKADASI(s.astrodata.sunRise.Tithi) && GCTithi.TITHI_EKADASI(s.astrodata.sunArunodaya.Tithi)) { t.nMahadvadasiID = MahadvadasiType.EV_VYANJULI; mahaDay = t; } else if (t.NextNewFullIsVriddhi(earth)) { t.nMahadvadasiID = MahadvadasiType.EV_PAKSAVARDHINI; mahaDay = t; } else if (GCTithi.TITHI_LESS_EKADASI(s.astrodata.sunArunodaya.Tithi)) { t.nMahadvadasiID = MahadvadasiType.EV_SUDDHA; mahaDay = t; } } if (mahaDay != null && mahaDay.Next != null) { // fasting day mahaDay.nFastID = FastType.FAST_EKADASI; mahaDay.ekadasi_vrata_name = GCEkadasi.GetEkadasiName(t.astrodata.Masa, t.astrodata.sunRise.Paksa); mahaDay.ekadasi_parana = false; mahaDay.eparana_time1 = null; mahaDay.eparana_time2 = null; // parana day mahaDay.Next.nFastID = FastType.FAST_NULL; mahaDay.Next.ekadasi_parana = true; mahaDay.Next.eparana_time1 = null; mahaDay.Next.eparana_time2 = null; } return(1); }