Commit 918900d1 authored by Francesco Carraro's avatar Francesco Carraro
Browse files

working on smoothing user control...

parent 3b2b76fb
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -145,6 +145,8 @@ namespace INAF.Apps.Uwp.SLabDataManager
                .AddSingleton<UpdateUIHelper>()
                .AddSingleton<WorkingFoldersContainer>()
                .AddSingleton<WorkingItemsModel>()

                .AddScoped<SmoothingViewModel>()
                /* transient */
                .AddTransient<AnimationsHelper>()
                .AddTransient<AuthenticationManager>()
@@ -157,7 +159,7 @@ namespace INAF.Apps.Uwp.SLabDataManager
                .AddTransient<RemoteOperationsManager>()
                .AddTransient<RemoteOperationsXmlReader>()
                .AddTransient<SmoothingDefaultBoundariesReader>()
                .AddTransient<SmoothingViewModel>()
                .AddTransient<SmoothingProcessingHelper>()
                .AddTransient<SpectrumModelFactory>()
                .AddTransient<SpectrumProcessingHelper>()
                .AddTransient<SpectrumReader>()
−1.78 KiB
Loading image diff...
+23 −15
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Smoothing
        }

        public void buildBoundaries()
        {
            if (!tryReadBoundariesItemsSettings())
            {
                /* re-order items for building well-ordered boundaries */
                boundaryValues = boundaryValues.OrderBy(x => x).ToList();
@@ -68,6 +70,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Smoothing

                    Boundaries.Add(new BoundariesItem(lowerValue, boundaryValues[i + 1], isAddButtonAllowed));
                }
            }

            addPropertyChangedListenerForBoundaries();
        }
@@ -96,6 +99,9 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Smoothing
            /* remove selected item */
            Boundaries.Remove(item);

            /* force saving of boundaries settings */
            saveBoundariesItemsSettings();

            /* add/reset event-listener for boundaries */
            addPropertyChangedListenerForBoundaries();
        }
@@ -153,12 +159,14 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Smoothing
            settingsHelper.save<List<BoundariesItem>>(nameof(Boundaries), Boundaries.ToList());
        }

        private void tryReadBoundariesItemsSettings()
        private bool tryReadBoundariesItemsSettings()
        {
            if (!settingsHelper.contains(nameof(Boundaries)))
                return;
                return false;

            Boundaries = new ObservableCollection<BoundariesItem>(settingsHelper.get<List<BoundariesItem>>(nameof(Boundaries)));

            return true;
        }
        #endregion

+62 −0
Original line number Diff line number Diff line
using INAF.Apps.Uwp.SLabDataManager.ViewModels.UserControlViewModels;
using INAF.Libraries.NetStandard.Math.Smoothing;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
using INAF.Libraries.Uwp.Logging;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;
using System.Threading.Tasks;

namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
{
    public sealed class SmoothingProcessingHelper
    {
        private readonly IServiceProvider serviceProvider;
        private readonly Logger logger;
        private readonly SavitzkyGolayHelper savitzkyGolayHelper;

        public SmoothingProcessingHelper(IServiceProvider serviceProvider,
                                         Logger logger)
        {
            this.serviceProvider = serviceProvider;
            this.logger = logger;

            this.savitzkyGolayHelper = new SavitzkyGolayHelper();
        }

        public async Task<(SpectrumModel filteredSpectrum, bool isOk)> applySmoothingToSegments(SpectrumModel clonedSpectrum)
        {
            return await Task.Run(() =>
            {
                bool isOk = true;

                try
                {
                    SmoothingViewModel smoothingViewModel = serviceProvider.GetRequiredService<SmoothingViewModel>();

                    foreach (var boundariesItem in smoothingViewModel.SmoothingBoundariesContainer.Boundaries)
                    {
                        var segment = clonedSpectrum.Elements.Where(x => x.X >= boundariesItem.LowerBoundary && x.X <= boundariesItem.HigherBoundary);

                        var filteredValues = savitzkyGolayHelper.applySavitzkyGolayFilter(segment.Select(x => x.Y).ToArray(),
                                                                                          boundariesItem.WindowSize,
                                                                                          boundariesItem.PolynomialOrder);

                        int elementsNum = segment.Count();
                        for (int i = 0; i < elementsNum; i++)
                        {
                            segment.ElementAt(i).updateY(filteredValues[i]);
                        }
                    }
                }
                catch (Exception ex)
                {
                    isOk = false;
                    logger.Write<SmoothingProcessingHelper>($"{nameof(applySmoothingToSegments)} - ex: {ex.Message}", Serilog.Events.LogEventLevel.Error);
                }

                return (clonedSpectrum, isOk);
            });
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ using SpectrumModel = INAF.Apps.Uwp.SLabDataManager.Models.Spectrum.SpectrumMode

namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
{
    public class SpectrumProcessingHelper : ObservableObject
    public sealed class SpectrumProcessingHelper : ObservableObject
    {
        private readonly IServiceProvider serviceProvider;
        private readonly LinearFitHelper linearFitHelper;
Loading