Commit 5f09ee2f authored by Francesco Carraro's avatar Francesco Carraro
Browse files

fixed XML file for all processed spectra

parent 305174f2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ using INAF.Apps.Uwp.SLabDataManager.ViewModels.ContentDialogsViewModel;
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.Math.Smoothing;
using INAF.Libraries.Uwp.Logging;
using INAF.Libraries.Uwp.RemoteAuthentication;
using INAF.Libraries.Uwp.Settings;
@@ -160,10 +161,9 @@ namespace INAF.Apps.Uwp.SLabDataManager
                .AddTransient<SplineProcessingHelper>()
                .AddTransient<RemoteOperationsManager>()
                .AddTransient<RemoteOperationsXmlReader>()
                .AddTransient<SavitzkyGolayHelper>()
                .AddTransient<SmoothingDefaultBoundariesReader>()
                .AddTransient<SmoothingProcessingHelper>()
                .AddTransient<SpectraFactory>()
                .AddTransient<SpectrumProcessingHelper>()
                .AddTransient<SpectrumReader>()
                .AddTransient<SplineFitHelper>()
                .AddTransient<ZoomHelper>()
+0 −22
Original line number Diff line number Diff line
@@ -287,28 +287,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Charts.Containers
            raiseIsAnySpectrumLoaded();
        }

        #region clone
        public IChartSpectrumModel getClonedEmptySpectrum(SpectrumType srcType, SpectrumType destType)
        {
            IChartSpectrumModel clonedSpectrum = getClonedSpectrum(srcType, destType);
            clonedSpectrum.initPoints();

            return clonedSpectrum;
        }

        public IChartSpectrumModel getClonedSpectrum(SpectrumType srcType, SpectrumType destType)
        {
            if (!isAnySpectrumOfType(srcType))
                return null;

            var clonedSpectrum = (IChartSpectrumModel)tryGetSpectrumOfType(srcType).Clone();
            clonedSpectrum.setType(destType);
            clonedSpectrum.setColor();
            clonedSpectrum.updateTitle();
            return clonedSpectrum;
        }
        #endregion

        #region boundaries & axis
        public async Task setBoundariesAsync()
        {
+8 −5
Original line number Diff line number Diff line
@@ -38,21 +38,24 @@
        public static readonly string XML_CONTINUUM_REMOVAL_SETTINGS = "ContinuumRemovalSettings";
        public static readonly string XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENT_FIT_METHOD_NAME = "FitMethodName";
        public static readonly string XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENT_PARAMETER_VALUE = "ParameterValue";
        public static readonly string XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENT = "Segment";
        public static readonly string XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENTS = "Segments";
        public static readonly string XML_ELEMENTS = "Elements";
        public static readonly string XML_ELEMENT = "Element";
        public static readonly string XML_FILE_IDS = "FileIds";
        public static readonly string XML_MAX = "Max";
        public static readonly string XML_MIN = "Min";
        public static readonly string XML_NUM_OF_POINTS = "NumOfPoints";
        public static readonly string XML_RAW_FILENAME = "RawFilename";
        public static readonly string XML_INFO = "Info";
        public static readonly string XML_RAW_FILE_ID = "RawFileId";
        public static readonly string XML_PARENT_FILES = "ParentFiles";
        public static readonly string XML_PARENT_FILE_ID = "ParentFileId";
        public static readonly string XML_REF_FILE_ID = "RefFileId";
        public static readonly string XML_REF_WHITE_FILE_ID = "RefWiteFileId";
        public static readonly string XML_REF_WHITE_FILE_ID = "RefWhiteFileId";
        public static readonly string XML_SEGMENT_END = "SegmentEnd";
        public static readonly string XML_SEGMENT_START = "SegmentStart";
        public static readonly string XML_SETTINGS_SEGMENT = "Segment";
        public static readonly string XML_SETTINGS_SEGMENTS = "Segments";
        public static readonly string XML_SMOOTHING_POLYNOMIAL_ORDER = "PolynomialOrder";
        public static readonly string XML_SMOOTHING_SETTINGS = "SmoothingSettings";
        public static readonly string XML_SMOOTHING_WINDOW_SIZE = "WindowSize";
        public static readonly string XML_SPECTRUM = "Spectrum";
        public static readonly string XML_TYPE = "Type";
        public static readonly string XML_WAVELENGTH = "Wavelength";
+140 −38
Original line number Diff line number Diff line
using INAF.Apps.Uwp.SLabDataManager.Charts.Smoothing;
using INAF.Apps.Uwp.SLabDataManager.Models.Chart;
using INAF.Apps.Uwp.SLabDataManager.Models.Fit;
using INAF.Libraries.NetStandard.Extensions;
using INAF.Libraries.NetStandard.Math.Models;
using INAF.Libraries.NetStandard.Math.Stats;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Files;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum.ProcessedSpectraInfo;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum.ProcessedSpectraInfo.Alignment;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum.ProcessedSpectraInfo.ContinuumRemoval;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum.ProcessedSpectraInfo.Smoothing;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Telerik.UI.Xaml.Controls.Chart;
using Windows.Data.Xml.Dom;
using Windows.UI;
@@ -214,7 +214,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
                Filename = model.Filename,
                ParentId = model.ParentId,
                Type = model.Type,
                Xml = model.ToXml().GetXml()
                Xml = model.ToXmlString()
            };
        }

