Exemple #1
0
        public void CopyFrom(GCConfigRatedEvents srcConf)
        {
            List <ParameterDescriptor> target = this.ParameterDescriptions;
            List <ParameterDescriptor> source = srcConf.ParameterDescriptions;

            for (int index = 0; index < target.Count; index++)
            {
                ParameterDescriptor a = target[index];
                ParameterDescriptor b = source[index];
                if (a.Array != null)
                {
                    for (int i = a.Min; i < a.Max; i++)
                    {
                        a.Array[i].Rating  = b.Array[i].Rating;
                        a.Array[i].Note    = b.Array[i].Note;
                        a.Array[i].Margins = b.Array[i].CloneMargins();
                    }
                }
                else if (a.Array2 != null)
                {
                    for (int i = a.Min; i < a.Max; i++)
                    {
                        for (int j = a.Min2; j < a.Max2; j++)
                        {
                            a.Array2[i, j].Rating  = b.Array2[i, j].Rating;
                            a.Array2[i, j].Note    = b.Array2[i, j].Note;
                            a.Array2[i, j].Margins = b.Array2[i, j].CloneMargins();
                        }
                    }
                }
            }
        }
Exemple #2
0
        public static int DeleteConfiguration(GCConfigRatedEvents gCConfigRatedEvents)
        {
            int i = Configurations.IndexOf(gCConfigRatedEvents);

            if (i >= 0 && i < Configurations.Count)
            {
                Configurations.RemoveAt(i);
            }

            return(i);
        }
Exemple #3
0
        public static void RefreshListFromDirectory(string folder)
        {
            Configurations.Clear();
            directoryPath = folder;
            foreach (string file in Directory.EnumerateFiles(folder))
            {
                if (file.EndsWith(".recn"))
                {
                    GCConfigRatedEvents gc = new GCConfigRatedEvents();
                    gc.Load(Path.Combine(folder, file));
                    Configurations.Add(gc);
                }
            }

            if (Configurations.Count < 1)
            {
                Configurations.Add(DefaultConfiguration);
                DefaultConfiguration.Save(Path.Combine(folder, "Default.recn"));
            }
        }
Exemple #4
0
        /// <summary>
        /// - save to disk
        /// - add to configurations
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public static GCConfigRatedEvents CreateConfiguration(string title)
        {
            GCConfigRatedEvents ne = new GCConfigRatedEvents();

            ne.Title = title;
            bool   notFound = true;
            int    i        = 0;
            string file     = "";
            string fileName = null;

            while (notFound)
            {
                file     = string.Format("ratev{0:000}", i++);
                fileName = Path.Combine(directoryPath, file);
                notFound = ExistsFile(fileName);
            }

            ne.Save(fileName);

            Configurations.Add(ne);

            return(ne);
        }
Exemple #5
0
        public void CompleteCalculation(GCLocation loc, GregorianDateTime vcStart, GregorianDateTime vcEnd, GCConfigRatedEvents rec)
        {
            // calculate raw events
            CalculateEvents(loc, vcStart, vcEnd, rec);

            // sort them
            Sort();

            foreach (GCRatedMoment tde in p_ratings)
            {
                Debugger.Log(0, "", " DE: " + tde.ToString() + "\n");
            }

            // create rated time intervals
            CreateRatedList(rec);
        }
