]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONPainterGroup.cxx
Changed default OCDB from 2009 to 2010
[u/mrichter/AliRoot.git] / MUON / AliMUONPainterGroup.cxx
CommitLineData
0145e89a 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 "AliMUONPainterGroup.h"
19
20#include "AliMUONVPainter.h"
21#include "AliMUONVTrackerData.h"
22#include "AliLog.h"
23#include <Riostream.h>
24#include <TObjArray.h>
25#include <float.h>
26
27///\class AliMUONPainterGroup
28///
29/// A group of AliMUONVPainter
30///
31///\author Laurent Aphecetche, Subatech
32
33///\cond CLASSIMP
34ClassImp(AliMUONPainterGroup)
35///\endcond
36
37//_____________________________________________________________________________
38AliMUONPainterGroup::AliMUONPainterGroup()
39: TObject(),
40fType(""),
41fIsResponder(kFALSE),
42fIsVisible(kTRUE),
43fData(0x0),
44fDataIndex(-1),
45fDataMin(FLT_MAX),
46fDataMax(-FLT_MAX),
47fPainters(0x0),
48fDepth(-1),
49fIsOutlined(kTRUE)
50{
51 /// ctor
52}
53
54//_____________________________________________________________________________
55AliMUONPainterGroup::AliMUONPainterGroup(const char* type, Int_t depth)
56: TObject(),
57 fType(type),
58 fIsResponder(kFALSE),
59 fIsVisible(kTRUE),
60 fData(0x0),
61 fDataIndex(-1),
62 fDataMin(FLT_MAX),
63 fDataMax(-FLT_MAX),
64 fPainters(0x0),
65 fDepth(depth),
66 fIsOutlined(kTRUE)
67{
68 /// ctor
69 if ( fType == "" || fDepth < 0 )
70 {
71 AliError("Sorry guy.");
72 TObject* o(0x0);
73 o->ls(); // to provoque a crash to be able to reach gdb...
74 }
75}
76
77//_____________________________________________________________________________
78AliMUONPainterGroup::~AliMUONPainterGroup()
79{
80 /// dtor
81 delete fPainters;
82}
83
84//_____________________________________________________________________________
85Bool_t
86AliMUONPainterGroup::Add(AliMUONVPainter* painter)
87{
88 /// Add a painter to this group (must be of the correct type)
89
90 if ( fType != painter->Type() )
91 {
92 AliError(Form("Cannot add painter of type %s to this = %s",
93 painter->Type(), fType.Data()));
94 return kFALSE;
95 }
96
97 if ( fDepth != painter->Depth() )
98 {
99 AliError(Form("Cannot add painter of depth %d to this = %d",
100 painter->Depth(), fDepth));
101 return kFALSE;
102 }
103
104 if (!fPainters)
105 {
106 fPainters = new TObjArray;
107 }
108
109 painter->SetMotherGroup(this);
110
111 fPainters->Add(painter);
112
113 return kTRUE;
114}
115
116//_____________________________________________________________________________
117Int_t
118AliMUONPainterGroup::Compare(const TObject* obj) const
119{
120 /// Compare with another group (based on type)
121
122 const AliMUONPainterGroup* group = static_cast<const AliMUONPainterGroup*>(obj);
123 return fType.CompareTo(group->Type());
124}
125
126//_____________________________________________________________________________
127void
128AliMUONPainterGroup::ComputeDataRange(Double_t& dataMin, Double_t& dataMax)
129{
130 /// Compute the data range spanned by this group
131 dataMin = FLT_MAX;
132 dataMax = -FLT_MAX;
133
134 if ( !fData || fDataIndex < 0 ) return;
135
136 TIter next(fPainters);
137 AliMUONVPainter* p;
138
139 while ( ( p = static_cast<AliMUONVPainter*>(next()) ) )
140 {
141 Double_t min, max;
142 p->ComputeDataRange(*fData,fDataIndex,min,max);
143 dataMin = TMath::Min(min,dataMin);
144 dataMax = TMath::Max(max,dataMax);
145 }
146}
147
148//_____________________________________________________________________________
149void
150AliMUONPainterGroup::Draw(Option_t* opt)
151{
152 /// Draw our painters
153 TIter next(fPainters);
154 TObject* o;
155 while ( ( o = next() ) )
156 {
157 o->Draw(opt);
158 }
159}
160
161//_____________________________________________________________________________
162AliMUONVPainter*
163AliMUONPainterGroup::First() const
164{
165 /// Get the first painter in group
166 if ( fPainters )
167 {
168 return static_cast<AliMUONVPainter*>(fPainters->First());
169 }
170 return 0x0;
171}
172
173//_____________________________________________________________________________
174Int_t
175AliMUONPainterGroup::GetLineColor() const
176{
177 /// Get line color of this group's painters
178 if ( fPainters )
179 {
180 return static_cast<AliMUONVPainter*>(fPainters->First())->GetLineColor();
181 }
182 return 1;
183}
184
185//_____________________________________________________________________________
186Int_t
187AliMUONPainterGroup::GetLineWidth() const
188{
189 /// Get line width of this group's painters
190 if ( fPainters )
191 {
192 return static_cast<AliMUONVPainter*>(fPainters->First())->GetLineWidth();
193 }
194 return 1;
195}
196
197//_____________________________________________________________________________
198Bool_t
199AliMUONPainterGroup::Matches(const char* pattern) const
200{
201 /// Whether our type matches "pattern"
202 TString spattern(pattern);
203
204 if ( spattern == "*" || fType.Contains(pattern) )
205 {
206 return kTRUE;
207 }
208 return kFALSE;
209}
210
211//_____________________________________________________________________________
212void
213AliMUONPainterGroup::Print(Option_t* opt) const
214{
215 /// Printout
216 cout << "Type " << fType.Data() << " Depth " << fDepth;
217 if ( IsResponder() ) cout << " is responder ";
218 if ( IsVisible() ) cout << " is visible ";
219 if ( IsPlotter() )
220 {
221 cout << Form(" is plotter for data %p %s dimension %d %s plot range = %e, %e",
222 fData,(fData ? fData->Name() : ""),
223 fDataIndex,( (fData && fDataIndex>=0 ) ?
224 fData->DimensionName(fDataIndex).Data() : ""),
225 DataMin(),DataMax());
226 }
227 if ( IsOutlined() )
228 {
229 cout << " is outlined";
230 }
231 if ( fPainters )
232 {
233 cout << " contains " << fPainters->GetLast()+1 << " painters";
234 }
235
236 cout << endl;
237
238 TString sopt(opt);
239 sopt.ToUpper();
240 if ( sopt == "FULL" )
241 {
242 TIter next(fPainters);
243 AliMUONVPainter* painter;
244 while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
245 {
246 cout << " ";
247 painter->Print();
248 }
249 }
250}
251
252//_____________________________________________________________________________
253void
254AliMUONPainterGroup::SetData(AliMUONVTrackerData* data, Int_t dataIndex)
255{
256 /// Set the data to be plotted
257 fData = data;
258 fDataIndex = dataIndex;
259 fDataMax = -FLT_MAX;
260 fDataMin = FLT_MAX;
261}
262
263//_____________________________________________________________________________
264void
265AliMUONPainterGroup::SetLine(Int_t lineColor, Int_t lineWidth)
266{
267 /// Set our outline attributes
268 TIter next(fPainters);
269 AliMUONVPainter* painter;
270 while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
271 {
272 painter->SetLineColor(lineColor);
273 painter->SetLineWidth(lineWidth);
274 }
275}
276