source: trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.h@ 19779

Last change on this file since 19779 was 19376, checked in by tbretz, 6 years ago
Commented some obsolete code. Do not reset the palette if it is set to 'manual' when changing events.
File size: 8.8 KB
Line 
1/*
2 * QtGl.h
3 *
4 * Created on: Jul 20, 2011
5 * Author: lyard
6 */
7
8#ifndef QTGL_H_
9#define QTGL_H_
10
11#define NBOARDS 40 // max. number of boards
12#define NPIX 1440 // max. number of pixels
13#define NTMARK 160 // max. number of timeMarker signals
14
15#include <string>
16#include <valarray>
17
18#include <QObject>
19
20#include "BasicGlCamera.h"
21
22#include <qwt_plot_curve.h>
23
24class QwtPlotZoomer;
25class QwtPlotGrid;
26
27#ifndef Q_MOC_RUN
28#include "src/DataCalib.h"
29#include "externals/ofits.h"
30#endif
31
32/*************************************************
33 * Class Raw Data Viewer. FACT raw data diplayer
34 *************************************************/
35class RawDataViewer : public BasicGlCamera//QGLWidget
36{
37 Q_OBJECT
38
39 friend class UIConnector;
40
41 enum CalibDataTypes {
42 CALIB_BASELINE,
43 CALIB_GAIN,
44 CALIB_TRIG_OFFSET
45 };
46
47public:
48 DrsCalibration fDrsCalib;
49
50 bool fIsDrsCalibration;
51
52 RawDataViewer(QWidget *parent = 0);
53 ~RawDataViewer();
54 void openFile(std::string file, bool reopen);
55 void openCalibFile(std::string& file);
56
57 template <typename T>
58 void getCalibrationDataForDisplay(const CalibDataTypes calibTypes,
59 const vector<T>& inputData,
60 const int roi,
61 const int roiTM);
62 int getCurrentPixel(){return selectedPixel;}
63 void assignPixelMapFile(const string& map="");
64public Q_SLOTS:
65 void plusEvent();
66 void minusEvent();
67 void readEvent();
68 void setEventStep(int step);
69 void nextSlice();
70 void previousSlice();
71 void setCurrentPixel(int);
72
73
74Q_SIGNALS:
75 void signalCurrentEvent(int event);
76 void signalCurrentSlice(int slice);
77 void newFileLoaded();
78 void signalCurrentPixel(int pixel);
79 void signalAutoScaleNeeded();
80
81protected:
82// void initializeGL();
83// void resizeGL(int width, int height);
84 void paintGL();
85 void mousePressEvent(QMouseEvent *event);
86 void mouseMoveEvent(QMouseEvent *event);
87 void mouseDoubleClickEvent(QMouseEvent *event);
88 void drawCamera(bool alsoWire);
89// void drawPatches();
90// int PixelAtPosition(const QPoint &pos);
91// void drawHexagon(int index, bool solid);
92 int selectedPixel;
93 vector<float> eventData;
94 //vector<float> rmsData;
95 vector<int16_t> rawEventData;
96 vector<int16_t> waveLetArray;
97 valarray<double> RMSvalues;//(1440);
98 valarray<double> Meanvalues;
99 valarray<double> Maxvalues;
100 valarray<double> PosOfMaxvalues;
101
102 ///Used to load zero data in case of missing fits columns
103 //void allocateZeroArray();
104 //char* fZeroArray;
105 //bool telling whether the data is natively ordered in software or hardware id
106 //used to correctly display monte-carlo data.
107 bool _softwareOrdering;
108
109private:
110 void drawPixelCurve();
111// void updateNeighbors(int currentPixel);
112// void skipPixels(int start, int howMany);
113// void calculatePixelsCoords();
114 bool setCorrectSlice(QMouseEvent* event);
115 void eventStepping(bool plus);
116// void buildVerticesList();
117// void buildPatchesIndices();
118 void calcBlurColor(int pixel, int vertex);
119 void calcMidBlurColor(int pixel, int vertex);
120 void drawBlurryHexagon(int index);
121 int whichSlice;
122 // float shownSizex;
123 // float shownSizey;
124 bool drawPatch;
125 bool drawImpulse;
126 bool drawBlur;
127 bool loopCurrentEvent;
128 //allocate the maximum size for one event
129 uint32_t boardTime[NBOARDS];
130 int16_t startPix[NPIX];
131 int16_t startTM[NTMARK];
132 int32_t pcTime[2];
133 uint32_t softTrig;
134 uint16_t triggerType;
135 int nRows;
136 int rowNum;
137 int eventNum;
138 int nRoi;
139 int nRoiTM;
140 int offSetRoi;
141 int runNumber;
142 int nTM;
143 std::string runType;
144 int firstDataTime;
145 int lastDataTime;
146 int revision;
147 int builderVersion;
148 int nBoards;
149 int nPixels;
150 std::string timeSystem;
151 std::string creationDate;
152 int nightInt;
153 std::string camera;
154 std::string daq;
155 float adcCount;
156 int nbOk;
157 int nbRej;
158 int nbBad;
159
160 int eventStep;
161
162
163
164
165
166// int hardwareMapping[1440];
167// int softwareMapping[1440];
168//// int patches[160][9];
169 GLfloat patchesColor[160][3];
170// vector<edge> patchesIndices[160];
171 fits* inputFile;
172// std::fits* calibInputFile;
173// float baseLineMean[1440*1024];
174// float gainMean[1440*1024];
175// float triggerOffsetMean[1440*1024];
176// bool calibrationLoaded;
177// bool drawCalibrationLoaded;
178
179 QPoint lastPos;
180public:
181 /*
182 void computePulsesStatistics();
183 double aMeas[1024];
184 double n1mean[1024];
185 double n2mean[1024];
186 double vCorr[1024];
187 */
188 int64_t VALUES_SPAN;
189
190 void ApplyCalibration();
191
192// GLfloat pixelsCoords[MAX_NUM_PIXELS][3];
193// PixelsNeighbors neighbors[MAX_NUM_PIXELS];
194 // GLfloat pixelsColor[ACTUAL_NUM_PIXELS][3];
195// GLfloat verticesList[ACTUAL_NUM_PIXELS*6][2];
196// int verticesIndices[ACTUAL_NUM_PIXELS][6];
197// int numVertices;
198};
199
200/*************************************************
201 * Class UIConnector. used to connect the interface to the raw data displayer
202 *************************************************/
203#include "ui_viewer.h"
204
205class Configuration;
206
207class UIConnector : public QMainWindow, protected Ui::MainWindow
208{
209 Q_OBJECT
210private:
211 QTimer timer;
212 std::string currentFile;
213 std::string currentCalibFile;
214
215 QRectF scaleBoundingRectangle(QRectF rectangle, float scale);
216
217 bool updateSpinnerDisplay;
218 bool updating;
219
220 void initHistograms();
221
222public:
223 UIConnector(QWidget *parent = 0);
224 ~UIConnector();
225
226public Q_SLOTS:
227 void fileSelected(QString file);
228 void calibFileSelected(QString file);
229
230 void newFileLoaded();
231 void slicesPerSecondChanged(double value);
232 void nextSlicePlease();
233 void currentSliceHasChanged(int slice);
234 void currentEventHasChanged(int event);
235
236 void on_playPauseButton_clicked();
237 void on_loadNewFileButton_clicked();
238 void on_loadDRSCalibButton_clicked();
239
240 void on_drawPatchCheckBox_stateChanged(int);
241 void on_drawImpulseCheckBox_stateChanged(int);
242 void on_drawBlurCheckBox_stateChanged(int);
243 void on_loopOverCurrentEventBox_stateChanged(int);
244
245 void on_colorRange0_valueChanged(double);
246 void on_colorRange1_valueChanged(double);
247 void on_colorRange2_valueChanged(double);
248 void on_colorRange3_valueChanged(double);
249 void on_colorRange4_valueChanged(double);
250 void on_redValue0_valueChanged(double);
251 void on_redValue1_valueChanged(double);
252 void on_redValue2_valueChanged(double);
253 void on_redValue3_valueChanged(double);
254 void on_redValue4_valueChanged(double);
255 void on_greenValue0_valueChanged(double);
256 void on_greenValue1_valueChanged(double);
257 void on_greenValue2_valueChanged(double);
258 void on_greenValue3_valueChanged(double);
259 void on_greenValue4_valueChanged(double);
260 void on_blueValue0_valueChanged(double);
261 void on_blueValue1_valueChanged(double);
262 void on_blueValue2_valueChanged(double);
263 void on_blueValue3_valueChanged(double);
264 void on_blueValue4_valueChanged(double);
265
266 void on_slicesPerSecValue_valueChanged(double);
267
268 void pixelChanged(int);
269
270 void cbpxChanged();
271
272 void on_HwIDBox_valueChanged(int = 0);
273 void on_SwIDBox_valueChanged(int);
274 void on_crateIDBox_valueChanged(int) { cbpxChanged(); }
275 void on_boardIDBox_valueChanged(int) { cbpxChanged(); }
276 void on_patchIDBox_valueChanged(int) { cbpxChanged(); }
277 void on_pixelIDBox_valueChanged(int) { cbpxChanged(); }
278
279 void on_autoScaleColor_clicked();
280 void on_entireCameraScale_toggled(bool) { on_autoScaleColor_clicked(); }
281 void on_currentPixelScale_toggled(bool) { on_autoScaleColor_clicked(); }
282
283 void slicesPlusPlus();
284 void slicesMinusMinus();
285
286 void on_calibratedCheckBox_stateChanged(int state);
287 void on_displayingSliceBox_valueChanged(int);
288 void on_displayingEventBox_valueChanged(int);
289
290 void displaySliceValue();
291
292 int SetupConfiguration(Configuration &conf);
293
294private:
295 QwtPlotCurve boardsTimeHistoItem;
296 QwtPlotCurve startCellHistoItem;
297 QwtPlotCurve startTimeMarkHistoItem;
298 QwtPlotCurve pixelValueCurveItem;
299 QwtPlotCurve pixelAverageCurveItem;
300 QwtPlotCurve aMeanCurveItem;
301 QwtPlotCurve vCorrCurveItem;
302 QwtPlotCurve meanCurveItem;
303 QwtPlotCurve triggerDelayHistoItem;
304
305 QwtPlotZoomer* curveZoom;
306 QwtPlotZoomer* averageCurveZoom;
307 QwtPlotZoomer* boardsTimeHistoZoom;
308 QwtPlotZoomer* startCellHistoZoom;
309 QwtPlotZoomer* startTimeMarkHistoZoom;
310 QwtPlotZoomer* triggerDelayHistoZoom;
311
312 //declare the grids here, because I must have access to them to detach them properly at destruction time (bug and crash with "bad" versions of qwt)
313 QwtPlotGrid* grid1;
314 QwtPlotGrid* grid2;
315 QwtPlotGrid* grid3;
316 QwtPlotGrid* grid4;
317 QwtPlotGrid* grid5;
318 QwtPlotGrid* grid6;
319};
320
321#endif /* QTGL_H_ */
Note: See TracBrowser for help on using the repository browser.