Exemple #6
0
        /// <summary>
        /// Creating list of intervals based on single moments
        /// </summary>
        /// <param name="rec"></param>
        public void CreateRatedList(GCConfigRatedEvents rec)
        {
            StringBuilder sb = new StringBuilder();
            List <string> nt = new List <string>();

            Intervals.Clear();

            Dictionary <string, GCRatedMoment> notes = new Dictionary <string, GCRatedMoment>();
            GCRatedMoment lastRec    = null;
            double        lastMoment = -1;
            double        thisMoment = 0;

            foreach (GCRatedMoment rm in p_ratings)
            {
                thisMoment = rm.JulianDay.GetJulianComplete();
                if (lastMoment < 0)
                {
                    lastMoment = thisMoment;
                    lastRec    = rm;
                }

                // test if this period is acceptable
                if ((rec.useMinPeriodLength && rec.minPeriodLength < (thisMoment - lastMoment) * 1440.0) ||
                    !rec.useMinPeriodLength)
                {
                    GCRatedInterval gi = new GCRatedInterval();
                    gi.startTime = lastRec.JulianDay;
                    gi.endTime   = rm.JulianDay;
                    nt.Clear();
                    sb.Clear();
                    foreach (string k in notes.Keys)
                    {
                        GCRatedMoment b = notes[k];
                        if (b.Rating < 0.0)
                        {
                            gi.ratingNeg += b.Rating;
                        }
                        else if (b.Rating > 0.0)
                        {
                            gi.ratingPos += b.Rating;
                        }

                        if (b.Note != null && b.Note.Length > 0)
                        {
                            nt.Add(b.Note);
                        }

                        if (Math.Abs(b.Rating) > 0.001)
                        {
                            if (sb.Length > 0)
                            {
                                sb.Append(", ");
                            }
                            sb.Append(b.Title);
                        }
                    }

                    // last test for acceptance limit
                    if (!rec.useAcceptLimit || (gi.ratingPos + gi.ratingNeg > rec.acceptLimit))
                    {
                        if (sb.Length > 0)
                        {
                            if (nt.Count > 0)
                            {
                                gi.Notes = nt.ToArray <string>();
                            }
                            gi.Title = sb.ToString();
                            Intervals.Add(gi);
                        }
                    }
                }

                if (rm.Key != null)
                {
                    notes[rm.Key] = rm;
                }

                lastMoment = thisMoment;
                lastRec    = rm;
            }

            // calculate percentage
            double max = rec.GetMaximum();

            foreach (GCRatedInterval interval in Intervals)
            {
                interval.ResultRatio = Convert.ToInt32((interval.ratingPos + interval.ratingNeg) * 100.0 / max);
                interval.ResultRatio = Math.Max(interval.ResultRatio, -100);
            }

            // sorting
            GCRatedInterval.IntervalComparer ic = new GCRatedInterval.IntervalComparer();
            Intervals.Sort(ic);
        }
Exemple #7
0
        private void CalculateKalam(GregorianDateTime vcAdd, double sunRise, double sunSet, int kalaType, GCConfigRatedEvents rec)
        {
            double r1, r2;

            GCSunData.CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, out r1, out r2, kalaType);

            if (r1 > 0 && r2 > 0)
            {
                vcAdd.shour = r1;
                //AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_START, kalaType, ndst);
                AddRating(vcAdd, rec.rateKalas[kalaType], rec.rateKalas[KalaType.KT_NONE]);

                vcAdd.shour = r2;
                //AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_END, kalaType, ndst);
                AddRating(vcAdd, rec.rateKalas[KalaType.KT_NONE], rec.rateKalas[kalaType]);
            }
        }
Exemple #8
0
        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);
            }
        }
Exemple #9
0
        private void CalculatePlanetHouse(int bodyId, GCLocation loc, GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCConfigRatedEvents rec)
        {
            int         nData;
            double      JD, JDE;
            GCEarthData earth = loc.GetEarthData();

            JD  = vcAdd.GetJulian() - 0.5 - loc.OffsetUtcHours / 24.0;
            JDE = vcEnd.GetJulian() + 0.5 - loc.OffsetUtcHours / 24.0;

            // initial rasi at the start date 00:00
            nData = GCMath.IntFloor(GetPlanetHouse(GCVSOPAstronomy.GetPlanetLongitude(bodyId, JD), JD, earth));
            AddRating(JD, loc, rec.rateGrahaHouse[bodyId, nData], rec.rateGrahaHouse[bodyId, Prev(nData, 12)]);

            while ((JD = FindNextHouseChange(JD, JDE, bodyId, earth, out nData)) < JDE)
            {
                AddRating(JD, loc, rec.rateGrahaHouse[bodyId, nData], rec.rateGrahaHouse[bodyId, Prev(nData, 12)]);
                JD += 1.0 / 24.0;
            }
        }
Exemple #10
0
        private void CalculatePlanetRasi(int bodyId, GCLocation loc, GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCConfigRatedEvents rec)
        {
            int    nData;
            double JD, JDE;

            JD    = vcAdd.GetJulian() - 0.5 - loc.OffsetUtcHours / 24.0;
            JDE   = vcEnd.GetJulian() + 0.5 - loc.OffsetUtcHours / 24.0;
            nData = GCMath.IntFloor(GCMath.putIn360(GCVSOPAstronomy.GetPlanetLongitude(bodyId, JD) - GCAyanamsha.GetAyanamsa(JD)) / 30.0);

            // initial rasi at the start date 00:00
            AddRating(JD, loc, rec.rateGrahaRasi[bodyId, nData], rec.rateGrahaRasi[bodyId, Prev(nData, 12)]);

            while ((JD = FindNextRasiChange(JD, JDE, bodyId, out nData)) < JDE)
            {
                AddRating(JD, loc, rec.rateGrahaRasi[bodyId, nData], rec.rateGrahaRasi[bodyId, Prev(nData, 12)]);
                JD += 1.0;
            }
        }
Exemple #11
0
 private void CalculateMoonRasi(GCLocation loc, GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCEarthData earth, GCConfigRatedEvents rec)
 {
     CalculatePlanetRasi(1, loc, vcEnd, vcAdd, rec);
 }
Exemple #12
0
        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();
            }
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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);
        }
Exemple #15
0
        private void CalculateEvents(GCLocation loc, GregorianDateTime vcStart, GregorianDateTime vcEnd, GCConfigRatedEvents rec)
        {
            GregorianDateTime vc        = new GregorianDateTime(vcStart);
            double            biasHours = 0;

            ShowAboveOnly     = rec.useAcceptLimit;
            ShowLongerThan    = rec.useMinPeriodLength;
            RatingsAboveOnly  = rec.acceptLimit;
            MinIntervalLength = rec.minPeriodLength;

            //bool hasAscendent = rec.RequiredGrahaRasi(9);
            bool hasRahuKalam  = rec.rateKalas[KalaType.KT_RAHU_KALAM].Usable;
            bool hasYamaghanti = rec.rateKalas[KalaType.KT_YAMA_GHANTI].Usable;
            bool hasGulikalam  = rec.rateKalas[KalaType.KT_GULI_KALAM].Usable;
            bool hasAbhijit    = rec.rateKalas[KalaType.KT_ABHIJIT].Usable;
            bool hasMuhurta    = rec.RequiredMuhurta();

            p_events.Clear();
            EarthLocation = new GCLocation(loc);
            DateStart     = new GregorianDateTime(vcStart);
            DateEnd       = new GregorianDateTime(vcEnd);

            bool hasPreviousSunset           = false;
            GregorianDateTime previousSunset = new GregorianDateTime();
            GregorianDateTime vcAdd          = new GregorianDateTime(vcStart);
            GregorianDateTime vcNext         = new GregorianDateTime();
            GCEarthData       earth          = loc.GetEarthData();

            vcAdd.InitWeekDay();

            GCHourTime sunRise, sunSet;
            double     muhurtaLength = 48.0 / 1440.0;

            GregorianDateTime muhurtaDate = new GregorianDateTime();

            while (vcAdd.IsBeforeThis(vcEnd))
            {
                biasHours = loc.TimeZone.GetBiasMinutesForDay(vcAdd) / 60.0;
                sunRise   = GCSunData.CalcSunrise(vcAdd, earth);
                sunSet    = GCSunData.CalcSunset(vcAdd, earth);

                sunRise.AddMinutes(biasHours * 60);
                sunSet.AddMinutes(biasHours * 60);

                vcAdd.shour = sunRise.TotalDays;
                vcAdd.InitWeekDay();

                //AddEvent(vcAdd, CoreEventType.CCTYPE_S_RISE, 0, ndst);
                AddRating(vcAdd, rec.rateDayHours[0], rec.rateDayHours[3]);
                AddRating(vcAdd, rec.rateDay[0], rec.rateDayHours[1]);
                //AddEvent(vcAdd, CoreEventType.CCTYPE_DAY_OF_WEEK, vcAdd.dayOfWeek, ndst);
                AddRating(vcAdd, rec.weekday[vcAdd.dayOfWeek], rec.weekday[Prev(vcAdd.dayOfWeek, 7)]);

                if (hasPreviousSunset)
                {
                    previousSunset.shour += (vcAdd.shour + 1.0 - previousSunset.shour) / 2;
                    previousSunset.NormalizeValues();
                    //AddEvent(previousSunset, CoreEventType.CCTYPE_S_MIDNIGHT, 0, ndst);
                    AddRating(previousSunset, rec.rateDayHours[3], rec.rateDayHours[2]);
                }

                if (hasMuhurta)
                {
                    muhurtaDate.Set(vcAdd);
                    muhurtaDate.shour -= 2 * muhurtaLength;
                    muhurtaDate.NormalizeValues();
                    for (int j = 0; j < 30; j++)
                    {
                        //AddEvent(muhurtaDate, CoreEventType.CCTYPE_DAY_MUHURTA, (j + 28) % 30, ndst);
                        int mi = (j + 28) % 30;
                        AddRating(muhurtaDate, rec.rateMuhurta[mi], rec.rateMuhurta[Prev(mi, 30)]);
                    }
                }

                vcAdd.shour = (sunRise.TotalDays + sunSet.TotalDays) / 2;
                //AddEvent(vcAdd, CoreEventType.CCTYPE_S_NOON, 0, ndst);
                AddRating(vcAdd, rec.rateDayHours[1], rec.rateDayHours[0]);

                vcAdd.shour = sunSet.TotalDays;
                //AddEvent(vcAdd, CoreEventType.CCTYPE_S_SET, 0, ndst);
                AddRating(vcAdd, rec.rateDayHours[2], rec.rateDayHours[1]);
                AddRating(vcAdd, rec.rateDay[1], rec.rateDayHours[0]);
                previousSunset.Set(vcAdd);
                hasPreviousSunset = true;

                if (hasRahuKalam)
                {
                    CalculateKalam(vcAdd, sunRise.TotalDays, sunSet.TotalDays, KalaType.KT_RAHU_KALAM, rec);
                }

                if (hasYamaghanti)
                {
                    CalculateKalam(vcAdd, sunRise.TotalDays, sunSet.TotalDays, KalaType.KT_YAMA_GHANTI, rec);
                }

                if (hasGulikalam)
                {
                    CalculateKalam(vcAdd, sunRise.TotalDays, sunSet.TotalDays, KalaType.KT_GULI_KALAM, rec);
                }

                if (hasAbhijit)
                {
                    CalculateKalam(vcAdd, sunRise.TotalDays, sunSet.TotalDays, KalaType.KT_ABHIJIT, rec);
                }

                vcAdd.NextDay();
            }

            if (rec.RequiredGrahaRasi(9))
            {
                GCAscendant asc = new GCAscendant();
                asc.Earth           = EarthLocation.GetEarthData();
                asc.CurrentDateTime = new GregorianDateTime(vc);
                while (asc.GetNextAscendantBefore(vcEnd))
                {
                    AddRating(asc.CurrentDateTime.TimeWithOffset(biasHours), rec.rateGrahaRasi[9, asc.CurrentSign], rec.rateGrahaRasi[9, Prev(asc.CurrentSign, 12)]);
                    asc.CurrentDateTime.AddHours(0.5);
                }
            }

            if (rec.RequiredTithi())
            {
                vcAdd.Set(vc);
                vcAdd.shour = 0.0;
                CalculateTithis(loc, vcEnd, vcAdd, earth, rec);
            }


            if (rec.RequiredNaksatra())
            {
                vcAdd.Set(vc);
                vcAdd.shour = 0.0;
                CalculateNaksatras(loc, vcEnd, vcAdd, earth, rec);
            }

            if (rec.RequiredYoga())
            {
                vcAdd.Set(vc);
                vcAdd.shour = 0.0;
                CalculateYoga(loc, vcEnd, vcAdd, earth, rec);
            }

            for (int i = 0; i < 9; i++)
            {
                if (rec.RequiredGrahaRasi(i))
                {
                    vcAdd.Set(vc);
                    vcAdd.shour = 0.0;
                    CalculatePlanetRasi(i, loc, vcEnd, vcAdd, rec);
                    //CalculateSunRasi(loc, vcEnd, vcAdd, rec);
                }

                if (rec.RequiredGrahaHouse(i))
                {
                    vcAdd.Set(vc);
                    vcAdd.shour = 0.0;
                    CalculatePlanetHouse(i, loc, vcEnd, vcAdd, rec);
                    //CalculateSunRasi(loc, vcEnd, vcAdd, rec);
                }
            }

            /*if (rec.RequiredGrahaRasi(1))
             * {
             *  vcAdd.Set(vc);
             *  vcAdd.shour = 0.0;
             *  CalculateMoonRasi(loc, vcEnd, vcAdd, earth, rec);
             *
             * }*/

            if (rec.RequiredMoonTimes())
            {
                vcAdd.Set(vc);
                vcAdd.shour = 0.0;
                CalculateMoonTimes(vcEnd, vcAdd, earth, rec);
            }

            IComparer <GCRatedMoment> C = new GCRatedMoment.ComparerClass();

            p_ratings.Sort(C);
        }