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 "AliMpDEVisu.h"
21 #include "AliMpSlatMotifMap.h"
22 #include "AliMpSt345Reader.h"
23 #include "AliMpSectorReader.h"
24 #include "AliMpSlat.h"
26 #include "AliMpSectorReader.h"
27 #include "AliMpSector.h"
29 #include "AliMpVRowSegment.h"
30 #include "AliMpVPainter.h"
31 #include "AliMpMotifPosition.h"
32 #include "AliMpMotifMap.h"
33 #include "AliMpDEIterator.h"
34 #include "AliMpDEManager.h"
35 #include "AliMpDetElement.h"
36 #include "AliMpStationType.h"
37 #include "AliMpSegmentation.h"
39 #include "AliMpDDLStore.h"
40 #include "AliMpVPadIterator.h"
50 #include <TRootEmbeddedCanvas.h>
52 #include <TGComboBox.h>
53 #include <TGNumberEntry.h>
54 #include <TGTextView.h>
55 #include <TGTextEntry.h>
59 //-----------------------------------------------------------------------------
61 // -----------------------
62 // GUI for drawing segmentation
63 // motif manu and associated channels
66 //-----------------------------------------------------------------------------
72 //_________________________________________________________________
73 AliMpDEVisu::AliMpDEVisu(UInt_t w, UInt_t h)
74 : TGFrame(gClient->GetRoot(), w, h),
75 fkMainWindow(gClient->GetRoot()),
76 fMain(new TGMainFrame(gClient->GetRoot(), w, h)),
90 fCurrentPlane(AliMp::kBendingPlane),
96 /// Standard constructor
99 if ( ! AliMpCDB::LoadDDLStore() ) {
100 AliFatal("Could not access mapping from OCDB !");
103 fDDLStore = AliMpDDLStore::Instance();
106 fTrashList.SetOwner(kFALSE);
108 // Create canvas widget
110 Int_t width = Int_t(w*0.99);
111 Int_t height = Int_t(h*0.99);
113 fEcanvas = new TRootEmbeddedCanvas("Ecanvas",fMain, width, height);
114 fEcanvas->GetCanvas()->Connect("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)",
117 "HandleMovement(Int_t, Int_t, Int_t, TObject*)");
119 // Create a horizontal frame widget with buttons
120 TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain,width,height/6);
122 TGTextButton *draw = new TGTextButton(hframe,"&Draw");
123 draw->Connect("Clicked()","AliMpDEVisu",this,"DrawDE()");
124 hframe->AddFrame(draw, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
126 TGTextButton *exit = new TGTextButton(hframe,"&Exit","gApplication->Terminate(0)");
127 hframe->AddFrame(exit, new TGLayoutHints(kLHintsLeft| kLHintsCenterY,5,5,3,4));
134 TGLabel* chamberLabel = new TGLabel(hframe, "Chamber :");
135 hframe->AddFrame(chamberLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
136 fChamberCombo = new TGComboBox(hframe, kChamberCombo);
139 for(i = 0; i < 10; i++)
141 sprintf(text,"%d",i+1);
142 fChamberCombo->AddEntry(text,i);
144 fChamberCombo->Resize(40,20);
145 fChamberCombo->Select(0);
146 fChamberCombo->Associate(this);
147 hframe->AddFrame(fChamberCombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
150 TGLabel* detElemLabel = new TGLabel(hframe, "DE :");
151 hframe->AddFrame(detElemLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
152 fDECombo = new TGComboBox(hframe, kDECombo);
155 fDECombo->Resize(80,20);
157 fDECombo->Associate(this);
158 hframe->AddFrame(fDECombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
159 fDEOccurrence.Reset(-1);
161 TGTextButton *next = new TGTextButton(hframe,"&Next");
162 next->Connect("Clicked()","AliMpDEVisu",this,"NextDE()");
163 hframe->AddFrame(next, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
166 TGLabel* detElemName = new TGLabel(hframe, "Name :");
167 hframe->AddFrame(detElemName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
169 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
170 fCurrentDEName = detElem->GetDEName();
171 fNameDECombo = new TGComboBox(hframe, kDEName);
173 UpdateNameView(kTRUE);
174 fNameDECombo->Resize(160, 20);
175 fNameDECombo->Select(0);
176 fNameDECombo->Associate(this);
177 hframe->AddFrame(fNameDECombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
180 fPlaneButton = new TGCheckButton(hframe, "NB Plane", kPlaneType);
181 fPlaneButton->SetState(kButtonUp);
182 fPlaneButton->Associate(this);
183 hframe->AddFrame(fPlaneButton, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
187 TGTextButton* drawManu = new TGTextButton(hframe,"&Search");
188 drawManu->Connect("Clicked()","AliMpDEVisu",this,"DrawManuMotif(Bool_t)");
189 drawManu->SetToolTipText("Search for a given manu number");
190 hframe->AddFrame(drawManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
193 fNumberEntry = new TGNumberEntry(hframe, 0, 4, -1,
194 TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
195 TGNumberFormat::kNELLimitMinMax, 1, 1500);
196 fNumberEntry->Resize(60,20);
197 hframe->AddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
200 TGTextButton *resetManu = new TGTextButton(hframe,"&Reset");
201 resetManu->Connect("Clicked()","AliMpDEVisu",this,"ResetManu()");
202 hframe->AddFrame(resetManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,10,5,3,4));
204 // delete window button
205 TGTextButton* deletePopup = new TGTextButton(hframe,"&Delete_Popup");
206 deletePopup->Connect("Clicked()","AliMpDEVisu",this,"DeletePopUp()");
207 deletePopup->SetToolTipText("Delete motif popup window");
208 hframe->AddFrame(deletePopup, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
212 TGHorizontalFrame *logFrame = new TGHorizontalFrame(fMain, width/2, height/6);
214 TGLabel* logName = new TGLabel(logFrame, "Log MSG:");
215 logFrame->AddFrame(logName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 2, 0));
217 fLogMessage = new TGTextView(logFrame, width/2, 60);
218 fLogMessage->ShowBottom();
220 logFrame->AddFrame(fLogMessage, new TGLayoutHints(kLHintsLeft, 10, 0, 2, 0));
223 TGTextButton* clearLog = new TGTextButton(logFrame,"&Clear");
224 clearLog->Connect("Clicked()","AliMpDEVisu",this,"ClearLogMessage()");
225 clearLog->SetToolTipText("Clear log message");
226 logFrame->AddFrame(clearLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
229 TGTextButton* saveLog = new TGTextButton(logFrame,"&Save");
230 saveLog->Connect("Clicked()","AliMpDEVisu",this,"SaveLogMessage()");
231 saveLog->SetToolTipText("Save log message into file");
232 logFrame->AddFrame(saveLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
235 fLogFile = new TGTextEntry(logFrame,"AliMpDEVisu.log");
236 fLogFile->SetToolTipText("Default log file name");
237 logFrame->AddFrame(fLogFile, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
240 fZoomButton = new TGCheckButton(logFrame, new TGHotString("&Zoom Mode"), kZoomMode);
241 fZoomButton->Associate(this);
242 fZoomButton->SetState(kButtonUp);
244 logFrame->AddFrame(fZoomButton, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 20, 0, 9, 0));
247 fMain->AddFrame(hframe, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,10,10));
248 fMain->AddFrame(fEcanvas, new TGLayoutHints(kLHintsCenterX, 10,10,10,10));
250 fMain->AddFrame(logFrame, new TGLayoutHints(kLHintsLeft,2,2,2,10));
252 // Set a name to the main frame
253 fMain->SetWindowName("MUON Detection Element Visualization");
255 // Map all subwindows of main frame
256 fMain->MapSubwindows();
258 // Initialize the layout algorithm
259 fMain->Resize(fMain->GetDefaultSize());
264 // instance segmentation
265 fSegmentation = AliMpSegmentation::Instance()->GetMpSegmentation(fCurrentDetElem, detElem->GetCathodType(fCurrentPlane));
266 fLogMessage->AddLine("Segmentation loaded");
267 fLogMessage->ShowBottom();
270 //____________________________________________________________
271 AliMpDEVisu::~AliMpDEVisu()
273 /// Clean up used widgets: frames, buttons, layouthints
275 fChamberCombo->Delete();
277 fNumberEntry->Delete();
278 fPlaneButton->Delete();
279 fNameDECombo->Delete();
280 fLogMessage->Delete();
286 //__________________________________________________________
287 void AliMpDEVisu::HandleMovement(Int_t eventType, Int_t eventX, Int_t eventY, TObject* /*select*/)
289 /// handle cursor mouvement
291 static Int_t eventXold, eventYold;
292 static Int_t eventX0, eventY0;
293 static Int_t linedrawn;
296 // enable again KeyAutoRepeat after HandleKey
297 if (eventType == kKeyPress) {
298 gVirtualX->SetKeyAutoRepeat(kTRUE);
301 fEcanvas->GetCanvas()->cd();
306 if (eventType == kButton1Down) {
307 gVirtualX->SetLineWidth(3);
308 eventX0 = eventX; eventY0 = eventY;
309 eventXold = eventX; eventYold = eventY;
313 if (eventType == kButton1Motion) {
314 if (linedrawn) gVirtualX->DrawBox(eventX0, eventY0, eventXold, eventYold, TVirtualX::kHollow);
318 gVirtualX->DrawBox(eventX0, eventY0, eventXold, eventYold, TVirtualX::kHollow);
321 if (eventType == kButton1Up)
323 if ( (eventX0 - eventX) && (eventY0 - eventY) )
325 PopUpZoom(eventX0,eventY0,eventX,eventY);
335 if (eventType == kButton1Down) {
337 // calculated in pixel
341 EventToReal(eventX,eventY,x,y);
344 AliMpPad pad = fSegmentation->PadByPosition(TVector2(x,y), false);
346 if (!pad.IsValid()) {
348 fLogMessage->AddLine(Form("PopupManuMotif: No manu for DE: %d at position (%5.2f, %5.2f)",
349 fCurrentDetElem, x, y));
350 fLogMessage->ShowBottom();
354 Int_t manu = pad.GetLocation().GetFirst();
356 fNumberEntry->SetNumber(manu);
359 fLogMessage->AddLine(Form("PopupManuMotif: DE: %d, manu: %d at position: %5.2f, %5.2f",
360 fCurrentDetElem, manu, x, y));
361 fLogMessage->ShowBottom();
369 //__________________________________________________________
370 void AliMpDEVisu::DrawDE(Bool_t info)
372 /// Draws function graphics in randomly choosen interval
377 fEcanvas->GetCanvas()->cd();
378 fEcanvas->GetCanvas()->SetEditable(kTRUE);
380 fNameDECombo->Select(fDEOccurrence[fCurrentDetElem]);
381 TGLBEntry* entry = fNameDECombo->GetSelectedEntry();
382 entry->SetBackgroundColor(0xDDDDDD);
384 if (AliMpDEManager::GetStationType(fCurrentDetElem) == AliMp::kStation345 ) {
390 DrawQuadrant("RSMCI");
394 fEcanvas->GetCanvas()->SetEditable(kFALSE);
398 //__________________________________________________________
399 void AliMpDEVisu::DrawManuMotif(Bool_t popup)
401 /// Draw manu motif in yellow and popup channel motif window
403 fEcanvas->GetCanvas()->SetEditable(kTRUE);
405 if (!fNumberEntry->GetIntNumber()) return;
409 if (AliMpDEManager::GetStationType(fCurrentDetElem) == AliMp::kStation345 ) {
411 sprintf(command, "%s%d", "PMCI:", (Int_t)fNumberEntry->GetIntNumber());
413 DrawSlat(command, popup);
417 sprintf(command, "%s%d", "RSMCI:", (Int_t)fNumberEntry->GetIntNumber());
419 DrawQuadrant(command, popup);
423 fEcanvas->GetCanvas()->SetEditable(kFALSE);
426 //__________________________________________________________
427 void AliMpDEVisu::DrawSlat(Option_t* option, Bool_t popup)
429 /// draw slat segmentation
431 TCanvas *canvas = fEcanvas->GetCanvas();
434 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
435 TString nameType = detElem->GetSegType();
437 AliMpSlatMotifMap mm;
438 AliMpSt345Reader reader(mm);
439 AliMpSlat* slatCurrent = reader.ReadSlat(nameType.Data(), fCurrentPlane);
440 AliMpSlat* slatOther = reader.ReadSlat(nameType.Data(), AliMp::OtherPlaneType(fCurrentPlane));
442 AliMpVPainter* painter = AliMpVPainter::CreatePainter(slatCurrent);
443 painter->Draw(option);
448 slatCurrent->GetNofElectronicCards() +
449 slatOther->GetNofElectronicCards();
451 fLogMessage->AddLine(Form("DrawSlat: number of manus: %d", numberOfManu));
452 fLogMessage->ShowBottom();
455 PopUpManuMotif(slatCurrent);
459 //__________________________________________________________
460 void AliMpDEVisu::DrawQuadrant(Option_t* option, Bool_t popup)
462 /// draw quadrant segmentation
464 TCanvas *canvas = fEcanvas->GetCanvas();
467 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
468 AliMp::StationType station = detElem->GetStationType();
470 AliMpSectorReader readerCurrent(station, fCurrentPlane);
471 AliMpSector* sectorCurrent = readerCurrent.BuildSector();
473 AliMpSectorReader readerOther(station, AliMp::OtherPlaneType(fCurrentPlane));
474 AliMpSector* sectorOther = readerOther.BuildSector();
476 AliMpVPainter *painter = AliMpVPainter::CreatePainter(sectorCurrent);
477 painter->Draw(option);
482 sectorCurrent->GetMotifMap()->GetNofMotifPositions() +
483 sectorOther->GetMotifMap()->GetNofMotifPositions();
485 fLogMessage->AddLine(Form("DrawQuadrant: number of manus: %d", numberOfManu));
486 fLogMessage->ShowBottom();
489 PopUpManuMotif(sectorCurrent);
493 //______________________________________________________________________________
495 AliMpDEVisu::EventToReal(Int_t eventX, Int_t eventY, Double_t& x, Double_t& y) const
497 /// estimate graphic pad sizes
499 static TVector2 ul(gPad->XtoPixel(0.01), gPad->YtoPixel(0.99));
500 static TVector2 br(gPad->XtoPixel(0.99), gPad->YtoPixel(0.01));
502 static TVector2 padDim = br - ul;
504 // get DE dimension (half size)
505 TVector2 deDim(fSegmentation->Dimensions()*2.0);
509 if (AliMpDEManager::GetStationType(fCurrentDetElem) == AliMp::kStation345 )
512 x = (eventX - ul.X() - padDim.X()/2.)/(padDim.X())*deDim.X();
513 y = (br.Y() - eventY - padDim.Y()/2.)/(padDim.Y())*deDim.Y();
518 // origin at bottom left
519 x = (eventX - ul.X())/(padDim.X())*deDim.X();
520 y = (br.Y() - eventY)/(padDim.Y())*deDim.Y();
525 //__________________________________________________________
526 void AliMpDEVisu::ResetManu()
528 /// reset manu search entry
529 fLogMessage->AddLine("Reset Motif Search Entry:");
530 fLogMessage->ShowBottom();
531 fNumberEntry->SetNumber(0);
535 //__________________________________________________________
536 void AliMpDEVisu::DeletePopUp()
538 /// delete motif popup windows
540 if (fTrashList.GetEntries() > 0)
542 fLogMessage->AddLine("Delete Motif PopUp Windows:");
543 fLogMessage->ShowBottom();
549 //__________________________________________________________
550 void AliMpDEVisu::SaveLogMessage()
552 /// save log message into log file
554 TString logFile = fLogFile->GetDisplayText();
555 fLogMessage->GetText()->Save(logFile.Data());
557 fLogMessage->AddLine(Form("SaveLogMessage: saving log message into logfile: %s", logFile.Data()));
558 fLogMessage->ShowBottom();
561 //__________________________________________________________
562 void AliMpDEVisu::ClearLogMessage()
564 /// clear log message
565 fLogMessage->GetText()->Clear();
566 fLogMessage->AddLine("ClearLogMessage: clear log messages:");
567 fLogMessage->ShowBottom();
570 //__________________________________________________________
571 void AliMpDEVisu::InfoDE()
573 /// info concerning the whole DE
575 AliMpDetElement* detElem = fDDLStore->GetDetElement(fCurrentDetElem);
576 Int_t ddlId = detElem->GetDdlId();
577 Int_t numberOfBus = detElem->GetNofBusPatches();
580 for (Int_t i = 0; i < detElem->GetNofBusPatches(); ++i)
581 vec[i] = detElem->GetBusPatchId(i);
583 Int_t firstBus = TMath::MinElement(detElem->GetNofBusPatches(), vec);
584 Int_t lastBus = TMath::MaxElement(detElem->GetNofBusPatches(), vec);
586 detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
587 Int_t numberOfSerialManu = detElem->NofManusWithSerialNumber(); // number of manu with an identified serial number
589 fLogMessage->AddLine(Form("DrawDE: detection element: %d, name: %s",
590 fCurrentDetElem, fCurrentDEName.Data()));
591 fLogMessage->ShowBottom();
593 fLogMessage->AddLine(Form("DrawDE: DDL: %d, number of buspatches %d from %d to %d",
594 ddlId, numberOfBus, firstBus, lastBus));
595 fLogMessage->ShowBottom();
597 if (numberOfSerialManu != 0) { // not available yet for all DE
598 fLogMessage->AddLine(Form("DrawDE: number of manus with serial number: %d", numberOfSerialManu));
599 fLogMessage->ShowBottom();
604 //__________________________________________________________
605 Bool_t AliMpDEVisu::ProcessMessage(Long_t msg, Long_t parm1, Long_t /*parm2*/)
607 /// process message from widgets actions/entries
609 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
614 switch (GET_SUBMSG(msg))
622 UpdateNameView(kTRUE);
635 case kCM_CHECKBUTTON:
639 if (fPlaneButton->GetState() == kButtonDown) {
640 fCurrentPlane = AliMp::kNonBendingPlane;
641 if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() <= 1024)
642 fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() + 1024);
644 fCurrentPlane = AliMp::kBendingPlane;
645 if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() > 1024)
646 fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() - 1024);
649 fSegmentation = AliMpSegmentation::Instance()
650 ->GetMpSegmentation(fCurrentDetElem, detElem->GetCathodType(fCurrentPlane));
654 if (fZoomButton->GetState() == kButtonDown)
668 //__________________________________________________________
669 void AliMpDEVisu::NextDE()
673 Int_t next = fDECombo->GetSelected() + 1;
675 if (next < fDECombo->GetNumberOfEntries())
676 fDECombo->Select(next);
684 //__________________________________________________________
685 void AliMpDEVisu::UpdateComboCH()
687 /// update Chamber/DE in respect to DE Name
689 fCurrentDEName = fNameDEComboIdx[fNameDECombo->GetSelected()];
691 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDEName);
693 Int_t idx = AliMpDEManager::GetChamberId(detElem->GetId());
694 fChamberCombo->Select(idx);
698 idx = detElem->GetId() % 100;
699 fDECombo->Select(idx);
701 fCurrentDetElem = fDEComboIdx[fDECombo->GetSelected()];
703 fSegmentation = AliMpSegmentation::Instance()
704 ->GetMpSegmentation(fCurrentDetElem, detElem->GetCathodType(fCurrentPlane));
707 //__________________________________________________________
708 void AliMpDEVisu::UpdateComboDE()
710 /// update DE in respect to selected chamber
712 fDECombo->RemoveAll();
718 for ( it.First(fChamberCombo->GetSelected()); ! it.IsDone(); it.Next() ) {
719 fDECombo->AddEntry(Form("%d",it.CurrentDE()->GetId()), i);
720 fDEComboIdx[i++] = it.CurrentDE()->GetId();
725 //__________________________________________________________
726 void AliMpDEVisu::UpdateNameView(Bool_t firstTime)
728 /// update DE name in respect to selected DE id.
730 fCurrentDetElem = fDEComboIdx[fDECombo->GetSelected()];
732 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
734 fCurrentDEName = detElem->GetDEName();
739 fNameDECombo->RemoveAll();
741 for ( it.First(fChamberCombo->GetSelected()); !it.IsDone(); it.Next() ) {
743 Int_t detElemId = it.CurrentDE()->GetId();
744 TString deName = it.CurrentDE()->GetDEName();
746 Int_t idx = fNameDECombo->GetNumberOfEntries();
747 fNameDECombo->AddEntry(deName.Data(), idx);
748 fNameDEComboIdx[idx] = deName;
749 fDEOccurrence[detElemId] = idx;
753 fNameDECombo->Select(fDEOccurrence[fCurrentDetElem]);
754 fSegmentation = AliMpSegmentation::Instance()
755 ->GetMpSegmentation(fCurrentDetElem, detElem->GetCathodType(fCurrentPlane));
758 //______________________________________________________________________________
760 AliMpDEVisu::CreatePopupWindow(Int_t w, Int_t h, const char* windowName,
761 AliMpVPainter* painter,
764 /// Create transient frame
766 TCanvas* c = new TCanvas(windowName,windowName,-200,100,w,h);
768 Int_t n = fTrashList.GetEntries();
770 c->Connect("Closed()","AliMpDEVisu",this,Form("ClosePopupWindow(=%d)",n));
772 fTrashList.AddLast(c);
776 painter->Draw(option);
781 //__________________________________________________________
782 void AliMpDEVisu::PopUpManuMotif(AliMpSlat* slat)
784 /// pop up manu window motif painter for slat
787 AliMpMotifPosition* motifPosFound = 0x0;
788 AliMpMotifPosition* motifPos = 0x0;
791 for ( AliMpSlat::Size_t i = 0; i < slat->GetSize(); ++i ) {
793 AliMpPCB* pcb = slat->GetPCB(i);
795 for ( AliMpPCB::Size_t j = 0; j < slat->GetPCB(i)->GetSize(); ++j ) {
797 motifPos = pcb->GetMotifPosition(j);
799 manuId = motifPos->GetID();
800 if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
801 motifPosFound = motifPos;
811 InfoManuMotif(motifPosFound);
813 TVector2 dimension(motifPosFound->Dimensions());
816 Int_t w = Int_t(h*dimension.X()/dimension.Y());
817 AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
819 CreatePopupWindow(w,h,Form("Manu %d",fNumberEntry->GetIntNumber()),
824 //__________________________________________________________
825 void AliMpDEVisu::PopUpManuMotif(AliMpSector* sector)
827 /// pop up manu window motif painter for sector
830 AliMpMotifPosition* motifPosFound = 0x0;
831 AliMpMotifPosition* motifPos = 0x0;
834 for (Int_t iRow = 0; iRow < sector->GetNofRows(); ++iRow) {
836 AliMpRow* row = sector->GetRow(iRow);
838 for (Int_t iRowSeg = 0; iRowSeg < sector->GetRow(iRow)->GetNofRowSegments(); ++iRowSeg){
840 for (Int_t iRowSeg = 0; iRowSeg < row->GetNofRowSegments(); ++iRowSeg) {
841 AliMpVRowSegment *rowSegment = row->GetRowSegment(iRowSeg);
843 for (Int_t iMotif = 0; iMotif < rowSegment->GetNofMotifs(); ++iMotif){
845 Int_t motifPositionId = rowSegment->GetMotifPositionId(iMotif);
846 motifPos = rowSegment->GetRow()
847 ->GetMotifMap()->FindMotifPosition(motifPositionId);
849 manuId = motifPos->GetID();
850 if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
851 motifPosFound = motifPos;
866 InfoManuMotif(motifPosFound);
868 TVector2 dimension(motifPosFound->Dimensions());
870 // Create transient frame
872 Int_t w = Int_t(h*dimension.X()/dimension.Y());
874 AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
876 CreatePopupWindow(w,h,Form("Manu %d",fNumberEntry->GetIntNumber()),
882 //__________________________________________________________
883 void AliMpDEVisu::InfoManuMotif(AliMpMotifPosition* motifPos)
885 /// info for popup manu motif
888 Int_t manuId = fNumberEntry->GetIntNumber();
889 TVector2 dimension(motifPos->Dimensions());
890 fLogMessage->AddLine(Form("PopupManuMotif: motif dimension: %5.2f, %5.2f",
891 dimension.X()*2., dimension.Y()*2.));
893 fLogMessage->AddLine( Form("PopupManuMotif: pad dimension: %4.2f, %4.2f",
894 motifPos->GetMotif()->GetPadDimensions(0).X()*2.,
895 motifPos->GetMotif()->GetPadDimensions(0).Y()*2. ));
897 fLogMessage->AddLine( Form("PopupManuMotif: manu: %d, serial number: %d, buspatch: %d",
899 fDDLStore->GetDetElement(fCurrentDetElem)->GetManuSerialFromId(manuId),
900 fDDLStore->GetBusPatchId(fCurrentDetElem, manuId)) );
902 fLogMessage->ShowBottom();
906 //______________________________________________________________________________
907 void AliMpDEVisu::PopUpZoom(Int_t ix0, Int_t iy0, Int_t ix1, Int_t iy1)
909 /// popup zoom window
912 EventToReal(ix0,iy0,x0,y0);
914 EventToReal(ix1,iy1,x1,y1);
916 fLogMessage->AddLine(Form("PopUpZoom: zoom positions (x0, y0: %6.2f, %6.2f), (x1, y1: %6.2f, %6.2f)",
918 fLogMessage->ShowBottom();
920 // Create transient frame
921 Int_t h = 500;//TMath::Abs(x1-x0);
922 Int_t w = 500;//TMath::Abs(y1-y0);
924 AliMpArea area(TVector2((x0+x1)/2.0,(y0+y1)/2.0),
925 TVector2(TMath::Abs(x1-x0)/2.0,TMath::Abs(y1-y0)/2.0));
928 if ( area.IsValid() )
930 AliMpVPadIterator* iterator = fSegmentation->CreateIterator(area);
933 AliMpVPainter* painter = AliMpVPainter::CreatePainter(iterator);
934 CreatePopupWindow(w,h,"Zoom",painter,"");
938 AliError("could not get iterator for that area");
945 //__________________________________________________________
946 void AliMpDEVisu::ClosePopupWindow(Int_t id)
949 fEcanvas->GetCanvas()->cd();
950 fTrashList.RemoveAt(id);