File indexing completed on 2025-01-26 03:34:20

0001 /*
0002     File                 : XYFourierTransformCurve.h
0003     Project              : LabPlot
0004     Description          : A xy-curve defined by a Fourier transform
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2016-2021 Stefan Gerlach <stefan.gerlach@uni.kn>
0007     SPDX-FileCopyrightText: 2017 Alexander Semke <alexander.semke@web.de>
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #ifndef XYFOURIERTRANSFORMCURVE_H
0012 #define XYFOURIERTRANSFORMCURVE_H
0013 
0014 #include "backend/worksheet/plots/cartesian/XYAnalysisCurve.h"
0015 extern "C" {
0016 #include "backend/nsl/nsl_dft.h"
0017 #include "backend/nsl/nsl_sf_window.h"
0018 }
0019 
0020 class XYFourierTransformCurvePrivate;
0021 
0022 class XYFourierTransformCurve : public XYAnalysisCurve {
0023     Q_OBJECT
0024 
0025 public:
0026     struct TransformData {
0027         TransformData(){};
0028 
0029         nsl_dft_result_type type{nsl_dft_result_magnitude};
0030         bool twoSided{false};
0031         bool shifted{false};
0032         nsl_dft_xscale xScale{nsl_dft_xscale_frequency};
0033         nsl_sf_window_type windowType{nsl_sf_window_uniform};
0034         bool autoRange{true}; // use all data?
0035         // TODO: use Range
0036         QVector<double> xRange{0, 0}; // x range for transform
0037     };
0038 
0039     explicit XYFourierTransformCurve(const QString& name);
0040     ~XYFourierTransformCurve() override;
0041 
0042     void recalculate() override;
0043     QIcon icon() const override;
0044     void save(QXmlStreamWriter*) const override;
0045     bool load(XmlStreamReader*, bool preview) override;
0046 
0047     CLASS_D_ACCESSOR_DECL(TransformData, transformData, TransformData)
0048 
0049     typedef XYAnalysisCurve::Result TransformResult;
0050     virtual const XYAnalysisCurve::Result& result() const override;
0051 
0052     typedef XYFourierTransformCurvePrivate Private;
0053 
0054 protected:
0055     XYFourierTransformCurve(const QString& name, XYFourierTransformCurvePrivate* dd);
0056 
0057 private:
0058     Q_DECLARE_PRIVATE(XYFourierTransformCurve)
0059 
0060 Q_SIGNALS:
0061     void transformDataChanged(const XYFourierTransformCurve::TransformData&);
0062 };
0063 
0064 #endif