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->AddEntry("HV",3);
178 fOCDBTypes->Select(0);
179 fOCDBTypes->Resize(100,20);
181 TGButton* createOCDBButton = new TGTextButton(fOCDBSelector,"Create data source");
182 createOCDBButton->Connect("Clicked()",
183 "AliMUONPainterDataSourceFrame",
185 "CreateOCDBDataSource()");
187 fOCDBSelector->AddFrame(fOCDBPath,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
188 fOCDBSelector->AddFrame(fRunSelector,new TGLayoutHints(kLHintsTop,5,5,5,5));
189 fOCDBSelector->AddFrame(fOCDBTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
190 fOCDBSelector->AddFrame(createOCDBButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
193 /// ASCII calibration file selection
195 TGButton* openButtonACF = new TGPictureButton(fACFSelector,
196 gClient->GetPicture("fileopen.xpm"));
197 openButtonACF->SetToolTipText("Click to open file dialog");
199 fACFTypes->AddEntry("Pedestals",0);
200 fACFTypes->AddEntry("Gains",1);
201 fACFTypes->AddEntry("Capacitances",2);
202 fACFTypes->Select(0);
203 fACFTypes->Resize(100,20);
205 fACFSelector->AddFrame(openButtonACF,new TGLayoutHints(kLHintsTop,5,5,5,5));
206 fACFSelector->AddFrame(fACFPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
207 fACFSelector->AddFrame(fACFTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
209 TGButton* createACFButton = new TGTextButton(fACFSelector,"Create data source");
210 createACFButton->Connect("Clicked()",
211 "AliMUONPainterDataSourceFrame",
213 "CreateACFDataSource()");
215 openButtonACF->Connect("Clicked()",
216 "AliMUONPainterDataSourceFrame",
218 "OpenFileDialogACF()");
220 fACFSelector->AddFrame(createACFButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
222 AddFrame(fRecentSourceSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
224 AddFrame(fRawSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
226 AddFrame(fOCDBSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
228 AddFrame(fACFSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
230 AddFrame(fDataReaders, new TGLayoutHints(kLHintsExpandX,10,10,10,10));
234 //_____________________________________________________________________________
235 AliMUONPainterDataSourceFrame::~AliMUONPainterDataSourceFrame()
242 //_____________________________________________________________________________
244 AliMUONPainterDataSourceFrame::AddRecentSource(const char* name)
246 /// Add a source to the list of recently used sources
248 TGListBox* lb = fRecentSources->GetListBox();
250 for ( Int_t i = 0; i < lb->GetNumberOfEntries(); ++i )
252 TGTextLBEntry* t = (TGTextLBEntry*)lb->GetEntry(i);
253 TString s(t->GetText()->GetString());
260 fRecentSources->AddEntry(name,lb->GetNumberOfEntries());
261 fRecentSources->MapSubwindows();
262 fRecentSources->Layout();
265 //_____________________________________________________________________________
267 AliMUONPainterDataSourceFrame::CalibrateButtonClicked()
269 /// Calibrate button was clicked.
271 if ( fCalibrateNoGain->IsOn() ||
272 fCalibrateGainConstantCapa->IsOn() ||
273 fCalibrateGain->IsOn() )
275 fRawOCDBPath->SetEnabled(kTRUE);
276 fRawOCDBPath->SetFocus();
280 fRawOCDBPath->SetEnabled(kFALSE);
284 //_____________________________________________________________________________
286 AliMUONPainterDataSourceFrame::HistogramButtonClicked()
288 /// Histogram button was clicked.
290 if ( fHistogramButton->IsOn() )
292 fHistoMin->SetState(kTRUE);
293 fHistoMax->SetState(kTRUE);
297 fHistoMin->SetState(kFALSE);
298 fHistoMax->SetState(kFALSE);
302 //_____________________________________________________________________________
304 AliMUONPainterDataSourceFrame::CreateACFDataSource()
306 /// Create an ACF data source (using information from the widgets)
308 TString acfPath = fACFPath->GetText();
309 TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fACFTypes->GetSelectedEntry());
310 TString type = t->GetText()->GetString();
312 CreateACFDataSource(acfPath,type);
314 fACFPath->SetText("");
318 //_____________________________________________________________________________
320 AliMUONPainterDataSourceFrame::CreateOCDBDataSource()
322 /// Create an OCDB data source (using information from the widgets)
324 TString cdbPath = fOCDBPath->GetText();
325 Int_t runNumber = fRunSelector->GetIntNumber();
326 TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fOCDBTypes->GetSelectedEntry());
327 TString type = t->GetText()->GetString();
329 CreateOCDBDataSource(cdbPath,runNumber,type);
331 fOCDBPath->SetText("");
332 fRunSelector->SetNumber(0);
335 //_____________________________________________________________________________
337 AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& uri)
339 /// Create an ACF data source, given it's URI
341 TObjArray* a = uri.Tokenize(";");
342 TString acfPath = static_cast<TObjString*>(a->At(1))->String();
343 TString type = static_cast<TObjString*>(a->At(2))->String();
345 CreateACFDataSource(acfPath,type);
351 //_____________________________________________________________________________
353 AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& uri)
355 /// Create an OCDB data source, given it's URI
357 TObjArray* a = uri.Tokenize(";");
358 TString cdbPath = static_cast<TObjString*>(a->At(1))->String();
359 TString srun = static_cast<TObjString*>(a->At(2))->String();
360 TString type = static_cast<TObjString*>(a->At(3))->String();
362 CreateOCDBDataSource(cdbPath,atoi(srun.Data()),type);
367 //_____________________________________________________________________________
369 AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& acfPath, const TString& type)
371 /// Create an ACF data source for a given (path,type)
373 AliMUONVTrackerDataMaker* reader = new AliMUONTrackerACFDataMaker(acfPath.Data(),
376 if ( reader->IsValid() )
378 AliMUONPainterRegistry::Instance()->Register(reader);
380 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
382 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
384 env->Set(fgkNumberOfDataSourcesKey,n+1);
386 TString ds(Form("ACF;%s;%s",acfPath.Data(),type.Data()));
388 env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
392 AddRecentSource(ds.Data());
397 //_____________________________________________________________________________
399 AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& cdbPath,
403 /// Create an OCDB data source for a given (path,runnumber,type) triplet
405 AliMUONVTrackerDataMaker* reader = new AliMUONTrackerOCDBDataMaker(cdbPath.Data(),
409 if ( reader->IsValid() )
411 AliMUONPainterRegistry::Instance()->Register(reader);
413 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
415 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
417 env->Set(fgkNumberOfDataSourcesKey,n+1);
419 TString ds(Form("OCDB;%s;%d;%s",cdbPath.Data(),runNumber,type.Data()));
421 env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
425 AddRecentSource(ds.Data());
429 //_____________________________________________________________________________
431 AliMUONPainterDataSourceFrame::CreateRawDataSource()
433 /// Create a new raw data source (using info from the widgets)
435 TString uri(gSystem->ExpandPathName(fFilePath->GetText()));
437 if ( gSystem->AccessPathName(uri.Data()) )
439 AliError(Form("File %s does not exist",uri.Data()));
440 fFilePath->SetText("");
444 TString calibMode("");
447 if ( fCalibrateGain->IsOn() )
453 if ( fCalibrateGainConstantCapa->IsOn() )
455 calibMode = "GAINCONSTANTCAPA";
459 if ( fCalibrateNoGain->IsOn() )
461 calibMode = "NOGAIN";
465 uri = Form("%s%s;%s;%s;%s;%s;%s",
466 ( fHistogramButton->IsOn() ? "H":""),
467 name.Data(),uri.Data(),
468 ( strlen(fRawOCDBPath->GetText()) > 0 ? fRawOCDBPath->GetText() : " "),
469 ( calibMode.Length() > 0 ? calibMode.Data() : " "),
470 Form("%e",fHistoMin->GetNumber()),
471 Form("%e",fHistoMax->GetNumber()));
473 if ( CreateRawDataSource(uri) )
475 fFilePath->SetText("");
476 fRawOCDBPath->SetText("");
480 //_____________________________________________________________________________
482 AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri)
484 /// Create a new raw data source, given its URI
489 TString sxmin("0.0");
490 TString sxmax("4096.0");
492 TObjArray* a = uri.Tokenize(";");
494 filename = static_cast<TObjString*>(a->At(1))->String();
496 if ( a->GetLast() > 1 )
498 ocdbPath = static_cast<TObjString*>(a->At(2))->String();
499 if ( ocdbPath == " " ) ocdbPath = "";
502 if ( a->GetLast() > 2 )
504 calibMode = static_cast<TObjString*>(a->At(3))->String();
505 if ( calibMode == " " ) calibMode = "";
508 if ( a->GetLast() > 3 )
510 sxmin = static_cast<TObjString*>(a->At(4))->String();
513 if ( a->GetLast() > 4 )
515 sxmax = static_cast<TObjString*>(a->At(5))->String();
518 AliRawReader* rawReader = 0x0;
520 if ( filename.Contains(TRegexp("^alien")) )
522 // insure we've initialized the grid...
525 TGrid::Connect("alien://");
529 rawReader = AliRawReader::Create(filename.Data());
533 AliError(Form("Could not open file %s",filename.Data()));
534 fFilePath->SetText("");
538 /// Basic test to see if the file is correct
539 Bool_t ok = rawReader->NextEvent();
542 AliError(Form("File %s does not seem to be a raw data file",filename.Data()));
543 fFilePath->SetText("");
547 rawReader->RewindEvents();
549 AliMUONVTrackerDataMaker* reader(0x0);
550 Bool_t histogram(kFALSE);
552 if ( uri.Contains(TRegexp("^H")) ) histogram = kTRUE;
554 if ( ocdbPath.Length() > 0 )
556 reader = new AliMUONTrackerCalibratedDataMaker(rawReader,ocdbPath.Data(),
564 reader = new AliMUONTrackerRawDataMaker(rawReader,histogram);
567 reader->SetSource(filename.Data());
569 AliMUONPainterRegistry::Instance()->Register(reader);
571 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
573 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
575 env->Set(fgkNumberOfDataSourcesKey,n+1);
577 env->Set(Form(fgkDataSourceURIKey,n),uri.Data());
579 AddRecentSource(uri.Data());
586 //_____________________________________________________________________________
588 AliMUONPainterDataSourceFrame::DataMakerWasRegistered(AliMUONVTrackerDataMaker* reader)
590 /// Update ourselves as a new data reader was created
592 AliMUONPainterDataSourceItem* item = new AliMUONPainterDataSourceItem(fDataReaders,100,20,reader);
594 item->Connect("StartRunning()",
595 "AliMUONPainterDataSourceFrame",
599 item->Connect("StopRunning()",
600 "AliMUONPainterDataSourceFrame",
604 fDataReaders->AddFrame(item);
608 fDataReaders->MapSubwindows();
609 fDataReaders->Resize();
612 //_____________________________________________________________________________
614 AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(AliMUONVTrackerDataMaker* maker)
616 /// Update ourselves as a data reader was deleted
618 AliMUONPainterDataSourceItem* theItem(0x0);
621 AliMUONPainterDataSourceItem* item;
623 while ( ( item = static_cast<AliMUONPainterDataSourceItem*>(next()) ) && !theItem )
625 if ( item->DataMaker() == maker )
631 if (!theItem) return;
633 fDataReaders->RemoveFrame(theItem);
634 fItems->Remove(theItem);
635 theItem->DestroyWindow();
638 fDataReaders->MapSubwindows();
639 fDataReaders->Resize();
643 //_____________________________________________________________________________
645 AliMUONPainterDataSourceFrame::OpenFileDialog()
647 /// Open a file dialog to select a file to be read
651 const char* fileTypes[] = {
652 "ROOT files","*.root",
653 "DATE files","*.raw",
657 fileInfo.fFileTypes = fileTypes;
658 delete[] fileInfo.fIniDir;
660 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
662 fileInfo.fIniDir = StrDup(env->String("LastOpenDir","."));
664 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
667 fFilePath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
669 env->Set("LastOpenDir",fileInfo.fIniDir);
674 //_____________________________________________________________________________
676 AliMUONPainterDataSourceFrame::OpenFileDialogACF()
678 /// Open a file dialog to select an ASCII calibration file to be read
682 const char* fileTypes[] = {
686 fileInfo.fFileTypes = fileTypes;
687 delete[] fileInfo.fIniDir;
689 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
691 fileInfo.fIniDir = StrDup(env->String("LastOpenDirACF","."));
693 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
696 fACFPath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
698 env->Set("LastOpenDirACF",fileInfo.fIniDir);
703 //_____________________________________________________________________________
705 AliMUONPainterDataSourceFrame::OpenRecentSource()
707 /// Open one source from the recently used ones
709 TGTextLBEntry* t = (TGTextLBEntry*)fRecentSources->GetSelectedEntry();
711 TString uri(t->GetText()->GetString());
713 if ( uri.Contains(TRegexp("^RAW")) || uri.Contains(TRegexp("^HRAW")) ||
714 uri.Contains(TRegexp("^CAL")) || uri.Contains(TRegexp("^HCAL")) )
716 CreateRawDataSource(uri);
718 else if ( uri.Contains(TRegexp("^OCDB")) )
720 CreateOCDBDataSource(uri);
722 else if ( uri.Contains(TRegexp("^ACF")) )
724 CreateACFDataSource(uri);
727 fRecentSources->Select(-1);
730 //_____________________________________________________________________________
732 AliMUONPainterDataSourceFrame::StartRunning()
734 /// One data source starts running. Disable the Run button of the other ones
736 AliMUONPainterDataSourceItem* item = reinterpret_cast<AliMUONPainterDataSourceItem*> (gTQSender);
741 AliMUONPainterDataSourceItem* o;
742 while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )
751 //_____________________________________________________________________________
753 AliMUONPainterDataSourceFrame::StopRunning()
755 /// One data source stops running. Enable the Run button of all items
758 AliMUONPainterDataSourceItem* o;
759 while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )