public string GetCoreEventTime(TCoreEvent tce) { return(GregorianDateTime.TimeSpanToLongString(tce.GetDstTime(this.BiasMinutes * 60) - this.UtcDayStart) + " (" + GCStrings.GetDSTSignature(tce.nDst * this.BiasMinutes) + ")"); }
public void GetCoreEvents(List <TCoreEvent> coreEvents, long utcDayStart, long utcDayEnd) { if (p_events.Count == 0) { return; } TCoreEvent first = p_events[0]; TCoreEvent last = p_events[p_events.Count - 1]; if (first.Time > utcDayEnd || last.Time < utcDayStart || first.Time == last.Time) { return; } int index = Convert.ToInt32((utcDayStart - first.Time) * 1.0 * p_events.Count / (last.Time - first.Time)); int max = p_events.Count - 1; while (index > 0 && index <= max && p_events[index].Time > utcDayStart) { index--; } while (index > 0 && index < max && p_events[index].Time < utcDayStart) { index++; } while (index > 0 && index < max && p_events[index].Time < utcDayEnd) { coreEvents.Add(p_events[index]); index++; } }
public GregorianDateTime GetGregorianDateTime(TCoreEvent ce) { GregorianDateTime gdt = new GregorianDateTime(date); gdt.shour = (ce.GetDstTime(BiasMinutes * 60) - UtcDayStart) / 86400.0; return(gdt); }
public static TCoreEvent Min(TCoreEvent A, TCoreEvent B) { if (A.Time < B.Time) { return(A); } else { return(B); } }
public bool AddEvent(GregorianDateTime gTime, int inType, int inData) { TCoreEvent de = new TCoreEvent(); Int64 inTime = Convert.ToInt64(gTime.GetJulianComplete() * 86400); de.Time = inTime; de.nDst = 0; de.nData = (byte)inData; de.nType = (byte)inType; p_events.Add(de); return(true); }
public VAISNAVADAY() { nFastID = FastType.FAST_NULL; nMahadvadasiID = MahadvadasiType.EV_NULL; ekadasi_parana = false; ekadasi_vrata_name = ""; eparana_time1 = eparana_time2 = null; sankranti_zodiac = -1; BiasMinutes = 0; moonrise.SetValue(0); moonset.SetValue(0); UtcDayStart = -1; dayEvents = new List <VAISNAVAEVENT>(); coreEvents = new TCoreEventCollection(); }
public bool LoadFile(string filePath) { try { using (Stream s = File.OpenRead(filePath)) { using (BinaryReader br = new BinaryReader(s)) { p_events.Clear(); byte b = br.ReadByte(); if (b == 1) // read version 1 { b = br.ReadByte(); while (b != 0) { switch (b) { case 10: // tag for year Year = br.ReadInt32(); break; case 60: // tag for core event TCoreEvent ce = new TCoreEvent(); ce.nType = br.ReadByte(); ce.nData = br.ReadByte(); ce.nDst = br.ReadByte(); ce.Time = br.ReadInt64(); p_events.Add(ce); break; default: break; } b = br.ReadByte(); } } } } return(true); } catch (Exception ex) { GCLog.Write("Error during loading CoreEvents file."); GCLog.Write(ex.Message); return(false); } }
/* * 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 static TCoreEvent Max(TCoreEvent A, TCoreEvent B) { return((A.Time > B.Time) ? A : B); }