]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Alieve/TPCLoaderEditor.cxx
Scaling option and more comentaries added
[u/mrichter/AliRoot.git] / EVE / Alieve / TPCLoaderEditor.cxx
CommitLineData
e9a38ea3 1// $Header$
2
3#include "TPCLoaderEditor.h"
4#include <Alieve/TPCLoader.h>
10b1edfc 5#include <Alieve/TPCData.h>
32e219c2 6#include <Reve/ReveManager.h>
e9a38ea3 7#include <Reve/RGValuators.h>
8
9#include <TSystem.h>
10#include <TVirtualPad.h>
11#include <TColor.h>
12
13#include <TGLabel.h>
14#include <TGButton.h>
15#include <TGTextEntry.h>
16#include <TGNumberEntry.h>
17#include <TGFileDialog.h>
89ec258e 18#include <TGToolTip.h>
e9a38ea3 19
20using namespace Reve;
21using namespace Alieve;
22
23//______________________________________________________________________
24// TPCLoaderEditor
25//
26
27ClassImp(TPCLoaderEditor)
28
10b1edfc 29 TPCLoaderEditor::TPCLoaderEditor(const TGWindow *p,
30 Int_t width, Int_t height,
31 UInt_t options, Pixel_t back) :
32 TGedFrame(p, width, height, options | kVerticalFrame, back),
265ecb21 33
10b1edfc 34 fM (0),
265ecb21 35
10b1edfc 36 fFile (0),
37 fOpenFile (0),
265ecb21 38
10b1edfc 39 fEvent (0),
40 fDoubleSR (0),
265ecb21 41
10b1edfc 42 fDataLoadThreshold (0),
43 fDataLoadPedestal (0),
44 fDataAutoPedestal (0),
45
46 fUpdateSectors (0),
47 fReloadSectors (0),
48 fCreateSectors3D (0),
49 fDeleteSectors3D (0)
e9a38ea3 50{
e9a38ea3 51 MakeTitle("TPCLoader");
52
10b1edfc 53 Int_t labelW;
54
55 // File / event interface
56
57 labelW = 42;
e9a38ea3 58 {
59 TGHorizontalFrame* f = new TGHorizontalFrame(this);
60 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
61 TGLabel* l = new TGLabel(g, "File: ");
62 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
63 f->AddFrame(g);
64 fFile = new TGTextEntry(f);
65 fFile->SetWidth(140);
66 f->AddFrame(fFile);
67 fFile->Connect("DoubleClicked()",
68 "Alieve::TPCLoaderEditor", this, "FileSelect()");
69 fFile->Connect("TextChanged(const char *)",
70 "Alieve::TPCLoaderEditor", this, "FileChanged()");
71 fOpenFile = new TGTextButton(f, "Open");
72 f->AddFrame(fOpenFile);
73 fOpenFile->Connect("Clicked()",
74 "Alieve::TPCLoaderEditor", this, "DoOpen()");
75 AddFrame(f);
76 }
77
78 fEvent = new RGValuator(this, "Event:", 110, 0);
79 fEvent->SetShowSlider(kFALSE);
80 fEvent->SetLabelWidth(labelW);
81 fEvent->SetNELength(6);
82 fEvent->Build();
83 fEvent->SetLimits(0, 1000);
84 fEvent->SetToolTip("Current event number");
85 fEvent->Connect("ValueSet(Double_t)",
86 "Alieve::TPCLoaderEditor", this, "DoEvent()");
6e91772d 87 // Reuse Event for DoubleSR button
88 fDoubleSR = new TGCheckButton(fEvent, "Double SR");
89 fDoubleSR->SetToolTipText("Double sampling rate");
10b1edfc 90 fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
b6b01ba3 91 fDoubleSR->Connect("Toggled(Bool_t)",
92 "Alieve::TPCLoaderEditor", this, "DoDoubleSR()");
e9a38ea3 93 AddFrame(fEvent);
94
10b1edfc 95
96 // TPCData load settings
97
98 labelW = 90;
99
100 fDataLoadThreshold = new RGValuator(this, "Load threshold:", 110, 0);
101 fDataLoadThreshold->SetShowSlider(kFALSE);
102 fDataLoadThreshold->SetLabelWidth(labelW);
103 fDataLoadThreshold->SetNELength(6);
104 fDataLoadThreshold->Build();
105 fDataLoadThreshold->SetLimits(0, 1000);
fe83f7ce 106 fDataLoadThreshold->SetToolTip("Minimum signal that will be stored (pedestal subtracted first).");
10b1edfc 107 fDataLoadThreshold->Connect
108 ("ValueSet(Double_t)",
109 "Alieve::TPCLoaderEditor", this, "DoDataLoadThreshold()");
110 AddFrame(fDataLoadThreshold, new TGLayoutHints(kLHintsLeft, 0, 0, 6, 0));
111
112 fDataLoadPedestal = new RGValuator(this, "Load pedestal:", 110, 0);
113 fDataLoadPedestal->SetShowSlider(kFALSE);
114 fDataLoadPedestal->SetLabelWidth(labelW);
115 fDataLoadPedestal->SetNELength(6);
116 fDataLoadPedestal->Build();
117 fDataLoadPedestal->SetLimits(0, 1000);
118 fDataLoadPedestal->SetToolTip("Pedestal that will be subtracted during data loading.");
119 fDataLoadPedestal->Connect
120 ("ValueSet(Double_t)",
121 "Alieve::TPCLoaderEditor", this, "DoDataLoadPedestal()");
122 // Reuse DataLoadPedestal for DataAutoPedestal check button
123 fDataAutoPedestal = new TGCheckButton(fDataLoadPedestal, "Automatic");
124 fDataAutoPedestal->SetToolTipText("Determine per-pad pedestal during data loading.");
125 fDataAutoPedestal->Connect
126 ("Toggled(Bool_t)",
127 "Alieve::TPCLoaderEditor", this, "DoDataAutoPedestal()");
128 fDataLoadPedestal->AddFrame(fDataAutoPedestal, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
129 AddFrame(fDataLoadPedestal);
130
131 // Steering buttons: update/reload sectors; show/hide 3d
132
133 {
134 TGHorizontalFrame* f = new TGHorizontalFrame(this);
135 fUpdateSectors = new TGTextButton(f, "Update Sectors");
136 f->AddFrame(fUpdateSectors, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
137 fUpdateSectors->Connect("Clicked()",
138 "Alieve::TPCLoaderEditor", this, "DoUpdateSectors()");
139 fReloadSectors = new TGTextButton(f, "Reload Sectors");
140 f->AddFrame(fReloadSectors, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
141 fReloadSectors->Connect("Clicked()",
142 "Alieve::TPCLoaderEditor", this, "DoReloadSectors()");
143 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
144 }
e9a38ea3 145 {
146 TGHorizontalFrame* f = new TGHorizontalFrame(this);
147 fCreateSectors3D = new TGTextButton(f, "Create 3D");
148 f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
149 fCreateSectors3D->Connect("Clicked()",
10b1edfc 150 "Alieve::TPCLoaderEditor", this, "DoCreateSectors3D()");
e9a38ea3 151 fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
152 f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
153 fDeleteSectors3D->Connect("Clicked()",
10b1edfc 154 "Alieve::TPCLoaderEditor", this, "DoDeleteSectors3D()");
e9a38ea3 155 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
156 }
e9a38ea3 157}
158
159TPCLoaderEditor::~TPCLoaderEditor()
160{}
161
162/**************************************************************************/
163
a8600b56 164void TPCLoaderEditor::SetModel(TObject* obj)
e9a38ea3 165{
a8600b56 166 fM = dynamic_cast<TPCLoader*>(obj);
e9a38ea3 167
89ec258e 168 // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
169 fFile->SetToolTipText(gSystem->DirName(fM->fFile));
170 fFile->SetText(gSystem->BaseName(fM->fFile));
e9a38ea3 171 fEvent->SetValue(fM->fEvent);
172 fEvent->SetEnabled(fM->fEvent >= 0);
10b1edfc 173 fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp);
174
175 TPCData* tpcd = fM->GetData();
176 Bool_t tpcp = (tpcd != 0);
177 fDataLoadThreshold->SetEnabled(tpcp);
178 fDataLoadPedestal ->SetEnabled(tpcp && ! tpcd->GetAutoPedestal());
179 fDataAutoPedestal ->SetEnabled(tpcp);
180 if (tpcp) {
181 fDataLoadThreshold->SetValue(tpcd->GetLoadThreshold());
182 fDataLoadPedestal ->SetValue(tpcd->GetLoadPedestal());
183 fDataAutoPedestal ->SetState(tpcd->GetAutoPedestal() ? kButtonDown : kButtonUp);
184 }
e9a38ea3 185}
186
187/**************************************************************************/
188/**************************************************************************/
189
190namespace {
191const char *tpcfiletypes[] = {
192 "Root files", "*.root",
193 "All files", "*.*",
194 0, 0
195};
196}
197
198void TPCLoaderEditor::FileSelect()
199{
200 TGFileInfo fi;
fda47a05 201 fi.fIniDir = StrDup(gSystem->DirName (fM->fFile));
202 fi.fFilename = StrDup(gSystem->BaseName(fM->fFile));
e9a38ea3 203 fi.fFileTypes = tpcfiletypes;
89ec258e 204
32e219c2 205 new TGFileDialog(fClient->GetRoot(), gReve->GetMainWindow(), kFDOpen, &fi);
89ec258e 206 if (!fi.fFilename)
207 return;
208
209 fFile->SetToolTipText(gSystem->DirName (fi.fFilename));
210 fFile->SetText (gSystem->BaseName(fi.fFilename));
e9a38ea3 211}
212
213void TPCLoaderEditor::FileChanged()
214{
89ec258e 215 fM->fFile = Form("%s/%s", fFile->GetToolTip()->GetText()->Data(),
216 fFile->GetText());
e9a38ea3 217}
218
219void TPCLoaderEditor::DoOpen()
220{
221 fM->OpenFile();
a8600b56 222 SetModel(fM);
e9a38ea3 223}
224
225/**************************************************************************/
226
227void TPCLoaderEditor::DoEvent()
228{
229 fM->GotoEvent((Int_t) fEvent->GetValue());
a8600b56 230 SetModel(fM);
e9a38ea3 231}
232
6e91772d 233void TPCLoaderEditor::DoDoubleSR()
234{
235 fM->SetDoubleSR(fDoubleSR->IsOn());
236 Update();
237}
238
e9a38ea3 239/**************************************************************************/
240
10b1edfc 241void TPCLoaderEditor::DoDataLoadThreshold()
242{
243 if (fM->GetData() == 0) return;
244 fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
245}
246
247void TPCLoaderEditor::DoDataLoadPedestal()
248{
249 if (fM->GetData() == 0) return;
250 fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
251}
252
253void TPCLoaderEditor::DoDataAutoPedestal()
254{
255 if (fM->GetData() == 0) return;
256 fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
257 fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
258}
259
260/**************************************************************************/
261
e9a38ea3 262void TPCLoaderEditor::DoUpdateSectors()
263{
264 fM->UpdateSectors();
265}
266
10b1edfc 267void TPCLoaderEditor::DoReloadSectors()
268{
269 fM->ReloadSectors();
270}
271
e9a38ea3 272void TPCLoaderEditor::DoCreateSectors3D()
273{
274 fM->CreateSectors3D();
275}
276
277
278void TPCLoaderEditor::DoDeleteSectors3D()
279{
280 fM->DeleteSectors3D();
281}
282