]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveTPCLoaderEditor.cxx
Replace AliEveEventManager token with Event where it was done by a runaway regexp...
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTPCLoaderEditor.cxx
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
12 #include <EveDet/AliEveTPCLoader.h>
13 #include <EveDet/AliEveTPCData.h>
14
15 #include <TEveManager.h>
16 #include <TEveGValuators.h>
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>
27 #include <TGToolTip.h>
28
29
30 //______________________________________________________________________________
31 // AliEveTPCLoaderEditor
32 //
33
34 ClassImp(AliEveTPCLoaderEditor)
35
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),
40
41   fM        (0),
42
43   fFile     (0),
44   fOpenFile (0),
45
46   fEvent    (0),
47   fDoubleSR (0),
48
49   fDataLoadThreshold (0),
50   fDataLoadPedestal  (0),
51   fDataAutoPedestal  (0),
52
53   fUpdateSectors   (0),
54   fReloadSectors   (0),
55   fCreateSectors3D (0),
56   fDeleteSectors3D (0)
57 {
58   MakeTitle("AliEveTPCLoader");
59
60   Int_t labelW;
61
62   // File / event interface
63
64   labelW = 42;
65   {
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));
70     f->AddFrame(g);
71     fFile = new TGTextEntry(f);
72     fFile->SetWidth(140);
73     f->AddFrame(fFile);
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()");
82     AddFrame(f);
83   }
84
85   fEvent = new TEveGValuator(this, "Event:", 110, 0);
86   fEvent->SetShowSlider(kFALSE);
87   fEvent->SetLabelWidth(labelW);
88   fEvent->SetNELength(6);
89   fEvent->Build();
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()");
100   AddFrame(fEvent);
101
102
103   // AliEveTPCData load settings
104
105   labelW = 90;
106
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));
118
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
133     ("Toggled(Bool_t)",
134      "AliEveTPCLoaderEditor", this, "DoDataAutoPedestal()");
135   fDataLoadPedestal->AddFrame(fDataAutoPedestal, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
136   AddFrame(fDataLoadPedestal);
137
138   // Steering buttons: update/reload sectors; show/hide 3d
139
140   {
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));
151   }
152   {
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));
163   }
164 }
165
166 AliEveTPCLoaderEditor::~AliEveTPCLoaderEditor()
167 {}
168
169 /******************************************************************************/
170
171 void AliEveTPCLoaderEditor::SetModel(TObject* obj)
172 {
173   fM = dynamic_cast<AliEveTPCLoader*>(obj);
174
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);
180
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);
186   if (tpcp) {
187     fDataLoadThreshold->SetValue(tpcd->GetLoadThreshold());
188     fDataLoadPedestal ->SetValue(tpcd->GetLoadPedestal());
189     fDataAutoPedestal ->SetState(tpcd->GetAutoPedestal() ? kButtonDown : kButtonUp);
190   }
191 }
192
193 /******************************************************************************/
194 /******************************************************************************/
195
196 namespace {
197 const char *tpcfiletypes[] = {
198    "Root files",  "*.root",
199    "All files",   "*.*",
200     0,               0
201 };
202 }
203
204 void AliEveTPCLoaderEditor::FileSelect()
205 {
206   TGFileInfo fi;
207   fi.fIniDir    = StrDup(gSystem->DirName (fM->fFile));
208   fi.fFilename  = StrDup(gSystem->BaseName(fM->fFile));
209   fi.fFileTypes = tpcfiletypes;
210
211   new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
212   if (!fi.fFilename)
213     return;
214
215   fFile->SetText(fi.fFilename);
216 }
217
218 void AliEveTPCLoaderEditor::FileChanged()
219 {
220   fM->fFile = fFile->GetText();
221 }
222
223 void AliEveTPCLoaderEditor::DoOpen()
224 {
225   fM->OpenFile();
226   SetModel(fM);
227 }
228
229 /******************************************************************************/
230
231 void AliEveTPCLoaderEditor::DoEvent()
232 {
233   fM->GotoEvent((Int_t) fEvent->GetValue());
234   SetModel(fM);
235 }
236
237 void AliEveTPCLoaderEditor::DoDoubleSR()
238 {
239   fM->SetDoubleSR(fDoubleSR->IsOn());
240   Update();
241 }
242
243 /******************************************************************************/
244
245 void AliEveTPCLoaderEditor::DoDataLoadThreshold()
246 {
247   if (fM->GetData() == 0) return;
248   fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
249 }
250
251 void AliEveTPCLoaderEditor::DoDataLoadPedestal()
252 {
253   if (fM->GetData() == 0) return;
254   fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
255 }
256
257 void AliEveTPCLoaderEditor::DoDataAutoPedestal()
258 {
259   if (fM->GetData() == 0) return;
260   fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
261   fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
262 }
263
264 /******************************************************************************/
265
266 void AliEveTPCLoaderEditor::DoUpdateSectors()
267 {
268   fM->UpdateSectors();
269 }
270
271 void AliEveTPCLoaderEditor::DoReloadSectors()
272 {
273   fM->ReloadSectors();
274 }
275
276 void AliEveTPCLoaderEditor::DoCreateSectors3D()
277 {
278   fM->CreateSectors3D();
279 }
280
281
282 void AliEveTPCLoaderEditor::DoDeleteSectors3D()
283 {
284   fM->DeleteSectors3D();
285 }