]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/mapping/AliMpDEVisu.cxx
coding conventions
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpDEVisu.cxx
CommitLineData
e4d2775e 1#include <TObject.h>
2#include <TList.h>
3#include <TString.h>
4#include <TVector2.h>
5#include <TCanvas.h>
6#include <TGClient.h>
7#include <TGButton.h>
8#include <TRootEmbeddedCanvas.h>
9#include <TGLabel.h>
10#include <TGComboBox.h>
11#include <TGNumberEntry.h>
12#include <TGTextView.h>
13#include <TGTextEntry.h>
14
15#include "AliMpSlatMotifMap.h"
16#include "AliMpSt345Reader.h"
17#include "AliMpSectorReader.h"
18#include "AliMpSlat.h"
19#include "AliMpPCB.h"
20#include "AliMpPCBPainter.h"
21#include "AliMpSectorReader.h"
22#include "AliMpSector.h"
23#include "AliMpRow.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"
30
31#include "AliMpDEIterator.h"
32#include "AliMpDEManager.h"
33#include "AliMpDetElement.h"
34#include "AliMpStationType.h"
35#include "AliMpSegmentation.h"
36#include "AliMpPad.h"
37#include "AliMpDDLStore.h"
38
39#include "AliMpDEVisu.h"
40
41// Category: graphics
42//
43// Class AliMpDEVisu
44// -----------------------
45// GUI for drawing segmentation
46// motif manu and associated channels
47// date: 2007/01/26
48// Author: Ch. Finck
49
50/// \cond CLASSIMP
51ClassImp(AliMpDEVisu)
52/// \endcond
53
54//_________________________________________________________________
55AliMpDEVisu::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)),
59 fEcanvas(0x0),
60 fChamberCombo(0x0),
61 fDECombo(0x0),
62 fNumberEntry(0x0),
63 fPlaneButton(0x0),
64 fNameDEView(0x0),
65 fLogMessage(0x0),
66 fLogFile(0x0),
67 fTrashList(0x0),
68 fDEComboIdx(),
69 fCurrentPlane(AliMp::kBendingPlane),
70 fCurrentDetElem(100),
71 fCurrentDEName(),
72 fSegmentation(),
73 fDDLStore(AliMpDDLStore::Instance())
74
75{
76
77// Create canvas widget
78
79 Int_t width = Int_t(w*0.99);
80 Int_t height = Int_t(h*0.99);
81
82 fEcanvas = new TRootEmbeddedCanvas("Ecanvas",fMain, width, height);
83 fEcanvas->GetCanvas()->Connect("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)",
84 "AliMpDEVisu",
85 this,
86 "HandleMovement(Int_t, Int_t, Int_t, TObject*)");
87
88// Create a horizontal frame widget with buttons
89 TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain,width,height/6);
90
91 TGTextButton *draw = new TGTextButton(hframe,"&Draw");
92 draw->Connect("Clicked()","AliMpDEVisu",this,"DrawDE()");
93 hframe->AddFrame(draw, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
94
95 TGTextButton *exit = new TGTextButton(hframe,"&Exit","gApplication->Terminate(0)");
96 hframe->AddFrame(exit, new TGLayoutHints(kLHintsLeft| kLHintsCenterY,5,5,3,4));
97
98
99 Int_t i = 0;
100 Char_t text[20];
101
102// chamber label
103 TGLabel* chamberLabel = new TGLabel(hframe, "Chamber :");
104 hframe->AddFrame(chamberLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
105 fChamberCombo = new TGComboBox(hframe, kChamberCombo);
106
107 fDEComboIdx.Set(26);
108 for(i = 0; i < 10; i++)
109 {
110 sprintf(text,"%d",i+1);
111 fChamberCombo->AddEntry(text,i);
112 }
113 fChamberCombo->Resize(40,20);
114 fChamberCombo->Select(0);
115 fChamberCombo->Associate(this);
116 hframe->AddFrame(fChamberCombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
117
118// DE label
119 TGLabel* detElemLabel = new TGLabel(hframe, "DE :");
120 hframe->AddFrame(detElemLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
121 fDECombo = new TGComboBox(hframe, kDECombo);
122 UpdateComboDE();
123
124 fDECombo->Resize(80,20);
125 fDECombo->Select(0);
126 fDECombo->Associate(this);
127 hframe->AddFrame(fDECombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
128
129
130// DE name
131 TGLabel* detElemName = new TGLabel(hframe, "Name :");
132 hframe->AddFrame(detElemName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
133
134 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
135 fCurrentDEName = detElem->GetDEName();
136 fNameDEView = new TGTextView(hframe, 180, 25, fCurrentDEName.Data(), kDEName);
137 hframe->AddFrame(fNameDEView, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
138
139// plane type
140 fPlaneButton = new TGCheckButton(hframe, "NB Plane", kPlaneType);
141 fPlaneButton->SetState(kButtonUp);
142 fPlaneButton->Associate(this);
143 hframe->AddFrame(fPlaneButton, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
144
145
146// button motif
147 TGTextButton* drawManu = new TGTextButton(hframe,"&Search");
148 drawManu->Connect("Clicked()","AliMpDEVisu",this,"DrawManuMotif(Bool_t)");
149 drawManu->SetToolTipText("Search for a given manu number");
150 hframe->AddFrame(drawManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
151
152// entry manu
153 fNumberEntry = new TGNumberEntry(hframe, 0, 4, -1,
154 TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
155 TGNumberFormat::kNELLimitMinMax, 1, 1500);
156 fNumberEntry->Resize(60,20);
157 hframe->AddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
158
159// reset button
160 TGTextButton *resetManu = new TGTextButton(hframe,"&Reset");
161 resetManu->Connect("Clicked()","AliMpDEVisu",this,"ResetManu()");
162 hframe->AddFrame(resetManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,10,5,3,4));
163
164// delete window button
165 TGTextButton* deletePopup = new TGTextButton(hframe,"&Delete_Popup");
166 deletePopup->Connect("Clicked()","AliMpDEVisu",this,"DeletePopUp()");
167 deletePopup->SetToolTipText("Delete motif popup window");
168 hframe->AddFrame(deletePopup, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
169
170
171// log mesg
172 TGHorizontalFrame *logFrame = new TGHorizontalFrame(fMain, width/2, height/6);
173
174 TGLabel* logName = new TGLabel(logFrame, "Log MSG:");
175 logFrame->AddFrame(logName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 2, 0));
176
177 fLogMessage = new TGTextView(logFrame, width/2, 60);
178 fLogMessage->ShowBottom();
179
180 logFrame->AddFrame(fLogMessage, new TGLayoutHints(kLHintsLeft, 10, 0, 2, 0));
181
182// clear log mesg
183 TGTextButton* clearLog = new TGTextButton(logFrame,"&Clear");
184 clearLog->Connect("Clicked()","AliMpDEVisu",this,"ClearLogMessage()");
185 clearLog->SetToolTipText("Clear log message");
186 logFrame->AddFrame(clearLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
187
188// save log mesg
189 TGTextButton* saveLog = new TGTextButton(logFrame,"&Save");
190 saveLog->Connect("Clicked()","AliMpDEVisu",this,"SaveLogMessage()");
191 saveLog->SetToolTipText("Save log message into file");
192 logFrame->AddFrame(saveLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
193
194// log file name
195 fLogFile = new TGTextEntry(logFrame,"AliMpDEVisu.log");
196 fLogFile->SetToolTipText("Default log file name");
197 logFrame->AddFrame(fLogFile, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
198
199// frame
200 fMain->AddFrame(hframe, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,10,10));
201 fMain->AddFrame(fEcanvas, new TGLayoutHints(kLHintsCenterX, 10,10,10,10));
202
203 fMain->AddFrame(logFrame, new TGLayoutHints(kLHintsLeft,2,2,2,10));
204
205// Set a name to the main frame
206 fMain->SetWindowName("MUON Detection Element Visualization");
207
208// Map all subwindows of main frame
209 fMain->MapSubwindows();
210
211// Initialize the layout algorithm
212 fMain->Resize(fMain->GetDefaultSize());
213
214// Map main frame
215 fMain->MapWindow();
216
217// instance segmentation
218 fSegmentation = AliMpSegmentation::Instance()->GetMpSegmentation(fCurrentDetElem,
219 AliMp::GetCathodType(fCurrentPlane));
220 fLogMessage->AddLine("Segmentation loaded");
221 fLogMessage->ShowBottom();
222}
223
224//____________________________________________________________
225AliMpDEVisu::~AliMpDEVisu()
226{
227// Clean up used widgets: frames, buttons, layouthints
228
229 fChamberCombo->Delete();
230 fDECombo->Delete();
231 fNumberEntry->Delete();
232 fPlaneButton->Delete();
233 fNameDEView->Delete();
234 fLogMessage->Delete();
235 fLogFile->Delete();
236 fMain->Cleanup();
237 delete fMain;
238}
239
240//__________________________________________________________
241void AliMpDEVisu::HandleMovement(Int_t eventType, Int_t eventX, Int_t eventY, TObject* /*select*/)
242{
243/// handle cursor mouvement
244
245 if (eventType == 11) {// 61) {// double click
246
247 TCanvas *canvas = fEcanvas->GetCanvas();
248 canvas->cd(1);
249
250// estimate graphic pad sizes
251 TVector2 ul(gPad->XtoPixel(0.02), gPad->YtoPixel(0.98));
252 TVector2 br(gPad->XtoPixel(1.00), gPad->YtoPixel(0.02));
253
254 TVector2 padDim = br - ul;
255
256 fSegmentation = AliMpSegmentation::Instance()
257 ->GetMpSegmentation(fCurrentDetElem, AliMp::GetCathodType(fCurrentPlane));
258
259// get DE dimension (half size)
260 TVector2 deDim = fSegmentation-> Dimensions();
261 deDim *= 2.;
262
263// calculated in pixel
264 Double_t x = 0.;
265 Double_t y = 0.;
266
267 if (fCurrentDetElem >= 500) {
268 // origin at center
269 x = (eventX - ul.X() - padDim.X()/2.)/(padDim.X())*deDim.X();
270 y = (br.Y() - eventY - padDim.Y()/2.)/(padDim.Y())*deDim.Y();
271
272 } else {
273 // origin at bl
274 x = (eventX - ul.X())/(padDim.X())*deDim.X();
275 y = (br.Y() - eventY)/(padDim.Y())*deDim.Y();
276
277 }
278
279 TVector2 padReal(x,y);
280
281
282// get manu
283 AliMpPad pad = fSegmentation->PadByPosition(padReal, false);
284
285 Char_t log[255];
286 if (!pad.IsValid()) {
287 sprintf(log, "PopupManuMotif: No manu for DE: %d at position (%5.2f, %5.2f)",
288 fCurrentDetElem, x, y);
289 fLogMessage->AddLine(log);
290 fLogMessage->ShowBottom();
291 DrawDE();
292 return;
293 }
294
295 Int_t manu = pad.GetLocation().GetFirst();
296
297 fNumberEntry->SetNumber(manu);
298
299 sprintf(log, "PopupManuMotif: DE: %d, manu: %d at position: %5.2f, %5.2f", fCurrentDetElem, manu, x, y);
300 fLogMessage->AddLine(log);
301 fLogMessage->ShowBottom();
302
303 DrawManuMotif(true);
304
305 }
306}
307
308//__________________________________________________________
309void AliMpDEVisu::DrawDE()
310{
311/// Draws function graphics in randomly choosen interval
312
313 InfoDE();
314
315 if (fCurrentDetElem >= 500) {
316
317 DrawSlat("PMCI");
318
319 } else {
320
321 DrawQuadrant("RSMCI");
322
323 }
324 DeletePopUp();
325}
326
327//__________________________________________________________
328void AliMpDEVisu::DrawManuMotif(Bool_t popup)
329{
330// Draw manu motif in yellow and popup channel motif window
331
332
333 if (!fNumberEntry->GetIntNumber()) return;
334
335 Char_t command[255];
336
337 if (fCurrentDetElem >= 500) {
338
339 sprintf(command, "%s%d", "PMCI:", (Int_t)fNumberEntry->GetIntNumber());
340
341 DrawSlat(command, popup);
342
343 } else {
344
345 sprintf(command, "%s%d", "RSMCI:", (Int_t)fNumberEntry->GetIntNumber());
346
347 DrawQuadrant(command, popup);
348
349 }
350}
351
352//__________________________________________________________
353void AliMpDEVisu::DrawSlat(Option_t* option, Bool_t popup)
354{
355/// draw slat segmentation
356
357 TCanvas *canvas = fEcanvas->GetCanvas();
358 canvas->Clear();
359
360 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
361 TString nameType = detElem->GetSegType();
362
363 AliMpSlatMotifMap mm;
364 AliMpSt345Reader reader(mm);
365 AliMpSlat* slatCurrent = reader.ReadSlat(nameType.Data(), fCurrentPlane);
366 AliMpSlat* slatOther = reader.ReadSlat(nameType.Data(), AliMp::OtherPlaneType(fCurrentPlane));
367
368 canvas->Divide(1);
369 canvas->cd(1);
370
371 AliMpVPainter* painter = AliMpVPainter::CreatePainter(slatCurrent);
372 painter->Draw(option);
373
374 canvas->Update();
375
376 delete painter;
377
378 Int_t numberOfManu = slatCurrent->GetNofElectronicCards() +
379 slatOther->GetNofElectronicCards();
380
381 Char_t log[255];
382
383 sprintf(log, "DrawSlat: number of manus: %d", numberOfManu);
384
385 fLogMessage->AddLine(log);
386 fLogMessage->ShowBottom();
387
388 if (popup)
389 PopUpManuMotif(slatCurrent);
390
391}
392
393//__________________________________________________________
394void AliMpDEVisu:: DrawQuadrant(Option_t* option, Bool_t popup)
395{
396/// draw quadrant segmentation
397
398 TCanvas *canvas = fEcanvas->GetCanvas();
399 canvas->Clear();
400
401 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
402 AliMp::StationType station = detElem->GetStationType();
403
404 AliMpSectorReader readerCurrent(station, fCurrentPlane);
405 AliMpSector* sectorCurrent = readerCurrent.BuildSector();
406
407 AliMpSectorReader readerOther(station, AliMp::OtherPlaneType(fCurrentPlane));
408 AliMpSector* sectorOther = readerOther.BuildSector();
409
410 canvas->Divide(1);
411 canvas->cd(1);
412
413 AliMpVPainter *painter = AliMpVPainter::CreatePainter(sectorCurrent);
414 painter->Draw(option);
415
416 canvas->Update();
417
418 delete painter;
419
420 Int_t numberOfManu =
421 sectorCurrent->GetMotifMap()->GetNofMotifPositions() +
422 sectorOther->GetMotifMap()->GetNofMotifPositions();
423
424 Char_t log[255];
425
426 sprintf(log, "DrawQuadrant: number of manus: %d", numberOfManu);
427
428 fLogMessage->AddLine(log);
429 fLogMessage->ShowBottom();
430
431 if (popup)
432 PopUpManuMotif(sectorCurrent);
433}
434
435//__________________________________________________________
436void AliMpDEVisu::ResetManu()
437{
438/// reset manu search entry
439 fLogMessage->AddLine("Reset Motif Search Entry:");
440 fLogMessage->ShowBottom();
441 fNumberEntry->SetNumber(0);
442
443}
444
445//__________________________________________________________
446void AliMpDEVisu::DeletePopUp()
447{
448/// delete motif popup windows
449
450 if (fTrashList.GetEntries() > 0) {
451 fLogMessage->AddLine("Delete Motif PopUp Windows:");
452 fLogMessage->ShowBottom();
453
454// for (Int_t i = 0; i < fTrashList.GetEntries(); ++i) {
455
456// TGTransientFrame* trans = (TGTransientFrame*)fTrashList.At(i);
457// if (trans)
458// delete trans;
459// }
460
461 fTrashList.Delete();
462 }
463}
464
465//__________________________________________________________
466void AliMpDEVisu::SaveLogMessage()
467{
468/// save log message into log file
469
470 TString logFile = fLogFile->GetDisplayText();
471 fLogMessage->GetText()->Save(logFile.Data());
472
473 Char_t log[255];
474 sprintf(log, "SaveLogMessage: saving log message into logfile: %s", logFile.Data());
475 fLogMessage->AddLine(log);
476 fLogMessage->ShowBottom();
477}
478
479//__________________________________________________________
480void AliMpDEVisu::ClearLogMessage()
481{
482/// clear log message
483 fLogMessage->GetText()->Clear();
484 Char_t log[255];
485 sprintf(log, "ClearLogMessage: clear log messages:");
486 fLogMessage->AddLine(log);
487 fLogMessage->ShowBottom();
488}
489
490//__________________________________________________________
491void AliMpDEVisu::InfoDE()
492{
493/// info concerning the whole DE
494
495 AliMpDetElement* detElem = fDDLStore->GetDetElement(fCurrentDetElem);
496 Int_t ddlId = detElem->GetDdlId();
497 Int_t numberOfBus = detElem->GetNofBusPatches();
498 Int_t firstBus = detElem->GetBusPatchId(0);
499 Int_t lastBus = detElem->GetBusPatchId(numberOfBus - 1); // expect a continuous numbering
500
501 detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
502 Int_t numberOfSerialManu = detElem->GetNofManus(); // number of manu with an identified serial number
503
504 Char_t log[255];
505 sprintf(log, "DrawDE: detection element: %d, name: %s", fCurrentDetElem, fCurrentDEName.Data());
506 fLogMessage->AddLine(log);
507 fLogMessage->ShowBottom();
508
509
510 sprintf(log, "DrawDE: DDL: %d, number of buspatches %d from %d to %d",
511 ddlId, numberOfBus, firstBus, lastBus);
512 fLogMessage->AddLine(log);
513 fLogMessage->ShowBottom();
514
515 if (numberOfSerialManu != 0) { // not available yet for all DE
516 sprintf(log, "DrawDE: number of manus with serial number: %d", numberOfSerialManu);
517 fLogMessage->AddLine(log);
518 fLogMessage->ShowBottom();
519 }
520
521}
522
523//__________________________________________________________
524Bool_t AliMpDEVisu::ProcessMessage(Long_t msg, Long_t parm1, Long_t /*parm2*/)
525{
526/// process message from widgets actions/entries
527
528 switch(GET_MSG(msg))
529 {
530 case kC_COMMAND:
531 switch (GET_SUBMSG(msg))
532 {
533 case kCM_COMBOBOX:
534
535 switch (parm1)
536 {
537 case kChamberCombo:
538 UpdateComboDE();
539 UpdateNameView();
540 break;
541
542 case kDECombo:
543 UpdateNameView();
544 break;
545 }
546 break;
547
548 case kCM_CHECKBUTTON:
549 if (fPlaneButton->GetState() == kButtonDown) {
550 fCurrentPlane = AliMp::kNonBendingPlane;
551 if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() <= 1024)
552 fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() + 1024);
553 } else {
554 fCurrentPlane = AliMp::kBendingPlane;
555 if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() > 1024)
556 fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() - 1024);
557 }
558 break;
559
560 }
561 break;
562 }
563 return true;
564}
565
566//__________________________________________________________
567void AliMpDEVisu::UpdateComboDE()
568{
569/// update DE in respect to selected chamber
570
571 fDECombo->RemoveAll();
572
573 AliMpDEIterator it;
574 Int_t i = 0;
575 Char_t text[20];
576
577 for ( it.First(fChamberCombo->GetSelected()); ! it.IsDone(); it.Next() ) {
578 sprintf(text,"%d",it.CurrentDE()->GetId());
579 fDECombo->AddEntry(text,i);
580 fDEComboIdx[i++] = it.CurrentDE()->GetId();
581 }
582 fDECombo->Select(0);
583}
584
585//__________________________________________________________
586void AliMpDEVisu::UpdateNameView()
587{
588/// update DE name in respect to selected DE id.
589
590 fNameDEView->Clear();
591
592 fCurrentDetElem = fDEComboIdx[fDECombo->GetSelected()];
593 AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
594 fCurrentDEName = detElem->GetDEName();
595
596 fNameDEView->AddLine(fCurrentDEName.Data());
597 fNameDEView->ShowBottom();
598}
599
600//__________________________________________________________
601void AliMpDEVisu::PopUpManuMotif(AliMpSlat* slat)
602{
603/// pop up manu window motif painter for slat
604
605// Create transient frame
606 TGTransientFrame* trans = new TGTransientFrame(fkMainWindow, fMain, 400, 400);
607 trans->DontCallClose();
608 trans->CenterOnParent();
609
610// fill trash
611 fTrashList.Add(trans);
612
613 Char_t title[255];
614 sprintf(title,"Manu Motif: %d", (Int_t)fNumberEntry->GetIntNumber());
615 trans->SetWindowName(title);
616
617// Create canvas widget
618 TRootEmbeddedCanvas* eTransCanvas =
619 new TRootEmbeddedCanvas("ETransCanvas",trans,400,400);
620
621 trans->AddFrame(eTransCanvas, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10,10,1,10));
622
623
624// motif painter
625 AliMpMotifPosition* motifPosFound = 0x0;
626
627 TCanvas *canvas = eTransCanvas->GetCanvas();
628 canvas->Clear();
629
630 for ( AliMpSlat::Size_t i = 0; i < slat->GetSize(); ++i ) {
631
632 AliMpPCB* pcb = slat->GetPCB(i);
633 AliMpPCBPainter* pcbPainter = new AliMpPCBPainter(pcb);
634
635 for ( AliMpPCB::Size_t j = 0; j < slat->GetPCB(i)->GetSize(); ++j ) {
636
637 AliMpMotifPosition*motifPos = pcb->GetMotifPosition(j);
638
639 Int_t manuId = motifPos->GetID();
640 if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
641 motifPosFound = motifPos;
642 break;
643 }
644 }
645 if (motifPosFound)
646 break;
647 delete pcbPainter;
648 }
649
650 if(motifPosFound) {
651// maps
652 trans->MapSubwindows();
653 trans->MapWindow();
654// painter
655 AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
656 painter->Draw("ZT");
657// canvas
658 canvas->Update();
659
660 }
661
662
663}
664//__________________________________________________________
665void AliMpDEVisu::PopUpManuMotif(AliMpSector* sector)
666{
667
668/// pop up manu window motif painter for sector
669
670// Create transient frame
671 TGTransientFrame* trans = new TGTransientFrame(fkMainWindow, fMain, 400, 400);
672 trans->DontCallClose();
673 trans->CenterOnParent();
674
675// fill trash
676 fTrashList.Add(trans);
677
678 Char_t title[255];
679 sprintf(title,"Manu Motif: %d", (Int_t)fNumberEntry->GetIntNumber());
680 trans->SetWindowName(title);
681
682// Create canvas widget
683 TRootEmbeddedCanvas* eTransCanvas =
684 new TRootEmbeddedCanvas("ETransCanvas",trans,400,400);
685
686 trans->AddFrame(eTransCanvas, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
687 10,10,1,10));
688
689// motif painter
690 AliMpMotifPosition* motifPosFound = 0x0;
691
692 TCanvas *canvas = eTransCanvas->GetCanvas();
693 canvas->Clear();
694
695 for (Int_t iRow = 0; iRow < sector->GetNofRows(); ++iRow) {
696
697 AliMpRow* row = sector->GetRow(iRow);
698 AliMpRowPainter* rowPainter = new AliMpRowPainter(row);
699
700 for (Int_t iRowSeg = 0; iRowSeg < sector->GetRow(iRow)->GetNofRowSegments(); ++iRowSeg){
701
702 for (Int_t iRowSeg = 0; iRowSeg < row->GetNofRowSegments(); ++iRowSeg) {
703 AliMpVRowSegment *rowSegment = row->GetRowSegment(iRowSeg);
704
705 for (Int_t iMotif = 0; iMotif < rowSegment->GetNofMotifs(); ++iMotif){
706
707 Int_t motifPositionId = rowSegment->GetMotifPositionId(iMotif);
708 AliMpMotifPosition *motifPos = rowSegment->GetRow()
709 ->GetMotifMap()->FindMotifPosition(motifPositionId);
710
711 Int_t manuId = motifPos->GetID();
712 if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
713 motifPosFound = motifPos;
714 break;
715 }
716 }
717 if (motifPosFound)
718 break;
719 }
720 }
721 if (motifPosFound)
722 break;
723 delete rowPainter;
724 }
725
726 if(motifPosFound) {
727// map
728 trans->MapSubwindows();
729 trans->MapWindow();
730// painter
731 AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
732 painter->Draw("ZT");
733// canvas
734 canvas->Update();
735 }
736}