-
Notifications
You must be signed in to change notification settings - Fork 0
/
TwoThetaPlot.h
134 lines (114 loc) · 3.87 KB
/
TwoThetaPlot.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#ifndef TWOTHETAPLOT_H
#define TWOTHETAPLOT_H
/* QT Related headers */
#include <QMainWindow>
#include <QLabel>
#include <QPrinter>
#include <QMouseEvent>
#include <QPen>
#include <QFileDialog>
#include <QDir>
#include <QInputDialog>
#include <QStatusBar>
#include <QToolBar>
#include <QToolButton>
#include <QStyle>
#include <QComboBox>
#include <QHBoxLayout>
#include <QPushButton>
#include <QDockWidget>
#include <QDateTime>
#include <QPainter>
#include <QPrintDialog>
#include <QDesktopServices>
#include <QtNetwork/QNetworkAccessManager>
#include <QUrl>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
/* QWT Related headers */
#ifdef __APPLE__
#include "/usr/local/qwt-5.2.2/include/qwt.h"
#include "/usr/local/qwt-5.2.2/include/qwt_plot.h"
#include "/usr/local/qwt-5.2.2/include/qwt_plot_zoomer.h"
#include "/usr/local/qwt-5.2.2/include/qwt_plot_picker.h"
#include "/usr/local/qwt-5.2.2/include/qwt_painter.h"
#include "/usr/local/qwt-5.2.2/include/qwt_plot_canvas.h"
#include "/usr/local/qwt-5.2.2/include/qwt_plot_marker.h"
#include "/usr/local/qwt-5.2.2/include/qwt_plot_curve.h"
#include "/usr/local/qwt-5.2.2/include/qwt_scale_widget.h"
#include "/usr/local/qwt-5.2.2/include/qwt_legend.h"
#include "/usr/local/qwt-5.2.2/include/qwt_scale_draw.h"
#include "/usr/local/qwt-5.2.2/include/qwt_math.h"
#include "/usr/local/qwt-5.2.2/include/qwt_symbol.h"
#else
#include "c:\qwt-5.2.0/include/qwt.h"
#include "c:\qwt-5.2.0/include/qwt_plot.h"
#include "c:\qwt-5.2.0/include/qwt_plot_zoomer.h"
#include "c:\qwt-5.2.0/include/qwt_plot_picker.h"
#include "c:\qwt-5.2.0/include/qwt_painter.h"
#include "c:\qwt-5.2.0/include/qwt_plot_canvas.h"
#include "c:\qwt-5.2.0/include/qwt_plot_marker.h"
#include "c:\qwt-5.2.0/include/qwt_plot_curve.h"
#include "c:\qwt-5.2.0/include/qwt_scale_widget.h"
#include "c:\qwt-5.2.0/include/qwt_legend.h"
#include "c:\qwt-5.2.0/include/qwt_scale_draw.h"
#include "c:\qwt-5.2.0/include/qwt_math.h"
#include "c:\qwt-5.2.0/include/qwt_symbol.h"
#endif
#include <cmath>
#include <iostream>
#include <fstream>
#include <ctime>
#include "AppConfig.h"
using namespace std;
/* TwoThetaPlot class
* Used to display 2theta versus intensity. */
class TwoThetaPlot : public QwtPlot
{
Q_OBJECT
/* Public members */
public:
TwoThetaPlot(QWidget *parent, AppConfig &_appConfig);
void setXYData(double *_xd, double *_yd, int _s, double sx= 0, double ex = 180.0);
void setYMinData(double *_yd);
void setYMaxData(double *_yd);
void mmOn() { cDataMin->show(); cDataMax->show(); this->replot(); }
void mmOff() { cDataMin->hide(); cDataMax->hide(); this->replot(); }
void bgsOn() { cDataBGS->show(); cData->hide(); this->replot(); }
void bgsOff() { cDataBGS->hide(); cData->show(); this->replot(); }
int getSize() { return size; }
void changeRange(double x1, double x2) { setAxisScale(QwtPlot::xBottom, x1, x2, 15.0); this->replot(); }
void resetYRange(double x1 = 0.0, double x2 = 180.0);
double* getXValues() { return xd; }
double* getYValues() { return yd; }
int nZeros(double v);
double maxYinRange(double start, double end);
QwtPlotCurve* getData() { return cData; }
QwtPlotCurve* getDataBGS() { return cDataBGS; }
void doBackgroundSubtraction(double cR);
double findCircleY(double **d, int N, double cX, double cR);
double minY(double **d, int N);
double maxY(double **d, int N);
void reset()
{
for (int i = 0; i < size; i ++)
yd[i] = ydo[i];
}
protected slots:
void updateBackgroundSubtraction() { doBackgroundSubtraction(appConfig->getCircleRadius()); }
/* Private members */
private:
AppConfig *appConfig;
double *xd;
double *yd;
double *ydmin;
double *ydmax;
double *ydo;
int size;
QwtPlotCurve *cData;
QwtPlotCurve *cDataBGS;
QwtPlotCurve *cDataMin;
QwtPlotCurve *cDataMax;
bool first;
};
#endif // TWOTHETAPLOT_H