]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveDet/AliEveTPCLoaderEditor.cxx
Fine tuning of SDD time offset (F. Prino)
[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//______________________________________________________________________________
d810d0de 31// AliEveTPCLoaderEditor
e9a38ea3 32//
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{
d810d0de 58 MakeTitle("AliEveTPCLoader");
e9a38ea3 59
10b1edfc 60 Int_t labelW;
61
62 // File / event interface
63
64 labelW = 42;
e9a38ea3 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()",
d810d0de 75 "AliEveTPCLoaderEditor", this, "FileSelect()");
e9a38ea3 76 fFile->Connect("TextChanged(const char *)",
d810d0de 77 "AliEveTPCLoaderEditor", this, "FileChanged()");
e9a38ea3 78 fOpenFile = new TGTextButton(f, "Open");
79 f->AddFrame(fOpenFile);
80 fOpenFile->Connect("Clicked()",
d810d0de 81 "AliEveTPCLoaderEditor", this, "DoOpen()");
e9a38ea3 82 AddFrame(f);
83 }
84
16718cdc 85 fEvent = new TEveGValuator(this, "Event:", 110, 0);
e9a38ea3 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)",
d810d0de 93 "AliEveTPCLoaderEditor", this, "DoEvent()");
16718cdc 94 // Reuse Event for DoubleSR button
6e91772d 95 fDoubleSR = new TGCheckButton(fEvent, "Double SR");
96 fDoubleSR->SetToolTipText("Double sampling rate");
10b1edfc 97 fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
b6b01ba3 98 fDoubleSR->Connect("Toggled(Bool_t)",
d810d0de 99 "AliEveTPCLoaderEditor", this, "DoDoubleSR()");
e9a38ea3 100 AddFrame(fEvent);
101
10b1edfc 102
d810d0de 103 // AliEveTPCData load settings
10b1edfc 104
105 labelW = 90;
106
84aff7a4 107 fDataLoadThreshold = new TEveGValuator(this, "Load threshold:", 110, 0);
10b1edfc 108 fDataLoadThreshold->SetShowSlider(kFALSE);
109 fDataLoadThreshold->SetLabelWidth(labelW);
110 fDataLoadThreshold->SetNELength(6);
111 fDataLoadThreshold->Build();
112 fDataLoadThreshold->SetLimits(0, 1000);
fe83f7ce 113 fDataLoadThreshold->SetToolTip("Minimum signal that will be stored (pedestal subtracted first).");
10b1edfc 114 fDataLoadThreshold->Connect
115 ("ValueSet(Double_t)",
d810d0de 116 "AliEveTPCLoaderEditor", this, "DoDataLoadThreshold()");
10b1edfc 117 AddFrame(fDataLoadThreshold, new TGLayoutHints(kLHintsLeft, 0, 0, 6, 0));
118
84aff7a4 119 fDataLoadPedestal = new TEveGValuator(this, "Load pedestal:", 110, 0);
10b1edfc 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)",
d810d0de 128 "AliEveTPCLoaderEditor", this, "DoDataLoadPedestal()");
10b1edfc 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)",
d810d0de 134 "AliEveTPCLoaderEditor", this, "DoDataAutoPedestal()");
10b1edfc 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()",
d810d0de 145 "AliEveTPCLoaderEditor", this, "DoUpdateSectors()");
10b1edfc 146 fReloadSectors = new TGTextButton(f, "Reload Sectors");
147 f->AddFrame(fReloadSectors, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
148 fReloadSectors->Connect("Clicked()",
d810d0de 149 "AliEveTPCLoaderEditor", this, "DoReloadSectors()");
10b1edfc 150 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
151 }
e9a38ea3 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()",
d810d0de 157 "AliEveTPCLoaderEditor", this, "DoCreateSectors3D()");
e9a38ea3 158 fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
159 f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
160 fDeleteSectors3D->Connect("Clicked()",
d810d0de 161 "AliEveTPCLoaderEditor", this, "DoDeleteSectors3D()");
e9a38ea3 162 AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
163 }
e9a38ea3 164}
165
d810d0de 166AliEveTPCLoaderEditor::~AliEveTPCLoaderEditor()
e9a38ea3 167{}
168
57ffa5fb 169/******************************************************************************/
e9a38ea3 170
d810d0de 171void AliEveTPCLoaderEditor::SetModel(TObject* obj)
e9a38ea3 172{
d810d0de 173 fM = dynamic_cast<AliEveTPCLoader*>(obj);
e9a38ea3 174
89ec258e 175 // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
ad549815 176 fFile->SetText(fM->fFile);
e9a38ea3 177 fEvent->SetValue(fM->fEvent);
178 fEvent->SetEnabled(fM->fEvent >= 0);
10b1edfc 179 fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp);
180
d810d0de 181 AliEveTPCData* tpcd = fM->GetData();
10b1edfc 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 }
e9a38ea3 191}
192
57ffa5fb 193/******************************************************************************/
194/******************************************************************************/
e9a38ea3 195
196namespace {
197const char *tpcfiletypes[] = {
198 "Root files", "*.root",
199 "All files", "*.*",
200 0, 0
201};
202}
203
d810d0de 204void AliEveTPCLoaderEditor::FileSelect()
e9a38ea3 205{
206 TGFileInfo fi;
fda47a05 207 fi.fIniDir = StrDup(gSystem->DirName (fM->fFile));
208 fi.fFilename = StrDup(gSystem->BaseName(fM->fFile));
e9a38ea3 209 fi.fFileTypes = tpcfiletypes;
89ec258e 210
84aff7a4 211 new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
89ec258e 212 if (!fi.fFilename)
213 return;
214
ad549815 215 fFile->SetText(fi.fFilename);
e9a38ea3 216}
217
d810d0de 218void AliEveTPCLoaderEditor::FileChanged()
e9a38ea3 219{
ad549815 220 fM->fFile = fFile->GetText();
e9a38ea3 221}
222
d810d0de 223void AliEveTPCLoaderEditor::DoOpen()
e9a38ea3 224{
225 fM->OpenFile();
a8600b56 226 SetModel(fM);
e9a38ea3 227}
228
57ffa5fb 229/******************************************************************************/
e9a38ea3 230
d810d0de 231void AliEveTPCLoaderEditor::DoEvent()
e9a38ea3 232{
233 fM->GotoEvent((Int_t) fEvent->GetValue());
a8600b56 234 SetModel(fM);
e9a38ea3 235}
236
d810d0de 237void AliEveTPCLoaderEditor::DoDoubleSR()
6e91772d 238{
239 fM->SetDoubleSR(fDoubleSR->IsOn());
240 Update();
241}
242
57ffa5fb 243/******************************************************************************/
e9a38ea3 244
d810d0de 245void AliEveTPCLoaderEditor::DoDataLoadThreshold()
10b1edfc 246{
247 if (fM->GetData() == 0) return;
248 fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
249}
250
d810d0de 251void AliEveTPCLoaderEditor::DoDataLoadPedestal()
10b1edfc 252{
253 if (fM->GetData() == 0) return;
254 fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
255}
256
d810d0de 257void AliEveTPCLoaderEditor::DoDataAutoPedestal()
10b1edfc 258{
259 if (fM->GetData() == 0) return;
260 fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
261 fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
262}
263
57ffa5fb 264/******************************************************************************/
10b1edfc 265
d810d0de 266void AliEveTPCLoaderEditor::DoUpdateSectors()
e9a38ea3 267{
268 fM->UpdateSectors();
269}
270
d810d0de 271void AliEveTPCLoaderEditor::DoReloadSectors()
10b1edfc 272{
273 fM->ReloadSectors();
274}
275
d810d0de 276void AliEveTPCLoaderEditor::DoCreateSectors3D()
e9a38ea3 277{
278 fM->CreateSectors3D();
279}
280
281
d810d0de 282void AliEveTPCLoaderEditor::DoDeleteSectors3D()
e9a38ea3 283{
284 fM->DeleteSectors3D();
285}