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

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