Commit 8afd8479 authored by Francesco Carraro's avatar Francesco Carraro
Browse files

code refactoring for ChartViewModel; fix for smoothing panel

parent 1d354140
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@ namespace INAF.Apps.Uwp.SLabDataManager
                .AddSingleton<SettingsHelper>()
                .AddSingleton<SmoothingBoundariesContainer>()
                .AddSingleton<SpectraContainer>()
                .AddSingleton<SpectrumAlignmentConfigModel>()
                .AddSingleton<AlignmentViewModel>()
                .AddSingleton<SpectrumChartOptionsModel>()
                .AddSingleton<StorageItemsSettingsHelper>()
                .AddSingleton<StorageItemsAccessHelper>()
+4 −3
Original line number Diff line number Diff line
using INAF.Apps.Uwp.Charts;
using INAF.Apps.Uwp.SLabDataManager.Models;
using INAF.Apps.Uwp.SLabDataManager.ViewModels.UserControlViewModels;
using INAF.Libraries.Uwp.Logging;
using Microsoft.Extensions.DependencyInjection;
using System;
@@ -32,7 +33,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers
                switchXAxisMeasureUnit(spectrumChartOptions.SelectedWavelengthMeasureUnit);

                await Task.Delay(TimeSpan.FromMilliseconds(300));
                SpectrumAlignmentConfig.switchToMeasureUnit(spectrumChartOptions.SelectedWavelengthMeasureUnit);
                AlignmentViewModel.switchToMeasureUnit(spectrumChartOptions.SelectedWavelengthMeasureUnit);
                SelectedRefBand.switchToMeasureUnit(spectrumChartOptions.SelectedWavelengthMeasureUnit);

                IsWorkInProgress = false;
@@ -41,7 +42,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers

        public SelectedRefBand SelectedRefBand { get; protected set; }

        public SpectrumAlignmentConfigModel SpectrumAlignmentConfig { get; protected set; }
        public AlignmentViewModel AlignmentViewModel { get; protected set; }

        public SpectrumType SelectedSpectrumType { get; protected set; }

@@ -169,7 +170,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers
        {
            base.init();

            SpectrumAlignmentConfig = serviceProvider.GetRequiredService<SpectrumAlignmentConfigModel>();
            AlignmentViewModel = serviceProvider.GetRequiredService<AlignmentViewModel>();

            SelectedRefBand = serviceProvider.GetRequiredService<SelectedRefBand>();

+2 −2
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart
        public void createCartesianGridLineAnnotations(RadCartesianChart chart,
                                                       bool areSeparatorsVisible)
        {
            foreach (var separator in workingItems.SpectraContainer.SpectrumAlignmentConfig.WavelengthSeparators)
            foreach (var separator in workingItems.SpectraContainer.AlignmentViewModel.WavelengthSeparators)
                chart.Annotations.Add(getAnnotation(chart, separator, areSeparatorsVisible));

            chart.UpdateLayout();
@@ -178,7 +178,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart
            };
            annotation.SetBinding(CartesianGridLineAnnotation.ValueProperty, new Binding() { Path = new PropertyPath("CurrentValue"), Source = separator, Mode = BindingMode.OneWay });
            annotation.SetBinding(CartesianGridLineAnnotation.LabelProperty, new Binding() { Path = new PropertyPath("CurrentValue"), Source = separator, Mode = BindingMode.OneWay });
            annotation.SetBinding(CartesianGridLineAnnotation.VisibilityProperty, new Binding() { Path = new PropertyPath("AreSeparatorsVisible"), Source = workingItems.SpectraContainer.SpectrumAlignmentConfig, Converter = new BoolToVisibilityConverter(), Mode = BindingMode.OneWay });
            annotation.SetBinding(CartesianGridLineAnnotation.VisibilityProperty, new Binding() { Path = new PropertyPath("AreSeparatorsVisible"), Source = workingItems.SpectraContainer.AlignmentViewModel, Converter = new BoolToVisibilityConverter(), Mode = BindingMode.OneWay });
            return annotation;
        }
        #endregion
