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 **************************************************************************/
17 // $MpId: AliMpMotifPainter.cxx,v 1.9 2006/05/24 13:58:32 ivana Exp $
20 // Class AliMpMotifPainter
21 // -----------------------
22 // Class for drawing a motif into canvas
23 // Included in AliRoot: 2003/05/02
24 // Authors: David Guez, IPN Orsay
26 #include "AliMpMotifPainter.h"
27 #include "AliMpGraphContext.h"
28 #include "AliMpMotifPosition.h"
29 #include "AliMpMotifType.h"
30 #include "AliMpMotif.h"
31 #include "AliMpConnection.h"
32 #include "AliMpIntPair.h"
35 #include <TVirtualX.h>
39 ClassImp(AliMpMotifPainter)
42 //_______________________________________________________________________
43 AliMpMotifPainter::AliMpMotifPainter()
47 /// Default constructor
50 //_______________________________________________________________________
51 AliMpMotifPainter::AliMpMotifPainter(AliMpMotifPosition *motifPos)
55 /// Standard constructor
56 AliDebug(1,"Default ctor");
59 //_______________________________________________________________________
60 AliMpMotifPainter::AliMpMotifPainter(AliMpMotifType* motifType)
64 /// Constructor from a motif Type. We hereby create a MotifPosition
65 /// object from it, using arbitrary pad sizes, as this is just a way
66 /// to visualize the *shape* of the motif.
68 AliDebug(1,"Ctor from motifType");
70 const Double_t kdx = 5;
71 const Double_t kdy = 5; // cm but arbitrary anyway
73 AliMpVMotif* motif = new AliMpMotif(motifType->GetID(),
77 fMotifPos = new AliMpMotifPosition(-1,motif,motif->Dimensions());
80 //_______________________________________________________________________
81 AliMpMotifPainter::~AliMpMotifPainter()
83 /// Default constructor
86 //_______________________________________________________________________
87 void AliMpMotifPainter::DumpObject()
89 /// Dump the owned object
94 //_______________________________________________________________________
95 TVector2 AliMpMotifPainter::GetPosition() const
97 /// Get the owned object's position
99 return fMotifPos->Position();
102 //_______________________________________________________________________
103 TVector2 AliMpMotifPainter::GetDimensions() const
105 /// Get the owned object's dimensions
107 return fMotifPos->Dimensions();
110 //_______________________________________________________________________
111 void AliMpMotifPainter::Paint(Option_t *option)
115 AliMpGraphContext *gr = AliMpGraphContext::Instance();
116 if (!fMotifPos) return;
117 Int_t col=gVirtualX->GetFillColor();
119 gPad->Range(0.,0.,1.,1.);
128 Float_t textSize = gVirtualX->GetTextSize();
129 gVirtualX->SetTextSize(10);
133 str = Form("%d",fMotifPos->GetID());
138 str = Form("(%d,%d)",fMotifPos->GetHighIndicesLimit().GetFirst(),
139 fMotifPos->GetHighIndicesLimit().GetSecond());
142 str = Form("(%d,%d)",fMotifPos->GetLowIndicesLimit().GetFirst(),
143 fMotifPos->GetLowIndicesLimit().GetSecond());
148 str = Form("(%f,%f)",(GetPosition()-GetDimensions()).X(),
149 (GetPosition()-GetDimensions()).Y());
152 gPad->PaintText(GetPadPosition().X()-0.01,GetPadPosition().Y()-0.01,str);
154 gVirtualX->SetTextSize(textSize);
159 //PaintWholeBox(kFALSE);
160 AliMpMotifType *motifType = fMotifPos->GetMotif()->GetMotifType();
161 StdoutToAliDebug(1,motifType->Print("G"););
162 for (Int_t j=motifType->GetNofPadsY()-1;j>=0;j--){
163 for (Int_t i=0;i<motifType->GetNofPadsX();i++){
164 AliMpIntPair indices(i,j);
165 AliMpConnection* connect =
166 motifType->FindConnectionByLocalIndices(indices);
168 TVector2 realPadPos =
169 GetPosition()+fMotifPos->GetMotif()->PadPositionLocal(indices);
170 TVector2 padPadPos,padPadDim;
171 gr->RealToPad(realPadPos,
172 fMotifPos->GetMotif()->GetPadDimensions(indices),
173 padPadPos,padPadDim);
174 TVector2 bl = padPadPos - padPadDim;
175 TVector2 ur = padPadPos + padPadDim;
178 Style_t sty = gVirtualX->GetFillStyle();
179 gVirtualX->SetFillStyle(1);
180 gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y());
181 gVirtualX->SetFillStyle(0);
182 gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y());
183 gVirtualX->SetFillStyle(sty);
185 Float_t textSize = gVirtualX->GetTextSize();
186 gVirtualX->SetTextSize(10);
187 gVirtualX->SetTextAlign(22);
188 // gPad->PaintText(padPadPos.X()-0.01,padPadPos.Y()-0.01,
189 gPad->PaintText((bl.X()+ur.X())/2.0,(bl.Y()+ur.Y())/2.0,
190 Form("%d",connect->GetGassiNum()));
192 gVirtualX->SetTextSize(textSize);
203 // drawing real motif (not envelop) the real contour
207 TVector2 bl0 = TVector2(999, 999);
208 TVector2 ur0 = TVector2(0,0);
209 TVector2 padPadPos,padPadDim;
211 AliMpMotifType *motifType = fMotifPos->GetMotif()->GetMotifType();
212 manuId = fMotifPos->GetID();
215 gVirtualX->SetFillColor(0);
217 gVirtualX->SetFillColor(38);
219 gVirtualX->SetFillColor(33);
221 gVirtualX->SetFillColor(16);
223 gVirtualX->SetFillColor(44);
225 for (Int_t i = 0; i < motifType->GetNofPadsX(); i++){
227 for (Int_t j = 0; j < motifType->GetNofPadsY(); j++){
229 AliMpIntPair indices = AliMpIntPair(i,j);
230 AliMpConnection* connect = motifType->FindConnectionByLocalIndices(indices);
232 TVector2 realPadPos =
233 GetPosition()+fMotifPos->GetMotif()->PadPositionLocal(indices);
234 gr->RealToPad(realPadPos, fMotifPos->GetMotif()->GetPadDimensions(indices),
235 padPadPos, padPadDim);
237 TVector2 bl = padPadPos - padPadDim;
238 TVector2 ur = padPadPos + padPadDim;
239 if (bl0.X() > bl.X())
242 if (ur0.Y() < ur.Y())
245 Style_t sty = gVirtualX->GetFillStyle();
246 gVirtualX->SetFillStyle(1);
247 gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y());
248 gVirtualX->SetFillStyle(0);
250 if (!motifType->FindConnectionByLocalIndices(AliMpIntPair(i,j-1)))
251 gPad->PaintLine(bl.X(), bl.Y(), bl.X()+ padPadDim.X()*2, bl.Y());
253 if (!motifType->FindConnectionByLocalIndices(AliMpIntPair(i,j+1)))
254 gPad->PaintLine(bl.X(), bl.Y() + padPadDim.Y()*2, bl.X()+ padPadDim.X()*2, bl.Y() + padPadDim.Y()*2);
256 if (!motifType->FindConnectionByLocalIndices(AliMpIntPair(i-1,j)))
257 gPad->PaintLine(bl.X(), bl.Y(), bl.X(), bl.Y()+ padPadDim.Y()*2);
259 gVirtualX->SetFillStyle(sty);
266 // add manudId indexes
268 xl = bl0.X()+ padPadDim.X()/2.;
270 yl = bl0.Y() + 1.5*padPadDim.Y();
272 Float_t textSize = gVirtualX->GetTextSize();
273 gVirtualX->SetTextSize(12);
274 gVirtualX->SetTextAlign(13);
275 gVirtualX->SetTextAngle(90.);
277 gPad->PaintText(xl, yl, Form("%d", manuId));
279 gVirtualX->SetTextAngle(0.);
280 gVirtualX->SetTextSize(textSize);
287 PaintWholeBox(kFALSE);
290 gVirtualX->SetFillColor(col);