-#include <TObject.h>
-#include <TList.h>
-#include <TString.h>
-#include <TVector2.h>
-#include <TCanvas.h>
-#include <TGClient.h>
-#include <TGButton.h>
-#include <TRootEmbeddedCanvas.h>
-#include <TGLabel.h>
-#include <TGComboBox.h>
-#include <TGNumberEntry.h>
-#include <TGTextView.h>
-#include <TGTextEntry.h>
+/**************************************************************************
+* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+* *
+* Author: The ALICE Off-line Project. *
+* Contributors are mentioned in the code where appropriate. *
+* *
+* Permission to use, copy, modify and distribute this software and its *
+* documentation strictly for non-commercial purposes is hereby granted *
+* without fee, provided that the above copyright notice appears in all *
+* copies and that both the copyright notice and this permission notice *
+* appear in the supporting documentation. The authors make no claims *
+* about the suitability of this software for any purpose. It is *
+* provided "as is" without express or implied warranty. *
+**************************************************************************/
+
+// $Id$
+// $MpId$
+
+#include "AliMpDEVisu.h"
#include "AliMpSlatMotifMap.h"
#include "AliMpSt345Reader.h"
#include "AliMpSectorReader.h"
#include "AliMpSlat.h"
#include "AliMpPCB.h"
-#include "AliMpPCBPainter.h"
#include "AliMpSectorReader.h"
#include "AliMpSector.h"
#include "AliMpRow.h"
#include "AliMpVRowSegment.h"
-#include "AliMpRowPainter.h"
#include "AliMpVPainter.h"
-#include "AliMpMotifPainter.h"
#include "AliMpMotifPosition.h"
#include "AliMpMotifMap.h"
-
#include "AliMpDEIterator.h"
#include "AliMpDEManager.h"
#include "AliMpDetElement.h"
#include "AliMpSegmentation.h"
#include "AliMpPad.h"
#include "AliMpDDLStore.h"
+#include "AliMpVPadIterator.h"
-#include "AliMpDEVisu.h"
+#include "AliLog.h"
+
+#include <TMath.h>
+#include <TString.h>
+#include <TVector2.h>
+#include <TCanvas.h>
+#include <TGButton.h>
+#include <TRootEmbeddedCanvas.h>
+#include <TGLabel.h>
+#include <TGComboBox.h>
+#include <TGNumberEntry.h>
+#include <TGTextView.h>
+#include <TGTextEntry.h>
// Category: graphics
//
//_________________________________________________________________
AliMpDEVisu::AliMpDEVisu(UInt_t w, UInt_t h)
- : TGFrame(gClient->GetRoot(), w, h),
- fkMainWindow(gClient->GetRoot()),
- fMain(new TGMainFrame(gClient->GetRoot(), w, h)),
- fEcanvas(0x0),
- fChamberCombo(0x0),
- fDECombo(0x0),
- fNumberEntry(0x0),
- fPlaneButton(0x0),
- fNameDEView(0x0),
- fLogMessage(0x0),
- fLogFile(0x0),
- fTrashList(0x0),
- fDEComboIdx(),
- fCurrentPlane(AliMp::kBendingPlane),
- fCurrentDetElem(100),
- fCurrentDEName(),
- fSegmentation(),
- fDDLStore(AliMpDDLStore::Instance()),
- fNumberOfPopUp(0)
-
+: TGFrame(gClient->GetRoot(), w, h),
+ fkMainWindow(gClient->GetRoot()),
+ fMain(new TGMainFrame(gClient->GetRoot(), w, h)),
+ fEcanvas(0x0),
+ fChamberCombo(0x0),
+ fDECombo(0x0),
+ fNumberEntry(0x0),
+ fPlaneButton(0x0),
+ fZoomButton(0x0),
+ fNameDEView(0x0),
+ fLogMessage(0x0),
+ fLogFile(0x0),
+ fTrashList(0x0),
+ fDEComboIdx(),
+ fCurrentPlane(AliMp::kBendingPlane),
+ fCurrentDetElem(100),
+ fCurrentDEName(),
+ fSegmentation(),
+ fDDLStore(AliMpDDLStore::Instance()),
+ fZoomMode(false)
{
+/// Standard constructor
-// Create canvas widget
-
- Int_t width = Int_t(w*0.99);
- Int_t height = Int_t(h*0.99);
-
- fEcanvas = new TRootEmbeddedCanvas("Ecanvas",fMain, width, height);
- fEcanvas->GetCanvas()->Connect("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)",
- "AliMpDEVisu",
- this,
- "HandleMovement(Int_t, Int_t, Int_t, TObject*)");
-
-// Create a horizontal frame widget with buttons
- TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain,width,height/6);
-
- TGTextButton *draw = new TGTextButton(hframe,"&Draw");
- draw->Connect("Clicked()","AliMpDEVisu",this,"DrawDE()");
- hframe->AddFrame(draw, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
-
- TGTextButton *exit = new TGTextButton(hframe,"&Exit","gApplication->Terminate(0)");
- hframe->AddFrame(exit, new TGLayoutHints(kLHintsLeft| kLHintsCenterY,5,5,3,4));
-
-
- Int_t i = 0;
- Char_t text[20];
-
-// chamber label
- TGLabel* chamberLabel = new TGLabel(hframe, "Chamber :");
- hframe->AddFrame(chamberLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
- fChamberCombo = new TGComboBox(hframe, kChamberCombo);
-
- fDEComboIdx.Set(26);
- for(i = 0; i < 10; i++)
- {
- sprintf(text,"%d",i+1);
- fChamberCombo->AddEntry(text,i);
- }
- fChamberCombo->Resize(40,20);
- fChamberCombo->Select(0);
- fChamberCombo->Associate(this);
- hframe->AddFrame(fChamberCombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
-
-// DE label
- TGLabel* detElemLabel = new TGLabel(hframe, "DE :");
- hframe->AddFrame(detElemLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
- fDECombo = new TGComboBox(hframe, kDECombo);
- UpdateComboDE();
-
- fDECombo->Resize(80,20);
- fDECombo->Select(0);
- fDECombo->Associate(this);
- hframe->AddFrame(fDECombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
-
- TGTextButton *next = new TGTextButton(hframe,"&Next");
- next->Connect("Clicked()","AliMpDEVisu",this,"NextDE()");
- hframe->AddFrame(next, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
-
-// DE name
- TGLabel* detElemName = new TGLabel(hframe, "Name :");
- hframe->AddFrame(detElemName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
-
- AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
- fCurrentDEName = detElem->GetDEName();
- fNameDEView = new TGTextView(hframe, 180, 25, fCurrentDEName.Data(), kDEName);
- hframe->AddFrame(fNameDEView, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
-
-// plane type
- fPlaneButton = new TGCheckButton(hframe, "NB Plane", kPlaneType);
- fPlaneButton->SetState(kButtonUp);
- fPlaneButton->Associate(this);
- hframe->AddFrame(fPlaneButton, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
-
-
-// button motif
- TGTextButton* drawManu = new TGTextButton(hframe,"&Search");
- drawManu->Connect("Clicked()","AliMpDEVisu",this,"DrawManuMotif(Bool_t)");
- drawManu->SetToolTipText("Search for a given manu number");
- hframe->AddFrame(drawManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
-
-// entry manu
- fNumberEntry = new TGNumberEntry(hframe, 0, 4, -1,
- TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
- TGNumberFormat::kNELLimitMinMax, 1, 1500);
- fNumberEntry->Resize(60,20);
- hframe->AddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
-
-// reset button
- TGTextButton *resetManu = new TGTextButton(hframe,"&Reset");
- resetManu->Connect("Clicked()","AliMpDEVisu",this,"ResetManu()");
- hframe->AddFrame(resetManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,10,5,3,4));
-
-// delete window button
- TGTextButton* deletePopup = new TGTextButton(hframe,"&Delete_Popup");
- deletePopup->Connect("Clicked()","AliMpDEVisu",this,"DeletePopUp()");
- deletePopup->SetToolTipText("Delete motif popup window");
- hframe->AddFrame(deletePopup, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
-
-
-// log mesg
- TGHorizontalFrame *logFrame = new TGHorizontalFrame(fMain, width/2, height/6);
-
- TGLabel* logName = new TGLabel(logFrame, "Log MSG:");
- logFrame->AddFrame(logName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 2, 0));
-
- fLogMessage = new TGTextView(logFrame, width/2, 60);
- fLogMessage->ShowBottom();
-
- logFrame->AddFrame(fLogMessage, new TGLayoutHints(kLHintsLeft, 10, 0, 2, 0));
-
-// clear log mesg
+ fTrashList.SetOwner(kFALSE);
+
+ // Create canvas widget
+
+ Int_t width = Int_t(w*0.99);
+ Int_t height = Int_t(h*0.99);
+
+ fEcanvas = new TRootEmbeddedCanvas("Ecanvas",fMain, width, height);
+ fEcanvas->GetCanvas()->Connect("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)",
+ "AliMpDEVisu",
+ this,
+ "HandleMovement(Int_t, Int_t, Int_t, TObject*)");
+
+ // Create a horizontal frame widget with buttons
+ TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain,width,height/6);
+
+ TGTextButton *draw = new TGTextButton(hframe,"&Draw");
+ draw->Connect("Clicked()","AliMpDEVisu",this,"DrawDE()");
+ hframe->AddFrame(draw, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
+
+ TGTextButton *exit = new TGTextButton(hframe,"&Exit","gApplication->Terminate(0)");
+ hframe->AddFrame(exit, new TGLayoutHints(kLHintsLeft| kLHintsCenterY,5,5,3,4));
+
+
+ Int_t i = 0;
+ Char_t text[20];
+
+ // chamber label
+ TGLabel* chamberLabel = new TGLabel(hframe, "Chamber :");
+ hframe->AddFrame(chamberLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
+ fChamberCombo = new TGComboBox(hframe, kChamberCombo);
+
+ fDEComboIdx.Set(26);
+ for(i = 0; i < 10; i++)
+ {
+ sprintf(text,"%d",i+1);
+ fChamberCombo->AddEntry(text,i);
+ }
+ fChamberCombo->Resize(40,20);
+ fChamberCombo->Select(0);
+ fChamberCombo->Associate(this);
+ hframe->AddFrame(fChamberCombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
+
+ // DE label
+ TGLabel* detElemLabel = new TGLabel(hframe, "DE :");
+ hframe->AddFrame(detElemLabel, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
+ fDECombo = new TGComboBox(hframe, kDECombo);
+ UpdateComboDE();
+
+ fDECombo->Resize(80,20);
+ fDECombo->Select(0);
+ fDECombo->Associate(this);
+ hframe->AddFrame(fDECombo, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
+
+ TGTextButton *next = new TGTextButton(hframe,"&Next");
+ next->Connect("Clicked()","AliMpDEVisu",this,"NextDE()");
+ hframe->AddFrame(next, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
+
+ // DE name
+ TGLabel* detElemName = new TGLabel(hframe, "Name :");
+ hframe->AddFrame(detElemName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 20, 0));
+
+ AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
+ fCurrentDEName = detElem->GetDEName();
+ fNameDEView = new TGTextView(hframe, 180, 25, fCurrentDEName.Data(), kDEName);
+ hframe->AddFrame(fNameDEView, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
+
+ // plane type
+ fPlaneButton = new TGCheckButton(hframe, "NB Plane", kPlaneType);
+ fPlaneButton->SetState(kButtonUp);
+ fPlaneButton->Associate(this);
+ hframe->AddFrame(fPlaneButton, new TGLayoutHints(kLHintsLeft, 10, 0, 9, 0));
+
+
+ // button motif
+ TGTextButton* drawManu = new TGTextButton(hframe,"&Search");
+ drawManu->Connect("Clicked()","AliMpDEVisu",this,"DrawManuMotif(Bool_t)");
+ drawManu->SetToolTipText("Search for a given manu number");
+ hframe->AddFrame(drawManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
+
+ // entry manu
+ fNumberEntry = new TGNumberEntry(hframe, 0, 4, -1,
+ TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
+ TGNumberFormat::kNELLimitMinMax, 1, 1500);
+ fNumberEntry->Resize(60,20);
+ hframe->AddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
+
+ // reset button
+ TGTextButton *resetManu = new TGTextButton(hframe,"&Reset");
+ resetManu->Connect("Clicked()","AliMpDEVisu",this,"ResetManu()");
+ hframe->AddFrame(resetManu, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,10,5,3,4));
+
+ // delete window button
+ TGTextButton* deletePopup = new TGTextButton(hframe,"&Delete_Popup");
+ deletePopup->Connect("Clicked()","AliMpDEVisu",this,"DeletePopUp()");
+ deletePopup->SetToolTipText("Delete motif popup window");
+ hframe->AddFrame(deletePopup, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
+
+
+ // log mesg
+ TGHorizontalFrame *logFrame = new TGHorizontalFrame(fMain, width/2, height/6);
+
+ TGLabel* logName = new TGLabel(logFrame, "Log MSG:");
+ logFrame->AddFrame(logName, new TGLayoutHints(kLHintsCenterX | kLHintsLeft | kLHintsCenterY, 10, 0, 2, 0));
+
+ fLogMessage = new TGTextView(logFrame, width/2, 60);
+ fLogMessage->ShowBottom();
+
+ logFrame->AddFrame(fLogMessage, new TGLayoutHints(kLHintsLeft, 10, 0, 2, 0));
+
+ // clear log mesg
TGTextButton* clearLog = new TGTextButton(logFrame,"&Clear");
- clearLog->Connect("Clicked()","AliMpDEVisu",this,"ClearLogMessage()");
- clearLog->SetToolTipText("Clear log message");
- logFrame->AddFrame(clearLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
-
-// save log mesg
- TGTextButton* saveLog = new TGTextButton(logFrame,"&Save");
- saveLog->Connect("Clicked()","AliMpDEVisu",this,"SaveLogMessage()");
- saveLog->SetToolTipText("Save log message into file");
- logFrame->AddFrame(saveLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
-
-// log file name
- fLogFile = new TGTextEntry(logFrame,"AliMpDEVisu.log");
- fLogFile->SetToolTipText("Default log file name");
- logFrame->AddFrame(fLogFile, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
-
-// frame
- fMain->AddFrame(hframe, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,10,10));
- fMain->AddFrame(fEcanvas, new TGLayoutHints(kLHintsCenterX, 10,10,10,10));
-
- fMain->AddFrame(logFrame, new TGLayoutHints(kLHintsLeft,2,2,2,10));
-
-// Set a name to the main frame
- fMain->SetWindowName("MUON Detection Element Visualization");
-
-// Map all subwindows of main frame
- fMain->MapSubwindows();
-
-// Initialize the layout algorithm
- fMain->Resize(fMain->GetDefaultSize());
-
-// Map main frame
- fMain->MapWindow();
+ clearLog->Connect("Clicked()","AliMpDEVisu",this,"ClearLogMessage()");
+ clearLog->SetToolTipText("Clear log message");
+ logFrame->AddFrame(clearLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,15,5,3,4));
+
+ // save log mesg
+ TGTextButton* saveLog = new TGTextButton(logFrame,"&Save");
+ saveLog->Connect("Clicked()","AliMpDEVisu",this,"SaveLogMessage()");
+ saveLog->SetToolTipText("Save log message into file");
+ logFrame->AddFrame(saveLog, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,5,3,4));
+
+ // log file name
+ fLogFile = new TGTextEntry(logFrame,"AliMpDEVisu.log");
+ fLogFile->SetToolTipText("Default log file name");
+ logFrame->AddFrame(fLogFile, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 0, 9, 0));
+
+ // zoom mode
+ fZoomButton = new TGCheckButton(logFrame, new TGHotString("&Zoom Mode"), kZoomMode);
+ fZoomButton->Associate(this);
+ fZoomButton->SetState(kButtonUp);
-// instance segmentation
- fSegmentation = AliMpSegmentation::Instance()->GetMpSegmentation(fCurrentDetElem,
- AliMp::GetCathodType(fCurrentPlane));
- fLogMessage->AddLine("Segmentation loaded");
- fLogMessage->ShowBottom();
+ logFrame->AddFrame(fZoomButton, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 20, 0, 9, 0));
+
+ // frame
+ fMain->AddFrame(hframe, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,10,10));
+ fMain->AddFrame(fEcanvas, new TGLayoutHints(kLHintsCenterX, 10,10,10,10));
+
+ fMain->AddFrame(logFrame, new TGLayoutHints(kLHintsLeft,2,2,2,10));
+
+ // Set a name to the main frame
+ fMain->SetWindowName("MUON Detection Element Visualization");
+
+ // Map all subwindows of main frame
+ fMain->MapSubwindows();
+
+ // Initialize the layout algorithm
+ fMain->Resize(fMain->GetDefaultSize());
+
+ // Map main frame
+ fMain->MapWindow();
+
+ // instance segmentation
+ fSegmentation = AliMpSegmentation::Instance()->GetMpSegmentation(fCurrentDetElem, detElem->GetCathodType(fCurrentPlane));
+ fLogMessage->AddLine("Segmentation loaded");
+ fLogMessage->ShowBottom();
}
//____________________________________________________________
AliMpDEVisu::~AliMpDEVisu()
{
-// Clean up used widgets: frames, buttons, layouthints
-
- fChamberCombo->Delete();
- fDECombo->Delete();
- fNumberEntry->Delete();
- fPlaneButton->Delete();
- fNameDEView->Delete();
- fLogMessage->Delete();
- fLogFile->Delete();
- fMain->Cleanup();
- delete fMain;
+ /// Clean up used widgets: frames, buttons, layouthints
+
+ fChamberCombo->Delete();
+ fDECombo->Delete();
+ fNumberEntry->Delete();
+ fPlaneButton->Delete();
+ fNameDEView->Delete();
+ fLogMessage->Delete();
+ fLogFile->Delete();
+ fMain->Cleanup();
+ delete fMain;
}
//__________________________________________________________
void AliMpDEVisu::HandleMovement(Int_t eventType, Int_t eventX, Int_t eventY, TObject* /*select*/)
{
-/// handle cursor mouvement
-
- if (eventType == kButton1Down) {
-
- TCanvas *canvas = fEcanvas->GetCanvas();
- canvas->cd(1);
-
-// estimate graphic pad sizes
- TVector2 ul(gPad->XtoPixel(0.02), gPad->YtoPixel(0.98));
- TVector2 br(gPad->XtoPixel(1.00), gPad->YtoPixel(0.02));
+ /// handle cursor mouvement
+
+ static Int_t eventXold, eventYold;
+ static Int_t eventX0, eventY0;
+ static Int_t linedrawn;
+
- TVector2 padDim = br - ul;
-
- fSegmentation = AliMpSegmentation::Instance()
- ->GetMpSegmentation(fCurrentDetElem, AliMp::GetCathodType(fCurrentPlane));
+ // enable again KeyAutoRepeat after HandleKey
+ if (eventType == kKeyPress) {
+ gVirtualX->SetKeyAutoRepeat(kTRUE);
+ }
-// get DE dimension (half size)
- TVector2 deDim = fSegmentation-> Dimensions();
- deDim *= 2.;
+ fEcanvas->GetCanvas()->cd();
-// calculated in pixel
+ // zoom mode
+ if (fZoomMode) {
+
+ if (eventType == kButton1Down) {
+ gVirtualX->SetLineWidth(3);
+ eventX0 = eventX; eventY0 = eventY;
+ eventXold = eventX; eventYold = eventY;
+ linedrawn = 0;
+ }
+
+ if (eventType == kButton1Motion) {
+ if (linedrawn) gVirtualX->DrawBox(eventX0, eventY0, eventXold, eventYold, TVirtualX::kHollow);
+ eventXold = eventX;
+ eventYold = eventY;
+ linedrawn = 1;
+ gVirtualX->DrawBox(eventX0, eventY0, eventXold, eventYold, TVirtualX::kHollow);
+ }
+
+ if (eventType == kButton1Up)
+ {
+ if ( (eventX0 - eventX) && (eventY0 - eventY) )
+ {
+ PopUpZoom(eventX0,eventY0,eventX,eventY);
+ linedrawn=1;
+ }
+ }
+
+
+ } else {
+
+ // click mode
+
+ if (eventType == kButton1Down) {
+
+ // calculated in pixel
Double_t x = 0.;
Double_t y = 0.;
-
- if (fCurrentDetElem >= 500) {
- // origin at center
- x = (eventX - ul.X() - padDim.X()/2.)/(padDim.X())*deDim.X();
- y = (br.Y() - eventY - padDim.Y()/2.)/(padDim.Y())*deDim.Y();
-
- } else {
- // origin at bl
- x = (eventX - ul.X())/(padDim.X())*deDim.X();
- y = (br.Y() - eventY)/(padDim.Y())*deDim.Y();
-
- }
-
- TVector2 padReal(x,y);
-
-
-// get manu
- AliMpPad pad = fSegmentation->PadByPosition(padReal, false);
-
- Char_t log[255];
+
+ EventToReal(eventX,eventY,x,y);
+
+ // get manu
+ AliMpPad pad = fSegmentation->PadByPosition(TVector2(x,y), false);
+
if (!pad.IsValid()) {
- sprintf(log, "PopupManuMotif: No manu for DE: %d at position (%5.2f, %5.2f)",
- fCurrentDetElem, x, y);
- fLogMessage->AddLine(log);
- fLogMessage->ShowBottom();
- DrawDE();
- return;
+
+ fLogMessage->AddLine(Form("PopupManuMotif: No manu for DE: %d at position (%5.2f, %5.2f)",
+ fCurrentDetElem, x, y));
+ fLogMessage->ShowBottom();
+ return;
}
-
+
Int_t manu = pad.GetLocation().GetFirst();
-
+
fNumberEntry->SetNumber(manu);
-
- sprintf(log, "PopupManuMotif: DE: %d, manu: %d at position: %5.2f, %5.2f", fCurrentDetElem, manu, x, y);
- fLogMessage->AddLine(log);
+
+
+ fLogMessage->AddLine(Form("PopupManuMotif: DE: %d, manu: %d at position: %5.2f, %5.2f",
+ fCurrentDetElem, manu, x, y));
fLogMessage->ShowBottom();
-
+
DrawManuMotif(true);
-
+
}
+ }
}
//__________________________________________________________
-void AliMpDEVisu::DrawDE()
+void AliMpDEVisu::DrawDE(Bool_t info)
{
-/// Draws function graphics in randomly choosen interval
-
+ /// Draws function graphics in randomly choosen interval
+
+ if (info)
InfoDE();
-
- if (fCurrentDetElem >= 500) {
-
- DrawSlat("PMCI");
-
- } else {
-
- DrawQuadrant("RSMCI");
+
+ fEcanvas->GetCanvas()->cd();
+ fEcanvas->GetCanvas()->SetEditable(kTRUE);
+
+ if (AliMpDEManager::GetStationType(fCurrentDetElem) == AliMp::kStation345 ) {
- }
- DeletePopUp();
+ DrawSlat("PMCI");
+
+ } else {
+
+ DrawQuadrant("RSMCI");
+
+ }
+ DeletePopUp();
+ fEcanvas->GetCanvas()->SetEditable(kFALSE);
+
}
//__________________________________________________________
void AliMpDEVisu::DrawManuMotif(Bool_t popup)
{
-// Draw manu motif in yellow and popup channel motif window
-
-
- if (!fNumberEntry->GetIntNumber()) return;
-
- Char_t command[255];
-
- if (fCurrentDetElem >= 500) {
-
- sprintf(command, "%s%d", "PMCI:", (Int_t)fNumberEntry->GetIntNumber());
-
- DrawSlat(command, popup);
-
- } else {
-
- sprintf(command, "%s%d", "RSMCI:", (Int_t)fNumberEntry->GetIntNumber());
+ // Draw manu motif in yellow and popup channel motif window
- DrawQuadrant(command, popup);
-
- }
+ fEcanvas->GetCanvas()->SetEditable(kTRUE);
+
+ if (!fNumberEntry->GetIntNumber()) return;
+
+ Char_t command[255];
+
+ if (AliMpDEManager::GetStationType(fCurrentDetElem) == AliMp::kStation345 ) {
+
+ sprintf(command, "%s%d", "PMCI:", (Int_t)fNumberEntry->GetIntNumber());
+
+ DrawSlat(command, popup);
+
+ } else {
+
+ sprintf(command, "%s%d", "RSMCI:", (Int_t)fNumberEntry->GetIntNumber());
+
+ DrawQuadrant(command, popup);
+
+ }
+
+ fEcanvas->GetCanvas()->SetEditable(kFALSE);
}
//__________________________________________________________
void AliMpDEVisu::DrawSlat(Option_t* option, Bool_t popup)
{
-/// draw slat segmentation
-
- TCanvas *canvas = fEcanvas->GetCanvas();
- canvas->Clear();
-
- AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
- TString nameType = detElem->GetSegType();
-
- AliMpSlatMotifMap mm;
- AliMpSt345Reader reader(mm);
- AliMpSlat* slatCurrent = reader.ReadSlat(nameType.Data(), fCurrentPlane);
- AliMpSlat* slatOther = reader.ReadSlat(nameType.Data(), AliMp::OtherPlaneType(fCurrentPlane));
-
- canvas->Divide(1);
- canvas->cd(1);
-
- AliMpVPainter* painter = AliMpVPainter::CreatePainter(slatCurrent);
- painter->Draw(option);
-
- canvas->Update();
-
- delete painter;
-
- Int_t numberOfManu = slatCurrent->GetNofElectronicCards() +
- slatOther->GetNofElectronicCards();
-
- Char_t log[255];
+ /// draw slat segmentation
+
+ TCanvas *canvas = fEcanvas->GetCanvas();
+ canvas->Clear();
+
+ AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
+ TString nameType = detElem->GetSegType();
+
+ AliMpSlatMotifMap mm;
+ AliMpSt345Reader reader(mm);
+ AliMpSlat* slatCurrent = reader.ReadSlat(nameType.Data(), fCurrentPlane);
+ AliMpSlat* slatOther = reader.ReadSlat(nameType.Data(), AliMp::OtherPlaneType(fCurrentPlane));
+
+ AliMpVPainter* painter = AliMpVPainter::CreatePainter(slatCurrent);
+ painter->Draw(option);
+
+ canvas->Update();
+
+ Int_t numberOfManu =
+ slatCurrent->GetNofElectronicCards() +
+ slatOther->GetNofElectronicCards();
+
+ fLogMessage->AddLine(Form("DrawSlat: number of manus: %d", numberOfManu));
+ fLogMessage->ShowBottom();
+
+ if (popup)
+ PopUpManuMotif(slatCurrent);
- sprintf(log, "DrawSlat: number of manus: %d", numberOfManu);
-
- fLogMessage->AddLine(log);
- fLogMessage->ShowBottom();
-
- if (popup)
- PopUpManuMotif(slatCurrent);
-
}
//__________________________________________________________
-void AliMpDEVisu:: DrawQuadrant(Option_t* option, Bool_t popup)
+void AliMpDEVisu::DrawQuadrant(Option_t* option, Bool_t popup)
{
-/// draw quadrant segmentation
-
- TCanvas *canvas = fEcanvas->GetCanvas();
- canvas->Clear();
-
- AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
- AliMp::StationType station = detElem->GetStationType();
-
- AliMpSectorReader readerCurrent(station, fCurrentPlane);
- AliMpSector* sectorCurrent = readerCurrent.BuildSector();
-
- AliMpSectorReader readerOther(station, AliMp::OtherPlaneType(fCurrentPlane));
- AliMpSector* sectorOther = readerOther.BuildSector();
-
- canvas->Divide(1);
- canvas->cd(1);
-
- AliMpVPainter *painter = AliMpVPainter::CreatePainter(sectorCurrent);
- painter->Draw(option);
-
- canvas->Update();
-
- delete painter;
+ /// draw quadrant segmentation
+
+ TCanvas *canvas = fEcanvas->GetCanvas();
+ canvas->Clear();
+
+ AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
+ AliMp::StationType station = detElem->GetStationType();
- Int_t numberOfManu =
+ AliMpSectorReader readerCurrent(station, fCurrentPlane);
+ AliMpSector* sectorCurrent = readerCurrent.BuildSector();
+
+ AliMpSectorReader readerOther(station, AliMp::OtherPlaneType(fCurrentPlane));
+ AliMpSector* sectorOther = readerOther.BuildSector();
+
+ AliMpVPainter *painter = AliMpVPainter::CreatePainter(sectorCurrent);
+ painter->Draw(option);
+
+ canvas->Update();
+
+ Int_t numberOfManu =
sectorCurrent->GetMotifMap()->GetNofMotifPositions() +
sectorOther->GetMotifMap()->GetNofMotifPositions();
-
- Char_t log[255];
- sprintf(log, "DrawQuadrant: number of manus: %d", numberOfManu);
+ fLogMessage->AddLine(Form("DrawQuadrant: number of manus: %d", numberOfManu));
+ fLogMessage->ShowBottom();
+
+ if (popup)
+ PopUpManuMotif(sectorCurrent);
+
+}
+
+//______________________________________________________________________________
+void
+AliMpDEVisu::EventToReal(Int_t eventX, Int_t eventY, Double_t& x, Double_t& y) const
+{
+ /// estimate graphic pad sizes
- fLogMessage->AddLine(log);
- fLogMessage->ShowBottom();
+ static TVector2 ul(gPad->XtoPixel(0.01), gPad->YtoPixel(0.99));
+ static TVector2 br(gPad->XtoPixel(0.99), gPad->YtoPixel(0.01));
- if (popup)
- PopUpManuMotif(sectorCurrent);
+ static TVector2 padDim = br - ul;
+
+ // get DE dimension (half size)
+ TVector2 deDim(fSegmentation->Dimensions()*2.0);
+
+ TVector2 padReal;
+
+ if (AliMpDEManager::GetStationType(fCurrentDetElem) == AliMp::kStation345 )
+ {
+ // origin at center
+ x = (eventX - ul.X() - padDim.X()/2.)/(padDim.X())*deDim.X();
+ y = (br.Y() - eventY - padDim.Y()/2.)/(padDim.Y())*deDim.Y();
+
+ }
+ else
+ {
+ // origin at bottom left
+ x = (eventX - ul.X())/(padDim.X())*deDim.X();
+ y = (br.Y() - eventY)/(padDim.Y())*deDim.Y();
+ }
+
}
//__________________________________________________________
void AliMpDEVisu::ResetManu()
{
-/// reset manu search entry
- fLogMessage->AddLine("Reset Motif Search Entry:");
- fLogMessage->ShowBottom();
- fNumberEntry->SetNumber(0);
-
+ /// reset manu search entry
+ fLogMessage->AddLine("Reset Motif Search Entry:");
+ fLogMessage->ShowBottom();
+ fNumberEntry->SetNumber(0);
+
}
//__________________________________________________________
void AliMpDEVisu::DeletePopUp()
{
/// delete motif popup windows
-
- if (fTrashList.GetEntries() > 0) {
- fLogMessage->AddLine("Delete Motif PopUp Windows:");
- fLogMessage->ShowBottom();
-
- for (Int_t i = 0; i < fTrashList.GetEntries(); ++i) {
-
- TGTransientFrame* trans = (TGTransientFrame*)fTrashList.At(i);
- if (trans)
- trans->CloseWindow();
- }
-
- fTrashList.Clear();
- fNumberOfPopUp = 0;
- }
+
+ if (fTrashList.GetEntries() > 0)
+ {
+ fLogMessage->AddLine("Delete Motif PopUp Windows:");
+ fLogMessage->ShowBottom();
+
+ fTrashList.Delete();
+ }
}
//__________________________________________________________
void AliMpDEVisu::SaveLogMessage()
{
-/// save log message into log file
-
- TString logFile = fLogFile->GetDisplayText();
- fLogMessage->GetText()->Save(logFile.Data());
+ /// save log message into log file
+
+ TString logFile = fLogFile->GetDisplayText();
+ fLogMessage->GetText()->Save(logFile.Data());
- Char_t log[255];
- sprintf(log, "SaveLogMessage: saving log message into logfile: %s", logFile.Data());
- fLogMessage->AddLine(log);
- fLogMessage->ShowBottom();
+ fLogMessage->AddLine(Form("SaveLogMessage: saving log message into logfile: %s", logFile.Data()));
+ fLogMessage->ShowBottom();
}
//__________________________________________________________
void AliMpDEVisu::ClearLogMessage()
{
-/// clear log message
- fLogMessage->GetText()->Clear();
- Char_t log[255];
- sprintf(log, "ClearLogMessage: clear log messages:");
- fLogMessage->AddLine(log);
- fLogMessage->ShowBottom();
+ /// clear log message
+ fLogMessage->GetText()->Clear();
+ fLogMessage->AddLine("ClearLogMessage: clear log messages:");
+ fLogMessage->ShowBottom();
}
//__________________________________________________________
void AliMpDEVisu::InfoDE()
{
-/// info concerning the whole DE
-
- AliMpDetElement* detElem = fDDLStore->GetDetElement(fCurrentDetElem);
- Int_t ddlId = detElem->GetDdlId();
- Int_t numberOfBus = detElem->GetNofBusPatches();
- Int_t firstBus = detElem->GetBusPatchId(0);
- Int_t lastBus = detElem->GetBusPatchId(numberOfBus - 1); // expect a continuous numbering
-
- detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
- Int_t numberOfSerialManu = detElem->GetNofManus(); // number of manu with an identified serial number
-
- Char_t log[255];
- sprintf(log, "DrawDE: detection element: %d, name: %s", fCurrentDetElem, fCurrentDEName.Data());
- fLogMessage->AddLine(log);
- fLogMessage->ShowBottom();
+ /// info concerning the whole DE
+
+ AliMpDetElement* detElem = fDDLStore->GetDetElement(fCurrentDetElem);
+ Int_t ddlId = detElem->GetDdlId();
+ Int_t numberOfBus = detElem->GetNofBusPatches();
+
+ Int_t vec[24];
+ for (Int_t i = 0; i < detElem->GetNofBusPatches(); ++i)
+ vec[i] = detElem->GetBusPatchId(i);
-
- sprintf(log, "DrawDE: DDL: %d, number of buspatches %d from %d to %d",
- ddlId, numberOfBus, firstBus, lastBus);
- fLogMessage->AddLine(log);
+ Int_t firstBus = TMath::MinElement(detElem->GetNofBusPatches(), vec);
+ Int_t lastBus = TMath::MaxElement(detElem->GetNofBusPatches(), vec);
+
+ detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
+ Int_t numberOfSerialManu = detElem->GetNofManus(); // number of manu with an identified serial number
+
+ fLogMessage->AddLine(Form("DrawDE: detection element: %d, name: %s",
+ fCurrentDetElem, fCurrentDEName.Data()));
+ fLogMessage->ShowBottom();
+
+ fLogMessage->AddLine(Form("DrawDE: DDL: %d, number of buspatches %d from %d to %d",
+ ddlId, numberOfBus, firstBus, lastBus));
+ fLogMessage->ShowBottom();
+
+ if (numberOfSerialManu != 0) { // not available yet for all DE
+ fLogMessage->AddLine(Form("DrawDE: number of manus with serial number: %d", numberOfSerialManu));
fLogMessage->ShowBottom();
-
- if (numberOfSerialManu != 0) { // not available yet for all DE
- sprintf(log, "DrawDE: number of manus with serial number: %d", numberOfSerialManu);
- fLogMessage->AddLine(log);
- fLogMessage->ShowBottom();
- }
-
+ }
+
}
//__________________________________________________________
Bool_t AliMpDEVisu::ProcessMessage(Long_t msg, Long_t parm1, Long_t /*parm2*/)
{
-/// process message from widgets actions/entries
+ /// process message from widgets actions/entries
- switch(GET_MSG(msg))
- {
+ AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
+
+ switch(GET_MSG(msg))
+ {
case kC_COMMAND:
switch (GET_SUBMSG(msg))
{
- case kCM_COMBOBOX:
-
- switch (parm1)
- {
- case kChamberCombo:
- UpdateComboDE();
- UpdateNameView();
- break;
-
- case kDECombo:
- UpdateNameView();
- break;
- }
- break;
-
- case kCM_CHECKBUTTON:
- if (fPlaneButton->GetState() == kButtonDown) {
- fCurrentPlane = AliMp::kNonBendingPlane;
- if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() <= 1024)
- fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() + 1024);
- } else {
- fCurrentPlane = AliMp::kBendingPlane;
- if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() > 1024)
- fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() - 1024);
- }
- break;
-
+ case kCM_COMBOBOX:
+
+ switch (parm1)
+ {
+ case kChamberCombo:
+ UpdateComboDE();
+ UpdateNameView();
+ break;
+
+ case kDECombo:
+ UpdateNameView();
+ break;
+ }
+ break;
+
+ case kCM_CHECKBUTTON:
+ switch (parm1)
+ {
+ case kPlaneType:
+ if (fPlaneButton->GetState() == kButtonDown) {
+ fCurrentPlane = AliMp::kNonBendingPlane;
+ if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() <= 1024)
+ fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() + 1024);
+ } else {
+ fCurrentPlane = AliMp::kBendingPlane;
+ if (fNumberEntry->GetIntNumber() && fNumberEntry->GetIntNumber() > 1024)
+ fNumberEntry->SetNumber(fNumberEntry->GetIntNumber() - 1024);
+ }
+ DrawDE();
+ fSegmentation = AliMpSegmentation::Instance()
+ ->GetMpSegmentation(fCurrentDetElem, detElem->GetCathodType(fCurrentPlane));
+ break;
+
+ case kZoomMode:
+ if (fZoomButton->GetState() == kButtonDown)
+ fZoomMode = true;
+ else
+ fZoomMode = false;
+ break;
+ }
+ break;
+
}
break;
- }
- return true;
+ }
+ return true;
}
//__________________________________________________________
void AliMpDEVisu::NextDE()
{
-/// select next DE
-
- Int_t next = fDECombo->GetSelected() + 1;
-
- if (next < fDECombo->GetNumberOfEntries())
- fDECombo->Select(fDECombo->GetSelected() + 1);
- else
- fDECombo->Select(0);
-
- UpdateNameView();
+ /// select next DE
+
+ Int_t next = fDECombo->GetSelected() + 1;
+
+ if (next < fDECombo->GetNumberOfEntries())
+ fDECombo->Select(next);
+ else
+ fDECombo->Select(0);
+
+ UpdateNameView();
+ DrawDE();
}
//__________________________________________________________
void AliMpDEVisu::UpdateComboDE()
{
-/// update DE in respect to selected chamber
-
- fDECombo->RemoveAll();
-
- AliMpDEIterator it;
- Int_t i = 0;
- fDEComboIdx.Reset();
- Char_t text[20];
-
- for ( it.First(fChamberCombo->GetSelected()); ! it.IsDone(); it.Next() ) {
- sprintf(text,"%d",it.CurrentDE()->GetId());
- fDECombo->AddEntry(text,i);
- fDEComboIdx[i++] = it.CurrentDE()->GetId();
- }
- fDECombo->Select(0);
+ /// update DE in respect to selected chamber
+
+ fDECombo->RemoveAll();
+
+ AliMpDEIterator it;
+ Int_t i = 0;
+ fDEComboIdx.Reset();
+ Char_t text[20];
+
+ for ( it.First(fChamberCombo->GetSelected()); ! it.IsDone(); it.Next() ) {
+ sprintf(text,"%d",it.CurrentDE()->GetId());
+ fDECombo->AddEntry(text,i);
+ fDEComboIdx[i++] = it.CurrentDE()->GetId();
+ }
+ fDECombo->Select(0);
}
//__________________________________________________________
void AliMpDEVisu::UpdateNameView()
{
-/// update DE name in respect to selected DE id.
+ /// update DE name in respect to selected DE id.
+
+ fNameDEView->Clear();
+
+ fCurrentDetElem = fDEComboIdx[fDECombo->GetSelected()];
+ AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
+ fCurrentDEName = detElem->GetDEName();
+
+ fNameDEView->AddLine(fCurrentDEName.Data());
+ fNameDEView->ShowBottom();
- fNameDEView->Clear();
+ fSegmentation = AliMpSegmentation::Instance()
+ ->GetMpSegmentation(fCurrentDetElem, detElem->GetCathodType(fCurrentPlane));
+}
- fCurrentDetElem = fDEComboIdx[fDECombo->GetSelected()];
- AliMpDetElement* detElem = AliMpDEManager::GetDetElement(fCurrentDetElem);
- fCurrentDEName = detElem->GetDEName();
+//______________________________________________________________________________
+void
+AliMpDEVisu::CreatePopupWindow(Int_t w, Int_t h, const char* windowName,
+ AliMpVPainter* painter,
+ const char* option)
+{
+ // Create transient frame
+
+ TCanvas* c = new TCanvas(windowName,windowName,-200,100,w,h);
- fNameDEView->AddLine(fCurrentDEName.Data());
- fNameDEView->ShowBottom();
+ Int_t n = fTrashList.GetEntries();
+
+ c->Connect("Closed()","AliMpDEVisu",this,Form("ClosePopupWindow(=%d)",n));
+
+ fTrashList.AddLast(c);
+
+ c->Draw();
+
+ painter->Draw(option);
+
+ c->Update();
}
//__________________________________________________________
void AliMpDEVisu::PopUpManuMotif(AliMpSlat* slat)
{
-/// pop up manu window motif painter for slat
-
-// Create transient frame
- TGTransientFrame* trans = new TGTransientFrame(fkMainWindow, fMain, 400, 400);
-
- Char_t slot[255];
- sprintf(slot, "ClosedPopUpMotif(=%d)", fNumberOfPopUp++);
-
- trans->Connect("CloseWindow()", "AliMpDEVisu", this, slot);
-
-// fill trash
- fTrashList.Add(trans);
-
- Char_t title[255];
- sprintf(title,"Manu Motif: %d", (Int_t)fNumberEntry->GetIntNumber());
- trans->SetWindowName(title);
-
-// Create canvas widget
- TRootEmbeddedCanvas* eTransCanvas =
- new TRootEmbeddedCanvas("ETransCanvas", trans, 400, 400);
-
- trans->AddFrame(eTransCanvas, new TGLayoutHints(kLHintsCenterX,
- 5,5,5,5));
-
- trans->CenterOnParent();
- trans->Layout();
-
- TCanvas* canvas = eTransCanvas->GetCanvas();
- canvas->Clear();
-
-// motif painter
- AliMpMotifPosition* motifPosFound = 0x0;
- AliMpMotifPosition* motifPos = 0x0;
-
- for ( AliMpSlat::Size_t i = 0; i < slat->GetSize(); ++i ) {
+ /// pop up manu window motif painter for slat
+
+ // motif painter
+ AliMpMotifPosition* motifPosFound = 0x0;
+ AliMpMotifPosition* motifPos = 0x0;
+ Int_t manuId = 0;
+ for ( AliMpSlat::Size_t i = 0; i < slat->GetSize(); ++i ) {
+
AliMpPCB* pcb = slat->GetPCB(i);
- AliMpPCBPainter* pcbPainter = new AliMpPCBPainter(pcb);
-
+
for ( AliMpPCB::Size_t j = 0; j < slat->GetPCB(i)->GetSize(); ++j ) {
motifPos = pcb->GetMotifPosition(j);
- Int_t manuId = motifPos->GetID();
+ manuId = motifPos->GetID();
if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
- motifPosFound = motifPos;
- break;
+ motifPosFound = motifPos;
+ break;
}
}
if (motifPosFound)
- break;
- delete pcbPainter;
+ break;
}
-
- if(motifPosFound) {
-// maps
- trans->MapSubwindows();
- trans->MapWindow();
-// painter
- AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
- painter->Draw("ZT");
-// canvas
- canvas->Update();
- }
- TVector2 dimension(motifPos->Dimensions());
- Char_t log[255];
-
- sprintf(log, "PopupManuMotif: motif dimension: %5.2f, %5.2f", dimension.X()*2., dimension.Y()*2.);
- fLogMessage->AddLine(log);
+ if(motifPosFound)
+ {
+ InfoManuMotif(motifPosFound);
- sprintf(log, "PopupManuMotif: pad dimension: %4.2f, %4.2f",
- motifPos->GetMotif()->GetPadDimensions(0).X()*2.,
- motifPos->GetMotif()->GetPadDimensions(0).Y()*2. );
+ TVector2 dimension(motifPosFound->Dimensions());
- fLogMessage->AddLine(log);
-
- fLogMessage->ShowBottom();
+ Int_t h = 500;
+ Int_t w = Int_t(h*dimension.X()/dimension.Y());
+ AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
+
+ CreatePopupWindow(w,h,Form("Manu %d",fNumberEntry->GetIntNumber()),
+ painter,"ZT");
+ }
}
+
//__________________________________________________________
void AliMpDEVisu::PopUpManuMotif(AliMpSector* sector)
{
-/// pop up manu window motif painter for sector
-
-// Create transient frame
- TGTransientFrame* trans = new TGTransientFrame(fkMainWindow, fMain, 400, 400);
-
- Char_t slot[255];
- sprintf(slot, "ClosedPopUpMotif(=%d)", fNumberOfPopUp++);
+ /// pop up manu window motif painter for sector
+
+ // motif painter
+ AliMpMotifPosition* motifPosFound = 0x0;
+ AliMpMotifPosition* motifPos = 0x0;
+ Int_t manuId = 0;
- trans->Connect("CloseWindow()", "AliMpDEVisu", this, slot);
+ for (Int_t iRow = 0; iRow < sector->GetNofRows(); ++iRow) {
+
+ AliMpRow* row = sector->GetRow(iRow);
+
+ for (Int_t iRowSeg = 0; iRowSeg < sector->GetRow(iRow)->GetNofRowSegments(); ++iRowSeg){
+
+ for (Int_t iRowSeg = 0; iRowSeg < row->GetNofRowSegments(); ++iRowSeg) {
+ AliMpVRowSegment *rowSegment = row->GetRowSegment(iRowSeg);
+
+ for (Int_t iMotif = 0; iMotif < rowSegment->GetNofMotifs(); ++iMotif){
+
+ Int_t motifPositionId = rowSegment->GetMotifPositionId(iMotif);
+ motifPos = rowSegment->GetRow()
+ ->GetMotifMap()->FindMotifPosition(motifPositionId);
+
+ manuId = motifPos->GetID();
+ if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
+ motifPosFound = motifPos;
+ break;
+ }
+ }
+ if (motifPosFound)
+ break;
+ }
+ }
+ if (motifPosFound)
+ break;
+ }
+
+ if(motifPosFound)
+ {
-// fill trash
- fTrashList.Add(trans);
+ InfoManuMotif(motifPosFound);
- Char_t title[255];
- sprintf(title,"Manu Motif: %d", (Int_t)fNumberEntry->GetIntNumber());
- trans->SetWindowName(title);
+ TVector2 dimension(motifPosFound->Dimensions());
-// Create canvas widget
- TRootEmbeddedCanvas* eTransCanvas =
- new TRootEmbeddedCanvas("ETransCanvas", trans, 400, 400);
+ // Create transient frame
+ Int_t h = 400;
+ Int_t w = Int_t(h*dimension.X()/dimension.Y());
- trans->AddFrame(eTransCanvas, new TGLayoutHints(kLHintsCenterX,
- 5,5,5,5));
+ AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
+
+ CreatePopupWindow(w,h,Form("Manu %d",fNumberEntry->GetIntNumber()),
+ painter,"ZT");
+
+ }
+}
- trans->CenterOnParent();
- trans->Layout();
+//__________________________________________________________
+void AliMpDEVisu::InfoManuMotif(AliMpMotifPosition* motifPos)
+{
+/// info for popup manu motif
- TCanvas* canvas = eTransCanvas->GetCanvas();
- canvas->Clear();
+ // log message
+ Int_t manuId = fNumberEntry->GetIntNumber();
+ TVector2 dimension(motifPos->Dimensions());
+ fLogMessage->AddLine(Form("PopupManuMotif: motif dimension: %5.2f, %5.2f",
+ dimension.X()*2., dimension.Y()*2.));
+
+ fLogMessage->AddLine( Form("PopupManuMotif: pad dimension: %4.2f, %4.2f",
+ motifPos->GetMotif()->GetPadDimensions(0).X()*2.,
+ motifPos->GetMotif()->GetPadDimensions(0).Y()*2. ));
-// motif painter
- AliMpMotifPosition* motifPosFound = 0x0;
- AliMpMotifPosition* motifPos = 0x0;
+ fLogMessage->AddLine( Form("PopupManuMotif: manu: %d, serial number: %d, buspatch: %d",
+ manuId,
+ fDDLStore->GetDetElement(fCurrentDetElem)->GetManuSerialFromId(manuId),
+ fDDLStore->GetBusPatchId(fCurrentDetElem, manuId)) );
- for (Int_t iRow = 0; iRow < sector->GetNofRows(); ++iRow) {
+ fLogMessage->ShowBottom();
- AliMpRow* row = sector->GetRow(iRow);
- AliMpRowPainter* rowPainter = new AliMpRowPainter(row);
+}
- for (Int_t iRowSeg = 0; iRowSeg < sector->GetRow(iRow)->GetNofRowSegments(); ++iRowSeg){
+//______________________________________________________________________________
+void AliMpDEVisu::PopUpZoom(Int_t ix0, Int_t iy0, Int_t ix1, Int_t iy1)
+{
+ /// popup zoom window
- for (Int_t iRowSeg = 0; iRowSeg < row->GetNofRowSegments(); ++iRowSeg) {
- AliMpVRowSegment *rowSegment = row->GetRowSegment(iRowSeg);
+ Double_t x0,y0;
+ EventToReal(ix0,iy0,x0,y0);
+ Double_t x1,y1;
+ EventToReal(ix1,iy1,x1,y1);
- for (Int_t iMotif = 0; iMotif < rowSegment->GetNofMotifs(); ++iMotif){
+ fLogMessage->AddLine(Form("PopUpZoom: zoom positions (x0, y0: %6.2f, %6.2f), (x1, y1: %6.2f, %6.2f)",
+ x0, y0, x1, y1));
+ fLogMessage->ShowBottom();
+
+ // Create transient frame
+ Int_t h = 500;//TMath::Abs(x1-x0);
+ Int_t w = 500;//TMath::Abs(y1-y0);
- Int_t motifPositionId = rowSegment->GetMotifPositionId(iMotif);
- motifPos = rowSegment->GetRow()
- ->GetMotifMap()->FindMotifPosition(motifPositionId);
-
- Int_t manuId = motifPos->GetID();
- if (manuId == (Int_t)fNumberEntry->GetIntNumber()) {
- motifPosFound = motifPos;
- break;
- }
- }
- if (motifPosFound)
- break;
- }
- }
- if (motifPosFound)
- break;
- delete rowPainter;
+ AliMpArea area(TVector2((x0+x1)/2.0,(y0+y1)/2.0),
+ TVector2(TMath::Abs(x1-x0)/2.0,TMath::Abs(y1-y0)/2.0));
+// area.Print();
+
+ if ( area.IsValid() )
+ {
+ AliMpVPadIterator* iterator = fSegmentation->CreateIterator(area);
+ if (iterator)
+ {
+ AliMpVPainter* painter = AliMpVPainter::CreatePainter(iterator);
+ CreatePopupWindow(w,h,"Zoom",painter,"");
}
-
- if(motifPosFound) {
-// map
- trans->MapSubwindows();
- trans->MapWindow();
-// painter
- AliMpVPainter* painter = AliMpVPainter::CreatePainter(motifPosFound);
- painter->Draw("ZT");
-// canvas
- canvas->Update();
+ else
+ {
+ AliError("could not get iterator for that area");
}
-
- TVector2 dimension(motifPos->Dimensions());
-
- Char_t log[255];
-
- sprintf(log, "PopupManuMotif: motif dimension: %5.2f, %5.2f", dimension.X()*2., dimension.Y()*2.);
- fLogMessage->AddLine(log);
-
- sprintf(log, "PopupManuMotif: pad dimension: %4.2f, %4.2f",
- motifPos->GetMotif()->GetPadDimensions(0).X()*2.,
- motifPos->GetMotif()->GetPadDimensions(0).Y()*2. );
-
- fLogMessage->AddLine(log);
-
- fLogMessage->ShowBottom();
-
+
+ delete iterator;
+ }
}
//__________________________________________________________
-void AliMpDEVisu::ClosedPopUpMotif(Int_t id)
+void AliMpDEVisu::ClosePopupWindow(Int_t id)
{
-/// close signal
-
- TGTransientFrame* trans = (TGTransientFrame*)fTrashList.At(id);
- fTrashList.Remove(trans);
+ /// close signal
+ fEcanvas->GetCanvas()->cd();
+ fTrashList.RemoveAt(id);
}