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 //______________________________________________________________________________
31 // AliEveTPCLoaderEditor
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),
58 MakeTitle("AliEveTPCLoader");
62 // File / event interface
66 TGHorizontalFrame* f = new TGHorizontalFrame(this);
67 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
68 TGLabel* l = new TGLabel(g, "File: ");
69 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
71 fFile = new TGTextEntry(f);
74 fFile->Connect("DoubleClicked()",
75 "AliEveTPCLoaderEditor", this, "FileSelect()");
76 fFile->Connect("TextChanged(const char *)",
77 "AliEveTPCLoaderEditor", this, "FileChanged()");
78 fOpenFile = new TGTextButton(f, "Open");
79 f->AddFrame(fOpenFile);
80 fOpenFile->Connect("Clicked()",
81 "AliEveTPCLoaderEditor", this, "DoOpen()");
85 fEvent = new TEveGValuator(this, "Event:", 110, 0);
86 fEvent->SetShowSlider(kFALSE);
87 fEvent->SetLabelWidth(labelW);
88 fEvent->SetNELength(6);
90 fEvent->SetLimits(0, 1000);
91 fEvent->SetToolTip("Current event number");
92 fEvent->Connect("ValueSet(Double_t)",
93 "AliEveTPCLoaderEditor", this, "DoEvent()");
94 // Reuse Event for DoubleSR button
95 fDoubleSR = new TGCheckButton(fEvent, "Double SR");
96 fDoubleSR->SetToolTipText("Double sampling rate");
97 fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
98 fDoubleSR->Connect("Toggled(Bool_t)",
99 "AliEveTPCLoaderEditor", this, "DoDoubleSR()");
103 // AliEveTPCData load settings
107 fDataLoadThreshold = new TEveGValuator(this, "Load threshold:", 110, 0);
108 fDataLoadThreshold->SetShowSlider(kFALSE);
109 fDataLoadThreshold->SetLabelWidth(labelW);
110 fDataLoadThreshold->SetNELength(6);
111 fDataLoadThreshold->Build();
112 fDataLoadThreshold->SetLimits(0, 1000);
113 fDataLoadThreshold->SetToolTip("Minimum signal that will be stored (pedestal subtracted first).");
114 fDataLoadThreshold->Connect
115 ("ValueSet(Double_t)",
116 "AliEveTPCLoaderEditor", this, "DoDataLoadThreshold()");
117 AddFrame(fDataLoadThreshold, new TGLayoutHints(kLHintsLeft, 0, 0, 6, 0));
119 fDataLoadPedestal = new TEveGValuator(this, "Load pedestal:", 110, 0);
120 fDataLoadPedestal->SetShowSlider(kFALSE);
121 fDataLoadPedestal->SetLabelWidth(labelW);
122 fDataLoadPedestal->SetNELength(6);
123 fDataLoadPedestal->Build();
124 fDataLoadPedestal->SetLimits(0, 1000);
125 fDataLoadPedestal->SetToolTip("Pedestal that will be subtracted during data loading.");
126 fDataLoadPedestal->Connect
127 ("ValueSet(Double_t)",
128 "AliEveTPCLoaderEditor", this, "DoDataLoadPedestal()");
129 // Reuse DataLoadPedestal for DataAutoPedestal check button
130 fDataAutoPedestal = new TGCheckButton(fDataLoadPedestal, "Automatic");
131 fDataAutoPedestal->SetToolTipText("Determine per-pad pedestal during data loading.");
132 fDataAutoPedestal->Connect
134 "AliEveTPCLoaderEditor", this, "DoDataAutoPedestal()");
135 fDataLoadPedestal->AddFrame(fDataAutoPedestal, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
136 AddFrame(fDataLoadPedestal);
138 // Steering buttons: update/reload sectors; show/hide 3d
141 TGHorizontalFrame* f = new TGHorizontalFrame(this);
142 fUpdateSectors = new TGTextButton(f, "Update Sectors");
143 f->AddFrame(fUpdateSectors, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
144 fUpdateSectors->Connect("Clicked()",
145 "AliEveTPCLoaderEditor", this, "DoUpdateSectors()");
146 fReloadSectors = new TGTextButton(f, "Reload Sectors");
147 f->AddFrame(fReloadSectors, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
148 fReloadSectors->Connect("Clicked()",
149 "AliEveTPCLoaderEditor", this, "DoReloadSectors()");
150 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
153 TGHorizontalFrame* f = new TGHorizontalFrame(this);
154 fCreateSectors3D = new TGTextButton(f, "Create 3D");
155 f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
156 fCreateSectors3D->Connect("Clicked()",
157 "AliEveTPCLoaderEditor", this, "DoCreateSectors3D()");
158 fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
159 f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
160 fDeleteSectors3D->Connect("Clicked()",
161 "AliEveTPCLoaderEditor", this, "DoDeleteSectors3D()");
162 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
166 AliEveTPCLoaderEditor::~AliEveTPCLoaderEditor()
169 /******************************************************************************/
171 void AliEveTPCLoaderEditor::SetModel(TObject* obj)
173 fM = dynamic_cast<AliEveTPCLoader*>(obj);
175 // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
176 fFile->SetText(fM->fFile);
177 fEvent->SetValue(fM->fEvent);
178 fEvent->SetEnabled(fM->fEvent >= 0);
179 fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp);
181 AliEveTPCData* tpcd = fM->GetData();
182 Bool_t tpcp = (tpcd != 0);
183 fDataLoadThreshold->SetEnabled(tpcp);
184 fDataLoadPedestal ->SetEnabled(tpcp && ! tpcd->GetAutoPedestal());
185 fDataAutoPedestal ->SetEnabled(tpcp);
187 fDataLoadThreshold->SetValue(tpcd->GetLoadThreshold());
188 fDataLoadPedestal ->SetValue(tpcd->GetLoadPedestal());
189 fDataAutoPedestal ->SetState(tpcd->GetAutoPedestal() ? kButtonDown : kButtonUp);
193 /******************************************************************************/
194 /******************************************************************************/
197 const char *tpcfiletypes[] = {
198 "Root files", "*.root",
204 void AliEveTPCLoaderEditor::FileSelect()
207 fi.fIniDir = StrDup(gSystem->DirName (fM->fFile));
208 fi.fFilename = StrDup(gSystem->BaseName(fM->fFile));
209 fi.fFileTypes = tpcfiletypes;
211 new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
215 fFile->SetText(fi.fFilename);
218 void AliEveTPCLoaderEditor::FileChanged()
220 fM->fFile = fFile->GetText();
223 void AliEveTPCLoaderEditor::DoOpen()
229 /******************************************************************************/
231 void AliEveTPCLoaderEditor::DoEvent()
233 fM->GotoEvent((Int_t) fEvent->GetValue());
237 void AliEveTPCLoaderEditor::DoDoubleSR()
239 fM->SetDoubleSR(fDoubleSR->IsOn());
243 /******************************************************************************/
245 void AliEveTPCLoaderEditor::DoDataLoadThreshold()
247 if (fM->GetData() == 0) return;
248 fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
251 void AliEveTPCLoaderEditor::DoDataLoadPedestal()
253 if (fM->GetData() == 0) return;
254 fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
257 void AliEveTPCLoaderEditor::DoDataAutoPedestal()
259 if (fM->GetData() == 0) return;
260 fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
261 fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
264 /******************************************************************************/
266 void AliEveTPCLoaderEditor::DoUpdateSectors()
271 void AliEveTPCLoaderEditor::DoReloadSectors()
276 void AliEveTPCLoaderEditor::DoCreateSectors3D()
278 fM->CreateSectors3D();
282 void AliEveTPCLoaderEditor::DoDeleteSectors3D()
284 fM->DeleteSectors3D();