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 "AliMUONRecoParam.h"
27 #include "AliMUONTrackerACFDataMaker.h"
28 #include "AliMUONTrackerCalibratedDataMaker.h"
29 #include "AliMUONTrackerOCDBDataMaker.h"
30 #include "AliMUONTrackerRawDataMaker.h"
31 #include "AliRawReader.h"
33 #include <TGComboBox.h>
34 #include <TGFileDialog.h>
35 #include <TGNumberEntry.h>
36 #include <TGTextEntry.h>
38 #include <TObjArray.h>
39 #include <TObjString.h>
44 ///\class AliMUONPainterDataSourceFrame
46 /// A complete frame to select and display various data sources to
47 /// be displayed : either raw data or OCDB data.
48 /// Later on we might add digits and clusters for instance.
50 ///\author Laurent Aphecetche, Subatech
52 const char* AliMUONPainterDataSourceFrame::fgkNumberOfDataSourcesKey = "NumberOfDataSources";
53 const char* AliMUONPainterDataSourceFrame::fgkDataSourceURIKey = "DataSourceURI.%d";
56 ClassImp(AliMUONPainterDataSourceFrame)
59 //_____________________________________________________________________________
60 AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, UInt_t w, UInt_t h)
61 : TGCompositeFrame(p,w,h,kVerticalFrame),
62 fRecentSourceSelector(new TGGroupFrame(this,"Recent sources",kHorizontalFrame)),
63 fRawSelector(new TGGroupFrame(this,"Raw file URI",kHorizontalFrame)),
64 fRawSelector2(new TGCompositeFrame(fRawSelector,w,h,kVerticalFrame)),
65 fRawSelector21(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
66 fRawSelector22(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
67 fRawSelector23(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
68 fCalibrateNoGain(new TGCheckButton(fRawSelector22,"Ped subraction")),
69 fCalibrateGainConstantCapa(new TGCheckButton(fRawSelector22,"Ped subraction + gain (capa cste)")),
70 fCalibrateGain(new TGCheckButton(fRawSelector22,"Full calib (Ped subraction + gain with capa)")),
71 fHistogramButton(new TGCheckButton(fRawSelector23,"Histogram")),
72 fHistoMin(new TGNumberEntry(fRawSelector23,0)),
73 fHistoMax(new TGNumberEntry(fRawSelector23,4096)),
74 fRawOCDBPath(new TGTextEntry(fRawSelector22,"")),
75 fOCDBSelector(new TGGroupFrame(this,"OCDB Path",kHorizontalFrame)),
76 fDataReaders(new TGGroupFrame(this,"Data sources")),
77 fFilePath(new TGTextEntry(fRawSelector21,"")),
78 fOCDBPath(new TGTextEntry(fOCDBSelector,"")),
79 fRunSelector(new TGNumberEntry(fOCDBSelector,0)),
80 fOCDBTypes(new TGComboBox(fOCDBSelector)),
81 fRecentSources(new TGComboBox(fRecentSourceSelector)),
82 fItems(new TObjArray),
83 fACFSelector(new TGGroupFrame(this,"ASCII Calib File",kHorizontalFrame)),
84 fACFPath(new TGTextEntry(fACFSelector,"")),
85 fACFTypes(new TGComboBox(fACFSelector))
89 AliMUONPainterRegistry* reg = AliMUONPainterRegistry::Instance();
91 reg->Connect("DataMakerWasRegistered(AliMUONVTrackerDataMaker*)",
92 "AliMUONPainterDataSourceFrame",
94 "DataMakerWasRegistered(AliMUONVTrackerDataMaker*)");
96 reg->Connect("DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)",
97 "AliMUONPainterDataSourceFrame",
99 "DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)");
101 fItems->SetOwner(kFALSE);
103 /// Recent source selection
105 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
107 Int_t nsources = env->Integer(fgkNumberOfDataSourcesKey);
109 for ( Int_t i = 0; i < nsources; ++i )
111 AddRecentSource(env->String(Form(fgkDataSourceURIKey,i)));
114 fRecentSources->Resize(100,20);
116 TGButton* createRecentButton = new TGTextButton(fRecentSourceSelector,"Create data source");
117 createRecentButton->Connect("Clicked()",
118 "AliMUONPainterDataSourceFrame",
120 "OpenRecentSource()");
122 fRecentSourceSelector->AddFrame(fRecentSources,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
123 fRecentSourceSelector->AddFrame(createRecentButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
125 /// Raw file selection
127 TGButton* openButton = new TGPictureButton(fRawSelector21,
128 gClient->GetPicture("fileopen.xpm"));
129 openButton->SetToolTipText("Click to open file dialog");
131 fRawSelector2->AddFrame(fRawSelector21, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
132 fRawSelector2->AddFrame(fRawSelector22, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
133 fRawSelector2->AddFrame(fRawSelector23, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
135 fRawSelector21->AddFrame(openButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
136 fRawSelector21->AddFrame(fFilePath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
138 fRawSelector22->AddFrame(fCalibrateNoGain, new TGLayoutHints(kLHintsTop,5,5,5,5));
139 fRawSelector22->AddFrame(fCalibrateGainConstantCapa, new TGLayoutHints(kLHintsTop,5,5,5,5));
140 fRawSelector22->AddFrame(fCalibrateGain, new TGLayoutHints(kLHintsTop,5,5,5,5));
141 fRawSelector22->AddFrame(fRawOCDBPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
142 fRawOCDBPath->SetEnabled(kFALSE);
144 fRawSelector23->AddFrame(fHistogramButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
146 fHistogramButton->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"HistogramButtonClicked()");
148 fHistoMin->SetState(kFALSE);
149 fHistoMax->SetState(kFALSE);
151 fRawSelector23->AddFrame(fHistoMin,new TGLayoutHints(kLHintsTop,5,5,5,5));
152 fRawSelector23->AddFrame(fHistoMax,new TGLayoutHints(kLHintsTop,5,5,5,5));
154 TGButton* createRawButton = new TGTextButton(fRawSelector,"Create data source");
156 fRawSelector->AddFrame(fRawSelector2, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
157 fRawSelector->AddFrame(createRawButton, new TGLayoutHints(kLHintsCenterY,5,5,5,5));
159 fCalibrateNoGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
160 fCalibrateGainConstantCapa->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
161 fCalibrateGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
163 openButton->Connect("Clicked()",
164 "AliMUONPainterDataSourceFrame",
168 createRawButton->Connect("Clicked()",
169 "AliMUONPainterDataSourceFrame",
171 "CreateRawDataSource()");
175 fOCDBTypes->AddEntry("Pedestals",0);
176 fOCDBTypes->AddEntry("Gains",1);
177 fOCDBTypes->AddEntry("Capacitances",2);
178 fOCDBTypes->AddEntry("HV",3);
179 fOCDBTypes->Select(0);
180 fOCDBTypes->Resize(100,20);
182 TGButton* createOCDBButton = new TGTextButton(fOCDBSelector,"Create data source");
183 createOCDBButton->Connect("Clicked()",
184 "AliMUONPainterDataSourceFrame",
186 "CreateOCDBDataSource()");
188 fOCDBSelector->AddFrame(fOCDBPath,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
189 fOCDBSelector->AddFrame(fRunSelector,new TGLayoutHints(kLHintsTop,5,5,5,5));
190 fOCDBSelector->AddFrame(fOCDBTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
191 fOCDBSelector->AddFrame(createOCDBButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
194 /// ASCII calibration file selection
196 TGButton* openButtonACF = new TGPictureButton(fACFSelector,
197 gClient->GetPicture("fileopen.xpm"));
198 openButtonACF->SetToolTipText("Click to open file dialog");
200 fACFTypes->AddEntry("Pedestals",0);
201 fACFTypes->AddEntry("Gains",1);
202 fACFTypes->AddEntry("Capacitances",2);
203 fACFTypes->Select(0);
204 fACFTypes->Resize(100,20);
206 fACFSelector->AddFrame(openButtonACF,new TGLayoutHints(kLHintsTop,5,5,5,5));
207 fACFSelector->AddFrame(fACFPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
208 fACFSelector->AddFrame(fACFTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
210 TGButton* createACFButton = new TGTextButton(fACFSelector,"Create data source");
211 createACFButton->Connect("Clicked()",
212 "AliMUONPainterDataSourceFrame",
214 "CreateACFDataSource()");
216 openButtonACF->Connect("Clicked()",
217 "AliMUONPainterDataSourceFrame",
219 "OpenFileDialogACF()");
221 fACFSelector->AddFrame(createACFButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
223 AddFrame(fRecentSourceSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
225 AddFrame(fRawSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
227 AddFrame(fOCDBSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
229 AddFrame(fACFSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
231 AddFrame(fDataReaders, new TGLayoutHints(kLHintsExpandX,10,10,10,10));
235 //_____________________________________________________________________________
236 AliMUONPainterDataSourceFrame::~AliMUONPainterDataSourceFrame()
243 //_____________________________________________________________________________
245 AliMUONPainterDataSourceFrame::AddRecentSource(const char* name)
247 /// Add a source to the list of recently used sources
249 TGListBox* lb = fRecentSources->GetListBox();
251 for ( Int_t i = 0; i < lb->GetNumberOfEntries(); ++i )
253 TGTextLBEntry* t = (TGTextLBEntry*)lb->GetEntry(i);
254 TString s(t->GetText()->GetString());
261 fRecentSources->AddEntry(name,lb->GetNumberOfEntries());
262 fRecentSources->MapSubwindows();
263 fRecentSources->Layout();
266 //_____________________________________________________________________________
268 AliMUONPainterDataSourceFrame::CalibrateButtonClicked()
270 /// Calibrate button was clicked.
272 if ( fCalibrateNoGain->IsOn() ||
273 fCalibrateGainConstantCapa->IsOn() ||
274 fCalibrateGain->IsOn() )
276 fRawOCDBPath->SetEnabled(kTRUE);
277 fRawOCDBPath->SetFocus();
281 fRawOCDBPath->SetEnabled(kFALSE);
285 //_____________________________________________________________________________
287 AliMUONPainterDataSourceFrame::HistogramButtonClicked()
289 /// Histogram button was clicked.
291 if ( fHistogramButton->IsOn() )
293 fHistoMin->SetState(kTRUE);
294 fHistoMax->SetState(kTRUE);
298 fHistoMin->SetState(kFALSE);
299 fHistoMax->SetState(kFALSE);
303 //_____________________________________________________________________________
305 AliMUONPainterDataSourceFrame::CreateACFDataSource()
307 /// Create an ACF data source (using information from the widgets)
309 TString acfPath = fACFPath->GetText();
310 TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fACFTypes->GetSelectedEntry());
311 TString type = t->GetText()->GetString();
313 CreateACFDataSource(acfPath,type);
315 fACFPath->SetText("");
319 //_____________________________________________________________________________
321 AliMUONPainterDataSourceFrame::CreateOCDBDataSource()
323 /// Create an OCDB data source (using information from the widgets)
325 TString cdbPath = fOCDBPath->GetText();
326 Int_t runNumber = fRunSelector->GetIntNumber();
327 TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fOCDBTypes->GetSelectedEntry());
328 TString type = t->GetText()->GetString();
330 CreateOCDBDataSource(cdbPath,runNumber,type);
332 fOCDBPath->SetText("");
333 fRunSelector->SetNumber(0);
336 //_____________________________________________________________________________
338 AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& uri)
340 /// Create an ACF data source, given it's URI
342 TObjArray* a = uri.Tokenize(";");
343 TString acfPath = static_cast<TObjString*>(a->At(1))->String();
344 TString type = static_cast<TObjString*>(a->At(2))->String();
346 CreateACFDataSource(acfPath,type);
352 //_____________________________________________________________________________
354 AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& uri)
356 /// Create an OCDB data source, given it's URI
358 TObjArray* a = uri.Tokenize(";");
359 TString cdbPath = static_cast<TObjString*>(a->At(1))->String();
360 TString srun = static_cast<TObjString*>(a->At(2))->String();
361 TString type = static_cast<TObjString*>(a->At(3))->String();
363 CreateOCDBDataSource(cdbPath,atoi(srun.Data()),type);
368 //_____________________________________________________________________________
370 AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& acfPath, const TString& type)
372 /// Create an ACF data source for a given (path,type)
374 AliMUONVTrackerDataMaker* reader = new AliMUONTrackerACFDataMaker(acfPath.Data(),
377 if ( reader->IsValid() )
379 AliMUONPainterRegistry::Instance()->Register(reader);
381 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
383 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
385 env->Set(fgkNumberOfDataSourcesKey,n+1);
387 TString ds(Form("ACF;%s;%s",acfPath.Data(),type.Data()));
389 env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
393 AddRecentSource(ds.Data());
398 //_____________________________________________________________________________
400 AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& cdbPath,
404 /// Create an OCDB data source for a given (path,runnumber,type) triplet
406 AliMUONVTrackerDataMaker* reader = new AliMUONTrackerOCDBDataMaker(cdbPath.Data(),
410 if ( reader->IsValid() )
412 AliMUONPainterRegistry::Instance()->Register(reader);
414 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
416 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
418 env->Set(fgkNumberOfDataSourcesKey,n+1);
420 TString ds(Form("OCDB;%s;%d;%s",cdbPath.Data(),runNumber,type.Data()));
422 env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
426 AddRecentSource(ds.Data());
430 //_____________________________________________________________________________
432 AliMUONPainterDataSourceFrame::CreateRawDataSource()
434 /// Create a new raw data source (using info from the widgets)
436 TString uri(gSystem->ExpandPathName(fFilePath->GetText()));
438 if ( gSystem->AccessPathName(uri.Data()) )
440 AliError(Form("File %s does not exist",uri.Data()));
441 fFilePath->SetText("");
445 TString calibMode("");
448 if ( fCalibrateGain->IsOn() )
454 if ( fCalibrateGainConstantCapa->IsOn() )
456 calibMode = "GAINCONSTANTCAPA";
460 if ( fCalibrateNoGain->IsOn() )
462 calibMode = "NOGAIN";
466 uri = Form("%s%s;%s;%s;%s;%s;%s",
467 ( fHistogramButton->IsOn() ? "H":""),
468 name.Data(),uri.Data(),
469 ( strlen(fRawOCDBPath->GetText()) > 0 ? fRawOCDBPath->GetText() : " "),
470 ( calibMode.Length() > 0 ? calibMode.Data() : " "),
471 Form("%e",fHistoMin->GetNumber()),
472 Form("%e",fHistoMax->GetNumber()));
474 if ( CreateRawDataSource(uri) )
476 fFilePath->SetText("");
477 fRawOCDBPath->SetText("");
481 //_____________________________________________________________________________
483 AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri)
485 /// Create a new raw data source, given its URI
490 TString sxmin("0.0");
491 TString sxmax("4096.0");
493 TObjArray* a = uri.Tokenize(";");
495 filename = static_cast<TObjString*>(a->At(1))->String();
497 if ( a->GetLast() > 1 )
499 ocdbPath = static_cast<TObjString*>(a->At(2))->String();
500 if ( ocdbPath == " " ) ocdbPath = "";
503 if ( a->GetLast() > 2 )
505 calibMode = static_cast<TObjString*>(a->At(3))->String();
506 if ( calibMode == " " ) calibMode = "";
509 if ( a->GetLast() > 3 )
511 sxmin = static_cast<TObjString*>(a->At(4))->String();
514 if ( a->GetLast() > 4 )
516 sxmax = static_cast<TObjString*>(a->At(5))->String();
519 AliRawReader* rawReader = 0x0;
521 if ( filename.Contains(TRegexp("^alien")) )
523 // insure we've initialized the grid...
526 TGrid::Connect("alien://");
530 rawReader = AliRawReader::Create(filename.Data());
534 AliError(Form("Could not open file %s",filename.Data()));
535 fFilePath->SetText("");
539 /// Basic test to see if the file is correct
540 Bool_t ok = rawReader->NextEvent();
543 AliError(Form("File %s does not seem to be a raw data file",filename.Data()));
544 fFilePath->SetText("");
548 rawReader->RewindEvents();
550 AliMUONVTrackerDataMaker* reader(0x0);
551 Bool_t histogram(kFALSE);
553 if ( uri.Contains(TRegexp("^H")) ) histogram = kTRUE;
555 if ( ocdbPath.Length() > 0 )
557 AliMUONRecoParam* recoParam = AliMUONRecoParam::GetCosmicParam();
559 // FIXME: where to get the reco params from in reality ?
561 reader = new AliMUONTrackerCalibratedDataMaker(recoParam,
571 reader = new AliMUONTrackerRawDataMaker(rawReader,histogram);
574 reader->SetSource(filename.Data());
576 AliMUONPainterRegistry::Instance()->Register(reader);
578 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
580 Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
582 env->Set(fgkNumberOfDataSourcesKey,n+1);
584 env->Set(Form(fgkDataSourceURIKey,n),uri.Data());
586 AddRecentSource(uri.Data());
593 //_____________________________________________________________________________
595 AliMUONPainterDataSourceFrame::DataMakerWasRegistered(AliMUONVTrackerDataMaker* reader)
597 /// Update ourselves as a new data reader was created
599 AliMUONPainterDataSourceItem* item = new AliMUONPainterDataSourceItem(fDataReaders,100,20,reader);
601 item->Connect("StartRunning()",
602 "AliMUONPainterDataSourceFrame",
606 item->Connect("StopRunning()",
607 "AliMUONPainterDataSourceFrame",
611 fDataReaders->AddFrame(item);
615 fDataReaders->MapSubwindows();
616 fDataReaders->Resize();
619 //_____________________________________________________________________________
621 AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(AliMUONVTrackerDataMaker* maker)
623 /// Update ourselves as a data reader was deleted
625 AliMUONPainterDataSourceItem* theItem(0x0);
628 AliMUONPainterDataSourceItem* item;
630 while ( ( item = static_cast<AliMUONPainterDataSourceItem*>(next()) ) && !theItem )
632 if ( item->DataMaker() == maker )
638 if (!theItem) return;
640 fDataReaders->RemoveFrame(theItem);
641 fItems->Remove(theItem);
642 theItem->DestroyWindow();
645 fDataReaders->MapSubwindows();
646 fDataReaders->Resize();
650 //_____________________________________________________________________________
652 AliMUONPainterDataSourceFrame::OpenFileDialog()
654 /// Open a file dialog to select a file to be read
658 const char* fileTypes[] = {
659 "ROOT files","*.root",
660 "DATE files","*.raw",
664 fileInfo.fFileTypes = fileTypes;
665 delete[] fileInfo.fIniDir;
667 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
669 fileInfo.fIniDir = StrDup(env->String("LastOpenDir","."));
671 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
674 fFilePath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
676 env->Set("LastOpenDir",fileInfo.fIniDir);
681 //_____________________________________________________________________________
683 AliMUONPainterDataSourceFrame::OpenFileDialogACF()
685 /// Open a file dialog to select an ASCII calibration file to be read
689 const char* fileTypes[] = {
693 fileInfo.fFileTypes = fileTypes;
694 delete[] fileInfo.fIniDir;
696 AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
698 fileInfo.fIniDir = StrDup(env->String("LastOpenDirACF","."));
700 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
703 fACFPath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
705 env->Set("LastOpenDirACF",fileInfo.fIniDir);
710 //_____________________________________________________________________________
712 AliMUONPainterDataSourceFrame::OpenRecentSource()
714 /// Open one source from the recently used ones
716 TGTextLBEntry* t = (TGTextLBEntry*)fRecentSources->GetSelectedEntry();
718 TString uri(t->GetText()->GetString());
720 if ( uri.Contains(TRegexp("^RAW")) || uri.Contains(TRegexp("^HRAW")) ||
721 uri.Contains(TRegexp("^CAL")) || uri.Contains(TRegexp("^HCAL")) )
723 CreateRawDataSource(uri);
725 else if ( uri.Contains(TRegexp("^OCDB")) )
727 CreateOCDBDataSource(uri);
729 else if ( uri.Contains(TRegexp("^ACF")) )
731 CreateACFDataSource(uri);
734 fRecentSources->Select(-1);
737 //_____________________________________________________________________________
739 AliMUONPainterDataSourceFrame::StartRunning()
741 /// One data source starts running. Disable the Run button of the other ones
743 AliMUONPainterDataSourceItem* item = reinterpret_cast<AliMUONPainterDataSourceItem*> (gTQSender);
748 AliMUONPainterDataSourceItem* o;
749 while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )
758 //_____________________________________________________________________________
760 AliMUONPainterDataSourceFrame::StopRunning()
762 /// One data source stops running. Enable the Run button of all items
765 AliMUONPainterDataSourceItem* o;
766 while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )