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

Last change on this file was 19376, checked in by tbretz, 19 months 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.