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

Last change on this file since 19314 was 19314, checked in by tbretz, 8 months ago
Just removed the need for __CMAKE__ by renaming the Makefile qt4 ui files.
File size: 8.7 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);
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 setEventStep(int step);
68    void nextSlice();
69    void previousSlice();
70    void setCurrentPixel(int);
71
72
73Q_SIGNALS:
74    void signalCurrentEvent(int event);
75    void signalCurrentSlice(int slice);
76    void newFileLoaded();
77    void signalCurrentPixel(int pixel);
78    void signalAutoScaleNeeded();
79
80protected:
81//    void initializeGL();
82//    void resizeGL(int width, int height);
83    void paintGL();
84    void mousePressEvent(QMouseEvent *event);
85    void mouseMoveEvent(QMouseEvent *event);
86    void mouseDoubleClickEvent(QMouseEvent *event);
87    void drawCamera(bool alsoWire);
88//    void drawPatches();
89//    int PixelAtPosition(const QPoint &pos);
90//    void drawHexagon(int index, bool solid);
91    int selectedPixel;
92    float *eventData;
93    float *rmsData;
94    int16_t* rawEventData;
95    int16_t* waveLetArray;
96    valarray<double> RMSvalues;//(1440);
97    valarray<double> Meanvalues;
98    valarray<double> Maxvalues;
99    valarray<double> PosOfMaxvalues;
100
101    ///Used to load zero data in case of missing fits columns
102    void allocateZeroArray();
103    char* fZeroArray;
104    //bool telling whether the data is natively ordered in software or hardware id
105    //used to correctly display monte-carlo data.
106    bool _softwareOrdering;
107
108private:
109    void drawPixelCurve();
110//    void updateNeighbors(int currentPixel);
111//    void skipPixels(int start, int howMany);
112//    void calculatePixelsCoords();
113    bool setCorrectSlice(QMouseEvent* event);
114    void eventStepping(bool plus);
115//    void buildVerticesList();
116//    void buildPatchesIndices();
117    void calcBlurColor(int pixel, int vertex);
118    void calcMidBlurColor(int pixel, int vertex);
119    void drawBlurryHexagon(int index);
120    int whichSlice;
121 //   float shownSizex;
122 //   float shownSizey;
123    bool drawPatch;
124    bool drawImpulse;
125    bool drawBlur;
126    bool loopCurrentEvent;
127    //allocate the maximum size for one event
128    uint32_t boardTime[NBOARDS];
129    int16_t startPix[NPIX];
130    int16_t startTM[NTMARK];
131    int32_t pcTime[2];
132    uint32_t softTrig;
133    uint16_t triggerType;
134    int nRows;
135    int rowNum;
136    int eventNum;
137    int nRoi;
138    int nRoiTM;
139    int offSetRoi;
140    int runNumber;
141    int nTM;
142    std::string runType;
143    int firstDataTime;
144    int lastDataTime;
145    int revision;
146    int builderVersion;
147    int nBoards;
148    int nPixels;
149    std::string timeSystem;
150    std::string creationDate;
151    int nightInt;
152    std::string camera;
153    std::string daq;
154    float adcCount;
155    int nbOk;
156    int nbRej;
157    int nbBad;
158
159    int eventStep;
160
161
162
163
164
165//    int hardwareMapping[1440];
166//    int softwareMapping[1440];
167////    int patches[160][9];
168    GLfloat patchesColor[160][3];
169//    vector<edge> patchesIndices[160];
170    fits* inputFile;
171//    std::fits* calibInputFile;
172//    float baseLineMean[1440*1024];
173//    float gainMean[1440*1024];
174//    float triggerOffsetMean[1440*1024];
175//    bool calibrationLoaded;
176    bool drawCalibrationLoaded;
177
178    QPoint lastPos;
179public:
180    void computePulsesStatistics();
181    double aMeas[1024];
182    double n1mean[1024];
183    double n2mean[1024];
184    double vCorr[1024];
185    int64_t VALUES_SPAN;
186
187    void ApplyCalibration();
188
189//    GLfloat pixelsCoords[MAX_NUM_PIXELS][3];
190//    PixelsNeighbors neighbors[MAX_NUM_PIXELS];
191 //   GLfloat pixelsColor[ACTUAL_NUM_PIXELS][3];
192//    GLfloat verticesList[ACTUAL_NUM_PIXELS*6][2];
193//    int verticesIndices[ACTUAL_NUM_PIXELS][6];
194//    int numVertices;
195};
196
197/*************************************************
198 * Class UIConnector. used to connect the interface to the raw data displayer
199 *************************************************/
200#include "ui_viewer.h"
201
202class Configuration;
203
204class UIConnector : public QMainWindow, protected Ui::MainWindow
205{
206    Q_OBJECT
207private:
208    QTimer timer;
209    std::string currentFile;
210    std::string currentCalibFile;
211
212    QRectF scaleBoundingRectangle(QRectF rectangle, float scale);
213
214    bool updateSpinnerDisplay;
215    bool updating;
216
217    void initHistograms();
218
219public:
220    UIConnector(QWidget *parent = 0);
221    ~UIConnector();
222
223public Q_SLOTS:
224    void fileSelected(QString file);
225    void calibFileSelected(QString file);
226
227    void newFileLoaded();
228    void slicesPerSecondChanged(double value);
229    void nextSlicePlease();
230    void currentSliceHasChanged(int slice);
231    void currentEventHasChanged(int event);
232
233    void on_playPauseButton_clicked();
234    void on_loadNewFileButton_clicked();
235    void on_loadDRSCalibButton_clicked();
236
237    void on_drawPatchCheckBox_stateChanged(int);
238    void on_drawImpulseCheckBox_stateChanged(int);
239    void on_drawBlurCheckBox_stateChanged(int);
240    void on_loopOverCurrentEventBox_stateChanged(int);
241
242    void on_colorRange0_valueChanged(double);
243    void on_colorRange1_valueChanged(double);
244    void on_colorRange2_valueChanged(double);
245    void on_colorRange3_valueChanged(double);
246    void on_colorRange4_valueChanged(double);
247    void on_redValue0_valueChanged(double);
248    void on_redValue1_valueChanged(double);
249    void on_redValue2_valueChanged(double);
250    void on_redValue3_valueChanged(double);
251    void on_redValue4_valueChanged(double);
252    void on_greenValue0_valueChanged(double);
253    void on_greenValue1_valueChanged(double);
254    void on_greenValue2_valueChanged(double);
255    void on_greenValue3_valueChanged(double);
256    void on_greenValue4_valueChanged(double);
257    void on_blueValue0_valueChanged(double);
258    void on_blueValue1_valueChanged(double);
259    void on_blueValue2_valueChanged(double);
260    void on_blueValue3_valueChanged(double);
261    void on_blueValue4_valueChanged(double);
262
263    void on_slicesPerSecValue_valueChanged(double);
264
265    void pixelChanged(int);
266
267    void cbpxChanged();
268
269    void on_HwIDBox_valueChanged(int = 0);
270    void on_SwIDBox_valueChanged(int);
271    void on_crateIDBox_valueChanged(int) { cbpxChanged(); }
272    void on_boardIDBox_valueChanged(int) { cbpxChanged(); }
273    void on_patchIDBox_valueChanged(int) { cbpxChanged(); }
274    void on_pixelIDBox_valueChanged(int) { cbpxChanged(); }
275
276    void on_autoScaleColor_clicked();
277    void on_entireCameraScale_toggled(bool) { on_autoScaleColor_clicked(); }
278    void on_currentPixelScale_toggled(bool) { on_autoScaleColor_clicked(); }
279
280    void slicesPlusPlus();
281    void slicesMinusMinus();
282
283    void on_calibratedCheckBox_stateChanged(int state);
284    void on_displayingSliceBox_valueChanged(int);
285    void on_displayingEventBox_valueChanged(int);
286
287    void displaySliceValue();
288
289    int SetupConfiguration(Configuration &conf);
290
291private:
292    QwtPlotCurve boardsTimeHistoItem;
293    QwtPlotCurve startCellHistoItem;
294    QwtPlotCurve startTimeMarkHistoItem;
295    QwtPlotCurve pixelValueCurveItem;
296    QwtPlotCurve pixelAverageCurveItem;
297    QwtPlotCurve aMeanCurveItem;
298    QwtPlotCurve vCorrCurveItem;
299    QwtPlotCurve meanCurveItem;
300    QwtPlotCurve triggerDelayHistoItem;
301
302    QwtPlotZoomer* curveZoom;
303    QwtPlotZoomer* averageCurveZoom;
304    QwtPlotZoomer* boardsTimeHistoZoom;
305    QwtPlotZoomer* startCellHistoZoom;
306    QwtPlotZoomer* startTimeMarkHistoZoom;
307    QwtPlotZoomer* triggerDelayHistoZoom;
308
309    //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)
310    QwtPlotGrid* grid1;
311    QwtPlotGrid* grid2;
312    QwtPlotGrid* grid3;
313    QwtPlotGrid* grid4;
314    QwtPlotGrid* grid5;
315    QwtPlotGrid* grid6;
316};
317
318#endif /* QTGL_H_ */
Note: See TracBrowser for help on using the repository browser.