protected override MobileObservableCollection<SampleUnit> ConvertPrimitivesToSamples(List<List<SamplePrimitive>> primitives) { var newSource = new MobileObservableCollection<SampleUnit>(); 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 = ProcessSubgroup(data); var subgroupSample = SpcManager.CreateSample(sampleValue, primitives[i].Select(x => x.ItemId).First(), i); subgroupSample.SetXLabelValue(i, LabelValueDataTypes.Number); subgroupSample.SetSampleSize(1); newSource.Add(subgroupSample); } else { var sample = SpcManager.CreateSample(null, primitives[i].Select(x => x.ItemId).First(), i); sample.SetXLabelValue(i, LabelValueDataTypes.Number); sample.SetSampleSize(1); newSource.Add(sample); } } UpdateLevelsValues(primitives, newSource); YStep = (double)primitives.Where(x => x[0].SampleValue != null).Max(x => x[0].SampleValue) / (3 * ParentPanel.HeightMultiplier); return newSource; }
protected override MobileObservableCollection<SampleUnit> ConvertPrimitivesToSamples(List<List<SamplePrimitive>> primitives) { var newSource = new MobileObservableCollection<SampleUnit>(); for (var i = 0; i < primitives.Count; i++) { var data = primitives[i].Select(x => Convert.ToDouble(!((bool)x.SampleValue))); var commonItemId = (from s in primitives[i] group s by s.ItemId into gr orderby gr.Count() descending select gr).First().First().ItemId; var sampleValue = ProcessSubgroup(data); var subgroupSample = SpcManager.CreateSample(sampleValue, commonItemId, i); subgroupSample.SetXLabelValue(i, LabelValueDataTypes.Number); subgroupSample.SetSampleSize(data.Count()); newSource.Add(subgroupSample); } UpdateLevelsValues(primitives, newSource); YStep = Math.Round(1 / (3 * ParentPanel.HeightMultiplier), 1); return newSource; }
protected override MobileObservableCollection<SampleUnit> ConvertPrimitivesToSamples(List<List<SamplePrimitive>> primitives) { var newSource = new MobileObservableCollection<SampleUnit>(); var list = primitives.SelectMany(x => x.Select(y => y)).ToList(); for (var i = 0; i < list.Count; i++) { var sampleValue = list[i].SampleValue; var subgroupSample = SpcManager.CreateSample(sampleValue, list[i].ItemId, i + 1); subgroupSample.SetXLabelValue(i + 1, LabelValueDataTypes.Number); subgroupSample.SetSampleSize(1); newSource.Add(subgroupSample); } UpdateLevelsValues(primitives, newSource); YStep = (int)Math.Abs(primitives.SelectMany(l1 => l1.Select(l2 => l2.SampleValue)).Cast<double>().Range() / (3 * ParentPanel.HeightMultiplier)); return newSource; }
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; }
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 IHttpActionResult GetMultiCrossRefValues(string process, int id, string field, int pageIndex, bool isSkipFilter, string filterString, Filter filter) { if (string.IsNullOrEmpty(process)) { return BadRequest("Process name is required."); } if (filterString.Contains(CReffFilterTemplate)) { filterString = filterString.Replace(CReffFilterTemplate, ""); } var totalRowCount = 0; int pageNumber = 0; try { var details = DynamicTypeManager.GetEditableRoot<IEditableRoot>(process, id); string fullName = string.Join(".", details.GetFullPropertyPath(field)); PropertyInfo property = details.GetPropertyByFullName(fullName); var model = details.GetAncestor(property); MobileObservableCollection<IFilterDescriptor> filterList = new MobileObservableCollection<IFilterDescriptor>(); //if (!string.IsNullOrWhiteSpace(skipItemList) && skipItemList != "0") //{ // var skipItemFilter = new FilterDescriptor(Constants.IdColumnName, FilterOperator.NotIn, skipItemList.Split('|')); // filterList.Add(skipItemFilter); //} if (filter != null && !string.IsNullOrWhiteSpace(filter.FilterDefinition)) { filterList.Add(FilterDescriptor.FromJSON(filter.FilterDefinition)); } if (!isSkipFilter) { IEnumerable<IFilterDescriptor> crossRefFilters = DynamicTypeManager.GetCrossRefFilter(model, field); if (crossRefFilters != null) { filterList.AddRange(crossRefFilters); } } var itemList = DynamicTypeManager.GetCrossReferenceList(process, field, null, filterString, 10, pageIndex, FilterDescriptor.GetFilterExpression(filterList) ); totalRowCount = (int)itemList.GetType().GetProperty("TotalRowCount").GetValue(itemList); pageNumber = (int)itemList.GetType().GetProperty("PageNumber").GetValue(itemList); var result = MultiCrossRefResult.Create(itemList, property, totalRowCount, pageNumber); return this.Ok(result); } catch (Exception ex) { Logger.Log(LogSeverity.Error, "ProcessController", ex); throw; } }
public override MobileObservableCollection<SampleUnit> ComputeSubgroups(List<SamplePrimitive> data, int size, int points) { var result = new List<List<SamplePrimitive>>(); if (data != null && data.Any()) { if (!CanExecute(data[0].SampleType)) return new MobileObservableCollection<SampleUnit>(); } else return new MobileObservableCollection<SampleUnit>(); var standardStepCount = GetStepCount(data.Count); if (ParentPanel.RangeSteps == 0) ParentPanel.SetSilently(ChartPanel.RangeStepsProperty, standardStepCount); MinXValue = _minimum = Math.Floor(data.Min(x => (double)x.SampleValue)); var max = data.Max(x => (double) x.SampleValue); var integerMax = Math.Ceiling(max); if ((max % integerMax).Equals(0.0)) integerMax++; MaxXValue = _maximum = integerMax; XStep = _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 = (int) Math.Ceiling(Math.Log10(1/_stepWidth)); if (ParentPanel.Exponent < e) ParentPanel.SetSilently(ChartPanel.ExponentProperty, e); else e = ParentPanel.Exponent; _stepWidth = Math.Round(_stepWidth, e); } var subgroup = new List<SamplePrimitive>(); var startValue = _minimum; var stopValue = _minimum + _stepWidth; foreach (var item in data.OrderBy(x => x.SampleValue)) { if ((double)item.SampleValue >= startValue & (double)item.SampleValue < stopValue) subgroup.Add(item); else { while ((double)item.SampleValue >= stopValue) { result.Add(subgroup.ToList()); subgroup = new List<SamplePrimitive>(); startValue = stopValue; stopValue += _stepWidth; } subgroup.Add(item); } } result.Add(subgroup.ToList()); OriginalData = new MobileObservableCollection<ElementarySampleInfo>(); foreach (var samplePrimitive in data) { OriginalData.Add(DataPortal.Fetch<ElementarySampleInfo>(samplePrimitive)); } return ConvertPrimitivesToSamples(result); }
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 recentEntries list sice last user login (remove deleted processes & update processes names if changed) /// </summary> private void UpdateProcessesStatus() { var idss = new MobileObservableCollection<IdCriteria>(); foreach (var pin in PinnedList.Select(p => p.Id).Union(UnpinnedList.Select(u => u.Id))) idss.Add(new IdCriteria(pin)); if (idss.Count != 0 && !string.IsNullOrEmpty(FileName)) { ProcessesDisponibilityRetriver.GetProcessesDisponibility( idss, (sender, result) => { if (result.Error != null) return; var processes = result.Object.ProcessDisponibilityList; UpdateList(processes, PinnedList); UpdateList(processes, UnpinnedList); Save(); }); } }
protected MobileObservableCollection<IFilterDescriptor> GetFilter() { var mobileList = new MobileObservableCollection<IFilterDescriptor>(); if (SelectedProcess != Constants.BasePersonProcessName) { mobileList.Add(new FilterDescriptor(LogicalOperators.And, new MobileObservableCollection<IFilterDescriptor> { new FilterDescriptor(Constants.DerivedProcessColumnName, FilterOperator.StartsWith, SelectedProcess + "|") })); } if (!string.IsNullOrEmpty(FilterString)) { mobileList.Add(new FilterDescriptor(LogicalOperators.Or, new MobileObservableCollection<IFilterDescriptor> { new FilterDescriptor("FirstName", FilterOperator.Contains, FilterString), new FilterDescriptor("LastName", FilterOperator.Contains, FilterString), new FilterDescriptor("Email", FilterOperator.Contains, FilterString), })); } return mobileList; }
/// <summary> /// Gets the result list. /// </summary> /// <param name="choiceXml">The choice XML.</param> /// <returns>MobileObservableCollection{ChoiceInfo}.</returns> /// <exception cref="VeyronException">Failed to parse Result choices</exception> public MobileObservableCollection<ChoiceInfo> GetResultList(string choiceXml) { if (string.IsNullOrEmpty(choiceXml)) return null; var list = new MobileObservableCollection<ChoiceInfo>(); try { var root = XElement.Parse(choiceXml); var isGlobalChoice = bool.Parse(root.Attribute("IsGlobalChoice").Value); if (isGlobalChoice) { var globalChoiceId = int.Parse(root.Attribute("GlobalChoiceId").Value, CultureInfo.InvariantCulture); if (globalChoiceId == 0) return list; // AddedBy: R. Lunev // Data: 06.12.2012 // Reason: If no global choice selected then Id = 0 will be passed to this method and exception will be thrown. // Todo: Should be another logic implemented or "if (globalChoiceId > 0)" enough? //only re-load if list is empty if (globalChoiceId > 0 && !root.HasElements) { var globalChoiceItem = TypeManager.GetEditableRoot<IEditableRoot>(Constants.GlobalChoiceProcessName, globalChoiceId); root = XElement.Parse(globalChoiceItem.ReadValueByPropertyName<string>("ChoiceDetails")); } } foreach (var element in root.Descendants("Choice")) { ChoiceInfo.AcceptanceCriterias criteria; if (Enum.TryParse(element.Attribute("AcceptanceCriteria").Value, false, out criteria)) list.Add( new ChoiceInfo { AcceptanceCriteria = criteria, Choice = element.Attribute("Choice").Value, Score = double.Parse(element.Attribute("Score").Value, CultureInfo.InvariantCulture), IsCommentRequired = bool.Parse(element.Attribute("IsCommentRequired").Value), IsNewItemRequired = bool.Parse(element.Attribute("IsNewItemRequired").Value), NewItemProcessName = element.Attribute("NewItemProcessName").Value, NewItemProcessId = element.Attributes().Any(a => a.Name == "NewItemProcessId") ? int.Parse(element.Attribute("NewItemProcessId").Value, CultureInfo.InvariantCulture) : 0 }); } } catch (Exception ex) { Log4NetLogger.Instance.Log(LogSeverity.Error, typeof(ResultFieldHelper).ToString(), ex); throw new VeyronException("Failed to parse Result choices", ex); } return list; }
/// <summary> /// To the filter descriptor. /// </summary> /// <param name="filter">The filter.</param> /// <returns>Veyron.SharedTypes.IFilterDescriptor.</returns> /// <exception cref="System.ArgumentOutOfRangeException">Unsupported filter type: + filter.GetType()</exception> public static Veyron.SharedTypes.IFilterDescriptor ToFilterDescriptor(this IFilterDescriptor filter) { var filterDescriptor = filter as FilterDescriptor; if (filterDescriptor != null) { // If FilterDescriptor.Member changes, clear system value because it can be invalid. if (DynamicDataFilterBehavior.GetSystemValueMember(filterDescriptor) != filterDescriptor.Member) DynamicDataFilterBehavior.SetSystemValue(filterDescriptor, null); var value = DynamicDataFilterBehavior.GetSystemValue(filterDescriptor) ?? filterDescriptor.Value; if (value == OperatorValueFilterDescriptorBase.UnsetValue) value = null; return new Veyron.SharedTypes.FilterDescriptor(filterDescriptor.Member, filterDescriptor.Operator.ToFilterOperator(), value, filterDescriptor.MemberType); } var compositeFilter = filter as CompositeFilterDescriptor; if (compositeFilter != null) { var descriptors = new MobileObservableCollection<Veyron.SharedTypes.IFilterDescriptor>(); foreach (var descriptor in compositeFilter.FilterDescriptors.Select(subfilter => subfilter.ToFilterDescriptor())) descriptors.Add(descriptor); return new Veyron.SharedTypes.FilterDescriptor(compositeFilter.LogicalOperator.ToLogicalOperator(), descriptors); } if (filter != null) throw new ArgumentOutOfRangeException("Unsupported filter type: " + filter.GetType()); return null; }
/// <summary> /// To the filter descriptor. /// </summary> /// <param name="filter">The filter.</param> /// <param name="filterGuid">The filter unique identifier.</param> /// <returns>Veyron.SharedTypes.IFilterDescriptor.</returns> public static Veyron.SharedTypes.IFilterDescriptor ToFilterDescriptor(this CompositeFilterDescriptorCollection filter, Guid filterGuid) { Veyron.SharedTypes.IFilterDescriptor result = null; if (filter != null && filter.Count > 1) { var descriptors = new MobileObservableCollection<Veyron.SharedTypes.IFilterDescriptor>(); foreach (var descriptor in filter.Select(subfilter => ToFilterDescriptor((IFilterDescriptor)subfilter))) descriptors.Add(descriptor); result = new Veyron.SharedTypes.FilterDescriptor(filter.LogicalOperator.ToLogicalOperator(), descriptors); result.FilterGuid = filterGuid == Guid.Empty ? Guid.NewGuid() : filterGuid; } else { if (filter != null && filter.Count == 1) { result = filter[0].ToFilterDescriptor(); result.FilterGuid = filterGuid == Guid.Empty ? Guid.NewGuid() : filterGuid; } } return result; }
/// <summary> /// To the filter descriptor. /// </summary> /// <param name="filter">The filter.</param> /// <returns>Veyron.SharedTypes.IFilterDescriptor.</returns> public static Veyron.SharedTypes.IFilterDescriptor ToFilterDescriptor(this CompositeFilterDescriptorCollection filter) { Veyron.SharedTypes.IFilterDescriptor result = null; if (filter != null && filter.Count > 1) { var descriptors = new MobileObservableCollection<Veyron.SharedTypes.IFilterDescriptor>(); foreach (var descriptor in filter.Select(ToFilterDescriptor)) descriptors.Add(descriptor); result = new Veyron.SharedTypes.FilterDescriptor(filter.LogicalOperator.ToLogicalOperator(), descriptors); } else { if (filter != null && filter.Count == 1) result = filter[0].ToFilterDescriptor(); } return result; }
private MobileObservableCollection<IFilterDescriptor> GetFilter() { var mobileList = new MobileObservableCollection<IFilterDescriptor>(); if (!string.IsNullOrEmpty(_contactSearchString)) { var filterList = new MobileObservableCollection<IFilterDescriptor>(); foreach (var column in _columns) { filterList.Add(new FilterDescriptor(column.ColumnName, FilterOperator.Contains, _contactSearchString)); } mobileList.Add(new FilterDescriptor(LogicalOperators.Or, filterList)); } return mobileList; }
private void RefreshAvailableItems() { IsBusy = true; var mbList = new MobileObservableCollection<IFilterDescriptor>(); if (ItemsFilter != null) mbList.Add(ItemsFilter); if (!string.IsNullOrEmpty(FilterString) && DisplayFields.Count > 0) { var containsFilters = new MobileObservableCollection<IFilterDescriptor>(); foreach (var fields in DisplayFields.Select(prop => new FilterDescriptor(prop, FilterOperator.Contains, FilterString))) containsFilters.Add(fields); if (containsFilters.Count > 0) mbList.Add(new FilterDescriptor(LogicalOperators.Or, containsFilters)); } var filter = mbList.Count > 0 ? FilterDescriptor.GetFilterExpression(mbList) : string.Empty; DynamicTypeManager.BeginGetCrossReferenceList( ProcessName, FieldName, (o, r) => { IsBusy = false; if (r.Error != null) { PopupFactory.NotifyFailure(r.Error); return; } AvailableItems = r.Object; UpdateSelectedItems(); var itemCount = AvailableItems.GetType().GetProperty(Constants.TotalRowCountPropertyName); if (itemCount != null) ItemCount = (int)itemCount.GetValue(AvailableItems, BindingFlags.Instance, null, null, null); var pageIndexProperty = AvailableItems.GetType().GetProperty(Constants.PageNumberPropertyName); if (pageIndexProperty != null) _currentPageNumber = (int)pageIndexProperty.GetValue(AvailableItems, BindingFlags.Instance, null, null, null); }, pageNumber: CurrentPageNumber, filterExpression: filter, sortDescriptors: SortDescriptors); }
private void RefreshInternal() { IsBusy = true; var filterList = new MobileObservableCollection<IFilterDescriptor>(); filterList.AddRange(Filters); var filterText = (FilterString ?? string.Empty).Trim(); if (!string.IsNullOrEmpty(filterText)) { var quickSearchFilters = new MobileObservableCollection<IFilterDescriptor>(); foreach (var column in Columns) { quickSearchFilters.Add(new FilterDescriptor(column.Property.Name, FilterOperator.Contains, filterText)); } filterList.Add(new FilterDescriptor(LogicalOperators.Or, quickSearchFilters)); } if (ColumnFilter != null) filterList.Add(ColumnFilter); DynamicTypeManager.BeginGetCrossReferenceList( ProcessName, FieldName, OnItemsLoaded, SortDescriptors, string.Empty, PageSize, CurrentPageNumber, FilterDescriptor.GetFilterExpression(filterList)); }
protected override MobileObservableCollection<SampleUnit> ConvertPrimitivesToSamples(List<List<SamplePrimitive>> primitives) { var newSource = new MobileObservableCollection<SampleUnit>(); var startValue = _minimum; for (var i = 0; i < primitives.Count; i++) { var data = primitives[i].Select(x => (double)x.SampleValue); var sampleValue = ProcessSubgroup(data); var subgroupSample = SpcManager.CreateSample(sampleValue, 0, i); subgroupSample.SetXLabelValue(startValue, LabelValueDataTypes.Number); subgroupSample.SetSampleSize(data.Count()); newSource.Add(subgroupSample); startValue += _stepWidth; } UpdateLevelsValues(primitives, newSource); return newSource; }