ROOT logo
/**************************************************************************
* 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$

#include "AliMUONPainterGroup.h"

#include "AliMUONVPainter.h"
#include "AliMUONVTrackerData.h"
#include "AliLog.h"
#include <Riostream.h>
#include <TObjArray.h>
#include <float.h>

///\class AliMUONPainterGroup
///
/// A group of AliMUONVPainter
///
///\author Laurent Aphecetche, Subatech

using std::cout;
using std::endl;
///\cond CLASSIMP
ClassImp(AliMUONPainterGroup)
///\endcond

//_____________________________________________________________________________
AliMUONPainterGroup::AliMUONPainterGroup()
: TObject(),
fType(""),
fIsResponder(kFALSE),
fIsVisible(kTRUE),
fData(0x0),
fDataIndex(-1),
fDataMin(FLT_MAX),
fDataMax(-FLT_MAX),
fPainters(0x0),
fDepth(-1),
fIsOutlined(kTRUE)
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONPainterGroup::AliMUONPainterGroup(const char* type, Int_t depth)
: TObject(),
 fType(type),
 fIsResponder(kFALSE),
 fIsVisible(kTRUE),
 fData(0x0),
 fDataIndex(-1),
 fDataMin(FLT_MAX),
 fDataMax(-FLT_MAX),
 fPainters(0x0),
 fDepth(depth),
 fIsOutlined(kTRUE)
{
   /// ctor
   if ( fType == "" || fDepth < 0 ) 
   {
     AliFatal("Sorry guy.");
   }
}

//_____________________________________________________________________________
AliMUONPainterGroup::~AliMUONPainterGroup()
{
  /// dtor
  delete fPainters;
}

//_____________________________________________________________________________
Bool_t
AliMUONPainterGroup::Add(AliMUONVPainter* painter)
{
  /// Add a painter to this group (must be of the correct type)
  
   if ( fType != painter->Type() ) 
   {
     AliError(Form("Cannot add painter of type %s to this = %s",
                   painter->Type(), fType.Data()));
     return kFALSE;
   }
  
  if ( fDepth != painter->Depth() )
  {
    AliError(Form("Cannot add painter of depth %d to this = %d",
                  painter->Depth(), fDepth));
    return kFALSE;
  }
  
  if (!fPainters)
  {
    fPainters = new TObjArray;
  }
  
  painter->SetMotherGroup(this);
  
  fPainters->Add(painter);

  return kTRUE;
}

//_____________________________________________________________________________
Int_t 
AliMUONPainterGroup::Compare(const TObject* obj) const
{
  /// Compare with another group (based on type)
  
  const AliMUONPainterGroup* group = static_cast<const AliMUONPainterGroup*>(obj);
  return fType.CompareTo(group->Type());
}

//_____________________________________________________________________________
void
AliMUONPainterGroup::ComputeDataRange(Double_t& dataMin, Double_t& dataMax)
{
  /// Compute the data range spanned by this group
  dataMin = FLT_MAX;
  dataMax = -FLT_MAX;
  
  if ( !fData || fDataIndex < 0 ) return;

  TIter next(fPainters);
  AliMUONVPainter* p;
  
  while ( ( p = static_cast<AliMUONVPainter*>(next()) ) )
  {
    Double_t min, max;
    p->ComputeDataRange(*fData,fDataIndex,min,max);
    dataMin = TMath::Min(min,dataMin);
    dataMax = TMath::Max(max,dataMax);
  }
}

//_____________________________________________________________________________
void
AliMUONPainterGroup::Draw(Option_t* opt)
{
  /// Draw our painters
  TIter next(fPainters);
  TObject* o;
  while ( ( o = next() ) )
  {
    o->Draw(opt);
  }
}  

//_____________________________________________________________________________
AliMUONVPainter* 
AliMUONPainterGroup::First() const
{
  /// Get the first painter in group
  if ( fPainters ) 
  {
    return static_cast<AliMUONVPainter*>(fPainters->First());
  }
  return 0x0;
}

//_____________________________________________________________________________
Int_t
AliMUONPainterGroup::GetLineColor() const
{
  /// Get line color of this group's painters
  if ( fPainters ) 
  {
    return static_cast<AliMUONVPainter*>(fPainters->First())->GetLineColor();
  }
  return 1;
}

//_____________________________________________________________________________
Int_t
AliMUONPainterGroup::GetLineWidth() const
{
  /// Get line width of this group's painters
  if ( fPainters ) 
  {
    return static_cast<AliMUONVPainter*>(fPainters->First())->GetLineWidth();
  }
  return 1;
}

//_____________________________________________________________________________
Bool_t
AliMUONPainterGroup::Matches(const char* pattern) const
{
  /// Whether our type matches "pattern"
  TString spattern(pattern);
  
  if ( spattern == "*" || fType.Contains(pattern) )
  {
    return kTRUE;
  }
  return kFALSE;
}

//_____________________________________________________________________________
void
AliMUONPainterGroup::Print(Option_t* opt) const
{
  /// Printout
  cout << "Type " << fType.Data() << " Depth " << fDepth;
  if ( IsResponder() ) cout << " is responder ";
  if ( IsVisible() ) cout << " is visible ";
  if ( IsPlotter() ) 
  {
    cout << Form(" is plotter for data %p %s dimension %d %s plot range = %e, %e",
                 fData,(fData ? fData->Name() : ""),
                 fDataIndex,( (fData && fDataIndex>=0 ) ? 
                              fData->DimensionName(fDataIndex).Data() : ""),
                 DataMin(),DataMax());
  }
  if ( IsOutlined() ) 
  {
    cout << " is outlined";
  }
  if ( fPainters ) 
  {
    cout << " contains " << fPainters->GetLast()+1 << " painters";
  }
  
  cout << endl;
  
  TString sopt(opt);
  sopt.ToUpper();
  if ( sopt == "FULL" ) 
  {
    TIter next(fPainters);
    AliMUONVPainter* painter;
    while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
    {
      cout << "    ";
      painter->Print();
    }
  }
}

//_____________________________________________________________________________
void 
AliMUONPainterGroup::SetData(AliMUONVTrackerData* data, Int_t dataIndex)
{ 
  /// Set the data to be plotted
  fData = data; 
  fDataIndex = dataIndex; 
  fDataMax = -FLT_MAX;
  fDataMin = FLT_MAX;
}

//_____________________________________________________________________________
void
AliMUONPainterGroup::SetLine(Int_t lineColor, Int_t lineWidth)
{
  /// Set our outline attributes
  TIter next(fPainters);
  AliMUONVPainter* painter;
  while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
  {
    painter->SetLineColor(lineColor);
    painter->SetLineWidth(lineWidth);
  }
}  

 AliMUONPainterGroup.cxx:1
 AliMUONPainterGroup.cxx:2
 AliMUONPainterGroup.cxx:3
 AliMUONPainterGroup.cxx:4
 AliMUONPainterGroup.cxx:5
 AliMUONPainterGroup.cxx:6
 AliMUONPainterGroup.cxx:7
 AliMUONPainterGroup.cxx:8
 AliMUONPainterGroup.cxx:9
 AliMUONPainterGroup.cxx:10
 AliMUONPainterGroup.cxx:11
 AliMUONPainterGroup.cxx:12
 AliMUONPainterGroup.cxx:13
 AliMUONPainterGroup.cxx:14
 AliMUONPainterGroup.cxx:15
 AliMUONPainterGroup.cxx:16
 AliMUONPainterGroup.cxx:17
 AliMUONPainterGroup.cxx:18
 AliMUONPainterGroup.cxx:19
 AliMUONPainterGroup.cxx:20
 AliMUONPainterGroup.cxx:21
 AliMUONPainterGroup.cxx:22
 AliMUONPainterGroup.cxx:23
 AliMUONPainterGroup.cxx:24
 AliMUONPainterGroup.cxx:25
 AliMUONPainterGroup.cxx:26
 AliMUONPainterGroup.cxx:27
 AliMUONPainterGroup.cxx:28
 AliMUONPainterGroup.cxx:29
 AliMUONPainterGroup.cxx:30
 AliMUONPainterGroup.cxx:31
 AliMUONPainterGroup.cxx:32
 AliMUONPainterGroup.cxx:33
 AliMUONPainterGroup.cxx:34
 AliMUONPainterGroup.cxx:35
 AliMUONPainterGroup.cxx:36
 AliMUONPainterGroup.cxx:37
 AliMUONPainterGroup.cxx:38
 AliMUONPainterGroup.cxx:39
 AliMUONPainterGroup.cxx:40
 AliMUONPainterGroup.cxx:41
 AliMUONPainterGroup.cxx:42
 AliMUONPainterGroup.cxx:43
 AliMUONPainterGroup.cxx:44
 AliMUONPainterGroup.cxx:45
 AliMUONPainterGroup.cxx:46
 AliMUONPainterGroup.cxx:47
 AliMUONPainterGroup.cxx:48
 AliMUONPainterGroup.cxx:49
 AliMUONPainterGroup.cxx:50
 AliMUONPainterGroup.cxx:51
 AliMUONPainterGroup.cxx:52
 AliMUONPainterGroup.cxx:53
 AliMUONPainterGroup.cxx:54
 AliMUONPainterGroup.cxx:55
 AliMUONPainterGroup.cxx:56
 AliMUONPainterGroup.cxx:57
 AliMUONPainterGroup.cxx:58
 AliMUONPainterGroup.cxx:59
 AliMUONPainterGroup.cxx:60
 AliMUONPainterGroup.cxx:61
 AliMUONPainterGroup.cxx:62
 AliMUONPainterGroup.cxx:63
 AliMUONPainterGroup.cxx:64
 AliMUONPainterGroup.cxx:65
 AliMUONPainterGroup.cxx:66
 AliMUONPainterGroup.cxx:67
 AliMUONPainterGroup.cxx:68
 AliMUONPainterGroup.cxx:69
 AliMUONPainterGroup.cxx:70
 AliMUONPainterGroup.cxx:71
 AliMUONPainterGroup.cxx:72
 AliMUONPainterGroup.cxx:73
 AliMUONPainterGroup.cxx:74
 AliMUONPainterGroup.cxx:75
 AliMUONPainterGroup.cxx:76
 AliMUONPainterGroup.cxx:77
 AliMUONPainterGroup.cxx:78
 AliMUONPainterGroup.cxx:79
 AliMUONPainterGroup.cxx:80
 AliMUONPainterGroup.cxx:81
 AliMUONPainterGroup.cxx:82
 AliMUONPainterGroup.cxx:83
 AliMUONPainterGroup.cxx:84
 AliMUONPainterGroup.cxx:85
 AliMUONPainterGroup.cxx:86
 AliMUONPainterGroup.cxx:87
 AliMUONPainterGroup.cxx:88
 AliMUONPainterGroup.cxx:89
 AliMUONPainterGroup.cxx:90
 AliMUONPainterGroup.cxx:91
 AliMUONPainterGroup.cxx:92
 AliMUONPainterGroup.cxx:93
 AliMUONPainterGroup.cxx:94
 AliMUONPainterGroup.cxx:95
 AliMUONPainterGroup.cxx:96
 AliMUONPainterGroup.cxx:97
 AliMUONPainterGroup.cxx:98
 AliMUONPainterGroup.cxx:99
 AliMUONPainterGroup.cxx:100
 AliMUONPainterGroup.cxx:101
 AliMUONPainterGroup.cxx:102
 AliMUONPainterGroup.cxx:103
 AliMUONPainterGroup.cxx:104
 AliMUONPainterGroup.cxx:105
 AliMUONPainterGroup.cxx:106
 AliMUONPainterGroup.cxx:107
 AliMUONPainterGroup.cxx:108
 AliMUONPainterGroup.cxx:109
 AliMUONPainterGroup.cxx:110
 AliMUONPainterGroup.cxx:111
 AliMUONPainterGroup.cxx:112
 AliMUONPainterGroup.cxx:113
 AliMUONPainterGroup.cxx:114
 AliMUONPainterGroup.cxx:115
 AliMUONPainterGroup.cxx:116
 AliMUONPainterGroup.cxx:117
 AliMUONPainterGroup.cxx:118
 AliMUONPainterGroup.cxx:119
 AliMUONPainterGroup.cxx:120
 AliMUONPainterGroup.cxx:121
 AliMUONPainterGroup.cxx:122
 AliMUONPainterGroup.cxx:123
 AliMUONPainterGroup.cxx:124
 AliMUONPainterGroup.cxx:125
 AliMUONPainterGroup.cxx:126
 AliMUONPainterGroup.cxx:127
 AliMUONPainterGroup.cxx:128
 AliMUONPainterGroup.cxx:129
 AliMUONPainterGroup.cxx:130
 AliMUONPainterGroup.cxx:131
 AliMUONPainterGroup.cxx:132
 AliMUONPainterGroup.cxx:133
 AliMUONPainterGroup.cxx:134
 AliMUONPainterGroup.cxx:135
 AliMUONPainterGroup.cxx:136
 AliMUONPainterGroup.cxx:137
 AliMUONPainterGroup.cxx:138
 AliMUONPainterGroup.cxx:139
 AliMUONPainterGroup.cxx:140
 AliMUONPainterGroup.cxx:141
 AliMUONPainterGroup.cxx:142
 AliMUONPainterGroup.cxx:143
 AliMUONPainterGroup.cxx:144
 AliMUONPainterGroup.cxx:145
 AliMUONPainterGroup.cxx:146
 AliMUONPainterGroup.cxx:147
 AliMUONPainterGroup.cxx:148
 AliMUONPainterGroup.cxx:149
 AliMUONPainterGroup.cxx:150
 AliMUONPainterGroup.cxx:151
 AliMUONPainterGroup.cxx:152
 AliMUONPainterGroup.cxx:153
 AliMUONPainterGroup.cxx:154
 AliMUONPainterGroup.cxx:155
 AliMUONPainterGroup.cxx:156
 AliMUONPainterGroup.cxx:157
 AliMUONPainterGroup.cxx:158
 AliMUONPainterGroup.cxx:159
 AliMUONPainterGroup.cxx:160
 AliMUONPainterGroup.cxx:161
 AliMUONPainterGroup.cxx:162
 AliMUONPainterGroup.cxx:163
 AliMUONPainterGroup.cxx:164
 AliMUONPainterGroup.cxx:165
 AliMUONPainterGroup.cxx:166
 AliMUONPainterGroup.cxx:167
 AliMUONPainterGroup.cxx:168
 AliMUONPainterGroup.cxx:169
 AliMUONPainterGroup.cxx:170
 AliMUONPainterGroup.cxx:171
 AliMUONPainterGroup.cxx:172
 AliMUONPainterGroup.cxx:173
 AliMUONPainterGroup.cxx:174
 AliMUONPainterGroup.cxx:175
 AliMUONPainterGroup.cxx:176
 AliMUONPainterGroup.cxx:177
 AliMUONPainterGroup.cxx:178
 AliMUONPainterGroup.cxx:179
 AliMUONPainterGroup.cxx:180
 AliMUONPainterGroup.cxx:181
 AliMUONPainterGroup.cxx:182
 AliMUONPainterGroup.cxx:183
 AliMUONPainterGroup.cxx:184
 AliMUONPainterGroup.cxx:185
 AliMUONPainterGroup.cxx:186
 AliMUONPainterGroup.cxx:187
 AliMUONPainterGroup.cxx:188
 AliMUONPainterGroup.cxx:189
 AliMUONPainterGroup.cxx:190
 AliMUONPainterGroup.cxx:191
 AliMUONPainterGroup.cxx:192
 AliMUONPainterGroup.cxx:193
 AliMUONPainterGroup.cxx:194
 AliMUONPainterGroup.cxx:195
 AliMUONPainterGroup.cxx:196
 AliMUONPainterGroup.cxx:197
 AliMUONPainterGroup.cxx:198
 AliMUONPainterGroup.cxx:199
 AliMUONPainterGroup.cxx:200
 AliMUONPainterGroup.cxx:201
 AliMUONPainterGroup.cxx:202
 AliMUONPainterGroup.cxx:203
 AliMUONPainterGroup.cxx:204
 AliMUONPainterGroup.cxx:205
 AliMUONPainterGroup.cxx:206
 AliMUONPainterGroup.cxx:207
 AliMUONPainterGroup.cxx:208
 AliMUONPainterGroup.cxx:209
 AliMUONPainterGroup.cxx:210
 AliMUONPainterGroup.cxx:211
 AliMUONPainterGroup.cxx:212
 AliMUONPainterGroup.cxx:213
 AliMUONPainterGroup.cxx:214
 AliMUONPainterGroup.cxx:215
 AliMUONPainterGroup.cxx:216
 AliMUONPainterGroup.cxx:217
 AliMUONPainterGroup.cxx:218
 AliMUONPainterGroup.cxx:219
 AliMUONPainterGroup.cxx:220
 AliMUONPainterGroup.cxx:221
 AliMUONPainterGroup.cxx:222
 AliMUONPainterGroup.cxx:223
 AliMUONPainterGroup.cxx:224
 AliMUONPainterGroup.cxx:225
 AliMUONPainterGroup.cxx:226
 AliMUONPainterGroup.cxx:227
 AliMUONPainterGroup.cxx:228
 AliMUONPainterGroup.cxx:229
 AliMUONPainterGroup.cxx:230
 AliMUONPainterGroup.cxx:231
 AliMUONPainterGroup.cxx:232
 AliMUONPainterGroup.cxx:233
 AliMUONPainterGroup.cxx:234
 AliMUONPainterGroup.cxx:235
 AliMUONPainterGroup.cxx:236
 AliMUONPainterGroup.cxx:237
 AliMUONPainterGroup.cxx:238
 AliMUONPainterGroup.cxx:239
 AliMUONPainterGroup.cxx:240
 AliMUONPainterGroup.cxx:241
 AliMUONPainterGroup.cxx:242
 AliMUONPainterGroup.cxx:243
 AliMUONPainterGroup.cxx:244
 AliMUONPainterGroup.cxx:245
 AliMUONPainterGroup.cxx:246
 AliMUONPainterGroup.cxx:247
 AliMUONPainterGroup.cxx:248
 AliMUONPainterGroup.cxx:249
 AliMUONPainterGroup.cxx:250
 AliMUONPainterGroup.cxx:251
 AliMUONPainterGroup.cxx:252
 AliMUONPainterGroup.cxx:253
 AliMUONPainterGroup.cxx:254
 AliMUONPainterGroup.cxx:255
 AliMUONPainterGroup.cxx:256
 AliMUONPainterGroup.cxx:257
 AliMUONPainterGroup.cxx:258
 AliMUONPainterGroup.cxx:259
 AliMUONPainterGroup.cxx:260
 AliMUONPainterGroup.cxx:261
 AliMUONPainterGroup.cxx:262
 AliMUONPainterGroup.cxx:263
 AliMUONPainterGroup.cxx:264
 AliMUONPainterGroup.cxx:265
 AliMUONPainterGroup.cxx:266
 AliMUONPainterGroup.cxx:267
 AliMUONPainterGroup.cxx:268
 AliMUONPainterGroup.cxx:269
 AliMUONPainterGroup.cxx:270
 AliMUONPainterGroup.cxx:271
 AliMUONPainterGroup.cxx:272
 AliMUONPainterGroup.cxx:273
 AliMUONPainterGroup.cxx:274
 AliMUONPainterGroup.cxx:275
 AliMUONPainterGroup.cxx:276