Commit ee967abe authored by Francesco Carraro's avatar Francesco Carraro
Browse files

fixing usage of separators...

parent ef74c1c3
Loading
Loading
Loading
Loading
+158 −0
Original line number Diff line number Diff line
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
using Microsoft.Toolkit.Mvvm.ComponentModel;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using static INAF.Libraries.NetStandard.ScienceModels.Enums.Enums;

namespace INAF.Apps.Uwp.SLabDataManager.Charts
{
    public class SpectraContainer : ObservableObject
    {
        public SpectraContainer(string yAxisTitle)
        {
            YAxisTitle = yAxisTitle;

            Spectra = new ObservableCollection<SpectrumModel>();

            XAxisMajorStepValues = new List<double>(2);
            XAxisMajorStepValues.Add(Constants.Constants.X_AXIS_MAJOR_STEP_0DOT1);
            XAxisMajorStepValues.Add(Constants.Constants.X_AXIS_MAJOR_STEP_100);
        }

        public SelectedRefBand SelectedRefBand { get; private set; } = new SelectedRefBand();

        private ObservableCollection<SpectrumModel> spectra;
        public ObservableCollection<SpectrumModel> Spectra
        {
            get { return spectra; }
            private set { SetProperty(ref spectra, value); }
        }

        #region spectrums min/max
        private AxisBoundariesModel xAxisBoundaries;
        public AxisBoundariesModel XAxisBoundaries
        {
            get { return xAxisBoundaries; }
            private set { SetProperty(ref xAxisBoundaries, value); }
        }

        private AxisBoundariesModel yAxisBoundaries;
        public AxisBoundariesModel YAxisBoundaries
        {
            get { return yAxisBoundaries; }
            private set { SetProperty(ref yAxisBoundaries, value); }
        }

        public string YAxisTitle { get; set; }

        #region x axis major step
        private double selectedXAxisMajorStep;
        public double SelectedXAxisMajorStep
        {
            get { return selectedXAxisMajorStep; }
            private set { SetProperty(ref selectedXAxisMajorStep, value); }
        }

        public List<double> XAxisMajorStepValues { get; private set; }
        #endregion
        #endregion

        public async Task addSpectrumAsync(SpectrumModel spectrum)
        {
            if (Spectra.Any(x => x.Type == spectrum.Type))
            {
                /* if a spectrum of same type is already present, then replace it... */
                int index = Spectra.IndexOf(spectrum);
                Spectra[index] = spectrum;
            }
            else
            {
                /* ...otherwise, add it... */
                Spectra.Add(spectrum);
            }

            await setBoundariesAsync();
        }

        public void clear()
        {
            Spectra.Clear();
        }

        private async Task<(double xMin, double xMax, double yMin, double yMax)> getSpectrumAxesBoundariesAsync()
        {
            List<Task> tasks = new List<Task>();

            double xMin = 0d;
            double xMax = 0d;
            double yMin = 0d;
            double yMax = 0d;
            tasks.Add(Task.Run(() =>
            {
                List<double> xvalues = new List<double>();
                foreach (var spectrum in spectra)
                    xvalues.AddRange(spectrum.Elements.Select(x => x.X));

                xMin = xvalues.Min();
                xMax = xvalues.Max();
            }));
            tasks.Add(Task.Run(() =>
            {
                List<double> yvalues = new List<double>();
                foreach (var spectrum in spectra)
                    yvalues.AddRange(spectrum.Elements.Select(x => x.Y));

                yMin = yvalues.Min();
                yMax = yvalues.Max();
            }));

            await Task.WhenAll(tasks);

            return (xMin * 0.9, xMax * 1.1, yMin * 0.9, yMax * 1.1);
        }

        public SpectrumModel getSpectrumOfType(SpectrumType spectrumType)
        {
            return Spectra.FirstOrDefault(x => x.Type == spectrumType);
        }

        public async Task refreshBoundariesAsync()
        {
            (double xMin, double xMax, double yMin, double yMax) result = await getSpectrumAxesBoundariesAsync();

            XAxisBoundaries.updateAxisBoundaries(result.xMin, result.xMax);
            YAxisBoundaries.updateAxisBoundaries(result.yMin, result.yMax);
        }

        private async Task setBoundariesAsync()
        {
            (double xMin, double xMax, double yMin, double yMax) result = await getSpectrumAxesBoundariesAsync();

            XAxisBoundaries = new AxisBoundariesModel("x", result.xMin, result.xMax, spectra[0].Elements[0].MeasureUnit);
            YAxisBoundaries = new AxisBoundariesModel("y", result.yMin, result.yMax);
            System.Diagnostics.Debug.WriteLine($"x: ({result.xMin},{result.xMax}) - y: ({result.yMin},{result.yMax})");
        }

        private void setXAxisMajorStep(WavelengthMeasureUnit wavelengthMeasureUnit)
        {
            switch (wavelengthMeasureUnit)
            {
                case WavelengthMeasureUnit.Nanometers:
                    SelectedXAxisMajorStep = XAxisMajorStepValues.FirstOrDefault(x => x == Constants.Constants.X_AXIS_MAJOR_STEP_100);
                    break;
                case WavelengthMeasureUnit.Microns:
                    SelectedXAxisMajorStep = XAxisMajorStepValues.FirstOrDefault(x => x == Constants.Constants.X_AXIS_MAJOR_STEP_0DOT1);
                    break;
            }
        }

