Subversion Repositories f9daq

Rev

Rev 167 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
146 f9daq 1
#ifndef __ROOT_APP_H__
2
#define __ROOT_APP_H__
3
 
4
//#define winWidth 1240
5
//#define winHeight 800
6
#define WINDOW_NAME "CAMAC/MPOD/4MM DAQ software"
7
#define measwin 3
8
#define analysiswin 4
9
#define BSIZE 10000
10
 
11
#include "root_include.h"
12
#include "substructure.h"
13
#include "daq.h"
14
#include "daqscope.h"
15
#include <iostream>
16
#include <fstream>
17
#include <cmath>
18
#include <time.h>
19
 
20
enum EMenuIds {
21
   M_FILE_SET_LAYOUT,
22
   M_FILE_SAVE_LAYOUT,
23
   M_FILE_SAVE_MSETTINGS,
24
   M_FILE_SAVE_ASETTINGS,
25
   M_FILE_CHECK_WIDTH,
26
   M_FILE_EXIT,
27
 
28
   M_ANALYSIS_HISTTYPE_1DADC,
29
   M_ANALYSIS_HISTTYPE_1DTDC,
30
   M_ANALYSIS_HISTTYPE_2D,
31
   M_ANALYSIS_INTEG,
32
   M_ANALYSIS_INTEGX,
33
   M_ANALYSIS_INTEGY,
34
   M_ANALYSIS_PHOTMU,
35
   M_ANALYSIS_BREAKDOWN,
36
   M_ANALYSIS_SURFSCAN,
37
   M_ANALYSIS_TIMING,
38
 
39
   M_HELP_WEBHELP,
40
   M_HELP_ABOUT
41
};
42
 
43
// Separate functions -----------------------------------------
44
void GetTime(int intime, char *outtime);
45
void remove_ext(char *inname, char *outname);
46
void remove_from_last(char *inname, char search, char *outname);
47
void remove_before_last(char *inname, char search, char *outname);
48
void layoutMainWindow(int *w, int *h);
49
void SeqNumber(int innum, int maxnum, char *outstr);
50
void TimeEstimate(clock_t stopw0, time_t time0, float progress, char *retEstim, int offset);
51
void NormateSet(int file, int nrpoint, double *min, double *max, double *setCount, double *setAcc);
52
double PointEstimate(int nrp, double *points);
53
// Separate functions -----------------------------------------
54
 
55
 
56
// Window classes ----------------------------------------------------
57
//class TGWindow;
58
//class TGMainFrame;
59
 
60
// Subwindow layout class
61
/*class TGMdiSubwindow
62
{
63
RQ_OBJECT("TGMdiSubwindow")
64
 
65
protected:
66
   TGMdiFrame *fMdiFrame;
67
 
68
public:
69
   TGMdiSubwindow(TGMdiMainFrame *main, int w, int h);
70
   TGMdiFrame *GetMdiFrame() const { return fMdiFrame; }
71
   // layoutchange is 0 when we close a subwindow and 1 when we change the layout (close multiple subwindows)
72
   virtual Bool_t CloseWindow(int layoutchange);
73
 
74
   // unique id is set for each subwindow
75
   //  settingsPane->id = 0
76
   int id;
77
};*/
78
 