@@ -265,6 +265,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
            }
        }

        #region local files
        public static string ToTxt(this ISpectrumModel spectrum)
        {
            if (spectrum == null || spectrum.Elements == null || spectrum.Elements.Count == 0)
@@ -279,7 +280,36 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
            return sb.ToString();
        }

        public static XmlDocument ToXml(this IChartSpectrumModel spectrum)
        private static XmlElement AppendParentFilesXml(XmlDocument dom,
                                                       ParentFilesModel parentFiles)
        {
            var xmlalignmentsettings = dom.CreateElement(Constants.Constants.XML_PARENT_FILES);

            /*  raw file id */
            var xmlrawfileid = dom.CreateElement(Constants.Constants.XML_PARENT_FILE_ID);
            xmlrawfileid.InnerText = parentFiles.ParentFile.Id.ToString();
            xmlalignmentsettings.AppendChild(xmlrawfileid);

            /*  ref file id */
            if (parentFiles.RefFile != null)
            {
                var xmlreffileid = dom.CreateElement(Constants.Constants.XML_REF_FILE_ID);
                xmlreffileid.InnerText = parentFiles.RefFile.Id.ToString();
                xmlalignmentsettings.AppendChild(xmlreffileid);
            }

            /*  raw file id */
            if (parentFiles.RefWhiteFile != null)
            {
                var xmlrefwhitefileid = dom.CreateElement(Constants.Constants.XML_REF_WHITE_FILE_ID);
                xmlrefwhitefileid.InnerText = parentFiles.RefWhiteFile.Id.ToString();
                xmlalignmentsettings.AppendChild(xmlrefwhitefileid);
            }

            return xmlalignmentsettings;
        }

        private static XmlDocument GetCommonXml(IChartSpectrumModel spectrum)
        {
            if (spectrum == null || spectrum.Elements == null || spectrum.Elements.Count == 0)
                return null;
@@ -302,6 +332,49 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions

            xmlspectrum.AppendChild(xmlinfo);

            return dom;
        }

        private static XmlElement GetElements(IChartSpectrumModel spectrum,
                                              XmlDocument dom)
        {
            /* append spectrum data (wavelength, value) */
            var xmlelements = dom.CreateElement(Constants.Constants.XML_ELEMENTS);
            foreach (var element in spectrum.Elements)
                xmlelements.AppendChild(element.ToXmlNode(dom));

            return xmlelements;
        }

        /* used for 'ToSpectrumFile' extension method */
        public static string ToXmlString(this IChartSpectrumModel spectrum)
        {
            if (spectrum == null || spectrum.Elements == null || spectrum.Elements.Count == 0)
                return null;

            XmlDocument dom = GetCommonXml(spectrum);

            var xmlspectrum = dom.SelectSingleNode(Constants.Constants.XML_SPECTRUM);

            /* append spectrum data (wavelength, value) */
            var xmlelements = GetElements(spectrum, dom);
            xmlspectrum.AppendChild(xmlelements);

            return dom.GetXml();
        }

        /* used for 'saveSpectrumOfTypeAsLocalFileAsync' method in BaseUserControlViewModel */
        public static XmlDocument ToXml(this IChartSpectrumOfTypeProcessedModel spectrum)
        {
            if (spectrum == null || spectrum.Elements == null || spectrum.Elements.Count == 0)
                return null;

            XmlDocument dom = GetCommonXml(spectrum);

            var xmlspectrum = dom.SelectSingleNode(Constants.Constants.XML_SPECTRUM);

            xmlspectrum.AppendChild(AppendParentFilesXml(dom, spectrum.ParentFiles));

            /* type specific actions */
            if (spectrum.GetType() == typeof(ChartSpectrumOfTypeAlignedModel))
            {
@@ -313,17 +386,16 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
            }
            else if (spectrum.GetType() == typeof(ChartSpectrumOfTypeSmoothedModel))
            {

                xmlspectrum.AppendChild(GetSmoothingSettingsXml(dom, ((ChartSpectrumOfTypeSmoothedModel)spectrum).SmoothingSettings));
            }

            /* append spectrum data (wavelength, value) */
            var xmlelements = dom.CreateElement(Constants.Constants.XML_ELEMENTS);
            foreach (var element in spectrum.Elements)
                xmlelements.AppendChild(element.ToXmlNode(dom));
            var xmlelements = GetElements(spectrum, dom);
            xmlspectrum.AppendChild(xmlelements);

            return dom;
        }
        #endregion

        #region elements
        public static XmlElement ToXmlNode(this ElementModel element, XmlDocument dom)
