2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
10 #include "AliEveTPCLoaderEditor.h"
12 #include <EveDet/AliEveTPCLoader.h>
13 #include <EveDet/AliEveTPCData.h>
15 #include <TEveManager.h>
16 #include <TEveGValuators.h>
19 #include <TVirtualPad.h>
24 #include <TGTextEntry.h>
25 #include <TGNumberEntry.h>
26 #include <TGFileDialog.h>
27 #include <TGToolTip.h>
30 //______________________________________________________________________________
32 // Editor for AliEveTPCLoader.
34 ClassImp(AliEveTPCLoaderEditor)
36 AliEveTPCLoaderEditor::AliEveTPCLoaderEditor(const TGWindow *p,
37 Int_t width, Int_t height,
38 UInt_t options, Pixel_t back) :
39 TGedFrame(p, width, height, options | kVerticalFrame, back),
49 fDataLoadThreshold (0),
50 fDataLoadPedestal (0),
51 fDataAutoPedestal (0),
60 MakeTitle("AliEveTPCLoader");
64 // File / event interface
68 TGHorizontalFrame* f = new TGHorizontalFrame(this);
69 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
70 TGLabel* l = new TGLabel(g, "File: ");
71 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
73 fFile = new TGTextEntry(f);
76 fFile->Connect("DoubleClicked()",
77 "AliEveTPCLoaderEditor", this, "FileSelect()");
78 fFile->Connect("TextChanged(const char *)",
79 "AliEveTPCLoaderEditor", this, "FileChanged()");
80 fOpenFile = new TGTextButton(f, "Open");
81 f->AddFrame(fOpenFile);
82 fOpenFile->Connect("Clicked()",
83 "AliEveTPCLoaderEditor", this, "DoOpen()");
87 fEvent = new TEveGValuator(this, "Event:", 110, 0);
88 fEvent->SetShowSlider(kFALSE);
89 fEvent->SetLabelWidth(labelW);
90 fEvent->SetNELength(6);
92 fEvent->SetLimits(0, 999999);
93 fEvent->SetToolTip("Current event number");
94 fEvent->Connect("ValueSet(Double_t)",
95 "AliEveTPCLoaderEditor", this, "DoEvent()");
96 // Reuse Event for DoubleSR button
97 fDoubleSR = new TGCheckButton(fEvent, "Double SR");
98 fDoubleSR->SetToolTipText("Double sampling rate");
99 fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
100 fDoubleSR->Connect("Toggled(Bool_t)",
101 "AliEveTPCLoaderEditor", this, "DoDoubleSR()");
105 // AliEveTPCData load settings
109 fDataLoadThreshold = new TEveGValuator(this, "Load threshold:", 110, 0);
110 fDataLoadThreshold->SetShowSlider(kFALSE);
111 fDataLoadThreshold->SetLabelWidth(labelW);
112 fDataLoadThreshold->SetNELength(6);
113 fDataLoadThreshold->Build();
114 fDataLoadThreshold->SetLimits(0, 1000);
115 fDataLoadThreshold->SetToolTip("Minimum signal that will be stored (pedestal subtracted first).");
116 fDataLoadThreshold->Connect
117 ("ValueSet(Double_t)",
118 "AliEveTPCLoaderEditor", this, "DoDataLoadThreshold()");
119 AddFrame(fDataLoadThreshold, new TGLayoutHints(kLHintsLeft, 0, 0, 6, 0));
121 fDataLoadPedestal = new TEveGValuator(this, "Load pedestal:", 110, 0);
122 fDataLoadPedestal->SetShowSlider(kFALSE);
123 fDataLoadPedestal->SetLabelWidth(labelW);
124 fDataLoadPedestal->SetNELength(6);
125 fDataLoadPedestal->Build();
126 fDataLoadPedestal->SetLimits(0, 1000);
127 fDataLoadPedestal->SetToolTip("Pedestal that will be subtracted during data loading.");
128 fDataLoadPedestal->Connect
129 ("ValueSet(Double_t)",
130 "AliEveTPCLoaderEditor", this, "DoDataLoadPedestal()");
131 // Reuse DataLoadPedestal for DataAutoPedestal check button
132 fDataAutoPedestal = new TGCheckButton(fDataLoadPedestal, "Automatic");
133 fDataAutoPedestal->SetToolTipText("Determine per-pad pedestal during data loading.");
134 fDataAutoPedestal->Connect
136 "AliEveTPCLoaderEditor", this, "DoDataAutoPedestal()");
137 fDataLoadPedestal->AddFrame(fDataAutoPedestal, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
138 AddFrame(fDataLoadPedestal);
140 // Steering buttons: update/reload sectors; show/hide 3d
143 TGHorizontalFrame* f = new TGHorizontalFrame(this);
144 fUpdateSectors = new TGTextButton(f, "Update Sectors");
145 f->AddFrame(fUpdateSectors, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
146 fUpdateSectors->Connect("Clicked()",
147 "AliEveTPCLoaderEditor", this, "DoUpdateSectors()");
148 fReloadSectors = new TGTextButton(f, "Reload Sectors");
149 f->AddFrame(fReloadSectors, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
150 fReloadSectors->Connect("Clicked()",
151 "AliEveTPCLoaderEditor", this, "DoReloadSectors()");
152 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
155 TGHorizontalFrame* f = new TGHorizontalFrame(this);
156 fCreateSectors3D = new TGTextButton(f, "Create 3D");
157 f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
158 fCreateSectors3D->Connect("Clicked()",
159 "AliEveTPCLoaderEditor", this, "DoCreateSectors3D()");
160 fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
161 f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
162 fDeleteSectors3D->Connect("Clicked()",
163 "AliEveTPCLoaderEditor", this, "DoDeleteSectors3D()");
164 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
168 /******************************************************************************/
170 void AliEveTPCLoaderEditor::SetModel(TObject* obj)
174 fM = dynamic_cast<AliEveTPCLoader*>(obj);
176 // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
177 fFile->SetText(fM->fFile);
178 fEvent->SetValue(fM->fEvent);
179 fEvent->SetEnabled(fM->fEvent >= 0);
180 fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp);
182 AliEveTPCData* tpcd = fM->GetData();
183 Bool_t tpcp = (tpcd != 0);
184 fDataLoadThreshold->SetEnabled(tpcp);
185 fDataLoadPedestal ->SetEnabled(tpcp && ! tpcd->GetAutoPedestal());
186 fDataAutoPedestal ->SetEnabled(tpcp);
188 fDataLoadThreshold->SetValue(tpcd->GetLoadThreshold());
189 fDataLoadPedestal ->SetValue(tpcd->GetLoadPedestal());
190 fDataAutoPedestal ->SetState(tpcd->GetAutoPedestal() ? kButtonDown : kButtonUp);
194 /******************************************************************************/
195 /******************************************************************************/
197 void AliEveTPCLoaderEditor::FileSelect()
199 // Slot for FileSelect.
201 static const char *kTPCFileTypes[] = {
202 "Root files", "*.root",
208 fi.fIniDir = StrDup(gSystem->DirName (fM->fFile));
209 fi.fFilename = StrDup(gSystem->BaseName(fM->fFile));
210 fi.fFileTypes = kTPCFileTypes;
212 new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
216 fFile->SetText(fi.fFilename);
219 void AliEveTPCLoaderEditor::FileChanged()
221 // Slot for FileChanged.
223 fM->fFile = fFile->GetText();
226 void AliEveTPCLoaderEditor::DoOpen()
234 /******************************************************************************/
236 void AliEveTPCLoaderEditor::DoEvent()
240 fM->GotoEvent((Int_t) fEvent->GetValue());
244 void AliEveTPCLoaderEditor::DoDoubleSR()
246 // Slot for DoubleSR.
248 fM->SetDoubleSR(fDoubleSR->IsOn());
252 /******************************************************************************/
254 void AliEveTPCLoaderEditor::DoDataLoadThreshold()
256 // Slot for DataLoadThreshold.
258 if (fM->GetData() == 0) return;
259 fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
262 void AliEveTPCLoaderEditor::DoDataLoadPedestal()
264 // Slot for DataLoadPedestal.
266 if (fM->GetData() == 0) return;
267 fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
270 void AliEveTPCLoaderEditor::DoDataAutoPedestal()
272 // Slot for DataAutoPedestal.
274 if (fM->GetData() == 0) return;
275 fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
276 fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
279 /******************************************************************************/
281 void AliEveTPCLoaderEditor::DoUpdateSectors()
283 // Slot for UpdateSectors.
288 void AliEveTPCLoaderEditor::DoReloadSectors()
290 // Slot for ReloadSectors.
295 void AliEveTPCLoaderEditor::DoCreateSectors3D()
297 // Slot for CreateSectors3D.
299 fM->CreateSectors3D();
303 void AliEveTPCLoaderEditor::DoDeleteSectors3D()
305 // Slot for DeleteSectors3D.
307 fM->DeleteSectors3D();