protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples) { var dataList = primitives.SelectMany(x => x.Select(y => !((bool)y.SampleValue))); var dataSum = dataList.Sum(x => Convert.ToInt32(x)); var dataCount = dataList.Count(); var p = 0.0; var np = 0.0; var delta = 0.0; if (samples.Any()) { p = (double) dataSum/dataCount; np = ParentPanel.SubgroupSize * p; delta = 3 * Math.Sqrt(np * (1 - p)); Mean = Math.Round(np, 2); UCL = Math.Round(Mean + delta, 2); LCL = Math.Round(Math.Max(Mean - delta, 0), 2); } foreach (var sample in samples) { sample.SetUCL(UCL); sample.SetMean(Mean); sample.SetLCL(LCL); sample.SetUCL(ParentPanel.CustomUCL, true); sample.SetLCL(ParentPanel.CustomLCL, true); sample.SetUSL(ParentPanel.USL); sample.SetLSL(ParentPanel.LSL); } }
protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples) { Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0; foreach (var sample in samples) { sample.SetUCL(UCL); sample.SetMean(Mean); sample.SetLCL(LCL); sample.SetUCL(ParentPanel.CustomUCL, true); sample.SetLCL(ParentPanel.CustomLCL, true); sample.SetUSL(ParentPanel.USL); sample.SetLSL(ParentPanel.LSL); } }
protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples) { Mean = samples.Any(x => x.SampleValue != null) ? Math.Round(samples.Where(x => x.SampleValue != null).Average(x => (double)x.SampleValue), 2) : 0; UCL = Math.Round(Mean * StatisticConstants.D4(ParentPanel.SubgroupSize), 2); LCL = Math.Round(Math.Max(Mean * StatisticConstants.D3(ParentPanel.SubgroupSize), 0), 2); foreach (var sample in samples) { sample.SetUCL(UCL); sample.SetMean(Mean); sample.SetLCL(LCL); sample.SetUCL(ParentPanel.CustomUCL, true); sample.SetLCL(ParentPanel.CustomLCL, true); sample.SetUSL(ParentPanel.USL); sample.SetLSL(ParentPanel.LSL); } }
protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples) { var stdDevAv = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0; Mean = Math.Round(stdDevAv, 3); UCL = Math.Round(StatisticConstants.B4(ParentPanel.SubgroupSize) * Mean, 2); LCL = Math.Round(StatisticConstants.B3(ParentPanel.SubgroupSize) * Mean, 2); foreach (var sample in samples) { sample.SetUCL(UCL); sample.SetMean(Mean); sample.SetLCL(LCL); sample.SetUCL(ParentPanel.CustomUCL, true); sample.SetLCL(ParentPanel.CustomLCL, true); sample.SetUSL(ParentPanel.USL); sample.SetLSL(ParentPanel.LSL); } }
protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples) { var rValues = primitives.Select(t => t.Select(x => (double)x.SampleValue).Range()).ToList(); Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0; var rBar = rValues.Any() ? rValues.Average() : 0; UCL = Math.Round(rBar * StatisticConstants.D4(ParentPanel.SubgroupSize), 2); LCL = Math.Round(rBar * StatisticConstants.D3(ParentPanel.SubgroupSize), 2); foreach (var sample in samples) { sample.SetUCL(UCL); sample.SetMean(Mean); sample.SetLCL(LCL); sample.SetUCL(ParentPanel.CustomUCL, true); sample.SetLCL(ParentPanel.CustomLCL, true); sample.SetUSL(ParentPanel.USL); sample.SetLSL(ParentPanel.LSL); } }
private IFilterDescriptor PrepareFilter() { var list = new MobileObservableCollection<IFilterDescriptor>(); foreach (var filter in _filterValues) { list.Add(new FilterDescriptor(filter.Key, FilterOperator.Contains, filter.Value)); } return list.Any() ? new FilterDescriptor(LogicalOperators.And, list) : null; }
protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples) { var dataList = primitives.SelectMany(x => x.Select(y => !((bool) y.SampleValue))); var dataSum = dataList.Sum(x => Convert.ToInt32(x)); var dataCount = dataList.Count(); var averageSampleSize = primitives.Select(x => x.Count).Average(); Mean = samples.Any() ? Math.Round((double) dataSum / dataCount, 4) : 0; var delta = 3 * Math.Sqrt((Mean * (1 - Mean)) / averageSampleSize); UCL = Math.Round(Math.Min(Mean + delta, 1), 4); LCL = Math.Round(Math.Max(Mean - delta, 0), 4); foreach (var sample in samples) { if (AverageLimits) { sample.SetUCL(UCL); sample.SetMean(Mean); sample.SetLCL(LCL); } else { delta = 3 * Math.Sqrt((Mean * (1 - Mean)) / sample.SampleSize); sample.SetUCL(Math.Round(Math.Min(Mean + delta, 1), 4)); sample.SetMean(Mean); sample.SetLCL(Math.Round(Math.Max(Mean - delta, 0), 4)); } sample.SetUCL(ParentPanel.CustomUCL, true); sample.SetLCL(ParentPanel.CustomLCL, true); sample.SetUSL(ParentPanel.USL); sample.SetLSL(ParentPanel.LSL); } }
private void ResolveLimitsCalculationMethod(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples) { var allRenderedCharts = ParentPanel.Charts.Select(x => x.ChartType); if (allRenderedCharts.Contains(ChartTypesEnum.RChart)) { var rValues = new List<double>(); for (var i = 0; i < primitives.Count; i++) rValues.Add(primitives[i].Select(x => (double)x.SampleValue).Range()); var rBar = rValues.Any() ? rValues.Average() : 0; Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0; var a2 = StatisticConstants.A2(ParentPanel.SubgroupSize); UCL = Math.Round(Mean + rBar * a2, 2); LCL = Math.Round(Mean - rBar * a2, 2); } else if (allRenderedCharts.Contains(ChartTypesEnum.StDevChart)) { var stDevList = new List<double>(); for (var i = 0; i < primitives.Count; i++) { var data = primitives[i].Select(x => x.SampleValue).Cast<double>(); var calculatedValue = data != null && data.Any() ? Math.Round(data.StdDev(), 3) : 0; stDevList.Add(calculatedValue); } var stdDevAv = stDevList.Any() ? stDevList.Average() : 0; Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0; var a3 = StatisticConstants.A3(ParentPanel.SubgroupSize); UCL = Math.Round(Mean + stdDevAv * a3, 2); LCL = Math.Round(Mean - stdDevAv * a3, 2); } else if (allRenderedCharts.Contains(ChartTypesEnum.XMRChart)) { var mrList = new List<double>(); var list = primitives.SelectMany(x => x.Select(y => y.SampleValue)).Cast<double>().ToList(); for (var i = 0; i < list.Count; i++) { if (i >= ParentPanel.SubgroupSize - 1) { var data = list.GetRange(i - (ParentPanel.SubgroupSize - 1), ParentPanel.SubgroupSize); var sampleValue = data != null && data.Any() ? (double?)Math.Abs(data.Max() - data.Min()) : null; if (sampleValue.HasValue) mrList.Add(sampleValue.Value); } } var mrAv = mrList.Any() ? mrList.Average() : 0; Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0; var d2 = StatisticConstants.d2(ParentPanel.SubgroupSize); UCL = Math.Round(Mean + 3 * (mrAv / d2), 2); LCL = Math.Round(Mean - 3 * (mrAv / d2), 2); } }
private void AddMandatoryFilter(MobileObservableCollection<IFilterDescriptor> filterList, string processSystemName) { var filterInfoType = DynamicTypeManager.GetFilterInfoType(processSystemName); if (filterInfoType != null) { IFilter[] filters = (IFilter[])filterInfoType.GetProperty("FilterList", BindingFlags.Static | BindingFlags.Public).GetValue(null, null); if (filters != null) { IList<int> identityRoles = ((Library.Security.MQ1Identity)ApplicationContext.User.Identity).RolesId; if (identityRoles == null || identityRoles.Count == 0) return; var mandatoryFilters = filters.Where(x => !string.IsNullOrEmpty(x.RoleIds)); foreach (IFilter filter in mandatoryFilters) { var filterRoles = filter.RoleIds.Split(',').Select(int.Parse).ToList(); if (filterRoles.Contains(Constants.AllRolesId) || identityRoles.Intersect(filterRoles).Any()) { IFilterDescriptor filterDescriptor = (FilterDescriptor)FilterDescriptor.FromJSON(filter.Definition); var filterValue = filterDescriptor.Value as FilterValue; if (filterValue != null && filterValue.Type == FilterValueType.Udp) filterValue.ProvidedValue = filterValue.DefaultValue; filterDescriptor.ReplacePredefinedValues(null); if (!filterList.Any(f => f.FilterGuid.Equals(filterDescriptor.FilterGuid))) filterList.Add(filterDescriptor); } } } } }
public void UpdateLevelValues(MobileObservableCollection<SampleUnit> samples, bool recalculateSamples = false) { if (recalculateSamples) { var sampleList = OriginalData.Select(item => new SamplePrimitive(item.YValue, 0, "Number")).ToList(); samples.Clear(); foreach (var computeSubgroup in ComputeSubgroups(sampleList, 0, 0)) samples.Add(computeSubgroup); return; } var minX = 0.0; var maxx = 0.0; var standardStepCount = GetStepCount(OriginalData.Count); _minimum = OriginalData.Count > 0 ? Math.Floor(OriginalData.Min(x => (double)x.YValue)) : 0; var max = OriginalData.Count > 0 ? OriginalData.Max(x => (double)x.YValue) : 0; var integerMax = Math.Ceiling(max); if ((max % integerMax).Equals(0.0)) integerMax++; _maximum = integerMax; _stepWidth = Math.Abs(_maximum - _minimum) / ParentPanel.RangeSteps; if (_stepWidth > 1 && ParentPanel.RangeSteps == standardStepCount) { _stepWidth = Convert.ToInt32(_stepWidth); ParentPanel.SetSilently(ChartPanel.ExponentProperty, 0); } else { var e = ParentPanel.Exponent == 0 ? (int) Math.Ceiling(Math.Log10(1/_stepWidth)) : ParentPanel.Exponent; if (ParentPanel.Exponent < e) ParentPanel.SetSilently(ChartPanel.ExponentProperty, e); else e = ParentPanel.Exponent; _stepWidth = Math.Round(_stepWidth, e); } if (samples.Any()) _maximum = Convert.ToDouble(samples.Last().CategoryValue.LabelValue, CultureInfo.InvariantCulture); var list = new List<double>(); if (ShowLSL) list.Add(ParentPanel.LSL); list.Add(UseCustomCLs ? ParentPanel.CustomLCL : LCL); list.Add(_minimum); minX = list.Min(); list = new List<double>(); if (ShowUSL) list.Add(ParentPanel.USL); list.Add(UseCustomCLs ? ParentPanel.CustomUCL : UCL); list.Add(_maximum); maxx = list.Max(); var deltaMin = _minimum - minX; if (deltaMin > 0) { var newDelta = deltaMin + (_stepWidth - (deltaMin % _stepWidth)); var deltaLength = newDelta / _stepWidth; var startValue = _minimum - _stepWidth; for (var i = 0; i < deltaLength; i++) { var subgroupSample = SpcManager.CreateSample(null, 0, i); subgroupSample.SetXLabelValue(startValue, LabelValueDataTypes.Number); subgroupSample.SetSampleSize(0); samples.Insert(0, subgroupSample); startValue -= _stepWidth; } _minimum = startValue + _stepWidth; } else { var sample = SpcManager.CreateSample(null, 0, 0); sample.SetXLabelValue(_minimum - _stepWidth, LabelValueDataTypes.Number); sample.SetSampleSize(0); samples.Insert(0, sample); } var deltaMax = maxx - _maximum; if (deltaMax > 0) { var newDelta = deltaMax + (_stepWidth - (deltaMax % _stepWidth)); var deltaLength = newDelta / _stepWidth; var startValue = _maximum + _stepWidth; for (var i = 0; i < deltaLength; i++) { var subgroupSample = SpcManager.CreateSample(null, 0, i); subgroupSample.SetXLabelValue(startValue, LabelValueDataTypes.Number); subgroupSample.SetSampleSize(0); samples.Add(subgroupSample); startValue += _stepWidth; } _maximum = startValue - _stepWidth; } else { var sample = SpcManager.CreateSample(null, 0, 0); sample.SetXLabelValue(_maximum + _stepWidth, LabelValueDataTypes.Number); sample.SetSampleSize(0); samples.Add(sample); } for (var i = 0; i < samples.Count; i++) { samples[i].SetIndex(i); samples[i].CategoryValue.Index = i; } MinXValue = _minimum = deltaMin > 0 ? _minimum : _minimum - _stepWidth; MaxXValue = _maximum = deltaMax > 0 ? _maximum + _stepWidth : _maximum + _stepWidth * 2; XStep = _stepWidth; BellCurveData = new MobileObservableCollection<ElementarySampleInfo>(); var nh = 0.0; if (OriginalData != null) nh = (OriginalData.Count * XStep); //needed to bring bell curve to the scale of histogram var floatingSigma = Mean - 4 * Sigma; for (var i = 0; i < 49; i++) { var value = (1 / (Sigma * Math.Sqrt(2 * Math.PI))) * Math.Pow(Math.E, -0.5 * Math.Pow((floatingSigma - Mean) / Sigma, 2)) * nh; BellCurveData.Add(DataPortal.Fetch<ElementarySampleInfo>(new LimitData(floatingSigma, value))); floatingSigma += 1 / 6.0 * Sigma; } }
/// <summary> /// Updates the list. /// </summary> /// <param name="newValue">The new value.</param> /// <param name="list">The list.</param> private void UpdateList(MobileObservableCollection<DisponibleProcess> newValue, IList<IRecentEntry> list) { for (var i = list.Count - 1; i >= 0 ; i--) { if (!newValue.Any(e => e.ProcessId == list[i].Id && e.ProcessName == list[i].Name)) //new environment or process renamed/removed list.Remove(list[i]); } }