Пример #1
0
        private ComboUsageInfo GetMostUsedGearValue(RangeInfoCacheWrapper range)
        {
            if (range.ActivityPauselessCadenceTrack.Count > 0)
            {
                ITimeDataSeries <SprocketCombo> rangeSprockets = GetRangeSprocketsTrack(range);
                IList <SprocketComboInfo>       sprocketInfo   = GetSprocketComboInfo(range, rangeSprockets);
                SprocketCombo mostUsedCombo    = null;
                TimeSpan      mostUsedDuration = new TimeSpan(0);

                foreach (SprocketComboInfo comboInfo in sprocketInfo)
                {
                    TimeSpan currentComboDuration = new TimeSpan(0);

                    foreach (IValueRange <DateTime> times in comboInfo.Times)
                    {
                        currentComboDuration += (times.Upper - times.Lower);
                    }

                    if (mostUsedCombo == null || mostUsedDuration < currentComboDuration)
                    {
                        mostUsedCombo    = comboInfo.SprocketCombo;
                        mostUsedDuration = currentComboDuration;
                    }
                }

                return(new ComboUsageInfo(mostUsedCombo, mostUsedDuration));
            }

            return(null);
        }
Пример #2
0
        /// <summary>
        /// Create gear guess selection chart based on gear ratios
        /// </summary>
        /// <param name="input">Pre-calculated raw data to estimate from.  This should already be smoothed or filtered if desired.</param>
        /// <returns>Gear guess NumericTimeDataSeries</returns>
        public static ITimeDataSeries <SprocketCombo> GuessSprockets(INumericTimeDataSeries input, List <SprocketCombo> sprockets)
        {
            ITimeDataSeries <SprocketCombo> guessSeries = new TimeDataSeries <SprocketCombo>();
            SprocketCombo lastValue = null;

            // Iterate through entire data series guessing each point
            foreach (ITimeValueEntry <float> item in input)
            {
                float         diff  = float.MaxValue;
                SprocketCombo guess = null;

                // Find closest match out of all gear ratios
                foreach (SprocketCombo sprocketCombo in sprockets)
                {
                    float n = Math.Abs(sprocketCombo.GearRatio - item.Value);
                    if (n < diff)
                    {
                        // Current closest match
                        diff  = n;
                        guess = sprocketCombo;
                    }
                }

                if (guessSeries.Count > 0 && lastValue != guess)
                {
                    guessSeries.Add(input.EntryDateTime(item).AddMilliseconds(-1), lastValue);
                }

                guessSeries.Add(input.EntryDateTime(item), guess);
                lastValue = guess;
            }

            return(guessSeries);
        }
Пример #3
0
        public String GetMaxRatio(List <RangeInfoCacheWrapper> allRanges)
        {
            if (allRanges.Count > 0 &&
                allRanges[0].ActivityPauselessCadenceTrack.Count > 0)
            {
                double maxRatio = GetMaxRatioValue(allRanges);

                if (maxRatio != 0)
                {
                    SprocketCombo combo = FindComboFromRatio(maxRatio, allRanges[0].Activity);

                    // We must refresh our cache, something changed in our activity
                    if (combo == null)
                    {
                        foreach (RangeInfoCacheWrapper range in allRanges)
                        {
                            range.SaveStoredInfo(m_GearTrackStoredInfoId, null);
                            range.SaveStoredInfo(m_SprocketTrackStoredInfoId, null);
                            range.SaveStoredInfo(m_SprocketStoredInfoId, null);
                        }

                        maxRatio = GetMaxRatioValue(allRanges);
                        combo    = FindComboFromRatio(maxRatio, allRanges[0].Activity);
                    }

                    Debug.Assert(combo != null);

                    return(String.Format("{0:0.00} ({1:0}x{2:0})", Math.Round(maxRatio, 2), combo.ChainringSize, combo.CassetteSize));
                }
            }

            return(String.Empty);
        }
Пример #4
0
        public String GetMinRatio(RangeInfoCacheWrapper range)
        {
            if (range.ActivityPauselessCadenceTrack.Count > 0)
            {
                double        minRatio = GetMinRatioValue(range);
                SprocketCombo combo    = FindComboFromRatio(minRatio, range.Activity);

                // We must refresh our cache, something changed in our activity
                if (combo == null)
                {
                    range.SaveStoredInfo(m_GearTrackStoredInfoId, null);
                    range.SaveStoredInfo(m_SprocketTrackStoredInfoId, null);
                    range.SaveStoredInfo(m_SprocketStoredInfoId, null);

                    minRatio = GetMinRatioValue(range);
                    combo    = FindComboFromRatio(minRatio, range.Activity);
                }

                Debug.Assert(combo != null);

                return(String.Format("{0:0.00} ({1:0}x{2:0})", Math.Round(minRatio, 2), combo.ChainringSize, combo.CassetteSize));
            }

            return(String.Empty);
        }
Пример #5
0
        public GearNamedZone(IActivity activity, SprocketCombo gearCombo)
        {
            m_ActivityDataChangedHelper.PropertyChanged += new PropertyChangedEventHandler(OnActivityDataChanged);

            Activity = activity;
            m_Gear   = gearCombo;

            m_ValidTimesDirty = true;
            TriggerValidTimesChanged();
        }
Пример #6
0
        private ComboUsageInfo GetMostUsedGearValue(List <RangeInfoCacheWrapper> allRanges)
        {
            if (allRanges.Count > 0 &&
                allRanges[0].ActivityPauselessCadenceTrack.Count > 0)
            {
                List <ComboUsageInfo> allRangesUsageInfo = new List <ComboUsageInfo>();

                foreach (RangeInfoCacheWrapper range in allRanges)
                {
                    ITimeDataSeries <SprocketCombo> rangeSprockets = GetRangeSprocketsTrack(range);
                    IList <SprocketComboInfo>       sprocketInfo   = GetSprocketComboInfo(range, rangeSprockets);

                    for (int i = 0; i < sprocketInfo.Count; ++i)
                    {
                        TimeSpan currentComboDuration = new TimeSpan(0);

                        foreach (IValueRange <DateTime> times in sprocketInfo[i].Times)
                        {
                            currentComboDuration += (times.Upper - times.Lower);
                        }

                        if (allRangesUsageInfo.Count <= i)
                        {
                            allRangesUsageInfo.Add(new ComboUsageInfo(sprocketInfo[i].SprocketCombo, currentComboDuration));
                        }
                        else
                        {
                            allRangesUsageInfo[i].m_UsageDuration += currentComboDuration;
                        }
                    }
                }

                SprocketCombo mostUsedCombo    = null;
                TimeSpan      mostUsedDuration = new TimeSpan(0);

                foreach (ComboUsageInfo comboInfo in allRangesUsageInfo)
                {
                    if (mostUsedCombo == null || mostUsedDuration < comboInfo.m_UsageDuration)
                    {
                        mostUsedCombo    = comboInfo.m_Combo;
                        mostUsedDuration = comboInfo.m_UsageDuration;
                    }
                }

                return(new ComboUsageInfo(mostUsedCombo, mostUsedDuration));
            }

            return(null);
        }
Пример #7
0
 public ComboUsageInfo(SprocketCombo combo, TimeSpan usageDuration)
 {
     m_Combo         = combo;
     m_UsageDuration = usageDuration;
 }