79
// Main window class
80
class TGAppMainFrame
81
{
82
RQ_OBJECT("TGAppMainFrame")
83
 
84
protected:
85
   TGMainFrame *fMain;
86
//   TGMdiMainFrame *fMainFrame;
87
//   TGMdiMenuBar *fMenuBar;
88
   TGMenuBar *fMenuBar;
89
   TGLayoutHints *fMenuBarItemLayout;
90
   TGPopupMenu *fMenuFile, *fMenuAnalysis, *fMenuHelp, *fMenuHisttype;
91
   TGTab *fTab, *analTab;
92
   int winWidth;
93
   int winHeight;
94
//   TGMdiSubwindow *settingsPane;
95
 
96
   // Variables for frame layouts and titles
97
   TGCompositeFrame *fLayout[2];
98
   TGHorizontalFrame *fTitle;
99
 
100
   void InitMenu();
101
   void AppLayout();
102
   void OpenWindow(int winid);
103
   void CloseWindow();
104
   Bool_t About();
105
 
106
   int idtotal;
107
   bool cleanPlots;
108
   int logChange;
109
   int selChannel;
110
   bool acqStarted;
111
   unsigned int gBuf[BSIZE];
112
   clock_t clkt0;
113
   time_t timet0;
114
   bool liveUpdate;
115
   int npeaks;
116
 
117
public:
118
   TGAppMainFrame(const TGWindow *p, int w, int h);
119
   virtual ~TGAppMainFrame();
120
 
121
   void HandleMenu(Int_t id);
122
 
123
   // Splitter to a set number of frames
124
   bool TGSplitter(TGWindow *parent, const char *majorSplit, int *vertSplits, int *horSplits, const char *frameTitles[512], TGCompositeFrame **frames, int *frameWidth, int *frameHeight);
125
   void TGTitleLabel(TGWindow *parent, TGHorizontalFrame *fTitle, const char *title, Pixel_t foreColor, Pixel_t backColor, const char *font);
126
 
127
   // Layout setup
128
   void LayoutRead(int nrframes, int *w, int *h);
129
   void LayoutSave();
130
   void LayoutSet();
131
   void ToolTipSet();
132
 
133
   // Subframes where we display everything
134
   TGCompositeFrame *measLayout[measwin];
135
   TGCompositeFrame *analysisLayout[analysiswin];
136
 
137
   // Substructures for Settings pane (measurement layout)
138
   TSubStructure *scansOn;
139
   TSubStructure *vHardlimit;
140
   TSubStructure *NCH;
141
   TSubStructure *posUnits;
142
   TSubStructure *rotUnits;
143
   TSubStructure *oscConnect;
144
   TSubStructure *laserInfo;
145
   TSubStructure *chtemp;
146
   TSubStructure *liveDisp;
147
 
148
   // Substructures for Measurement pane (measurement layout)
149
   TSubStructure *vOutCh;
150
   TSubStructure *vOut;
151
   TSubStructure *vOutOpt;
152
   TSubStructure *vOutButtons;
153
   TSubStructure *vOutStart;
154
   TSubStructure *vOutStop;
155
   TSubStructure *vOutStep;
156
   TSubStructure *xPos;
157
   TSubStructure *yPos;
158
   TSubStructure *zPos;
159
   TSubStructure *zPosMin;
160
   TSubStructure *zPosMax;
161
   TSubStructure *zPosStep;
162
   TSubStructure *posButtons;
163
   TSubStructure *xPosMin;
164
   TSubStructure *xPosMax;
165
   TSubStructure *xPosStep;
166
   TSubStructure *yPosMin;
167
   TSubStructure *yPosMax;
168
   TSubStructure *yPosStep;
169
   TSubStructure *rotPos;
170
   TSubStructure *rotButtons;
171
   TSubStructure *rotPosMin;
172
   TSubStructure *rotPosMax;
173
   TSubStructure *rotPosStep;
174
   TSubStructure *evtNum;
175
   TSubStructure *timeStamp;
176
   TSubStructure *fileName;
177
   TSubStructure *measProgress;
178
 
179
   // Substructures for Display pane (measurement layout)
180
   TRootEmbeddedCanvas *measCanvas;
181
 
182
   // Action connections for Settings pane (measurement layout)
183
   void EnableScan(int type);
184
   void VoltageLimit();
185
   void ChangeUnits(int type);
186
   void ChangeUnitsRot(int type);
187
   void EnableLiveUpdate();
188
 
189
   // Action connections for Measurement pane (measurement layout)
190
   int GetChannel();
191
   void NegativePolarity();
192
   void VoltOut(int opt);
193
   void PositionSet(int opt);
194
   void RotationSet(int opt);
195
   void SaveFile();
196
   void StartAcq();
197
 
198
   // Substructures for Histogram selection pane (analysis layout)
199
   TSubStructure *selectDir;
200
   TGListBox *fileList;
201
   TSubStructure *multiSelect;
202
   TSubStructure *fileListCtrl;
203
   TSubStructure *dispTime;
204
   TSubStructure *dispBias;
205
   TSubStructure *dispPos;
206
   TSubStructure *dispTemp;
207
   TSubStructure *dispAngle;
208
   TSubStructure *dispLaser;
209
 
210
   // Substructures for Histogram pane (analysis layout)
211
   TRootEmbeddedCanvas *analysisCanvas;
212
 
213
   // Substructures for Histogram controls pane (analysis layout)
214
   TSubStructure *adcRange;
215
   TSubStructure *tdcRange;
216
   TSubStructure *yRange;
217
   TSubStructure *selectCh;
218
   TSubStructure *plotType;
219
   TSubStructure *histOpt;
220
   TSubStructure *exportHist;
221
   TSubStructure *editSelHist;
222
 
223
   // Substructures for analysis pane (analysis layout)
224
   TSubStructure *intSpect;
225
   TSubStructure *resol2d;
226
   TSubStructure *intSpectButtons;
227
 
228
   TSubStructure *relPde;
229
   TSubStructure *midPeak;
230
   TSubStructure *darkRun;
231
   TSubStructure *zeroAngle;
232
   TSubStructure *relPdeButtons;
233
 
234
   TSubStructure *minPeak;
235
   TSubStructure *peakSepCalc;
236
   TSubStructure *brDownButtons;
237
 
238
   TSubStructure *surfScanOpt;
239
   TSubStructure *resolSurf;
240
   TSubStructure *surfButtons;
241
 
242
   TSubStructure *fitSigma;
243
   TSubStructure *fitTresh;
244
   TSubStructure *fitInter;
245
   TSubStructure *adcOffset;
246
   TSubStructure *accError;
247
   TSubStructure *pedesLow;
248
   TSubStructure *fitChecks;
249
   TSubStructure *analysisProgress;
250
 
251
   // Action connections for Histogram file selection pane (analysis layout)
252
   void SelectDirectory();
253
   void ListMultiSelect(int opt);
254
   void FileListNavigation(int opt);
255
   void HeaderEdit();
256
   void ClearHistogramList();
257
 
258
   // Action connections for Histogram controls pane (analysis layout)
259
   void UpdateHistogram(int opt);
260
   void HistogramOptions(int opt);
261
   void ChangeHisttype(int type);
262
 
263
   // Action connections for analysis pane (analysis layout)
264
   void SelectDarkHist();
265
   void AnalysisDefaults();
266
   void AnalysisHandle(int type);
267
   void IntegSpectrum(TList *files, int direction, int edit);
268
   void PhotonMu(TList *files, int edit);
269
   void PlotEdgeDistribution(TList *files, int filenr, int points, double *min, double *max, double *xy, double *integAcc, int axis, bool edge2d, int edit);
270
   void BreakdownVolt(TList *files, int edit);
271
   void SurfaceScan(TList *files, int edit);
272
 
273
   // Substructures for Edit file header window (new tab)
274
   TGListBox *editList;
275
   TSubStructure *timeEditDisplay;
276
   TSubStructure *biasEdit;
277
   TSubStructure *xPosEdit;
278
   TSubStructure *yPosEdit;
279
   TSubStructure *zPosEdit;
280
   TSubStructure *tempEdit;
281
   TSubStructure *angleEdit;
282
   TSubStructure *laserEdit;
283
   TSubStructure *editHead;
284
   TSubStructure *editMulti;
285
   TGLabel *selectWarn;
286
 
287
   // Action connections for Edit file header window (new tab)
288
   void SetWarnings();
289
   void EditTickToggle(int type);
290
   void StartHeaderEdit();
291
   void ShowHeaderEdit(int id);
292
   void HeaderChange(char *histfile, bool *changetype);
293
   void CloseEditTab(int tabval);
294
 
295
   // Substructures for temporary analysis edit window (new tab)
296
   TRootEmbeddedCanvas *tempAnalysisCanvas;
297
   TSubStructure *runningAver;
298
   TSubStructure *runningOff;
299
   TSubStructure *secondAxis;
300
   TSubStructure *exportExitAnalysis;
301
 
302
   // Action connections for temporary analysis edit window (new tab)
303
   void ApplyRunningAver();
304
   void CloseTempAnalysisTab(int tabval);
305
 
306
   // Additional functions
307
   void DisplayHistogram(char *histfile, int histtype, int opt);
308
   void HeaderEditTab(TGTab *mainTab, bool create, int *tabid);
309
   void TempAnalysisTab(TGTab *mainTab, bool create, int *tabid, int analtype);
310
   void RunMeas(void *ptr, int runCase, int &scanon);
311
   int MyTimer();
312
 
313
// ROOT file variable structure -------------------------------
314
   struct EventHeader {
315
     int nrch;
316
     int timestamp;
317
     double biasvolt;
318
     int xpos;
319
     int ypos;
320
     int zpos;
321
     double temperature;
322
     double angle;
323
     char laserinfo[256];
324
   } evtheader;
325
 
326
   struct EventData {
327
     int adcdata[8];
328
     int tdcdata[8];
329
   } evtdata;
330
 
331
   struct EventMeas {
332
     double measdata;
333
   } evtmeas;
334
 
335
   TFile *inroot;
336
   TFile *outroot;
337
// ROOT file variable structure -------------------------------
338
 
339
   daq *gDaq;
340
   daqscope *gScopeDaq;
341
};
342
 
343
// -------------------------------------------------------------------
344
 
345
#endif