libkpl  4.1
A Library for Graphical Presentation of Data Sets and Functions
funitem.h
1 /***************************************************************************
2  funitem.h - description
3  -------------------
4 
5  This file is a part of kpl - a program for graphical presentation of
6  data sets and functions.
7 
8  begin : Sun Aug 29 1999
9  copyright : (C) 2015 by Werner Stille
10  email : stille@uni-freiburg.de
11  ***************************************************************************/
12 
13 /***************************************************************************
14  * *
15  * This program is free software; you can redistribute it and/or modify *
16  * it under the terms of the GNU General Public License as published by *
17  * the Free Software Foundation; either version 2 of the License, or *
18  * (at your option) any later version. *
19  * *
20  ***************************************************************************/
21 
22 #ifndef FUNITEM_H
23 #define FUNITEM_H
24 
25 #include <QStringList>
26 #include <QVector>
27 #include <KUrl>
28 #include "scaleditem.h"
29 
30 class QLibrary;
31 class QTextStream;
32 class ArrayItem;
33 class LMFit;
34 
40 class KDE_EXPORT FunItem : public ScaledItem
41 {
42 public:
44  static const int NumParMax = 20;
46  enum {
47  Type = UserType + Function
49  };
53  struct DataErrorStruct {
59  ColX,
60  ColY
61  };
63  DataErrorStruct() : errModArg(ColY) {};
68  bool fitErrCol;
72  double parErrMod[NumParMax];
77  };
79  FunItem();
84  FunItem(const FunItem& a);
93  FunItem(const KConfigGroup* plo, const KUrl& urlPlo, unsigned color = 0,
94  Symbol symbol = SolidLine, QGraphicsItem* parent = 0);
113  FunItem(const KUrl& url, const QString& name, unsigned color = 0,
114  Symbol symbol = SolidLine, double fx = 1, double fy = 1,
115  QGraphicsItem* parent = 0, double xMin = 0, double xMax = 0,
116  double deltaX = 0, bool visible = true,
117  FillStyle fillStyle = NoBrush, double xOffset = 0,
118  double yOffset = 0, double relSize = 1);
120  virtual ~FunItem();
122  virtual QRectF boundingRect() const;
132  static void calcTable(const double* x, double* values,
133  double (*func)(double, const double*),
134  const double* par, int n, QObject* parent = 0);
139  int calcTable() const;
145  int calcTable(bool logX) const;
147  inline double deltaT() const { return m_deltaT; };
154  static bool errorStructChanged(const DataErrorStruct& e1,
155  const DataErrorStruct& e2);
164  void exponent(int& expX, int& expY, double& fx, double& fy, bool logX) const;
172  void exportTable(QTextStream& stream, char separator, char format,
173  int precision) const;
194  static int fit(const QList<const ArrayItem*>* aList, QList<FunItem*>* fList,
195  const bool* bFit, double* par,
196  QVector<double>* resVector = 0, QVector<double>* sigma = 0,
197  FunItem::DataErrorStruct* err = 0, bool nonLin = true,
198  double tol = 1e-14, int itMax = 100, LMFit* lm = 0,
199  double* chiSquare = 0, double* corr = 0, double* parErr = 0,
200  double* avgErr = 0, QObject* parent = 0);
206  static QStringList funcNames(const KUrl& url);
208  double (*funcY)(double, const double*);
217  static bool getFuncAddr(const QString& path, const QString& name,
218  QLibrary** lib,
219  double (**func)(double, const double*));
221  inline const QLibrary* libY() const { return m_libY; };
230  void limits(double& xMin, double& xMax, double& yMin, double& yMax,
231  bool logX) const;
233  inline QString nameY() const { return m_nameY; };
235  virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option,
236  QWidget* widget = 0);
243  static bool parChanged(const double* p1, const double* p2);
251  static QString parToString(const double* par, char format, int precision);
253  inline double* parY() { return m_parY; };
255  void setDashOffset();
260  inline void setDeltaT(double deltaT) { m_deltaT = deltaT; };
267  bool setFuncY(const KUrl& url, const QString& name);
274  virtual void setPar(int i, double value, bool yFunc = true);
279  inline void setTMax(double xMax) { m_tMax = xMax; };
284  inline void setTMin(double xMin) { m_tMin = xMin; };
286  virtual QPainterPath shape() const;
292  static void stringToPar(const QString& s, double* par);
294  inline double tMax() const { return m_tMax; };
296  inline double tMin() const { return m_tMin; };
298  const double* tValues() const;
300  virtual int type() const { return Type; };
302  inline const KUrl& urlY() const { return m_urlY; };
311  void writePlo(KConfigGroup* plo, const KUrl& urlPlo, bool absolute,
312  char format, int precision) const;
314  double* yValues() const;
315 
316 protected:
318  void init();
323  void paintCond(QPainter* painter) const;
325  void unload();
326  mutable bool logXo;
327  double m_tMin, m_tMax, m_deltaT;
328  mutable double tMino, tMaxo, deltaTo;
329  mutable double (*funcYo)(double, const double*);
330  double m_parY[NumParMax];
331  mutable double parYo[NumParMax];
332  mutable QVector<double> m_tValues, m_yValues;
333  QString m_nameY;
334  KUrl m_urlY;
335  QLibrary* m_libY;
336 };
337 
338 #endif
Parameter fit class.
Definition: lmfit.h:42
FillStyle
Fill styles.
Definition: kplitem.h:47
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)=0
Symbol
Symbol types.
Definition: kplitem.h:85
const QLibrary * libY() const
Returns pointer to library for y function.
Definition: funitem.h:221
static bool limits(double &xMin, double &xMax, const double *values, int n)
Calculates minimum and maximum values of an array.
double deltaT() const
Returns argument step size.
Definition: funitem.h:147
static void exponent(double a, int &iExp, double &f)
Calculates normalization factor.
void setTMax(double xMax)
Sets maximum argument value.
Definition: funitem.h:279
void setTMin(double xMin)
Sets minimum argument value.
Definition: funitem.h:284
virtual int type() const
Returns specific QGraphicsItem type number.
Definition: funitem.h:300
const KUrl & urlY() const
Returns URL of y function library.
Definition: funitem.h:302
Function item class.
Definition: funitem.h:40
x column.
Definition: funitem.h:59
QString errModPath
Path of library containing error model function.
Definition: funitem.h:76
Data error structure.
Definition: funitem.h:53
virtual QRectF boundingRect() const =0
QString errModName
Name of error model function.
Definition: funitem.h:74
ErrorModelArgument
Error model function argument.
Definition: funitem.h:58
ErrorModelArgument errModArg
Error model function argument.
Definition: funitem.h:70
virtual QPainterPath shape() const
void writePlo(KConfigGroup *plo, bool visible) const
Writes into plot file.
Scaled item class.
Definition: scaleditem.h:24
double tMax() const
Returns maximum argument value.
Definition: funitem.h:294
QString nameY() const
Returns y function name.
Definition: funitem.h:233
double * parY()
Returns y function parameter array pointer.
Definition: funitem.h:253
void setDeltaT(double deltaT)
Sets argument step size.
Definition: funitem.h:260
Array item class.
Definition: arrayitem.h:36
double tMin() const
Returns minimum argument value.
Definition: funitem.h:296