]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONPainterDataSourceFrame.cxx
In MUONChamberMaterialBudget.C
[u/mrichter/AliRoot.git] / MUON / AliMUONPainterDataSourceFrame.cxx
CommitLineData
0145e89a 1/**************************************************************************
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16// $Id$
17
b09247a2 18#include <cstdlib>
0145e89a 19#include "AliMUONPainterDataSourceFrame.h"
20
8741815f 21#include "AliLog.h"
0145e89a 22#include "AliMUONPainterDataSourceItem.h"
23#include "AliMUONPainterEnv.h"
24#include "AliMUONPainterHelper.h"
8f0acce4 25#include "AliMUONPainterDataRegistry.h"
a0dc65b4 26#include "AliMUONRecoParam.h"
ca913045 27#include "AliMUONTrackerConditionDataMaker.h"
b6f591ae 28#include "AliMUONTrackerDataMaker.h"
0b376ef1 29#include "AliRawReader.h"
0145e89a 30#include <TGButton.h>
31#include <TGComboBox.h>
32#include <TGFileDialog.h>
33#include <TGNumberEntry.h>
34#include <TGTextEntry.h>
35#include <TGrid.h>
36#include <TObjArray.h>
37#include <TObjString.h>
38#include <TRegexp.h>
39#include <TString.h>
40#include <TSystem.h>
41
42///\class AliMUONPainterDataSourceFrame
43///
44/// A complete frame to select and display various data sources to
45/// be displayed : either raw data or OCDB data.
46/// Later on we might add digits and clusters for instance.
47///
48///\author Laurent Aphecetche, Subatech
49
50const char* AliMUONPainterDataSourceFrame::fgkNumberOfDataSourcesKey = "NumberOfDataSources";
51const char* AliMUONPainterDataSourceFrame::fgkDataSourceURIKey = "DataSourceURI.%d";
52
53///\cond CLASSIMP
54ClassImp(AliMUONPainterDataSourceFrame)
55///\endcond
56
57//_____________________________________________________________________________
58AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, UInt_t w, UInt_t h)
59: TGCompositeFrame(p,w,h,kVerticalFrame),
10eb3d17 60 fRecentSourceSelector(new TGGroupFrame(this,"Recent sources",kHorizontalFrame)),
61 fRawSelector(new TGGroupFrame(this,"Raw file URI",kHorizontalFrame)),
8741815f 62 fRawSelector2(new TGCompositeFrame(fRawSelector,w,h,kVerticalFrame)),
63 fRawSelector21(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
64 fRawSelector22(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
65 fRawSelector23(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
66cdf5b3 66 fCalibrateNoGain(new TGCheckButton(fRawSelector22,"Ped sub")),
67 fCalibrateGainConstantCapa(new TGCheckButton(fRawSelector22,"Ped sub+gain (capa cste)")),
68 fCalibrateGain(new TGCheckButton(fRawSelector22,"Full calib (Ped sub+gain w/ capa)")),
69 fCalibrateEmelecGain(new TGCheckButton(fRawSelector22,"Full calib (Ped sub+inj gain w/ capa)")),
8741815f 70 fHistogramButton(new TGCheckButton(fRawSelector23,"Histogram")),
10eb3d17 71 fHistoMin(new TGNumberEntry(fRawSelector23,0)),
72 fHistoMax(new TGNumberEntry(fRawSelector23,4096)),
8741815f 73 fRawOCDBPath(new TGTextEntry(fRawSelector22,"")),
10eb3d17 74 fOCDBSelector(new TGGroupFrame(this,"OCDB Path",kHorizontalFrame)),
75 fDataReaders(new TGGroupFrame(this,"Data sources")),
8741815f 76 fFilePath(new TGTextEntry(fRawSelector21,"")),
f162bb90 77 fOCDBPath(new TGTextEntry(fOCDBSelector,"alien://folder=/alice/data/2009/OCDB")),
0145e89a 78 fRunSelector(new TGNumberEntry(fOCDBSelector,0)),
79 fOCDBTypes(new TGComboBox(fOCDBSelector)),
80 fRecentSources(new TGComboBox(fRecentSourceSelector)),
1286237e 81 fItems(new TObjArray),
82 fACFSelector(new TGGroupFrame(this,"ASCII Calib File",kHorizontalFrame)),
83 fACFPath(new TGTextEntry(fACFSelector,"")),
84 fACFTypes(new TGComboBox(fACFSelector))
0145e89a 85{
86 /// Ctor
87
8f0acce4 88 AliMUONPainterDataRegistry* reg = AliMUONPainterDataRegistry::Instance();
0145e89a 89
49419555 90 reg->Connect("DataMakerWasRegistered(AliMUONVTrackerDataMaker*)",
0145e89a 91 "AliMUONPainterDataSourceFrame",
92 this,
49419555 93 "DataMakerWasRegistered(AliMUONVTrackerDataMaker*)");
0145e89a 94
49419555 95 reg->Connect("DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)",
0145e89a 96 "AliMUONPainterDataSourceFrame",
97 this,
49419555 98 "DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)");
0145e89a 99
100 fItems->SetOwner(kFALSE);
101
102 /// Recent source selection
103
104 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
105
106 Int_t nsources = env->Integer(fgkNumberOfDataSourcesKey);
107
108 for ( Int_t i = 0; i < nsources; ++i )
109 {
110 AddRecentSource(env->String(Form(fgkDataSourceURIKey,i)));
111 }
112
113 fRecentSources->Resize(100,20);
114
115 TGButton* createRecentButton = new TGTextButton(fRecentSourceSelector,"Create data source");
116 createRecentButton->Connect("Clicked()",
117 "AliMUONPainterDataSourceFrame",
118 this,
119 "OpenRecentSource()");
120
121 fRecentSourceSelector->AddFrame(fRecentSources,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
122 fRecentSourceSelector->AddFrame(createRecentButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
1286237e 123
0145e89a 124 /// Raw file selection
125
8741815f 126 TGButton* openButton = new TGPictureButton(fRawSelector21,
0145e89a 127 gClient->GetPicture("fileopen.xpm"));
128 openButton->SetToolTipText("Click to open file dialog");
129
8741815f 130 fRawSelector2->AddFrame(fRawSelector21, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
131 fRawSelector2->AddFrame(fRawSelector22, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
132 fRawSelector2->AddFrame(fRawSelector23, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
133
134 fRawSelector21->AddFrame(openButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
135 fRawSelector21->AddFrame(fFilePath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
136
10eb3d17 137 fRawSelector22->AddFrame(fCalibrateNoGain, new TGLayoutHints(kLHintsTop,5,5,5,5));
138 fRawSelector22->AddFrame(fCalibrateGainConstantCapa, new TGLayoutHints(kLHintsTop,5,5,5,5));
139 fRawSelector22->AddFrame(fCalibrateGain, new TGLayoutHints(kLHintsTop,5,5,5,5));
66cdf5b3 140 fRawSelector22->AddFrame(fCalibrateEmelecGain, new TGLayoutHints(kLHintsTop,5,5,5,5));
8741815f 141 fRawSelector22->AddFrame(fRawOCDBPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
142 fRawOCDBPath->SetEnabled(kFALSE);
0145e89a 143
8741815f 144 fRawSelector23->AddFrame(fHistogramButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
10eb3d17 145
146 fHistogramButton->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"HistogramButtonClicked()");
147
148 fHistoMin->SetState(kFALSE);
149 fHistoMax->SetState(kFALSE);
150
151 fRawSelector23->AddFrame(fHistoMin,new TGLayoutHints(kLHintsTop,5,5,5,5));
152 fRawSelector23->AddFrame(fHistoMax,new TGLayoutHints(kLHintsTop,5,5,5,5));
153
8741815f 154 TGButton* createRawButton = new TGTextButton(fRawSelector,"Create data source");
0145e89a 155
8741815f 156 fRawSelector->AddFrame(fRawSelector2, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
157 fRawSelector->AddFrame(createRawButton, new TGLayoutHints(kLHintsCenterY,5,5,5,5));
158
10eb3d17 159 fCalibrateNoGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
160 fCalibrateGainConstantCapa->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
161 fCalibrateGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
66cdf5b3 162 fCalibrateEmelecGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
8741815f 163
0145e89a 164 openButton->Connect("Clicked()",
165 "AliMUONPainterDataSourceFrame",
166 this,
167 "OpenFileDialog()");
168
169 createRawButton->Connect("Clicked()",
170 "AliMUONPainterDataSourceFrame",
171 this,
172 "CreateRawDataSource()");
173
174 /// OCDB selection
175
ca913045 176 fOCDBTypes->AddEntry("Config",7);
177 fOCDBTypes->AddEntry("Occupancy",4);
178 fOCDBTypes->AddEntry("HV",3);
7eafe398 179 fOCDBTypes->AddEntry("Pedestals",0);
180 fOCDBTypes->AddEntry("Gains",1);
fef32488 181 fOCDBTypes->AddEntry("StatusMap",5);
182 fOCDBTypes->AddEntry("Status",6);
ca913045 183 fOCDBTypes->AddEntry("Capacitances",2);
7eafe398 184 fOCDBTypes->Select(0);
185 fOCDBTypes->Resize(100,20);
0145e89a 186
187 TGButton* createOCDBButton = new TGTextButton(fOCDBSelector,"Create data source");
188 createOCDBButton->Connect("Clicked()",
189 "AliMUONPainterDataSourceFrame",
190 this,
191 "CreateOCDBDataSource()");
949b9833 192
193 const char* ocdbToolTip = "Use URL style for either alien or local OCDB (foo://bar). For example :\n"
194 "alien://folder=/alice/data.../OCDB\n"
195 "or\nlocal:///home/user/aliroot (mind the 3 slashes there !)";
196
197 fRawOCDBPath->SetToolTipText(ocdbToolTip);
198 fOCDBPath->SetToolTipText(ocdbToolTip);
199
0145e89a 200 fOCDBSelector->AddFrame(fOCDBPath,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
201 fOCDBSelector->AddFrame(fRunSelector,new TGLayoutHints(kLHintsTop,5,5,5,5));
202 fOCDBSelector->AddFrame(fOCDBTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
203 fOCDBSelector->AddFrame(createOCDBButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
1286237e 204
205
206 /// ASCII calibration file selection
207
208 TGButton* openButtonACF = new TGPictureButton(fACFSelector,
209 gClient->GetPicture("fileopen.xpm"));
210 openButtonACF->SetToolTipText("Click to open file dialog");
ca913045 211
212 fACFTypes->AddEntry("Config",7);
7eafe398 213 fACFTypes->AddEntry("Occupancy",4);
ca913045 214 fACFTypes->AddEntry("Pedestals",0);
215 fACFTypes->AddEntry("Gains",1);
216 fACFTypes->AddEntry("Capacitances",2);
217 fACFTypes->Select(0);
218 fACFTypes->Resize(100,20);
1286237e 219
220 fACFSelector->AddFrame(openButtonACF,new TGLayoutHints(kLHintsTop,5,5,5,5));
221 fACFSelector->AddFrame(fACFPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
222 fACFSelector->AddFrame(fACFTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
223
224 TGButton* createACFButton = new TGTextButton(fACFSelector,"Create data source");
225 createACFButton->Connect("Clicked()",
226 "AliMUONPainterDataSourceFrame",
227 this,
228 "CreateACFDataSource()");
229
230 openButtonACF->Connect("Clicked()",
231 "AliMUONPainterDataSourceFrame",
232 this,
233 "OpenFileDialogACF()");
234
235 fACFSelector->AddFrame(createACFButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
0145e89a 236
237 AddFrame(fRecentSourceSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
238
239 AddFrame(fRawSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
240
241 AddFrame(fOCDBSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
242
1286237e 243 AddFrame(fACFSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
244
0145e89a 245 AddFrame(fDataReaders, new TGLayoutHints(kLHintsExpandX,10,10,10,10));
246
247}
248
249//_____________________________________________________________________________
250AliMUONPainterDataSourceFrame::~AliMUONPainterDataSourceFrame()
251{
252 /// dtor
253
254 delete fItems;
255}
256
257//_____________________________________________________________________________
258void
259AliMUONPainterDataSourceFrame::AddRecentSource(const char* name)
260{
261 /// Add a source to the list of recently used sources
262
263 TGListBox* lb = fRecentSources->GetListBox();
264
265 for ( Int_t i = 0; i < lb->GetNumberOfEntries(); ++i )
266 {
267 TGTextLBEntry* t = (TGTextLBEntry*)lb->GetEntry(i);
268 TString s(t->GetText()->GetString());
269 if ( s == name )
270 {
271 return;
272 }
273 }
274
275 fRecentSources->AddEntry(name,lb->GetNumberOfEntries());
276 fRecentSources->MapSubwindows();
277 fRecentSources->Layout();
278}
279
8741815f 280//_____________________________________________________________________________
281void
282AliMUONPainterDataSourceFrame::CalibrateButtonClicked()
283{
284 /// Calibrate button was clicked.
285
10eb3d17 286 if ( fCalibrateNoGain->IsOn() ||
287 fCalibrateGainConstantCapa->IsOn() ||
66cdf5b3 288 fCalibrateGain->IsOn() ||
289 fCalibrateEmelecGain->IsOn() )
8741815f 290 {
291 fRawOCDBPath->SetEnabled(kTRUE);
292 fRawOCDBPath->SetFocus();
8741815f 293 }
294 else
295 {
296 fRawOCDBPath->SetEnabled(kFALSE);
10eb3d17 297 }
298}
299
300//_____________________________________________________________________________
301void
302AliMUONPainterDataSourceFrame::HistogramButtonClicked()
303{
304 /// Histogram button was clicked.
305
306 if ( fHistogramButton->IsOn() )
307 {
308 fHistoMin->SetState(kTRUE);
309 fHistoMax->SetState(kTRUE);
310 }
311 else
312 {
313 fHistoMin->SetState(kFALSE);
314 fHistoMax->SetState(kFALSE);
8741815f 315 }
316}
317
1286237e 318//_____________________________________________________________________________
319void
320AliMUONPainterDataSourceFrame::CreateACFDataSource()
321{
322 /// Create an ACF data source (using information from the widgets)
323
324 TString acfPath = fACFPath->GetText();
325 TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fACFTypes->GetSelectedEntry());
326 TString type = t->GetText()->GetString();
327
328 CreateACFDataSource(acfPath,type);
329
330 fACFPath->SetText("");
331}
332
333
0145e89a 334//_____________________________________________________________________________
335void
336AliMUONPainterDataSourceFrame::CreateOCDBDataSource()
337{
338 /// Create an OCDB data source (using information from the widgets)
339
340 TString cdbPath = fOCDBPath->GetText();
341 Int_t runNumber = fRunSelector->GetIntNumber();
342 TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fOCDBTypes->GetSelectedEntry());
343 TString type = t->GetText()->GetString();
344
bd9314b2 345 CreateOCDBDataSource(cdbPath,runNumber,type);
0145e89a 346}
347
1286237e 348//_____________________________________________________________________________
349void
350AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& uri)
351{
352 /// Create an ACF data source, given it's URI
353
354 TObjArray* a = uri.Tokenize(";");
355 TString acfPath = static_cast<TObjString*>(a->At(1))->String();
356 TString type = static_cast<TObjString*>(a->At(2))->String();
357
358 CreateACFDataSource(acfPath,type);
359
360 delete a;
361}
362
363
0145e89a 364//_____________________________________________________________________________
365void
366AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& uri)
367{
368 /// Create an OCDB data source, given it's URI
369
370 TObjArray* a = uri.Tokenize(";");
371 TString cdbPath = static_cast<TObjString*>(a->At(1))->String();
372 TString srun = static_cast<TObjString*>(a->At(2))->String();
373 TString type = static_cast<TObjString*>(a->At(3))->String();
374
375 CreateOCDBDataSource(cdbPath,atoi(srun.Data()),type);
376
377 delete a;
378}
379
1286237e 380//_____________________________________________________________________________
381void
382AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& acfPath, const TString& type)
383{
384 /// Create an ACF data source for a given (path,type)
385
ca913045 386 AliMUONVTrackerDataMaker* reader = new AliMUONTrackerConditionDataMaker(acfPath.Data(),
387 type.Data());
1286237e 388
389 if ( reader->IsValid() )
390 {
8f0acce4 391 AliMUONPainterDataRegistry::Instance()->Register(reader);
1286237e 392
393 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
394
395 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
396
397 env->Set(fgkNumberOfDataSourcesKey,n+1);
398
399 TString ds(Form("ACF;%s;%s",acfPath.Data(),type.Data()));
400
401 env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
402
403 env->Save();
404
405 AddRecentSource(ds.Data());
406 }
407
408}
409
0145e89a 410//_____________________________________________________________________________
411void
412AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& cdbPath,
413 Int_t runNumber,
414 const TString& type)
415{
416 /// Create an OCDB data source for a given (path,runnumber,type) triplet
417
ca913045 418 AliMUONVTrackerDataMaker* reader = new AliMUONTrackerConditionDataMaker(runNumber,
419 cdbPath.Data(),
420 type.Data());
0145e89a 421
422 if ( reader->IsValid() )
423 {
8f0acce4 424 AliMUONPainterDataRegistry::Instance()->Register(reader);
0145e89a 425
426 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
427
428 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
429
430 env->Set(fgkNumberOfDataSourcesKey,n+1);
431
432 TString ds(Form("OCDB;%s;%d;%s",cdbPath.Data(),runNumber,type.Data()));
433
434 env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
435
436 env->Save();
437
438 AddRecentSource(ds.Data());
439 }
440}
441
442//_____________________________________________________________________________
443void
444AliMUONPainterDataSourceFrame::CreateRawDataSource()
445{
446 /// Create a new raw data source (using info from the widgets)
447
448 TString uri(gSystem->ExpandPathName(fFilePath->GetText()));
b6f591ae 449
450 TString name("RAW");
451 Bool_t fromMemory(kFALSE);
0145e89a 452
b6f591ae 453 if ( uri.Contains(TRegexp("^mem")) )
0145e89a 454 {
b6f591ae 455 fromMemory = kTRUE;
456 }
457 else
458 {
459 if ( gSystem->AccessPathName(uri.Data()) )
460 {
461 AliError(Form("File %s does not exist",uri.Data()));
462 fFilePath->SetText("");
463 return;
464 }
0145e89a 465 }
466
10eb3d17 467 TString calibMode("");
10eb3d17 468
469 if ( fCalibrateGain->IsOn() )
470 {
471 calibMode = "GAIN";
472 name = "CALC";
473 }
474
475 if ( fCalibrateGainConstantCapa->IsOn() )
476 {
477 calibMode = "GAINCONSTANTCAPA";
478 name = "CALG";
479 }
66cdf5b3 480
481 if ( fCalibrateEmelecGain->IsOn() )
482 {
483 calibMode = "INJECTIONGAIN";
484 name = "CALE";
485 }
10eb3d17 486
487 if ( fCalibrateNoGain->IsOn() )
488 {
489 calibMode = "NOGAIN";
490 name = "CALZ";
491 }
492
b6f591ae 493 uri = Form("%s%s%s;%s;%s;%s;%s;%s",
10eb3d17 494 ( fHistogramButton->IsOn() ? "H":""),
b6f591ae 495 ( fromMemory ? "M" : ""),
10eb3d17 496 name.Data(),uri.Data(),
497 ( strlen(fRawOCDBPath->GetText()) > 0 ? fRawOCDBPath->GetText() : " "),
498 ( calibMode.Length() > 0 ? calibMode.Data() : " "),
499 Form("%e",fHistoMin->GetNumber()),
500 Form("%e",fHistoMax->GetNumber()));
0145e89a 501
502 if ( CreateRawDataSource(uri) )
503 {
504 fFilePath->SetText("");
505 fRawOCDBPath->SetText("");
506 }
507}
508
509//_____________________________________________________________________________
510Bool_t
511AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri)
512{
513 /// Create a new raw data source, given its URI
514
515 TString filename;
516 TString ocdbPath;
10eb3d17 517 TString calibMode;
518 TString sxmin("0.0");
519 TString sxmax("4096.0");
0145e89a 520
521 TObjArray* a = uri.Tokenize(";");
522
523 filename = static_cast<TObjString*>(a->At(1))->String();
524
525 if ( a->GetLast() > 1 )
526 {
527 ocdbPath = static_cast<TObjString*>(a->At(2))->String();
10eb3d17 528 if ( ocdbPath == " " ) ocdbPath = "";
529 }
530
531 if ( a->GetLast() > 2 )
532 {
533 calibMode = static_cast<TObjString*>(a->At(3))->String();
534 if ( calibMode == " " ) calibMode = "";
535 }
536
537 if ( a->GetLast() > 3 )
538 {
539 sxmin = static_cast<TObjString*>(a->At(4))->String();
540 }
541
542 if ( a->GetLast() > 4 )
543 {
544 sxmax = static_cast<TObjString*>(a->At(5))->String();
0145e89a 545 }
546
547 AliRawReader* rawReader = 0x0;
548
0b376ef1 549 if ( filename.Contains(TRegexp("^alien")) )
0145e89a 550 {
0b376ef1 551 // insure we've initialized the grid...
552 if (!gGrid)
0145e89a 553 {
0b376ef1 554 TGrid::Connect("alien://");
0145e89a 555 }
0145e89a 556 }
0b376ef1 557
558 rawReader = AliRawReader::Create(filename.Data());
559
560 if (!rawReader)
0145e89a 561 {
0b376ef1 562 AliError(Form("Could not open file %s",filename.Data()));
563 fFilePath->SetText("");
564 return kFALSE;
0145e89a 565 }
0b376ef1 566
10eb3d17 567 /// Basic test to see if the file is correct
568 Bool_t ok = rawReader->NextEvent();
569 if (!ok)
0145e89a 570 {
10eb3d17 571 AliError(Form("File %s does not seem to be a raw data file",filename.Data()));
572 fFilePath->SetText("");
0145e89a 573 return kFALSE;
574 }
575
10eb3d17 576 rawReader->RewindEvents();
577
8741815f 578 AliMUONVTrackerDataMaker* reader(0x0);
579 Bool_t histogram(kFALSE);
580
10eb3d17 581 if ( uri.Contains(TRegexp("^H")) ) histogram = kTRUE;
582
8741815f 583 if ( ocdbPath.Length() > 0 )
584 {
a0dc65b4 585 AliMUONRecoParam* recoParam = AliMUONRecoParam::GetCosmicParam();
586
587 // FIXME: where to get the reco params from in reality ?
588
b6f591ae 589 reader = new AliMUONTrackerDataMaker(recoParam,
590 rawReader,
591 ocdbPath.Data(),
592 calibMode.Data(),
593 histogram,
594 sxmin.Atof(),
595 sxmax.Atof());
8741815f 596 }
597 else
598 {
b6f591ae 599 reader = new AliMUONTrackerDataMaker(rawReader,histogram);
8741815f 600 }
0145e89a 601
602 reader->SetSource(filename.Data());
603
8f0acce4 604 AliMUONPainterDataRegistry::Instance()->Register(reader);
0145e89a 605
606 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
607
608 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
609
610 env->Set(fgkNumberOfDataSourcesKey,n+1);
611
10eb3d17 612 env->Set(Form(fgkDataSourceURIKey,n),uri.Data());
0145e89a 613
10eb3d17 614 AddRecentSource(uri.Data());
0145e89a 615
616 env->Save();
617
618 return kTRUE;
619}
620
621//_____________________________________________________________________________
622void
49419555 623AliMUONPainterDataSourceFrame::DataMakerWasRegistered(AliMUONVTrackerDataMaker* reader)
0145e89a 624{
625 /// Update ourselves as a new data reader was created
626
0145e89a 627 AliMUONPainterDataSourceItem* item = new AliMUONPainterDataSourceItem(fDataReaders,100,20,reader);
628
10eb3d17 629 item->Connect("StartRunning()",
630 "AliMUONPainterDataSourceFrame",
631 this,
b0cbe180 632 "StartRunning()");
10eb3d17 633
634 item->Connect("StopRunning()",
635 "AliMUONPainterDataSourceFrame",
636 this,
b0cbe180 637 "StopRunning()");
10eb3d17 638
0145e89a 639 fDataReaders->AddFrame(item);
640
641 fItems->Add(item);
642
643 fDataReaders->MapSubwindows();
644 fDataReaders->Resize();
645}
646
647//_____________________________________________________________________________
648void
49419555 649AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(AliMUONVTrackerDataMaker* maker)
0145e89a 650{
49419555 651 /// Update ourselves as a data reader was deleted
0145e89a 652
49419555 653 AliMUONPainterDataSourceItem* theItem(0x0);
10eb3d17 654
49419555 655 TIter next(fItems);
656 AliMUONPainterDataSourceItem* item;
657
658 while ( ( item = static_cast<AliMUONPainterDataSourceItem*>(next()) ) && !theItem )
659 {
660 if ( item->DataMaker() == maker )
661 {
662 theItem = item;
663 }
664 }
665
666 if (!theItem) return;
667
668 fDataReaders->RemoveFrame(theItem);
669 fItems->Remove(theItem);
670 theItem->DestroyWindow();
671 delete theItem;
672
673 fDataReaders->MapSubwindows();
674 fDataReaders->Resize();
675
0145e89a 676}
677
678//_____________________________________________________________________________
679void
680AliMUONPainterDataSourceFrame::OpenFileDialog()
681{
682 /// Open a file dialog to select a file to be read
683
684 TGFileInfo fileInfo;
685
10eb3d17 686 const char* fileTypes[] = {
687 "ROOT files","*.root",
688 "DATE files","*.raw",
689 "All files","*",
690 0,0 };
691
692 fileInfo.fFileTypes = fileTypes;
49419555 693 delete[] fileInfo.fIniDir;
694
695 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
696
697 fileInfo.fIniDir = StrDup(env->String("LastOpenDir","."));
10eb3d17 698
0145e89a 699 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
700 kFDOpen,&fileInfo);
701
0145e89a 702 fFilePath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
49419555 703
704 env->Set("LastOpenDir",fileInfo.fIniDir);
705 env->Save();
0145e89a 706}
707
708
1286237e 709//_____________________________________________________________________________
710void
711AliMUONPainterDataSourceFrame::OpenFileDialogACF()
712{
713 /// Open a file dialog to select an ASCII calibration file to be read
714
715 TGFileInfo fileInfo;
716
717 const char* fileTypes[] = {
718 "All files","*",
719 0,0 };
720
721 fileInfo.fFileTypes = fileTypes;
722 delete[] fileInfo.fIniDir;
723
724 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
725
726 fileInfo.fIniDir = StrDup(env->String("LastOpenDirACF","."));
727
728 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
729 kFDOpen,&fileInfo);
730
731 fACFPath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
732
733 env->Set("LastOpenDirACF",fileInfo.fIniDir);
734 env->Save();
735}
736
737
0145e89a 738//_____________________________________________________________________________
739void
740AliMUONPainterDataSourceFrame::OpenRecentSource()
741{
742 /// Open one source from the recently used ones
743
744 TGTextLBEntry* t = (TGTextLBEntry*)fRecentSources->GetSelectedEntry();
745
746 TString uri(t->GetText()->GetString());
747
10eb3d17 748 if ( uri.Contains(TRegexp("^RAW")) || uri.Contains(TRegexp("^HRAW")) ||
b6f591ae 749 uri.Contains(TRegexp("^CAL")) || uri.Contains(TRegexp("^HCAL")) ||
750 uri.Contains(TRegexp("^MEM")) )
0145e89a 751 {
752 CreateRawDataSource(uri);
753 }
754 else if ( uri.Contains(TRegexp("^OCDB")) )
755 {
756 CreateOCDBDataSource(uri);
757 }
1286237e 758 else if ( uri.Contains(TRegexp("^ACF")) )
759 {
760 CreateACFDataSource(uri);
761 }
0145e89a 762
763 fRecentSources->Select(-1);
764}
765
10eb3d17 766//_____________________________________________________________________________
767void
b0cbe180 768AliMUONPainterDataSourceFrame::StartRunning()
10eb3d17 769{
770 /// One data source starts running. Disable the Run button of the other ones
b0cbe180 771
772 AliMUONPainterDataSourceItem* item = reinterpret_cast<AliMUONPainterDataSourceItem*> (gTQSender);
773
774 AliInfo("");
775
10eb3d17 776 TIter next(fItems);
777 AliMUONPainterDataSourceItem* o;
778 while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )
779 {
780 if ( o != item )
781 {
782 o->DisableRun();
783 }
784 }
785}
786
787//_____________________________________________________________________________
788void
b0cbe180 789AliMUONPainterDataSourceFrame::StopRunning()
10eb3d17 790{
791 /// One data source stops running. Enable the Run button of all items
b0cbe180 792
10eb3d17 793 TIter next(fItems);
794 AliMUONPainterDataSourceItem* o;
795 while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )
796 {
797 o->EnableRun();
798 }
799}
800