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