]>
Commit | Line | Data |
---|---|---|
3617b752 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
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 | **************************************************************************/ | |
15 | ||
16 | // $Id$ | |
17 | ||
18 | #include "AliMpIteratorPainter.h" | |
19 | ||
20 | #include "AliMpVPadIterator.h" | |
21 | #include "AliMpPad.h" | |
22 | #include "AliMpGraphContext.h" | |
23 | ||
24 | #include "AliLog.h" | |
25 | ||
26 | #include "TObjArray.h" | |
27 | #include "TVirtualX.h" | |
28 | #include "TVirtualPad.h" | |
29 | #include "TVector2.h" | |
30 | #include "TMath.h" | |
31 | ||
3d1463c8 | 32 | //----------------------------------------------------------------------------- |
3617b752 | 33 | /// \class AliMpIteratorPainter |
34 | /// | |
35 | /// A painter for a group of pads, which is defined by an iterator | |
36 | /// | |
37 | /// | |
38 | /// \author L. Aphecetche | |
3d1463c8 | 39 | //----------------------------------------------------------------------------- |
3617b752 | 40 | |
41 | /// \cond CLASSIMP | |
42 | ClassImp(AliMpIteratorPainter) | |
43 | /// \endcond | |
44 | ||
45 | //_____________________________________________________________________________ | |
46 | AliMpIteratorPainter::AliMpIteratorPainter(AliMpVPadIterator *it) | |
47 | : AliMpVPainter(), fPads(new TObjArray), fPosition(), fDimensions() | |
48 | { | |
49 | /// Ctor. Iterator must not be null. | |
50 | ||
51 | //if (!it) throw; | |
52 | if (!it) { | |
76e1274b | 53 | AliFatal("Iterator must not be null."); |
54 | return; | |
3617b752 | 55 | } |
56 | ||
57 | Double_t xmin(1E9), xmax(-1E9); | |
58 | Double_t ymin(1E9), ymax(-1E9); | |
59 | ||
60 | fPads->SetOwner(kTRUE); | |
61 | it->First(); | |
62 | while ( !it->IsDone() ) | |
63 | { | |
64 | AliMpPad pad = it->CurrentItem(); | |
65 | fPads->AddLast(new AliMpPad(pad)); | |
6e97fbb8 | 66 | TVector2 lowerLeft(TVector2(pad.GetPositionX(),pad.GetPositionY())- |
67 | TVector2(pad.GetDimensionX(),pad.GetDimensionY())); | |
68 | TVector2 upperRight(TVector2(pad.GetPositionX(),pad.GetPositionY())+ | |
69 | TVector2(pad.GetDimensionX(),pad.GetDimensionY())); | |
3617b752 | 70 | xmin = TMath::Min(lowerLeft.X(),xmin); |
71 | ymin = TMath::Min(lowerLeft.Y(),ymin); | |
72 | xmax = TMath::Max(upperRight.X(),xmax); | |
73 | ymax = TMath::Max(upperRight.Y(),ymax); | |
74 | it->Next(); | |
75 | } | |
76 | fPosition = TVector2((xmin+xmax)/2.0,(ymin+ymax)/2.0); | |
77 | fDimensions = TVector2((xmax-xmin)/2.0,(ymax-ymin)/2.0); | |
78 | } | |
79 | ||
80 | //_____________________________________________________________________________ | |
81 | AliMpIteratorPainter::~AliMpIteratorPainter() | |
82 | { | |
83 | /// dtor | |
84 | delete fPads; | |
85 | } | |
86 | ||
87 | //_____________________________________________________________________________ | |
88 | void | |
89 | AliMpIteratorPainter::Draw(Option_t* option) | |
90 | { | |
91 | /// Append ourselves to the current graphic pad | |
92 | AliMpGraphContext *gr = AliMpGraphContext::Instance(); | |
93 | gr->Push(); | |
94 | InitGraphContext(); | |
95 | gr->SetPadPosForReal(GetPosition(),GetDimensions()); | |
96 | AppendPad(option); | |
97 | gr->Pop(); | |
98 | } | |
99 | ||
100 | //_____________________________________________________________________________ | |
101 | void | |
102 | AliMpIteratorPainter::Paint(Option_t*) | |
103 | { | |
104 | /// Actual drawing method | |
105 | ||
106 | AliMpGraphContext* gr = AliMpGraphContext::Instance(); | |
107 | gr->Push(); | |
108 | InitGraphContext(); | |
109 | gPad->Range(0.,0.,1.,1.); | |
110 | ||
111 | TIter next(fPads); | |
112 | AliMpPad* pad; | |
113 | ||
114 | while ( ( pad = static_cast<AliMpPad*>(next()) ) ) | |
115 | { | |
116 | TVector2 padPadPos; | |
117 | TVector2 padPadDim; | |
118 | ||
6e97fbb8 | 119 | gr->RealToPad(TVector2(pad->GetPositionX(), |
120 | pad->GetPositionY()), | |
121 | TVector2(pad->GetDimensionX(), | |
122 | pad->GetDimensionY()), | |
123 | padPadPos, padPadDim); | |
3617b752 | 124 | |
125 | TVector2 bl = padPadPos - padPadDim; | |
126 | TVector2 ur = padPadPos + padPadDim; | |
127 | ||
168e9c4d | 128 | Int_t manuId = pad->GetManuId(); |
3617b752 | 129 | |
130 | Style_t sty = gVirtualX->GetFillStyle(); | |
131 | ||
132 | gVirtualX->SetFillStyle(1); | |
133 | if (manuId % 5 == 0) | |
134 | gVirtualX->SetFillColor(0); | |
135 | if (manuId % 5 == 1) | |
136 | gVirtualX->SetFillColor(38); | |
137 | if (manuId % 5 == 2) | |
138 | gVirtualX->SetFillColor(33); | |
139 | if (manuId % 5 == 3) | |
140 | gVirtualX->SetFillColor(16); | |
141 | if (manuId % 5 == 4) | |
142 | gVirtualX->SetFillColor(44); | |
143 | ||
144 | gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y()); | |
145 | gVirtualX->SetFillStyle(0); | |
146 | gPad->PaintBox(bl.X(),bl.Y(),ur.X(),ur.Y()); | |
147 | gVirtualX->SetFillStyle(sty); | |
148 | ||
149 | Float_t textSize = gVirtualX->GetTextSize(); | |
150 | gVirtualX->SetTextSize(10); | |
151 | gVirtualX->SetTextAlign(22); | |
152 | gPad->PaintText((bl.X()+ur.X())/2.0,(bl.Y()+ur.Y())/2.0, | |
168e9c4d | 153 | Form("%d",pad->GetManuChannel())); |
3617b752 | 154 | |
155 | gVirtualX->SetTextSize(textSize); | |
156 | ||
157 | } | |
158 | } | |
159 | ||
160 |