1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
19 #include "AliMUONPainterDataSourceFrame.h"
22 #include "AliMUONPainterDataSourceItem.h"
23 #include "AliMUONPainterEnv.h"
24 #include "AliMUONPainterHelper.h"
25 #include "AliMUONPainterRegistry.h"
26 #include "AliMUONTrackerACFDataMaker.h"
27 #include "AliMUONTrackerCalibratedDataMaker.h"
28 #include "AliMUONTrackerOCDBDataMaker.h"
29 #include "AliMUONTrackerRawDataMaker.h"
30 #include "AliRawReader.h"
32 #include <TGComboBox.h>
33 #include <TGFileDialog.h>
34 #include <TGNumberEntry.h>
35 #include <TGTextEntry.h>
37 #include <TObjArray.h>
38 #include <TObjString.h>
43 ///\class AliMUONPainterDataSourceFrame
45 /// A complete frame to select and display various data sources to
46 /// be displayed : either raw data or OCDB data.
47 /// Later on we might add digits and clusters for instance.
49 ///\author Laurent Aphecetche, Subatech
51 const char* AliMUONPainterDataSourceFrame::fgkNumberOfDataSourcesKey = "NumberOfDataSources";
52 const char* AliMUONPainterDataSourceFrame::fgkDataSourceURIKey = "DataSourceURI.%d";
55 ClassImp(AliMUONPainterDataSourceFrame)
58 //_____________________________________________________________________________
59 AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, UInt_t w, UInt_t h)
60 : TGCompositeFrame(p,w,h,kVerticalFrame),
61 fRecentSourceSelector(new TGGroupFrame(this,"Recent sources",kHorizontalFrame)),
62 fRawSelector(new TGGroupFrame(this,"Raw file URI",kHorizontalFrame)),
63 fRawSelector2(new TGCompositeFrame(fRawSelector,w,h,kVerticalFrame)),
64 fRawSelector21(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
65 fRawSelector22(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
66 fRawSelector23(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
67 fCalibrateNoGain(new TGCheckButton(fRawSelector22,"Ped subraction")),
68 fCalibrateGainConstantCapa(new TGCheckButton(fRawSelector22,"Ped subraction + gain (capa cste)")),
69 fCalibrateGain(new TGCheckButton(fRawSelector22,"Full calib (Ped subraction + gain with capa)")),
70 fHistogramButton(new TGCheckButton(fRawSelector23,"Histogram")),
71 fHistoMin(new TGNumberEntry(fRawSelector23,0)),
72 fHistoMax(new TGNumberEntry(fRawSelector23,4096)),
73 fRawOCDBPath(new TGTextEntry(fRawSelector22,"")),
74 fOCDBSelector(new TGGroupFrame(this,"OCDB Path",kHorizontalFrame)),
75 fDataReaders(new TGGroupFrame(this,"Data sources")),
76 fFilePath(new TGTextEntry(fRawSelector21,"")),
77 fOCDBPath(new TGTextEntry(fOCDBSelector,"")),
78 fRunSelector(new TGNumberEntry(fOCDBSelector,0)),
79 fOCDBTypes(new TGComboBox(fOCDBSelector)),
80 fRecentSources(new TGComboBox(fRecentSourceSelector)),
81 fItems(new TObjArray),
82 fACFSelector(new TGGroupFrame(this,"ASCII Calib File",kHorizontalFrame)),
83 fACFPath(new TGTextEntry(fACFSelector,"")),
84 fACFTypes(new TGComboBox(fACFSelector))
88 AliMUONPainterRegistry* reg = AliMUONPainterRegistry::Instance();
90 reg->Connect("DataMakerWasRegistered(AliMUONVTrackerDataMaker*)",
91 "AliMUONPainterDataSourceFrame",
93 "DataMakerWasRegistered(AliMUONVTrackerDataMaker*)");
95 reg->Connect("DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)",
96 "AliMUONPainterDataSourceFrame",
98 "DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)");
100 fItems->SetOwner(kFALSE);
102 /// Recent source selection
104 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
106 Int_t nsources = env->Integer(fgkNumberOfDataSourcesKey);
108 for ( Int_t i = 0; i < nsources; ++i )
110 AddRecentSource(env->String(Form(fgkDataSourceURIKey,i)));
113 fRecentSources->Resize(100,20);
115 TGButton* createRecentButton = new TGTextButton(fRecentSourceSelector,"Create data source");
116 createRecentButton->Connect("Clicked()",
117 "AliMUONPainterDataSourceFrame",
119 "OpenRecentSource()");
121 fRecentSourceSelector->AddFrame(fRecentSources,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
122 fRecentSourceSelector->AddFrame(createRecentButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
124 /// Raw file selection
126 TGButton* openButton = new TGPictureButton(fRawSelector21,
127 gClient->GetPicture("fileopen.xpm"));
128 openButton->SetToolTipText("Click to open file dialog");
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));
134 fRawSelector21->AddFrame(openButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
135 fRawSelector21->AddFrame(fFilePath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
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));
140 fRawSelector22->AddFrame(fRawOCDBPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
141 fRawOCDBPath->SetEnabled(kFALSE);
143 fRawSelector23->AddFrame(fHistogramButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
145 fHistogramButton->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"HistogramButtonClicked()");
147 fHistoMin->SetState(kFALSE);
148 fHistoMax->SetState(kFALSE);
150 fRawSelector23->AddFrame(fHistoMin,new TGLayoutHints(kLHintsTop,5,5,5,5));
151 fRawSelector23->AddFrame(fHistoMax,new TGLayoutHints(kLHintsTop,5,5,5,5));
153 TGButton* createRawButton = new TGTextButton(fRawSelector,"Create data source");
155 fRawSelector->AddFrame(fRawSelector2, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
156 fRawSelector->AddFrame(createRawButton, new TGLayoutHints(kLHintsCenterY,5,5,5,5));
158 fCalibrateNoGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
159 fCalibrateGainConstantCapa->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
160 fCalibrateGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
162 openButton->Connect("Clicked()",
163 "AliMUONPainterDataSourceFrame",
167 createRawButton->Connect("Clicked()",
168 "AliMUONPainterDataSourceFrame",
170 "CreateRawDataSource()");
174 fOCDBTypes->AddEntry("Pedestals",0);
175 fOCDBTypes->AddEntry("Gains",1);
176 fOCDBTypes->AddEntry("Capacitances",2);
177 fOCDBTypes->Select(0);
178 fOCDBTypes->Resize(100,20);
180 TGButton* createOCDBButton = new TGTextButton(fOCDBSelector,"Create data source");
181 createOCDBButton->Connect("Clicked()",
182 "AliMUONPainterDataSourceFrame",
184 "CreateOCDBDataSource()");
186 fOCDBSelector->AddFrame(fOCDBPath,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
187 fOCDBSelector->AddFrame(fRunSelector,new TGLayoutHints(kLHintsTop,5,5,5,5));
188 fOCDBSelector->AddFrame(fOCDBTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
189 fOCDBSelector->AddFrame(createOCDBButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
192 /// ASCII calibration file selection
194 TGButton* openButtonACF = new TGPictureButton(fACFSelector,
195 gClient->GetPicture("fileopen.xpm"));
196 openButtonACF->SetToolTipText("Click to open file dialog");
198 fACFTypes->AddEntry("Pedestals",0);
199 fACFTypes->AddEntry("Gains",1);
200 fACFTypes->AddEntry("Capacitances",2);
201 fACFTypes->Select(0);
202 fACFTypes->Resize(100,20);
204 fACFSelector->AddFrame(openButtonACF,new TGLayoutHints(kLHintsTop,5,5,5,5));
205 fACFSelector->AddFrame(fACFPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
206 fACFSelector->AddFrame(fACFTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
208 TGButton* createACFButton = new TGTextButton(fACFSelector,"Create data source");
209 createACFButton->Connect("Clicked()",
210 "AliMUONPainterDataSourceFrame",
212 "CreateACFDataSource()");
214 openButtonACF->Connect("Clicked()",
215 "AliMUONPainterDataSourceFrame",
217 "OpenFileDialogACF()");
219 fACFSelector->AddFrame(createACFButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
221 AddFrame(fRecentSourceSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
223 AddFrame(fRawSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
225 AddFrame(fOCDBSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
227 AddFrame(fACFSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
229 AddFrame(fDataReaders, new TGLayoutHints(kLHintsExpandX,10,10,10,10));
233 //_____________________________________________________________________________
234 AliMUONPainterDataSourceFrame::~AliMUONPainterDataSourceFrame()
241 //_____________________________________________________________________________
243 AliMUONPainterDataSourceFrame::AddRecentSource(const char* name)
245 /// Add a source to the list of recently used sources
247 TGListBox* lb = fRecentSources->GetListBox();
249 for ( Int_t i = 0; i < lb->GetNumberOfEntries(); ++i )
251 TGTextLBEntry* t = (TGTextLBEntry*)lb->GetEntry(i);
252 TString s(t->GetText()->GetString());
259 fRecentSources->AddEntry(name,lb->GetNumberOfEntries());
260 fRecentSources->MapSubwindows();
261 fRecentSources->Layout();
264 //_____________________________________________________________________________
266 AliMUONPainterDataSourceFrame::CalibrateButtonClicked()
268 /// Calibrate button was clicked.
270 if ( fCalibrateNoGain->IsOn() ||
271 fCalibrateGainConstantCapa->IsOn() ||
272 fCalibrateGain->IsOn() )
274 fRawOCDBPath->SetEnabled(kTRUE);
275 fRawOCDBPath->SetFocus();
279 fRawOCDBPath->SetEnabled(kFALSE);
283 //_____________________________________________________________________________
285 AliMUONPainterDataSourceFrame::HistogramButtonClicked()
287 /// Histogram button was clicked.
289 if ( fHistogramButton->IsOn() )
291 fHistoMin->SetState(kTRUE);
292 fHistoMax->SetState(kTRUE);
296 fHistoMin->SetState(kFALSE);
297 fHistoMax->SetState(kFALSE);
301 //_____________________________________________________________________________
303 AliMUONPainterDataSourceFrame::CreateACFDataSource()
305 /// Create an ACF data source (using information from the widgets)
307 TString acfPath = fACFPath->GetText();
308 TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fACFTypes->GetSelectedEntry());
309 TString type = t->GetText()->GetString();
311 CreateACFDataSource(acfPath,type);
313 fACFPath->SetText("");
317 //_____________________________________________________________________________
319 AliMUONPainterDataSourceFrame::CreateOCDBDataSource()
321 /// Create an OCDB data source (using information from the widgets)
323 TString cdbPath = fOCDBPath->GetText();
324 Int_t runNumber = fRunSelector->GetIntNumber();
325 TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fOCDBTypes->GetSelectedEntry());
326 TString type = t->GetText()->GetString();
328 CreateOCDBDataSource(cdbPath,runNumber,type);
330 fOCDBPath->SetText("");
331 fRunSelector->SetNumber(0);
334 //_____________________________________________________________________________
336 AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& uri)
338 /// Create an ACF data source, given it's URI
340 TObjArray* a = uri.Tokenize(";");
341 TString acfPath = static_cast<TObjString*>(a->At(1))->String();
342 TString type = static_cast<TObjString*>(a->At(2))->String();
344 CreateACFDataSource(acfPath,type);
350 //_____________________________________________________________________________
352 AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& uri)
354 /// Create an OCDB data source, given it's URI
356 TObjArray* a = uri.Tokenize(";");
357 TString cdbPath = static_cast<TObjString*>(a->At(1))->String();
358 TString srun = static_cast<TObjString*>(a->At(2))->String();
359 TString type = static_cast<TObjString*>(a->At(3))->String();
361 CreateOCDBDataSource(cdbPath,atoi(srun.Data()),type);
366 //_____________________________________________________________________________
368 AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& acfPath, const TString& type)
370 /// Create an ACF data source for a given (path,type)
372 AliMUONVTrackerDataMaker* reader = new AliMUONTrackerACFDataMaker(acfPath.Data(),
375 if ( reader->IsValid() )
377 AliMUONPainterRegistry::Instance()->Register(reader);
379 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
381 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
383 env->Set(fgkNumberOfDataSourcesKey,n+1);
385 TString ds(Form("ACF;%s;%s",acfPath.Data(),type.Data()));
387 env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
391 AddRecentSource(ds.Data());
396 //_____________________________________________________________________________
398 AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& cdbPath,
402 /// Create an OCDB data source for a given (path,runnumber,type) triplet
404 AliMUONVTrackerDataMaker* reader = new AliMUONTrackerOCDBDataMaker(cdbPath.Data(),
408 if ( reader->IsValid() )
410 AliMUONPainterRegistry::Instance()->Register(reader);
412 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
414 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
416 env->Set(fgkNumberOfDataSourcesKey,n+1);
418 TString ds(Form("OCDB;%s;%d;%s",cdbPath.Data(),runNumber,type.Data()));
420 env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
424 AddRecentSource(ds.Data());
428 //_____________________________________________________________________________
430 AliMUONPainterDataSourceFrame::CreateRawDataSource()
432 /// Create a new raw data source (using info from the widgets)
434 TString uri(gSystem->ExpandPathName(fFilePath->GetText()));
436 if ( gSystem->AccessPathName(uri.Data()) )
438 AliError(Form("File %s does not exist",uri.Data()));
439 fFilePath->SetText("");
443 TString calibMode("");
446 if ( fCalibrateGain->IsOn() )
452 if ( fCalibrateGainConstantCapa->IsOn() )
454 calibMode = "GAINCONSTANTCAPA";
458 if ( fCalibrateNoGain->IsOn() )
460 calibMode = "NOGAIN";
464 uri = Form("%s%s;%s;%s;%s;%s;%s",
465 ( fHistogramButton->IsOn() ? "H":""),
466 name.Data(),uri.Data(),
467 ( strlen(fRawOCDBPath->GetText()) > 0 ? fRawOCDBPath->GetText() : " "),
468 ( calibMode.Length() > 0 ? calibMode.Data() : " "),
469 Form("%e",fHistoMin->GetNumber()),
470 Form("%e",fHistoMax->GetNumber()));
472 if ( CreateRawDataSource(uri) )
474 fFilePath->SetText("");
475 fRawOCDBPath->SetText("");
479 //_____________________________________________________________________________
481 AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri)
483 /// Create a new raw data source, given its URI
488 TString sxmin("0.0");
489 TString sxmax("4096.0");
491 TObjArray* a = uri.Tokenize(";");
493 filename = static_cast<TObjString*>(a->At(1))->String();
495 if ( a->GetLast() > 1 )
497 ocdbPath = static_cast<TObjString*>(a->At(2))->String();
498 if ( ocdbPath == " " ) ocdbPath = "";
501 if ( a->GetLast() > 2 )
503 calibMode = static_cast<TObjString*>(a->At(3))->String();
504 if ( calibMode == " " ) calibMode = "";
507 if ( a->GetLast() > 3 )
509 sxmin = static_cast<TObjString*>(a->At(4))->String();
512 if ( a->GetLast() > 4 )
514 sxmax = static_cast<TObjString*>(a->At(5))->String();
517 AliRawReader* rawReader = 0x0;
519 if ( filename.Contains(TRegexp("^alien")) )
521 // insure we've initialized the grid...
524 TGrid::Connect("alien://");
528 rawReader = AliRawReader::Create(filename.Data());
532 AliError(Form("Could not open file %s",filename.Data()));
533 fFilePath->SetText("");
537 /// Basic test to see if the file is correct
538 Bool_t ok = rawReader->NextEvent();
541 AliError(Form("File %s does not seem to be a raw data file",filename.Data()));
542 fFilePath->SetText("");
546 rawReader->RewindEvents();
548 AliMUONVTrackerDataMaker* reader(0x0);
549 Bool_t histogram(kFALSE);
551 if ( uri.Contains(TRegexp("^H")) ) histogram = kTRUE;
553 if ( ocdbPath.Length() > 0 )
555 reader = new AliMUONTrackerCalibratedDataMaker(rawReader,ocdbPath.Data(),
563 reader = new AliMUONTrackerRawDataMaker(rawReader,histogram);
566 reader->SetSource(filename.Data());
568 AliMUONPainterRegistry::Instance()->Register(reader);
570 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
572 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
574 env->Set(fgkNumberOfDataSourcesKey,n+1);
576 env->Set(Form(fgkDataSourceURIKey,n),uri.Data());
578 AddRecentSource(uri.Data());
585 //_____________________________________________________________________________
587 AliMUONPainterDataSourceFrame::DataMakerWasRegistered(AliMUONVTrackerDataMaker* reader)
589 /// Update ourselves as a new data reader was created
591 AliMUONPainterDataSourceItem* item = new AliMUONPainterDataSourceItem(fDataReaders,100,20,reader);
593 item->Connect("StartRunning()",
594 "AliMUONPainterDataSourceFrame",
596 Form("StartRunning(=(AliMUONPainterDataSourceItem*)(0x%x))",item));
598 item->Connect("StopRunning()",
599 "AliMUONPainterDataSourceFrame",
601 Form("StopRunning(=(AliMUONPainterDataSourceItem*)(0x%x))",item));
603 fDataReaders->AddFrame(item);
607 fDataReaders->MapSubwindows();
608 fDataReaders->Resize();
611 //_____________________________________________________________________________
613 AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(AliMUONVTrackerDataMaker* maker)
615 /// Update ourselves as a data reader was deleted
617 AliMUONPainterDataSourceItem* theItem(0x0);
620 AliMUONPainterDataSourceItem* item;
622 while ( ( item = static_cast<AliMUONPainterDataSourceItem*>(next()) ) && !theItem )
624 if ( item->DataMaker() == maker )
630 if (!theItem) return;
632 fDataReaders->RemoveFrame(theItem);
633 fItems->Remove(theItem);
634 theItem->DestroyWindow();
637 fDataReaders->MapSubwindows();
638 fDataReaders->Resize();
642 //_____________________________________________________________________________
644 AliMUONPainterDataSourceFrame::OpenFileDialog()
646 /// Open a file dialog to select a file to be read
650 const char* fileTypes[] = {
651 "ROOT files","*.root",
652 "DATE files","*.raw",
656 fileInfo.fFileTypes = fileTypes;
657 delete[] fileInfo.fIniDir;
659 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
661 fileInfo.fIniDir = StrDup(env->String("LastOpenDir","."));
663 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
666 fFilePath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
668 env->Set("LastOpenDir",fileInfo.fIniDir);
673 //_____________________________________________________________________________
675 AliMUONPainterDataSourceFrame::OpenFileDialogACF()
677 /// Open a file dialog to select an ASCII calibration file to be read
681 const char* fileTypes[] = {
685 fileInfo.fFileTypes = fileTypes;
686 delete[] fileInfo.fIniDir;
688 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
690 fileInfo.fIniDir = StrDup(env->String("LastOpenDirACF","."));
692 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
695 fACFPath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
697 env->Set("LastOpenDirACF",fileInfo.fIniDir);
702 //_____________________________________________________________________________
704 AliMUONPainterDataSourceFrame::OpenRecentSource()
706 /// Open one source from the recently used ones
708 TGTextLBEntry* t = (TGTextLBEntry*)fRecentSources->GetSelectedEntry();
710 TString uri(t->GetText()->GetString());
712 if ( uri.Contains(TRegexp("^RAW")) || uri.Contains(TRegexp("^HRAW")) ||
713 uri.Contains(TRegexp("^CAL")) || uri.Contains(TRegexp("^HCAL")) )
715 CreateRawDataSource(uri);
717 else if ( uri.Contains(TRegexp("^OCDB")) )
719 CreateOCDBDataSource(uri);
721 else if ( uri.Contains(TRegexp("^ACF")) )
723 CreateACFDataSource(uri);
726 fRecentSources->Select(-1);
729 //_____________________________________________________________________________
731 AliMUONPainterDataSourceFrame::StartRunning(AliMUONPainterDataSourceItem* item)
733 /// One data source starts running. Disable the Run button of the other ones
735 AliMUONPainterDataSourceItem* o;
736 while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )
745 //_____________________________________________________________________________
747 AliMUONPainterDataSourceFrame::StopRunning(AliMUONPainterDataSourceItem* /*item*/)
749 /// One data source stops running. Enable the Run button of all items
751 AliMUONPainterDataSourceItem* o;
752 while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )