8 #include <TRootEmbeddedCanvas.h>
10 #include <TGComboBox.h>
11 #include <TGNumberEntry.h>
12 #include <TGTextView.h>
13 #include <TGTextEntry.h>
15 #include "AliMpSlatMotifMap.h"
16 #include "AliMpSt345Reader.h"
17 #include "AliMpSectorReader.h"
18 #include "AliMpSlat.h"
20 #include "AliMpPCBPainter.h"
21 #include "AliMpSectorReader.h"
22 #include "AliMpSector.h"
24 #include "AliMpVRowSegment.h"
25 #include "AliMpRowPainter.h"
26 #include "AliMpVPainter.h"
27 #include "AliMpMotifPainter.h"
28 #include "AliMpMotifPosition.h"
29 #include "AliMpMotifMap.h"
31 #include "AliMpDEIterator.h"
32 #include "AliMpDEManager.h"
33 #include "AliMpDetElement.h"
34 #include "AliMpStationType.h"
35 #include "AliMpSegmentation.h"
37 #include "AliMpDDLStore.h"
39 #include "AliMpDEVisu.h"
44 // -----------------------
45 // GUI for drawing segmentation
46 // motif manu and associated channels
54 //_________________________________________________________________
55 AliMpDEVisu::AliMpDEVisu(UInt_t w, UInt_t h)
56 : TGFrame(gClient->GetRoot(), w, h),
57 fkMainWindow(gClient->GetRoot()),
58 fMain(new TGMainFrame(gClient->GetRoot(), w, h)),
69 fCurrentPlane(AliMp::kBendingPlane),
73 fDDLStore(AliMpDDLStore::Instance()),
78 // Create canvas widget
80 Int_t width = Int_t(w*0.99);
81 Int_t height = Int_t(h*0.99);
83 fEcanvas = new TRootEmbeddedCanvas("Ecanvas",fMain, width, height);
84 fEcanvas->GetCanvas()->Connect("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)",
87 "HandleMovement(Int_t, Int_t, Int_t, TObject*)");
89 // Create a horizontal frame widget with buttons
90 TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain,width,height/6);
92 TGTextButton *draw = new TGTextButton(hframe,"&Draw");
93 draw->Connect("Clicked()","AliMpDEVisu",this,"DrawDE()");
94 hframe->AddFrame(draw, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
96 TGTextButton *exit = new TGTextButton(hframe,"&Exit","gApplication->Terminate(0)");
97 hframe->AddFrame(exit, new TGLayoutHints(kLHintsLeft| kLHintsCenterY,5,5,3,4));
104 TGLabel* chamberLabel = new TGLabel(hframe, "Chamber :");
105 hframe->AddFrame(chamberLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
106 fChamberCombo = new TGComboBox(hframe, kChamberCombo);
109 for(i = 0; i < 10; i++)
111 sprintf(text,"%d",i+1);
112 fChamberCombo->AddEntry(text,i);
114 fChamberCombo->Resize(40,20);
115 fChamberCombo->Select(0);
116 fChamberCombo->Associate(this);
117 hframe->AddFrame(fChamberCombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
120 TGLabel* detElemLabel = new TGLabel(hframe, "DE :");
121 hframe->AddFrame(detElemLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
122 fDECombo = new TGComboBox(hframe, kDECombo);
125 fDECombo->Resize(80,20);
127 fDECombo->Associate(this);
128 hframe->AddFrame(fDECombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
130 TGTextButton *next = new TGTextButton(hframe,"&Next");
131 next->Connect("Clicked()","AliMpDEVisu",this,"NextDE()");
132 hframe->AddFrame(next, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
135 TGLabel* detElemName = new TGLabel(hframe, "Name :");
136 hframe->AddFrame(detElemName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
138 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
139 fCurrentDEName = detElem->GetDEName();
140 fNameDEView = new TGTextView(hframe, 180, 25, fCurrentDEName.Data(), kDEName);
141 hframe->AddFrame(fNameDEView, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
144 fPlaneButton = new TGCheckButton(hframe, "NB Plane", kPlaneType);
145 fPlaneButton->SetState(kButtonUp);
146 fPlaneButton->Associate(this);
147 hframe->AddFrame(fPlaneButton, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
151 TGTextButton* drawManu = new TGTextButton(hframe,"&Search");
152 drawManu->Connect("Clicked()","AliMpDEVisu",this,"DrawManuMotif(Bool_t)");
153 drawManu->SetToolTipText("Search for a given manu number");
154 hframe->AddFrame(drawManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
157 fNumberEntry = new TGNumberEntry(hframe, 0, 4, -1,
158 TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
159 TGNumberFormat::kNELLimitMinMax, 1, 1500);
160 fNumberEntry->Resize(60,20);
161 hframe->AddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
164 TGTextButton *resetManu = new TGTextButton(hframe,"&Reset");
165 resetManu->Connect("Clicked()","AliMpDEVisu",this,"ResetManu()");
166 hframe->AddFrame(resetManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,10,5,3,4));
168 // delete window button
169 TGTextButton* deletePopup = new TGTextButton(hframe,"&Delete_Popup");
170 deletePopup->Connect("Clicked()","AliMpDEVisu",this,"DeletePopUp()");
171 deletePopup->SetToolTipText("Delete motif popup window");
172 hframe->AddFrame(deletePopup, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
176 TGHorizontalFrame *logFrame = new TGHorizontalFrame(fMain, width/2, height/6);
178 TGLabel* logName = new TGLabel(logFrame, "Log MSG:");
179 logFrame->AddFrame(logName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 2, 0));
181 fLogMessage = new TGTextView(logFrame, width/2, 60);
182 fLogMessage->ShowBottom();
184 logFrame->AddFrame(fLogMessage, new TGLayoutHints(kLHintsLeft, 10, 0, 2, 0));
187 TGTextButton* clearLog = new TGTextButton(logFrame,"&Clear");
188 clearLog->Connect("Clicked()","AliMpDEVisu",this,"ClearLogMessage()");
189 clearLog->SetToolTipText("Clear log message");
190 logFrame->AddFrame(clearLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
193 TGTextButton* saveLog = new TGTextButton(logFrame,"&Save");
194 saveLog->Connect("Clicked()","AliMpDEVisu",this,"SaveLogMessage()");
195 saveLog->SetToolTipText("Save log message into file");
196 logFrame->AddFrame(saveLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
199 fLogFile = new TGTextEntry(logFrame,"AliMpDEVisu.log");
200 fLogFile->SetToolTipText("Default log file name");
201 logFrame->AddFrame(fLogFile, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
204 fMain->AddFrame(hframe, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,10,10));
205 fMain->AddFrame(fEcanvas, new TGLayoutHints(kLHintsCenterX, 10,10,10,10));
207 fMain->AddFrame(logFrame, new TGLayoutHints(kLHintsLeft,2,2,2,10));
209 // Set a name to the main frame
210 fMain->SetWindowName("MUON Detection Element Visualization");
212 // Map all subwindows of main frame
213 fMain->MapSubwindows();
215 // Initialize the layout algorithm
216 fMain->Resize(fMain->GetDefaultSize());
221 // instance segmentation
222 fSegmentation = AliMpSegmentation::Instance()->GetMpSegmentation(fCurrentDetElem,
223 AliMp::GetCathodType(fCurrentPlane));
224 fLogMessage->AddLine("Segmentation loaded");
225 fLogMessage->ShowBottom();
228 //____________________________________________________________
229 AliMpDEVisu::~AliMpDEVisu()
231 // Clean up used widgets: frames, buttons, layouthints
233 fChamberCombo->Delete();
235 fNumberEntry->Delete();
236 fPlaneButton->Delete();
237 fNameDEView->Delete();
238 fLogMessage->Delete();
244 //__________________________________________________________
245 void AliMpDEVisu::HandleMovement(Int_t eventType, Int_t eventX, Int_t eventY, TObject* /*select*/)
247 /// handle cursor mouvement
249 if (eventType == kButton1Down) {
251 TCanvas *canvas = fEcanvas->GetCanvas();
254 // estimate graphic pad sizes
255 TVector2 ul(gPad->XtoPixel(0.02), gPad->YtoPixel(0.98));
256 TVector2 br(gPad->XtoPixel(1.00), gPad->YtoPixel(0.02));
258 TVector2 padDim = br - ul;
260 fSegmentation = AliMpSegmentation::Instance()
261 ->GetMpSegmentation(fCurrentDetElem, AliMp::GetCathodType(fCurrentPlane));
263 // get DE dimension (half size)
264 TVector2 deDim = fSegmentation-> Dimensions();
267 // calculated in pixel
271 if (fCurrentDetElem >= 500) {
273 x = (eventX - ul.X() - padDim.X()/2.)/(padDim.X())*deDim.X();
274 y = (br.Y() - eventY - padDim.Y()/2.)/(padDim.Y())*deDim.Y();
278 x = (eventX - ul.X())/(padDim.X())*deDim.X();
279 y = (br.Y() - eventY)/(padDim.Y())*deDim.Y();
283 TVector2 padReal(x,y);
287 AliMpPad pad = fSegmentation->PadByPosition(padReal, false);
290 if (!pad.IsValid()) {
291 sprintf(log, "PopupManuMotif: No manu for DE: %d at position (%5.2f, %5.2f)",
292 fCurrentDetElem, x, y);
293 fLogMessage->AddLine(log);
294 fLogMessage->ShowBottom();
299 Int_t manu = pad.GetLocation().GetFirst();
301 fNumberEntry->SetNumber(manu);
303 sprintf(log, "PopupManuMotif: DE: %d, manu: %d at position: %5.2f, %5.2f", fCurrentDetElem, manu, x, y);
304 fLogMessage->AddLine(log);
305 fLogMessage->ShowBottom();
312 //__________________________________________________________
313 void AliMpDEVisu::DrawDE()
315 /// Draws function graphics in randomly choosen interval
319 if (fCurrentDetElem >= 500) {
325 DrawQuadrant("RSMCI");
331 //__________________________________________________________
332 void AliMpDEVisu::DrawManuMotif(Bool_t popup)
334 // Draw manu motif in yellow and popup channel motif window
337 if (!fNumberEntry->GetIntNumber()) return;
341 if (fCurrentDetElem >= 500) {
343 sprintf(command, "%s%d", "PMCI:", (Int_t)fNumberEntry->GetIntNumber());
345 DrawSlat(command, popup);
349 sprintf(command, "%s%d", "RSMCI:", (Int_t)fNumberEntry->GetIntNumber());
351 DrawQuadrant(command, popup);
356 //__________________________________________________________
357 void AliMpDEVisu::DrawSlat(Option_t* option, Bool_t popup)
359 /// draw slat segmentation
361 TCanvas *canvas = fEcanvas->GetCanvas();
364 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
365 TString nameType = detElem->GetSegType();
367 AliMpSlatMotifMap mm;
368 AliMpSt345Reader reader(mm);
369 AliMpSlat* slatCurrent = reader.ReadSlat(nameType.Data(), fCurrentPlane);
370 AliMpSlat* slatOther = reader.ReadSlat(nameType.Data(), AliMp::OtherPlaneType(fCurrentPlane));
375 AliMpVPainter* painter = AliMpVPainter::CreatePainter(slatCurrent);
376 painter->Draw(option);
382 Int_t numberOfManu = slatCurrent->GetNofElectronicCards() +
383 slatOther->GetNofElectronicCards();
387 sprintf(log, "DrawSlat: number of manus: %d", numberOfManu);
389 fLogMessage->AddLine(log);
390 fLogMessage->ShowBottom();
393 PopUpManuMotif(slatCurrent);
397 //__________________________________________________________
398 void AliMpDEVisu:: DrawQuadrant(Option_t* option, Bool_t popup)
400 /// draw quadrant segmentation
402 TCanvas *canvas = fEcanvas->GetCanvas();
405 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
406 AliMp::StationType station = detElem->GetStationType();
408 AliMpSectorReader readerCurrent(station, fCurrentPlane);
409 AliMpSector* sectorCurrent = readerCurrent.BuildSector();
411 AliMpSectorReader readerOther(station, AliMp::OtherPlaneType(fCurrentPlane));
412 AliMpSector* sectorOther = readerOther.BuildSector();
417 AliMpVPainter *painter = AliMpVPainter::CreatePainter(sectorCurrent);
418 painter->Draw(option);
425 sectorCurrent->GetMotifMap()->GetNofMotifPositions() +
426 sectorOther->GetMotifMap()->GetNofMotifPositions();
430 sprintf(log, "DrawQuadrant: number of manus: %d", numberOfManu);
432 fLogMessage->AddLine(log);
433 fLogMessage->ShowBottom();
436 PopUpManuMotif(sectorCurrent);
439 //__________________________________________________________
440 void AliMpDEVisu::ResetManu()
442 /// reset manu search entry
443 fLogMessage->AddLine("Reset Motif Search Entry:");
444 fLogMessage->ShowBottom();
445 fNumberEntry->SetNumber(0);
449 //__________________________________________________________
450 void AliMpDEVisu::DeletePopUp()
452 /// delete motif popup windows
454 if (fTrashList.GetEntries() > 0) {
455 fLogMessage->AddLine("Delete Motif PopUp Windows:");
456 fLogMessage->ShowBottom();
458 for (Int_t i = 0; i < fTrashList.GetEntries(); ++i) {
460 TGTransientFrame* trans = (TGTransientFrame*)fTrashList.At(i);
462 trans->CloseWindow();
470 //__________________________________________________________
471 void AliMpDEVisu::SaveLogMessage()
473 /// save log message into log file
475 TString logFile = fLogFile->GetDisplayText();
476 fLogMessage->GetText()->Save(logFile.Data());
479 sprintf(log, "SaveLogMessage: saving log message into logfile: %s", logFile.Data());
480 fLogMessage->AddLine(log);
481 fLogMessage->ShowBottom();
484 //__________________________________________________________
485 void AliMpDEVisu::ClearLogMessage()
487 /// clear log message
488 fLogMessage->GetText()->Clear();
490 sprintf(log, "ClearLogMessage: clear log messages:");
491 fLogMessage->AddLine(log);
492 fLogMessage->ShowBottom();
495 //__________________________________________________________
496 void AliMpDEVisu::InfoDE()
498 /// info concerning the whole DE
500 AliMpDetElement* detElem = fDDLStore->GetDetElement(fCurrentDetElem);
501 Int_t ddlId = detElem->GetDdlId();
502 Int_t numberOfBus = detElem->GetNofBusPatches();
503 Int_t firstBus = detElem->GetBusPatchId(0);
504 Int_t lastBus = detElem->GetBusPatchId(numberOfBus - 1); // expect a continuous numbering
506 detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
507 Int_t numberOfSerialManu = detElem->GetNofManus(); // number of manu with an identified serial number
510 sprintf(log, "DrawDE: detection element: %d, name: %s", fCurrentDetElem, fCurrentDEName.Data());
511 fLogMessage->AddLine(log);
512 fLogMessage->ShowBottom();
515 sprintf(log, "DrawDE: DDL: %d, number of buspatches %d from %d to %d",
516 ddlId, numberOfBus, firstBus, lastBus);
517 fLogMessage->AddLine(log);
518 fLogMessage->ShowBottom();
520 if (numberOfSerialManu != 0) { // not available yet for all DE
521 sprintf(log, "DrawDE: number of manus with serial number: %d", numberOfSerialManu);
522 fLogMessage->AddLine(log);
523 fLogMessage->ShowBottom();
528 //__________________________________________________________
529 Bool_t AliMpDEVisu::ProcessMessage(Long_t msg, Long_t parm1, Long_t /*parm2*/)
531 /// process message from widgets actions/entries
536 switch (GET_SUBMSG(msg))
553 case kCM_CHECKBUTTON:
554 if (fPlaneButton->GetState() == kButtonDown) {
555 fCurrentPlane = AliMp::kNonBendingPlane;
556 if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() <= 1024)
557 fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() + 1024);
559 fCurrentPlane = AliMp::kBendingPlane;
560 if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() > 1024)
561 fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() - 1024);
571 //__________________________________________________________
572 void AliMpDEVisu::NextDE()
576 Int_t next = fDECombo->GetSelected() + 1;
578 if (next < fDECombo->GetNumberOfEntries())
579 fDECombo->Select(fDECombo->GetSelected() + 1);
586 //__________________________________________________________
587 void AliMpDEVisu::UpdateComboDE()
589 /// update DE in respect to selected chamber
591 fDECombo->RemoveAll();
598 for ( it.First(fChamberCombo->GetSelected()); ! it.IsDone(); it.Next() ) {
599 sprintf(text,"%d",it.CurrentDE()->GetId());
600 fDECombo->AddEntry(text,i);
601 fDEComboIdx[i++] = it.CurrentDE()->GetId();
606 //__________________________________________________________
607 void AliMpDEVisu::UpdateNameView()
609 /// update DE name in respect to selected DE id.
611 fNameDEView->Clear();
613 fCurrentDetElem = fDEComboIdx[fDECombo->GetSelected()];
614 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
615 fCurrentDEName = detElem->GetDEName();
617 fNameDEView->AddLine(fCurrentDEName.Data());
618 fNameDEView->ShowBottom();
621 //__________________________________________________________
622 void AliMpDEVisu::PopUpManuMotif(AliMpSlat* slat)
624 /// pop up manu window motif painter for slat
626 // Create transient frame
627 TGTransientFrame* trans = new TGTransientFrame(fkMainWindow, fMain, 400, 400);
630 sprintf(slot, "ClosedPopUpMotif(=%d)", fNumberOfPopUp++);
632 trans->Connect("CloseWindow()", "AliMpDEVisu", this, slot);
635 fTrashList.Add(trans);
638 sprintf(title,"Manu Motif: %d", (Int_t)fNumberEntry->GetIntNumber());
639 trans->SetWindowName(title);
641 // Create canvas widget
642 TRootEmbeddedCanvas* eTransCanvas =
643 new TRootEmbeddedCanvas("ETransCanvas", trans, 400, 400);
645 trans->AddFrame(eTransCanvas, new TGLayoutHints(kLHintsCenterX,
648 trans->CenterOnParent();
651 TCanvas* canvas = eTransCanvas->GetCanvas();
655 AliMpMotifPosition* motifPosFound = 0x0;
656 AliMpMotifPosition* motifPos = 0x0;
658 for ( AliMpSlat::Size_t i = 0; i < slat->GetSize(); ++i ) {
660 AliMpPCB* pcb = slat->GetPCB(i);
661 AliMpPCBPainter* pcbPainter = new AliMpPCBPainter(pcb);
663 for ( AliMpPCB::Size_t j = 0; j < slat->GetPCB(i)->GetSize(); ++j ) {
665 motifPos = pcb->GetMotifPosition(j);
667 Int_t manuId = motifPos->GetID();
668 if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
669 motifPosFound = motifPos;
680 trans->MapSubwindows();
683 AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
688 TVector2 dimension(motifPos->Dimensions());
692 sprintf(log, "PopupManuMotif: motif dimension: %5.2f, %5.2f", dimension.X()*2., dimension.Y()*2.);
693 fLogMessage->AddLine(log);
695 sprintf(log, "PopupManuMotif: pad dimension: %4.2f, %4.2f",
696 motifPos->GetMotif()->GetPadDimensions(0).X()*2.,
697 motifPos->GetMotif()->GetPadDimensions(0).Y()*2. );
699 fLogMessage->AddLine(log);
701 fLogMessage->ShowBottom();
703 //__________________________________________________________
704 void AliMpDEVisu::PopUpManuMotif(AliMpSector* sector)
706 /// pop up manu window motif painter for sector
708 // Create transient frame
709 TGTransientFrame* trans = new TGTransientFrame(fkMainWindow, fMain, 400, 400);
712 sprintf(slot, "ClosedPopUpMotif(=%d)", fNumberOfPopUp++);
714 trans->Connect("CloseWindow()", "AliMpDEVisu", this, slot);
717 fTrashList.Add(trans);
720 sprintf(title,"Manu Motif: %d", (Int_t)fNumberEntry->GetIntNumber());
721 trans->SetWindowName(title);
723 // Create canvas widget
724 TRootEmbeddedCanvas* eTransCanvas =
725 new TRootEmbeddedCanvas("ETransCanvas", trans, 400, 400);
727 trans->AddFrame(eTransCanvas, new TGLayoutHints(kLHintsCenterX,
730 trans->CenterOnParent();
733 TCanvas* canvas = eTransCanvas->GetCanvas();
737 AliMpMotifPosition* motifPosFound = 0x0;
738 AliMpMotifPosition* motifPos = 0x0;
740 for (Int_t iRow = 0; iRow < sector->GetNofRows(); ++iRow) {
742 AliMpRow* row = sector->GetRow(iRow);
743 AliMpRowPainter* rowPainter = new AliMpRowPainter(row);
745 for (Int_t iRowSeg = 0; iRowSeg < sector->GetRow(iRow)->GetNofRowSegments(); ++iRowSeg){
747 for (Int_t iRowSeg = 0; iRowSeg < row->GetNofRowSegments(); ++iRowSeg) {
748 AliMpVRowSegment *rowSegment = row->GetRowSegment(iRowSeg);
750 for (Int_t iMotif = 0; iMotif < rowSegment->GetNofMotifs(); ++iMotif){
752 Int_t motifPositionId = rowSegment->GetMotifPositionId(iMotif);
753 motifPos = rowSegment->GetRow()
754 ->GetMotifMap()->FindMotifPosition(motifPositionId);
756 Int_t manuId = motifPos->GetID();
757 if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
758 motifPosFound = motifPos;
773 trans->MapSubwindows();
776 AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
782 TVector2 dimension(motifPos->Dimensions());
786 sprintf(log, "PopupManuMotif: motif dimension: %5.2f, %5.2f", dimension.X()*2., dimension.Y()*2.);
787 fLogMessage->AddLine(log);
789 sprintf(log, "PopupManuMotif: pad dimension: %4.2f, %4.2f",
790 motifPos->GetMotif()->GetPadDimensions(0).X()*2.,
791 motifPos->GetMotif()->GetPadDimensions(0).Y()*2. );
793 fLogMessage->AddLine(log);
795 fLogMessage->ShowBottom();
799 //__________________________________________________________
800 void AliMpDEVisu::ClosedPopUpMotif(Int_t id)
804 TGTransientFrame* trans = (TGTransientFrame*)fTrashList.At(id);
805 fTrashList.Remove(trans);