        public void switchXAxisMeasureUnit(WavelengthMeasureUnit wavelengthMeasureUnit)
        {
            Spectra.All(x => { x.switchToMeasureUnit(wavelengthMeasureUnit); return true; });
            XAxisBoundaries.switchToMeasureUnit(wavelengthMeasureUnit);
            //setXAxisMajorStep(wavelengthMeasureUnit);
        }
    }
}
+19 −115
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@ using INAF.Libraries.NetStandard.ScienceModels.Spectra.Serializable;
using INAF.Libraries.Uwp.Settings;
using static INAF.Libraries.NetStandard.ScienceModels.Enums.Enums;
using INAF.Libraries.NetStandard.Extensions;
using System.Collections.ObjectModel;
using System.Linq;

namespace INAF.Apps.Uwp.SLabDataManager.Charts
{
@@ -16,6 +18,8 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts
        {
            this.settingsHelper = settingsHelper;

            WavelengthSeparators = new ObservableCollection<WavelengthModel>();

            if (!tryReadAreSeparatorsVisible())
                AreSeparatorsVisible = true;

@@ -42,33 +46,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts
            set { numOfPointsForAlignment = value; System.Diagnostics.Debug.WriteLine($"numOfPointsForAlignment: {numOfPointsForAlignment}"); saveNumOfPointsForAlignment(value); RaisePropertyChanged(nameof(AreSeparatorsVisible)); }
        }

        private WavelengthModel separatorWavelength0;
        public WavelengthModel SeparatorWavelength0
        {
            get { return separatorWavelength0; }
            set { separatorWavelength0 = value; RaisePropertyChanged(nameof(SeparatorWavelength0)); }
        }

        private WavelengthModel separatorWavelength1;
        public WavelengthModel SeparatorWavelength1
        {
            get { return separatorWavelength1; }
            set { separatorWavelength1 = value; RaisePropertyChanged(nameof(SeparatorWavelength1)); }
        }

        private WavelengthModel separatorWavelength2;
        public WavelengthModel SeparatorWavelength2
        {
            get { return separatorWavelength2; }
            set { separatorWavelength2 = value; RaisePropertyChanged(nameof(SeparatorWavelength2)); }
        }

        private WavelengthModel separatorWavelength3;
        public WavelengthModel SeparatorWavelength3
        {
            get { return separatorWavelength3; }
            set { separatorWavelength3 = value; RaisePropertyChanged(nameof(SeparatorWavelength3)); }
        }
        public ObservableCollection<WavelengthModel> WavelengthSeparators { get; set; }
        #endregion

        #region save/read settings
@@ -127,105 +105,34 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts
                                                              wavelengthSerializableModel.Step,
                                                              wavelengthSerializableModel.MeasureUnit,
                                                              "WavelengthLabel".GetText());
                switch (index)
                {
                    case 0:
                        SeparatorWavelength0 = separatorWavelength;
                        break;
                    case 1:
                        SeparatorWavelength1 = separatorWavelength;
                        break;
                    case 2:
                        SeparatorWavelength2 = separatorWavelength;
                        break;
                    case 3:
                        SeparatorWavelength3 = separatorWavelength;
                        break;
                }
                System.Diagnostics.Debug.WriteLine($"tryReadWavelengthModel({index})");
                addSeparatorWavelengthEventListener(index);
                addSeparatorWavelength(separatorWavelength);
            }
        }
        #endregion

        public void addSeparatorWavelength(int index, WavelengthModel wavelength)
        public void addSeparatorWavelength(WavelengthModel separatorWavelength)
        {
            System.Diagnostics.Debug.WriteLine($"addSeparatorWavelength({index})");
            switch (index)
            System.Diagnostics.Debug.WriteLine($"addSeparatorWavelength({separatorWavelength.Index})");

            if (!WavelengthSeparators.Any(x => x.Index == separatorWavelength.Index))
            {
                case 0:
                    SeparatorWavelength0 = wavelength;
                    break;
                case 1:
                    SeparatorWavelength1 = wavelength;
                    break;
                case 2:
                    SeparatorWavelength2 = wavelength;
                    break;
                case 3:
                    SeparatorWavelength3 = wavelength;
                    break;
                WavelengthSeparators.Add(separatorWavelength);
                addSeparatorWavelengthEventListener(separatorWavelength);
            }

            addSeparatorWavelengthEventListener(index);
        }

        private void addSeparatorWavelengthEventListener(int index)
        private void addSeparatorWavelengthEventListener(WavelengthModel wavelength)
        {
            switch (index)
            {
                case 0:
                    SeparatorWavelength0.PropertyChanged += (s, e) =>
                    {
                        WavelengthModel wavelengthModel = s as WavelengthModel;
                        saveWavelengthModel(0, wavelengthModel.CurrentValue, wavelengthModel.SemiRange, wavelengthModel.StepValue, wavelengthModel.MeasureUnit);
                    };
                    break;
                case 1:
                    SeparatorWavelength1.PropertyChanged += (s, e) =>
            wavelength.PropertyChanged += (s, e) =>
            {
                WavelengthModel wavelengthModel = s as WavelengthModel;
                        saveWavelengthModel(1, wavelengthModel.CurrentValue, wavelengthModel.SemiRange, wavelengthModel.StepValue, wavelengthModel.MeasureUnit);
                saveWavelengthModel(wavelength.Index, wavelengthModel.CurrentValue, wavelengthModel.SemiRange, wavelengthModel.StepValue, wavelengthModel.MeasureUnit);
            };
                    break;
                case 2:
                    SeparatorWavelength2.PropertyChanged += (s, e) =>
                    {
                        WavelengthModel wavelengthModel = s as WavelengthModel;
                        saveWavelengthModel(2, wavelengthModel.CurrentValue, wavelengthModel.SemiRange, wavelengthModel.StepValue, wavelengthModel.MeasureUnit);
                    };
                    break;
                case 3:
                    SeparatorWavelength3.PropertyChanged += (s, e) =>
                    {
                        WavelengthModel wavelengthModel = s as WavelengthModel;
                        saveWavelengthModel(3, wavelengthModel.CurrentValue, wavelengthModel.SemiRange, wavelengthModel.StepValue, wavelengthModel.MeasureUnit);
                    };
                    break;
            }
        }

        public bool contains(int index)
        {
            bool contains = false;

            switch (index)
            {
                case 0:
                    contains = SeparatorWavelength0 != null;
                    break;
                case 1:
                    contains = SeparatorWavelength1 != null;
                    break;
                case 2:
                    contains = SeparatorWavelength2 != null;
                    break;
                case 3:
                    contains = SeparatorWavelength3 != null;
                    break;
            }

            return contains;
            return WavelengthSeparators.Any(x => x.Index == index);
        }

        public (double xMin, double xMax) getSelectedSegmentBoundaries(double xLow, double xHigh)
@@ -244,10 +151,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts

        public void switchToMeasureUnit(WavelengthMeasureUnit newMeasureUnit)
        {
            SeparatorWavelength0.switchToMeasureUnit(newMeasureUnit);
            SeparatorWavelength1.switchToMeasureUnit(newMeasureUnit);
            SeparatorWavelength2.switchToMeasureUnit(newMeasureUnit);
            SeparatorWavelength3.switchToMeasureUnit(newMeasureUnit);
            WavelengthSeparators.All(x => { x.switchToMeasureUnit(newMeasureUnit); return true; });
        }
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -27,5 +27,8 @@
        public static readonly string OUTPUT_SPECTRA_FOLDER_TOKEN = "outputspectrafoldertoken";
        public static readonly string INPUT_WHITES_FOLDER = "inputwhitesfolder";
        public static readonly string INPUT_WHITES_FOLDER_TOKEN = "inputwhitesfoldertoken";

        public static readonly double X_AXIS_MAJOR_STEP_0DOT1 = 0.1;
        public static readonly double X_AXIS_MAJOR_STEP_100 = 100;
    }
}
+7 −7
Original line number Diff line number Diff line
using INAF.Apps.Uwp.SLabDataManager.Helpers;
using INAF.Apps.Uwp.SLabDataManager.Charts;
using INAF.Apps.Uwp.SLabDataManager.Helpers;
using INAF.Apps.Uwp.SLabDataManager.Models;
using INAF.Libraries.NetStandard.Extensions;
using Microsoft.Toolkit.Mvvm.DependencyInjection;
using System;
using System.Collections.Generic;
using System.IO;
using Telerik.Charting;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
using static INAF.Apps.Uwp.SLabDataManager.Constants.Enums;
using INAF.Apps.Uwp.SLabDataManager.Models;
using Microsoft.Toolkit.Mvvm.DependencyInjection;
using System.IO;
using INAF.Libraries.NetStandard.Extensions;
using System.Collections.Generic;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;

namespace INAF.Apps.Uwp.SLabDataManager.Converters
{
+29 −0
Original line number Diff line number Diff line
using INAF.Apps.Uwp.SLabDataManager.Charts;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static INAF.Libraries.NetStandard.ScienceModels.Enums.Enums;

namespace INAF.Apps.Uwp.SLabDataManager.Extensions
{
    public static class SpectraContainerExtensions
    {
        public static void AlignRawSpectrumAsync(this SpectraContainer spectraContainer)
        {
            SpectrumModel aligningSpectrum = createAligningSpectrum(spectraContainer);


        }

        private static SpectrumModel createAligningSpectrum(SpectraContainer spectraContainer)
        {
            var aligningSpectrum = (SpectrumModel)spectraContainer.getSpectrumOfType(SpectrumType.Raw).Clone();
            aligningSpectrum.setType(SpectrumType.Aligned);
            aligningSpectrum.updateTitle();
            return aligningSpectrum;
        }
    }
}
Loading