JensKrumsieck/ChemSharp

View on GitHub
ChemSharp.Spectroscopy/Spectrum.cs

Summary

Maintainability
A
0 mins
Test Coverage
using ChemSharp.Export;
using ChemSharp.Extensions;
using ChemSharp.Mathematics;
using ChemSharp.Spectroscopy.Extensions;
using ChemSharp.Spectroscopy.Formats;

namespace ChemSharp.Spectroscopy;

public class Spectrum : ISpectrum, IExportable
{
    /// <summary>
    ///     Backing field for <see cref="Spectrum.Derivative" />
    /// </summary>
    private List<DataPoint>? _derivative;

    /// <summary>
    ///     Backing field for <see cref="Spectrum.Integral" />
    /// </summary>
    private List<DataPoint>? _integral;

    /// <summary>
    ///     Quantity of X-Axis
    /// </summary>
    public string XQuantity = "X";

    /// <summary>
    ///     Unit of X-Axis
    /// </summary>
    public string XUnit = "a.u.";

    public Spectrum(IEnumerable<DataPoint> dataPoints) => XYData = dataPoints.ToList();

    /// <summary>
    ///     Derivative of XYData
    /// </summary>
    public List<DataPoint> Derivative => _derivative ??= XYData.Derive().ToList();

    /// <summary>
    ///     Integral of XYData
    /// </summary>
    public List<DataPoint> Integral => _integral ??= XYData.Integrate().ToList();

    /// <summary>
    ///     backing field for this Indexer
    /// </summary>
    internal Dictionary<string, string> optionalParameters { get; set; }

    /// <summary>
    ///     Indexer for Properties
    /// </summary>
    /// <param name="index"></param>
    /// <returns></returns>
    public string this[string index] => optionalParameters[index];

    /// <summary>
    ///     <inheritdoc cref="ISpectrum.XYData" />
    /// </summary>
    public List<DataPoint> XYData { get; set; } = new();

    /// <summary>
    ///     <inheritdoc cref="ISpectrum.Title" />
    /// </summary>
    public string Title { get; set; }

    /// <summary>
    ///     Returns the Title
    /// </summary>
    /// <returns></returns>
    public override string ToString() => Title;

    public static Spectrum FromFile(string path)
    {
        var ext = FileUtil.GetExtension(path);
        if (FileExtensions.BrukerNMRFiles.Contains(ext)) return BrukerNMRFormat.Read(path);
        if (FileExtensions.BrukerEPRFiles.Contains(ext)) return BrukerEPRFormat.Read(path);
        if (FileExtensions.VarianUVVisFiles.Contains(ext)) return VarianUVVisFormat.Read(path);
        return FileExtensions.CSVFiles.Contains(ext) ? CSVFormat.Read(path, ',') : null;
    }
}