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 <TEveScene.h>
16 #include <TEveManager.h>
17 #include <TEveGValuators.h>
18 #include <TGDoubleSlider.h>
21 #include <TVirtualPad.h>
26 #include <TGTextEntry.h>
27 #include <TGNumberEntry.h>
28 #include <TGFileDialog.h>
29 #include <TGToolTip.h>
32 //______________________________________________________________________________
34 // Editor for AliEveTPCLoader.
36 ClassImp(AliEveTPCLoaderEditor)
38 AliEveTPCLoaderEditor::AliEveTPCLoaderEditor(const TGWindow *p,
39 Int_t width, Int_t height,
40 UInt_t options, Pixel_t back) :
41 TGedFrame(p, width, height, options | kVerticalFrame, back),
51 fDataLoadThreshold (0),
52 fDataLoadPedestal (0),
53 fDataAutoPedestal (0),
66 MakeTitle("AliEveTPCLoader");
70 // File / event interface
74 TGHorizontalFrame* f = new TGHorizontalFrame(this);
75 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
76 TGLabel* l = new TGLabel(g, "File: ");
77 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
79 fFile = new TGTextEntry(f);
82 fFile->Connect("DoubleClicked()",
83 "AliEveTPCLoaderEditor", this, "FileSelect()");
84 fFile->Connect("TextChanged(const char *)",
85 "AliEveTPCLoaderEditor", this, "FileChanged()");
86 fOpenFile = new TGTextButton(f, "Open");
87 f->AddFrame(fOpenFile);
88 fOpenFile->Connect("Clicked()",
89 "AliEveTPCLoaderEditor", this, "DoOpen()");
93 fEvent = new TEveGValuator(this, "Event:", 110, 0);
94 fEvent->SetShowSlider(kFALSE);
95 fEvent->SetLabelWidth(labelW);
96 fEvent->SetNELength(6);
98 fEvent->SetLimits(0, 999999);
99 fEvent->SetToolTip("Current event number");
100 fEvent->Connect("ValueSet(Double_t)",
101 "AliEveTPCLoaderEditor", this, "DoEvent()");
102 // Reuse Event for DoubleSR button
103 fDoubleSR = new TGCheckButton(fEvent, "Double SR");
104 fDoubleSR->SetToolTipText("Double sampling rate");
105 fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
106 fDoubleSR->Connect("Toggled(Bool_t)",
107 "AliEveTPCLoaderEditor", this, "DoDoubleSR()");
111 // AliEveTPCData load settings
115 fDataLoadThreshold = new TEveGValuator(this, "Load threshold:", 110, 0);
116 fDataLoadThreshold->SetShowSlider(kFALSE);
117 fDataLoadThreshold->SetLabelWidth(labelW);
118 fDataLoadThreshold->SetNELength(6);
119 fDataLoadThreshold->Build();
120 fDataLoadThreshold->SetLimits(0, 1000);
121 fDataLoadThreshold->SetToolTip("Minimum signal that will be stored (pedestal subtracted first).");
122 fDataLoadThreshold->Connect
123 ("ValueSet(Double_t)",
124 "AliEveTPCLoaderEditor", this, "DoDataLoadThreshold()");
125 AddFrame(fDataLoadThreshold, new TGLayoutHints(kLHintsLeft, 0, 0, 6, 0));
127 fDataLoadPedestal = new TEveGValuator(this, "Load pedestal:", 110, 0);
128 fDataLoadPedestal->SetShowSlider(kFALSE);
129 fDataLoadPedestal->SetLabelWidth(labelW);
130 fDataLoadPedestal->SetNELength(6);
131 fDataLoadPedestal->Build();
132 fDataLoadPedestal->SetLimits(0, 1000);
133 fDataLoadPedestal->SetToolTip("Pedestal that will be subtracted during data loading.");
134 fDataLoadPedestal->Connect
135 ("ValueSet(Double_t)",
136 "AliEveTPCLoaderEditor", this, "DoDataLoadPedestal()");
137 // Reuse DataLoadPedestal for DataAutoPedestal check button
138 fDataAutoPedestal = new TGCheckButton(fDataLoadPedestal, "Automatic");
139 fDataAutoPedestal->SetToolTipText("Determine per-pad pedestal during data loading.");
140 fDataAutoPedestal->Connect
142 "AliEveTPCLoaderEditor", this, "DoDataAutoPedestal()");
143 fDataLoadPedestal->AddFrame(fDataAutoPedestal, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
144 AddFrame(fDataLoadPedestal);
146 // Steering buttons: update/reload sectors; show/hide 3d
149 TGHorizontalFrame* f = new TGHorizontalFrame(this);
150 fUpdateSectors = new TGTextButton(f, "Update Sectors");
151 f->AddFrame(fUpdateSectors, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
152 fUpdateSectors->Connect("Clicked()",
153 "AliEveTPCLoaderEditor", this, "DoUpdateSectors()");
154 fReloadSectors = new TGTextButton(f, "Reload Sectors");
155 f->AddFrame(fReloadSectors, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
156 fReloadSectors->Connect("Clicked()",
157 "AliEveTPCLoaderEditor", this, "DoReloadSectors()");
158 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
161 TGHorizontalFrame* f = new TGHorizontalFrame(this);
162 fCreateSectors3D = new TGTextButton(f, "Create 3D");
163 f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
164 fCreateSectors3D->Connect("Clicked()",
165 "AliEveTPCLoaderEditor", this, "DoCreateSectors3D()");
166 fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
167 f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
168 fDeleteSectors3D->Connect("Clicked()",
169 "AliEveTPCLoaderEditor", this, "DoDeleteSectors3D()");
170 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
173 TGHorizontalFrame* f = new TGHorizontalFrame(this);
174 fCreateSectors3D = new TGTextButton(f, "Show 2D");
175 f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
176 fCreateSectors3D->Connect("Clicked()",
177 "AliEveTPCLoaderEditor", this, "DoShowSectors2D()");
178 fDeleteSectors3D = new TGTextButton(f, "Hide 2D");
179 f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
180 fDeleteSectors3D->Connect("Clicked()",
181 "AliEveTPCLoaderEditor", this, "DoHideSectors2D()");
182 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
188 TGHorizontalFrame* f = new TGHorizontalFrame(this);
190 gEtaRange = new TEveGDoubleValuator(f,"Eta range:", 40, 0);
191 gEtaRange->SetNELength(6);
192 gEtaRange->SetLabelWidth(50);
194 gEtaRange->GetSlider()->SetWidth(180);
195 gEtaRange->SetLimits(-1.5, 1.5, TGNumberFormat::kNESRealTwo);
196 gEtaRange->SetValues(-1.5, 1.5, TGNumberFormat::kNESRealTwo);
198 gCutOnEta = new TGCheckButton(f, "Set", 10);
199 gCutOnEta->SetEnabled(kTRUE);
201 f->AddFrame(gEtaRange, new TGLayoutHints(kLHintsExpandX, 10, 10, 10, 10));
202 f->AddFrame(gCutOnEta, new TGLayoutHints(kLHintsNormal, 10, 10, 10, 10));
204 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
209 /******************************************************************************/
211 void AliEveTPCLoaderEditor::SetModel(TObject* obj)
215 fM = static_cast<AliEveTPCLoader*>(obj);
217 // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
218 fFile->SetText(fM->fFile);
219 fEvent->SetValue(fM->fEvent);
220 fEvent->SetEnabled(fM->fEvent >= 0);
221 fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp);
223 AliEveTPCData* tpcd = fM->GetData();
224 Bool_t tpcp = (tpcd != 0);
225 fDataLoadThreshold->SetEnabled(tpcp);
226 fDataLoadPedestal ->SetEnabled(tpcp && ! tpcd->GetAutoPedestal());
227 fDataAutoPedestal ->SetEnabled(tpcp);
229 fDataLoadThreshold->SetValue(tpcd->GetLoadThreshold());
230 fDataLoadPedestal ->SetValue(tpcd->GetLoadPedestal());
231 fDataAutoPedestal ->SetState(tpcd->GetAutoPedestal() ? kButtonDown : kButtonUp);
235 /******************************************************************************/
236 /******************************************************************************/
238 void AliEveTPCLoaderEditor::FileSelect()
240 // Slot for FileSelect.
242 static const char *kTPCFileTypes[] = {
243 "Root files", "*.root",
249 fi.fIniDir = StrDup(gSystem->DirName (fM->fFile));
250 fi.fFilename = StrDup(gSystem->BaseName(fM->fFile));
251 fi.fFileTypes = kTPCFileTypes;
253 new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
257 fFile->SetText(fi.fFilename);
260 void AliEveTPCLoaderEditor::FileChanged()
262 // Slot for FileChanged.
264 fM->fFile = fFile->GetText();
267 void AliEveTPCLoaderEditor::DoOpen()
275 /******************************************************************************/
277 void AliEveTPCLoaderEditor::DoEvent()
281 fM->GotoEvent((Int_t) fEvent->GetValue());
285 void AliEveTPCLoaderEditor::DoDoubleSR()
287 // Slot for DoubleSR.
289 fM->SetDoubleSR(fDoubleSR->IsOn());
293 /******************************************************************************/
295 void AliEveTPCLoaderEditor::DoDataLoadThreshold()
297 // Slot for DataLoadThreshold.
299 if (fM->GetData() == 0) return;
300 fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
303 void AliEveTPCLoaderEditor::DoDataLoadPedestal()
305 // Slot for DataLoadPedestal.
307 if (fM->GetData() == 0) return;
308 fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
311 void AliEveTPCLoaderEditor::DoDataAutoPedestal()
313 // Slot for DataAutoPedestal.
315 if (fM->GetData() == 0) return;
316 fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
317 fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
320 /******************************************************************************/
322 void AliEveTPCLoaderEditor::DoUpdateSectors()
324 // Slot for UpdateSectors.
327 fM->SetCutOnEta(gCutOnEta->IsOn());
331 fM->SetEtaMin(gEtaRange->GetMin());
332 fM->SetEtaMax(gEtaRange->GetMax());
338 void AliEveTPCLoaderEditor::DoReloadSectors()
340 // Slot for ReloadSectors.
343 fM->SetCutOnEta(gCutOnEta->IsOn());
347 fM->SetEtaMin(gEtaRange->GetMin());
348 fM->SetEtaMax(gEtaRange->GetMax());
355 void AliEveTPCLoaderEditor::DoCreateSectors3D()
357 // Slot for CreateSectors3D.
360 fM->SetCutOnEta(gCutOnEta->IsOn());
364 fM->SetEtaMin(gEtaRange->GetMin());
365 fM->SetEtaMax(gEtaRange->GetMax());
368 fM->CreateSectors3D();
372 void AliEveTPCLoaderEditor::DoDeleteSectors3D()
374 // Slot for DeleteSectors3D.
376 fM->DeleteSectors3D();
379 void AliEveTPCLoaderEditor::DoShowSectors2D()
382 for(Int_t i = 0; i< 36; i++)
384 if(gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i)))
386 gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i))->SetRnrSelf(kTRUE);
387 gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i))->SetRnrChildren(kTRUE);
393 void AliEveTPCLoaderEditor::DoHideSectors2D()
396 for(Int_t i = 0; i< 36; i++)
398 if(gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i)))
400 gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i))->SetRnrSelf(kFALSE);
401 gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i))->SetRnrChildren(kFALSE);