AliRoot Core  a565103 (a565103)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliMUONPainterGroup.cxx
Go to the documentation of this file.
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 
32 
33 using std::cout;
34 using std::endl;
38 
39 //_____________________________________________________________________________
41 : TObject(),
42 fType(""),
43 fIsResponder(kFALSE),
44 fIsVisible(kTRUE),
45 fData(0x0),
46 fDataIndex(-1),
47 fDataMin(FLT_MAX),
48 fDataMax(-FLT_MAX),
49 fPainters(0x0),
50 fDepth(-1),
51 fIsOutlined(kTRUE)
52 {
54 }
55 
56 //_____________________________________________________________________________
57 AliMUONPainterGroup::AliMUONPainterGroup(const char* type, Int_t depth)
58 : TObject(),
59  fType(type),
60  fIsResponder(kFALSE),
61  fIsVisible(kTRUE),
62  fData(0x0),
63  fDataIndex(-1),
64  fDataMin(FLT_MAX),
65  fDataMax(-FLT_MAX),
66  fPainters(0x0),
67  fDepth(depth),
68  fIsOutlined(kTRUE)
69 {
71  if ( fType == "" || fDepth < 0 )
72  {
73  AliFatal("Sorry guy.");
74  }
75 }
76 
77 //_____________________________________________________________________________
79 {
81  delete fPainters;
82 }
83 
84 //_____________________________________________________________________________
85 Bool_t
87 {
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 //_____________________________________________________________________________
117 Int_t
118 AliMUONPainterGroup::Compare(const TObject* obj) const
119 {
121 
122  const AliMUONPainterGroup* group = static_cast<const AliMUONPainterGroup*>(obj);
123  return fType.CompareTo(group->Type());
124 }
125 
126 //_____________________________________________________________________________
127 void
128 AliMUONPainterGroup::ComputeDataRange(Double_t& dataMin, Double_t& dataMax)
129 {
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 //_____________________________________________________________________________
149 void
151 {
153  TIter next(fPainters);
154  TObject* o;
155  while ( ( o = next() ) )
156  {
157  o->Draw(opt);
158  }
159 }
160 
161 //_____________________________________________________________________________
164 {
166  if ( fPainters )
167  {
168  return static_cast<AliMUONVPainter*>(fPainters->First());
169  }
170  return 0x0;
171 }
172 
173 //_____________________________________________________________________________
174 Int_t
176 {
178  if ( fPainters )
179  {
180  return static_cast<AliMUONVPainter*>(fPainters->First())->GetLineColor();
181  }
182  return 1;
183 }
184 
185 //_____________________________________________________________________________
186 Int_t
188 {
190  if ( fPainters )
191  {
192  return static_cast<AliMUONVPainter*>(fPainters->First())->GetLineWidth();
193  }
194  return 1;
195 }
196 
197 //_____________________________________________________________________________
198 Bool_t
199 AliMUONPainterGroup::Matches(const char* pattern) const
200 {
202  TString spattern(pattern);
203 
204  if ( spattern == "*" || fType.Contains(pattern) )
205  {
206  return kTRUE;
207  }
208  return kFALSE;
209 }
210 
211 //_____________________________________________________________________________
212 void
213 AliMUONPainterGroup::Print(Option_t* opt) const
214 {
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 //_____________________________________________________________________________
253 void
255 {
257  fData = data;
258  fDataIndex = dataIndex;
259  fDataMax = -FLT_MAX;
260  fDataMin = FLT_MAX;
261 }
262 
263 //_____________________________________________________________________________
264 void
265 AliMUONPainterGroup::SetLine(Int_t lineColor, Int_t lineWidth)
266 {
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 
Int_t fDepth
depth in the hierarchy of painters
Bool_t IsResponder() const
Whether we are the responder group.
#define TObjArray
Bool_t Matches(const char *pattern) const
Int_t Depth() const
virtual void ComputeDataRange(const AliMUONVTrackerData &data, Int_t dataIndex, Double_t &dataMin, Double_t &dataMax) const
Double_t fDataMax
max data
virtual void Print(Option_t *opt="") const
virtual TString DimensionName(Int_t dim) const =0
Get the name of a given (internal) dimension.
AliMUONVPainter * First() const
TObjArray * fPainters
painters of this group
ClassImp(TPCGenInfo)
Definition: AliTPCCmpNG.C:254
const char * Type() const
Our type.
void SetData(AliMUONVTrackerData *data, Int_t dataIndex)
Base class for a graphical object representing some part of the MUON tracking system.
Bool_t IsPlotter() const
Whether we are the plotting group.
Bool_t Add(AliMUONVPainter *painter)
void SetLine(Int_t lineColor, Int_t lineWidth)
Bool_t IsVisible() const
Whether we are visible.
void ComputeDataRange(Double_t &dataMin, Double_t &dataMax)
void SetLineWidth(Int_t lineWidth)
Set our line width.
Bool_t IsOutlined() const
Whether we should outline ourselves.
Int_t fDataIndex
the index of the data to plot (can be -1 if data=0x0)
AliMUONVTrackerData * fData
the data we plot (can be 0x0)
const char * Type() const
Return our type (e.g. PCB, Chamber, DE, MANU, etc...)
void SetLineColor(Int_t lineColor)
Set our line color.
Double_t DataMin() const
Min data we are plotting.
const char * Name() const
Get our name.
TString fType
type of this group (e.g. PADS, MANU, PCB, etc...)
Int_t Compare(const TObject *obj) const
A group of AliMUONVPainter.
void Draw(Option_t *opt="")
Double_t fDataMin
min data
Base class for MUON data that can be presented at different levels in the hierarchy of the MUON syste...
Double_t DataMax() const
Max data we are plotting.
void Print(Option_t *opt="") const
void SetMotherGroup(AliMUONPainterGroup *group)
Set our mother group.