+16 −15
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ using INAF.Apps.Uwp.SLabDataManager.Extensions;
using INAF.Apps.Uwp.SLabDataManager.Models;
using INAF.Apps.Uwp.SLabDataManager.Models.Fit;
using INAF.Apps.Uwp.SLabDataManager.Models.Processing;
using INAF.Apps.Uwp.SLabDataManager.ViewModels.UserControlViewModels;
using INAF.Libraries.NetStandard.Math.Fit.Linear;
using INAF.Libraries.NetStandard.Math.Fit.Spline;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
@@ -21,7 +22,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
    {
        private readonly IServiceProvider serviceProvider;
        private readonly LinearFitHelper linearFitHelper;
        private readonly SpectrumAlignmentConfigModel spectrumAlignmentConfig;
        private readonly AlignmentViewModel alignmentViewModel;
        private readonly SelectedRefBand selectedRefBand;
        private readonly WorkingItemsModel workingItems;
        private readonly Logger logger;
@@ -29,14 +30,14 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
        public SpectrumProcessingHelper(IServiceProvider serviceProvider,
                                        LinearFitHelper linearFitHelper,
                                        WorkingItemsModel workingItems,
                                        SpectrumAlignmentConfigModel spectrumAlignmentConfig,
                                        AlignmentViewModel alignmentViewModel,
                                        SelectedRefBand selectedRefBand,
                                        Logger logger)
        {
            this.serviceProvider = serviceProvider;
            this.linearFitHelper = linearFitHelper;
            this.workingItems = workingItems;
            this.spectrumAlignmentConfig = spectrumAlignmentConfig;
            this.alignmentViewModel = alignmentViewModel;
            this.selectedRefBand = selectedRefBand;
            this.logger = logger;
        }
@@ -101,8 +102,8 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
                    }

                    /* retrieve the reference segment and calculate the mean values at the borders of the segment for aligning other segments */
                    var refLowSeparator = spectrumAlignmentConfig.WavelengthSeparators.FirstOrDefault(x => x.CurrentValue >= selectedRefBand.XMin && x.CurrentValue <= selectedRefBand.XMax);
                    var refHighSeparator = spectrumAlignmentConfig.WavelengthSeparators.FirstOrDefault(x => x.CurrentValue > refLowSeparator.CurrentValue);
                    var refLowSeparator = alignmentViewModel.WavelengthSeparators.FirstOrDefault(x => x.CurrentValue >= selectedRefBand.XMin && x.CurrentValue <= selectedRefBand.XMax);
                    var refHighSeparator = alignmentViewModel.WavelengthSeparators.FirstOrDefault(x => x.CurrentValue > refLowSeparator.CurrentValue);

                    /* create the ref segment, depending on area selected by user */
                    var refSegment = alignedSpectrum.GetRefSegmentElements(refLowSeparator.CurrentValue,
@@ -110,8 +111,8 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
                                                                           refHighSeparator.CurrentValue,
                                                                           getIsXMaxHighestBoundary(refHighSeparator.CurrentValue));
                    System.Diagnostics.Debug.WriteLine($"refsegment - xmin:{refSegment.FirstOrDefault().X}, xmax:{refSegment.LastOrDefault().X}");
                    double refSegmentLeftMean = refSegment.GetSegmentLeftMeanValue(spectrumAlignmentConfig.NumOfPointsForAlignment);
                    double refSegmentRightMean = refSegment.GetSegmentRightMeanValue(spectrumAlignmentConfig.NumOfPointsForAlignment);
                    double refSegmentLeftMean = refSegment.GetSegmentLeftMeanValue(alignmentViewModel.NumOfPointsForAlignment);
                    double refSegmentRightMean = refSegment.GetSegmentRightMeanValue(alignmentViewModel.NumOfPointsForAlignment);

                    /* retrieve segments on the left of selected one for later alignment */
                    alignLeftSide(ref alignedSpectrum,
@@ -140,7 +141,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
                                   WavelengthModel refLowSeparator,
                                   double refSegmentLeftMean)
        {
            var leftSeparators = spectrumAlignmentConfig.WavelengthSeparators
            var leftSeparators = alignmentViewModel.WavelengthSeparators
                                                               .Where(x => x.MinValue < refLowSeparator.MinValue)
                                                               .OrderByDescending(x => x.MinValue);

@@ -151,10 +152,10 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
            {
                var elements = aligningSpectrum
                                .GetLeftSegmentElements(leftSeparator.CurrentValue, getIsXMinLowestBoundary(leftSeparator.CurrentValue), rightSeparatorCurrentValue, getIsXMaxHighestBoundary(rightSeparatorCurrentValue))
                                .FixLeftSegment(refLeftValue, spectrumAlignmentConfig.NumOfPointsForAlignment);
                                .FixLeftSegment(refLeftValue, alignmentViewModel.NumOfPointsForAlignment);

                rightSeparatorCurrentValue = leftSeparator.CurrentValue;
                refLeftValue = elements.GetSegmentLeftMeanValue(spectrumAlignmentConfig.NumOfPointsForAlignment);
                refLeftValue = elements.GetSegmentLeftMeanValue(alignmentViewModel.NumOfPointsForAlignment);
            }
        }

