]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveDet/AliEveTPCLoaderEditor.cxx
From Alexey:
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTPCLoaderEditor.cxx
CommitLineData
d810d0de 1// $Id$
2// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
51346b82 7 * full copyright notice. *
d810d0de 8 **************************************************************************/
9
10#include "AliEveTPCLoaderEditor.h"
707b281a 11
cb4245bb 12#include <EveDet/AliEveTPCLoader.h>
13#include <EveDet/AliEveTPCData.h>
707b281a 14
84aff7a4 15#include <TEveManager.h>
16#include <TEveGValuators.h>
e9a38ea3 17
18#include <TSystem.h>
19#include <TVirtualPad.h>
20#include <TColor.h>
21
22#include <TGLabel.h>
23#include <TGButton.h>
24#include <TGTextEntry.h>
25#include <TGNumberEntry.h>
26#include <TGFileDialog.h>
89ec258e 27#include <TGToolTip.h>
d810d0de 28
e9a38ea3 29
57ffa5fb 30//______________________________________________________________________________
e9a38ea3 31//
a97abca8 32// Editor for AliEveTPCLoader.
e9a38ea3 33
d810d0de 34ClassImp(AliEveTPCLoaderEditor)
e9a38ea3 35
707b281a 36AliEveTPCLoaderEditor::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),
265ecb21 40
707b281a 41 fM (0),
265ecb21 42
707b281a 43 fFile (0),
44 fOpenFile (0),
265ecb21 45
707b281a 46 fEvent (0),
47 fDoubleSR (0),
265ecb21 48
707b281a 49 fDataLoadThreshold (0),
50 fDataLoadPedestal (0),
51 fDataAutoPedestal (0),
10b1edfc 52
707b281a 53 fUpdateSectors (0),
54 fReloadSectors (0),
55 fCreateSectors3D (0),
56 fDeleteSectors3D (0)
e9a38ea3 57{
a97abca8 58 // Constructor.
59
d810d0de 60 MakeTitle("AliEveTPCLoader");
e9a38ea3 61
10b1edfc 62 Int_t labelW;
63
64 // File / event interface
65
66 labelW = 42;
e9a38ea3 67 {
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));
72 f->AddFrame(g);
73 fFile = new TGTextEntry(f);
74 fFile->SetWidth(140);
75 f->AddFrame(fFile);
76 fFile->Connect("DoubleClicked()",
d810d0de 77 "AliEveTPCLoaderEditor", this, "FileSelect()");
e9a38ea3 78 fFile->Connect("TextChanged(const char *)",
d810d0de 79 "AliEveTPCLoaderEditor", this, "FileChanged()");
e9a38ea3 80 fOpenFile = new TGTextButton(f, "Open");
81 f->AddFrame(fOpenFile);
82 fOpenFile->Connect("Clicked()",
d810d0de 83 "AliEveTPCLoaderEditor", this, "DoOpen()");
e9a38ea3 84 AddFrame(f);
85 }
86
16718cdc 87 fEvent = new TEveGValuator(this, "Event:", 110, 0);
e9a38ea3 88 fEvent->SetShowSlider(kFALSE);
89 fEvent->SetLabelWidth(labelW);
90 fEvent->SetNELength(6);
91 fEvent->Build();
92 fEvent->SetLimits(0, 1000);
93 fEvent->SetToolTip("Current event number");
94 fEvent->Connect("ValueSet(Double_t)",
d810d0de 95 "AliEveTPCLoaderEditor", this, "DoEvent()");
16718cdc 96 // Reuse Event for DoubleSR button
6e91772d 97 fDoubleSR = new TGCheckButton(fEvent, "Double SR");
98 fDoubleSR->SetToolTipText("Double sampling rate");
10b1edfc 99 fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
b6b01ba3 100 fDoubleSR->Connect("Toggled(Bool_t)",
d810d0de 101 "AliEveTPCLoaderEditor", this, "DoDoubleSR()");
e9a38ea3 102 AddFrame(fEvent);
103
10b1edfc 104
d810d0de 105 // AliEveTPCData load settings
10b1edfc 106
107 labelW = 90;
108
84aff7a4 109 fDataLoadThreshold = new TEveGValuator(this, "Load threshold:", 110, 0);
10b1edfc 110 fDataLoadThreshold->SetShowSlider(kFALSE);
111 fDataLoadThreshold->SetLabelWidth(labelW);
112 fDataLoadThreshold->SetNELength(6);
113 fDataLoadThreshold->Build();
114 fDataLoadThreshold->SetLimits(0, 1000);
fe83f7ce 115 fDataLoadThreshold->SetToolTip("Minimum signal that will be stored (pedestal subtracted first).");
10b1edfc 116 fDataLoadThreshold->Connect
117 ("ValueSet(Double_t)",
d810d0de 118 "AliEveTPCLoaderEditor", this, "DoDataLoadThreshold()");
10b1edfc 119 AddFrame(fDataLoadThreshold, new TGLayoutHints(kLHintsLeft, 0, 0, 6, 0));
120
84aff7a4 121 fDataLoadPedestal = new TEveGValuator(this, "Load pedestal:", 110, 0);
10b1edfc 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)",
d810d0de 130 "AliEveTPCLoaderEditor", this, "DoDataLoadPedestal()");
10b1edfc 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
135 ("Toggled(Bool_t)",
d810d0de 136 "AliEveTPCLoaderEditor", this, "DoDataAutoPedestal()");
10b1edfc 137 fDataLoadPedestal->AddFrame(fDataAutoPedestal, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
138 AddFrame(fDataLoadPedestal);
139
140 // Steering buttons: update/reload sectors; show/hide 3d
141
142 {
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()",
d810d0de 147 "AliEveTPCLoaderEditor", this, "DoUpdateSectors()");
10b1edfc 148 fReloadSectors = new TGTextButton(f, "Reload Sectors");
149 f->AddFrame(fReloadSectors, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
150 fReloadSectors->Connect("Clicked()",
d810d0de 151 "AliEveTPCLoaderEditor", this, "DoReloadSectors()");
10b1edfc 152 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
153 }
e9a38ea3 154 {
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()",
d810d0de 159 "AliEveTPCLoaderEditor", this, "DoCreateSectors3D()");
e9a38ea3 160 fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
161 f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
162 fDeleteSectors3D->Connect("Clicked()",
d810d0de 163 "AliEveTPCLoaderEditor", this, "DoDeleteSectors3D()");
e9a38ea3 164 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
165 }
e9a38ea3 166}
167
57ffa5fb 168/******************************************************************************/
e9a38ea3 169
d810d0de 170void AliEveTPCLoaderEditor::SetModel(TObject* obj)
e9a38ea3 171{
a97abca8 172 // Set model object.
173
d810d0de 174 fM = dynamic_cast<AliEveTPCLoader*>(obj);
e9a38ea3 175
89ec258e 176 // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
ad549815 177 fFile->SetText(fM->fFile);
e9a38ea3 178 fEvent->SetValue(fM->fEvent);
179 fEvent->SetEnabled(fM->fEvent >= 0);
10b1edfc 180 fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp);
181
d810d0de 182 AliEveTPCData* tpcd = fM->GetData();
10b1edfc 183 Bool_t tpcp = (tpcd != 0);
184 fDataLoadThreshold->SetEnabled(tpcp);
185 fDataLoadPedestal ->SetEnabled(tpcp && ! tpcd->GetAutoPedestal());
186 fDataAutoPedestal ->SetEnabled(tpcp);
187 if (tpcp) {
188 fDataLoadThreshold->SetValue(tpcd->GetLoadThreshold());
189 fDataLoadPedestal ->SetValue(tpcd->GetLoadPedestal());
190 fDataAutoPedestal ->SetState(tpcd->GetAutoPedestal() ? kButtonDown : kButtonUp);
191 }
e9a38ea3 192}
193
57ffa5fb 194/******************************************************************************/
195/******************************************************************************/
e9a38ea3 196
a15e6d7d 197void AliEveTPCLoaderEditor::FileSelect()
198{
199 // Slot for FileSelect.
200
201 static const char *kTPCFileTypes[] = {
e9a38ea3 202 "Root files", "*.root",
203 "All files", "*.*",
204 0, 0
205};
a97abca8 206
e9a38ea3 207 TGFileInfo fi;
fda47a05 208 fi.fIniDir = StrDup(gSystem->DirName (fM->fFile));
209 fi.fFilename = StrDup(gSystem->BaseName(fM->fFile));
a15e6d7d 210 fi.fFileTypes = kTPCFileTypes;
89ec258e 211
84aff7a4 212 new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
89ec258e 213 if (!fi.fFilename)
214 return;
215
ad549815 216 fFile->SetText(fi.fFilename);
e9a38ea3 217}
218
d810d0de 219void AliEveTPCLoaderEditor::FileChanged()
e9a38ea3 220{
a97abca8 221 // Slot for FileChanged.
222
ad549815 223 fM->fFile = fFile->GetText();
e9a38ea3 224}
225
d810d0de 226void AliEveTPCLoaderEditor::DoOpen()
e9a38ea3 227{
a97abca8 228 // Slot for Open.
229
e9a38ea3 230 fM->OpenFile();
a8600b56 231 SetModel(fM);
e9a38ea3 232}
233
57ffa5fb 234/******************************************************************************/
e9a38ea3 235
d810d0de 236void AliEveTPCLoaderEditor::DoEvent()
e9a38ea3 237{
a97abca8 238 // Slot for Event.
239
e9a38ea3 240 fM->GotoEvent((Int_t) fEvent->GetValue());
a8600b56 241 SetModel(fM);
e9a38ea3 242}
243
d810d0de 244void AliEveTPCLoaderEditor::DoDoubleSR()
6e91772d 245{
a97abca8 246 // Slot for DoubleSR.
247
6e91772d 248 fM->SetDoubleSR(fDoubleSR->IsOn());
249 Update();
250}
251
57ffa5fb 252/******************************************************************************/
e9a38ea3 253
d810d0de 254void AliEveTPCLoaderEditor::DoDataLoadThreshold()
10b1edfc 255{
a97abca8 256 // Slot for DataLoadThreshold.
257
10b1edfc 258 if (fM->GetData() == 0) return;
259 fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
260}
261
d810d0de 262void AliEveTPCLoaderEditor::DoDataLoadPedestal()
10b1edfc 263{
a97abca8 264 // Slot for DataLoadPedestal.
265
10b1edfc 266 if (fM->GetData() == 0) return;
267 fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
268}
269
d810d0de 270void AliEveTPCLoaderEditor::DoDataAutoPedestal()
10b1edfc 271{
a97abca8 272 // Slot for DataAutoPedestal.
273
10b1edfc 274 if (fM->GetData() == 0) return;
275 fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
276 fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
277}
278
57ffa5fb 279/******************************************************************************/
10b1edfc 280
d810d0de 281void AliEveTPCLoaderEditor::DoUpdateSectors()
e9a38ea3 282{
a97abca8 283 // Slot for UpdateSectors.
284
e9a38ea3 285 fM->UpdateSectors();
286}
287
d810d0de 288void AliEveTPCLoaderEditor::DoReloadSectors()
10b1edfc 289{
a97abca8 290 // Slot for ReloadSectors.
291
10b1edfc 292 fM->ReloadSectors();
293}
294
d810d0de 295void AliEveTPCLoaderEditor::DoCreateSectors3D()
e9a38ea3 296{
a97abca8 297 // Slot for CreateSectors3D.
298
e9a38ea3 299 fM->CreateSectors3D();
300}
301
302
d810d0de 303void AliEveTPCLoaderEditor::DoDeleteSectors3D()
e9a38ea3 304{
a97abca8 305 // Slot for DeleteSectors3D.
306
e9a38ea3 307 fM->DeleteSectors3D();
308}