@@ -384,7 +456,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
        }
        #endregion

        #region aligned
        #region settings
        private static XmlElement GetAlignmentSettingsXml(XmlDocument dom,
                                                          AlignmentSettingsModel alignmentSettings)
        {
@@ -409,33 +481,9 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions

            xmlalignmentsettings.AppendChild(xmlsegmentboundaries);

            /* file ids */
            var xmlfileids = dom.CreateElement(Constants.Constants.XML_FILE_IDS);

            /*  raw file id */
            var xmlrawfileid = dom.CreateElement(Constants.Constants.XML_RAW_FILE_ID);
            xmlrawfileid.InnerText = alignmentSettings.RawFile.Id.ToString();
            xmlfileids.AppendChild(xmlrawfileid);

            /*  ref file id */
            var xmlreffileid = dom.CreateElement(Constants.Constants.XML_REF_FILE_ID);
            xmlreffileid.InnerText = alignmentSettings.RefFile.Id.ToString();
            xmlfileids.AppendChild(xmlreffileid);

            /*  raw file id */
            var xmlrefwhitefileid = dom.CreateElement(Constants.Constants.XML_REF_WHITE_FILE_ID);
            xmlrefwhitefileid.InnerText = alignmentSettings.RefWhiteFile.Id.ToString();
            xmlfileids.AppendChild(xmlrefwhitefileid);

            xmlalignmentsettings.AppendChild(xmlfileids);

            xmlalignmentsettings.AppendChild(xmlsegmentboundaries);

            return xmlalignmentsettings;
        }
        #endregion

        #region segments fit
        private static XmlElement GetSegmentsFitSettingsXml(XmlDocument dom,
                                                            ContinuumRemovalSettingsModel continuumRemovalSettings)
        {
@@ -447,20 +495,22 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
            xmlcontinuumremovalsettings.AppendChild(xmlnumofpoints);

            /* segments */
            var xmlsegments = dom.CreateElement(Constants.Constants.XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENTS);
            var xmlsegments = dom.CreateElement(Constants.Constants.XML_SETTINGS_SEGMENTS);
            foreach (var segment in continuumRemovalSettings.Segments)
            {
                var xmlsegment = dom.CreateElement(Constants.Constants.XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENT);
                var xmlsegment = dom.CreateElement(Constants.Constants.XML_SETTINGS_SEGMENT);

                /* fit method name */
                var xmlfitmethodname = dom.CreateElement(Constants.Constants.XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENT_FIT_METHOD_NAME);
                xmlfitmethodname.InnerText = segment.FitMethodName;
                xmlsegment.AppendChild(xmlfitmethodname);

                /* start */
                var xmlsegmentstart = dom.CreateElement(Constants.Constants.XML_SEGMENT_START);
                xmlsegmentstart.InnerText = segment.XStart.ToDoubleInvariantString();
                xmlsegment.AppendChild(xmlsegmentstart);

                /* end */
                var xmlsegmentend = dom.CreateElement(Constants.Constants.XML_SEGMENT_END);
                xmlsegmentend.InnerText = segment.XEnd.ToDoubleInvariantString();
                xmlsegment.AppendChild(xmlsegmentend);
@@ -469,15 +519,67 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
                if (segment.FitParamValue.HasValue)
                {
                    var xmlfitparamvalue = dom.CreateElement(Constants.Constants.XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENT_PARAMETER_VALUE);
                    xmlfitmethodname.InnerText = segment.FitParamValue.Value.ToDoubleInvariantString();
                    xmlfitparamvalue.InnerText = segment.FitParamValue.Value.ToDoubleInvariantString();
                    xmlsegment.AppendChild(xmlfitparamvalue);
                }

                xmlsegments.AppendChild(xmlsegment);
            }

            xmlcontinuumremovalsettings.AppendChild(xmlsegments);

            return xmlcontinuumremovalsettings;
        }

        private static XmlElement GetSmoothingSettingsXml(XmlDocument dom,
                                                          SmoothingSettingsModel smoothingSettings)
        {
            var xmlsmoothingsettings = dom.CreateElement(Constants.Constants.XML_SMOOTHING_SETTINGS);

            var xmlsegments = dom.CreateElement(Constants.Constants.XML_SETTINGS_SEGMENTS);
            foreach (var segment in smoothingSettings.Segments)
            {
                var xmlsegment = dom.CreateElement(Constants.Constants.XML_SETTINGS_SEGMENT);

                /* start */
                var xmlsegmentstart = dom.CreateElement(Constants.Constants.XML_SEGMENT_START);
                xmlsegmentstart.InnerText = segment.XStart.ToDoubleInvariantString();
                xmlsegment.AppendChild(xmlsegmentstart);

                /* end */
                var xmlsegmentend = dom.CreateElement(Constants.Constants.XML_SEGMENT_END);
                xmlsegmentend.InnerText = segment.XEnd.ToDoubleInvariantString();
                xmlsegment.AppendChild(xmlsegmentend);

                /* polynomial order */
                var xmlpolynomialorder = dom.CreateElement(Constants.Constants.XML_SMOOTHING_POLYNOMIAL_ORDER);
                xmlpolynomialorder.InnerText = segment.PolynomialOrder.ToString();
                xmlsegment.AppendChild(xmlpolynomialorder);

                /* window size */
                var xmlwindowsize = dom.CreateElement(Constants.Constants.XML_SMOOTHING_WINDOW_SIZE);
                xmlwindowsize.InnerText = segment.WindowSize.ToString();
                xmlsegment.AppendChild(xmlwindowsize);

                xmlsegments.AppendChild(xmlsegment);
            }

            xmlsmoothingsettings.AppendChild(xmlsegments);

            return xmlsmoothingsettings;
        }

        public static SegmentFitSettingsModel ToSegmentFitSettingsModel(this SegmentFitModel model)
        {
            return new SegmentFitSettingsModel()
            {
                Name = model.SelectedFitMethod.Name,
                FitMethodName = model.SelectedFitMethod.MethodName,
                FitParamValue = model.SelectedFitMethod.Parameter,
                XStart = model.P1.X,
                XEnd = model.P2.X
            };
        }
        #endregion
        #endregion

@@ -495,9 +597,9 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
            return string.Join(string.Empty, "color", type.ToString().ToLowerInvariant());
        }

        public static FitSegmentModel ToFitSegmentModel(this Models.Fit.SegmentFitModel segment)
        public static SegmentFitSettingsModel ToFitSegmentModel(this Models.Fit.SegmentFitModel segment)
        {
            return new FitSegmentModel(segment.Id,
            return new SegmentFitSettingsModel(segment.Id,
                                       segment.SelectedFitMethod.MethodName,
                                       segment.P1.X,
                                       segment.P2.X,
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI.Chart.ProcessingHelpers
                catch (Exception ex)
                {
                    exMsg = ex.Message;
                    logger.Write<SpectrumProcessingHelper>($"{nameof(fitSpectrumProcedureAsync)} - ex: {ex.Message}", Serilog.Events.LogEventLevel.Error);
                    logger.Write<LinearProcessingHelper>($"{nameof(fitSpectrumProcedureAsync)} - ex: {ex.Message}", Serilog.Events.LogEventLevel.Error);
                }
            });

Loading