@@ -162,7 +163,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
                                    WavelengthModel refHighSeparator,
                                    double refSegmentRightMean)
        {
            var rightSeparators = spectrumAlignmentConfig.WavelengthSeparators
            var rightSeparators = alignmentViewModel.WavelengthSeparators
                                                            .Where(x => x.MinValue > refHighSeparator.MinValue);

            double leftSeparatorCurrentValue = refHighSeparator.CurrentValue;
@@ -172,21 +173,21 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
            {
                var elements = aligningSpectrum
                                .GetRightSegmentElements(leftSeparatorCurrentValue, getIsXMinLowestBoundary(leftSeparatorCurrentValue), rightSeparator.CurrentValue, getIsXMaxHighestBoundary(rightSeparator.CurrentValue))
                                .FixRightSegment(refRightValue, spectrumAlignmentConfig.NumOfPointsForAlignment);
                                .FixRightSegment(refRightValue, alignmentViewModel.NumOfPointsForAlignment);

                leftSeparatorCurrentValue = rightSeparator.CurrentValue;
                refRightValue = elements.GetSegmentRightMeanValue(spectrumAlignmentConfig.NumOfPointsForAlignment);
                refRightValue = elements.GetSegmentRightMeanValue(alignmentViewModel.NumOfPointsForAlignment);
            }
        }

        private bool getIsXMinLowestBoundary(double currentValue)
        {
            return currentValue == spectrumAlignmentConfig.WavelengthSeparators.FirstOrDefault().CurrentValue;
            return currentValue == alignmentViewModel.WavelengthSeparators.FirstOrDefault().CurrentValue;
        }

        private bool getIsXMaxHighestBoundary(double currentValue)
        {
            return currentValue == spectrumAlignmentConfig.WavelengthSeparators.LastOrDefault().CurrentValue;
            return currentValue == alignmentViewModel.WavelengthSeparators.LastOrDefault().CurrentValue;
        }

        private void multiplyByRef(ref SpectrumModel aligningSpectrum,
+8 −8
Original line number Diff line number Diff line
using INAF.Apps.Uwp.SLabDataManager.Charts;
using INAF.Apps.Uwp.SLabDataManager.ViewModels.UserControlViewModels;
using INAF.Libraries.NetStandard.Extensions;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
using INAF.Libraries.Uwp.Logging;
using INAF.Libraries.Uwp.Xml;
@@ -6,20 +7,19 @@ using System;
using System.Threading.Tasks;
using Windows.Data.Xml.Dom;
using Windows.Storage;
using INAF.Libraries.NetStandard.Extensions;

namespace INAF.Apps.Uwp.SLabDataManager.Helpers.XmlReaders
{
    public sealed class ConfigReader : XmlReader
    {
        private readonly SpectrumAlignmentConfigModel alignmentConfig;
        private readonly AlignmentViewModel alignmentViewModel;

        public ConfigReader(IServiceProvider serviceProvider,
                            SpectrumAlignmentConfigModel alignmentConfigModel,
                            AlignmentViewModel alignmentViewModel,
                            XmlHelper xmlHelper,
                            Logger logger) : base(serviceProvider, xmlHelper, logger)
        {
            this.alignmentConfig = alignmentConfigModel;
            this.alignmentViewModel = alignmentViewModel;
        }

        public override async Task readFileAsync()
@@ -56,13 +56,13 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.XmlReaders
                    string _measureUnit = getNodeContent(node, "measureUnit");
                    int measureUnit = _measureUnit.ToIntInvariant();

                    if (!alignmentConfig.contains(index))
                        alignmentConfig.addSeparatorWavelength(new WavelengthModel(index, currentValue, semiRange, step, measureUnit, "WavelengthLabel".GetText()));
                    if (!alignmentViewModel.contains(index))
                        alignmentViewModel.addSeparatorWavelength(new WavelengthModel(index, currentValue, semiRange, step, measureUnit, "WavelengthLabel".GetText()));

                    index++;
                }

                alignmentConfig.orderSeparators();
                alignmentViewModel.orderSeparators();
            }
            catch (Exception ex)
            {
Loading