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 "AliMUONPainterMatrix.h"

#include "AliLog.h"
#include "AliMUONPainterGroup.h"
#include "AliMUONPainterHelper.h"
#include "AliMUONVPainter.h"
#include "AliMUONVTrackerData.h"
#include "TCanvas.h"
#include "TGClient.h"
#include "TPaveLabel.h"
#include <Riostream.h>
#include <TBox.h>
#include <TMath.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TROOT.h>
#include <TVirtualPad.h>
#include <float.h>

///\class AliMUONPainterMatrix
///
/// Matrix of AliMUONVPainter
///
///\author Laurent Aphecetche, Subatech

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

//_____________________________________________________________________________
AliMUONPainterMatrix::AliMUONPainterMatrix(const char* name, Int_t nx, Int_t ny)
: TObject(),
  fBasename(name),
  fWhatname(""),
  fNx(nx),
  fNy(ny),
  fPainters(new TObjArray(fNx*fNy)),
  fAttributes()
{
  /// ctor
  
  fPainters->SetOwner(kTRUE);
  if ( fNx*fNy > 1 ) 
  {
    fAttributes.SetSingle(kFALSE);
  }
}

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

//_____________________________________________________________________________
void 
AliMUONPainterMatrix::Adopt(AliMUONVPainter* painter)
{
  /// Adopt a given painter
  fPainters->AddLast(painter);
  UpdateAttributes();
}

//_____________________________________________________________________________
void
AliMUONPainterMatrix::UpdateAttributes()
{
  /// Update our attributes (using our painters' attributes)
  
  Bool_t cathode0(kFALSE);
  Bool_t cathode1(kFALSE);
  Bool_t bending(kFALSE);
  Bool_t nonbending(kFALSE);
  Bool_t front(kFALSE);
  Bool_t back(kFALSE);
  Bool_t cathplaneexclusive(kFALSE);
  Bool_t cathplanedisabled(kFALSE);
  
  for ( Int_t i = 0; i < Size(); ++i )
  {
    AliMUONAttPainter att = Painter(i)->Attributes();
    
    if ( att.IsCathodeDefined() ) 
    {
      if ( att.IsCathode0() ) cathode0 = kTRUE;
      if ( att.IsCathode1() ) cathode1 = kTRUE;
    }

    if ( att.IsPlaneDefined() ) 
    {
      if ( att.IsBendingPlane() ) bending = kTRUE;
      if ( att.IsNonBendingPlane() ) nonbending = kTRUE;
    }
    
    if ( att.IsFrontView() ) front = kTRUE;
    if ( att.IsBackView() ) back = kTRUE;
    
    if ( att.IsCathodeAndPlaneMutuallyExclusive() ) cathplaneexclusive = kTRUE;
    
    if ( att.IsCathodeAndPlaneDisabled() ) cathplanedisabled = kTRUE;
  }
  
  fAttributes.SetCathode(cathode0,cathode1);
  fAttributes.SetPlane(bending,nonbending);
  fAttributes.SetViewPoint(front,back);
  fAttributes.SetCathodeAndPlaneMutuallyExclusive(cathplaneexclusive);
  fAttributes.SetCathodeAndPlaneDisabled(cathplanedisabled);
}

//_____________________________________________________________________________
const char*
AliMUONPainterMatrix::Name() const
{
  /// Build our name
  
  return NameIt(fWhatname.Data(),fBasename.Data(),fAttributes).Data();
}

//_____________________________________________________________________________
TString
AliMUONPainterMatrix::NameIt(const char* whatname, const char* basename, const AliMUONAttPainter& att)
{
  /// Build a name 
  if ( strlen(whatname) > 0 ) 
  {
    return Form("%s-%s-%s",whatname,basename,att.Name().Data());
  }
  else
  {
    return Form("noda-%s-%s",basename,att.Name().Data());
  }
}

//_____________________________________________________________________________
void 
AliMUONPainterMatrix::ComputeDataRange()
{
  /// Compute the data range spanned by the painters in this matrix
  
  Double_t dataMin(FLT_MAX);
  Double_t dataMax(-FLT_MAX);
  Bool_t atLeastOnePlotter(kFALSE);
  
  for ( Int_t i = 0; i < Size(); ++i ) 
  {
    AliMUONVPainter* p = Painter(i);
    AliMUONPainterGroup* g = p->PlotterGroup();

    Double_t min(FLT_MAX);
    Double_t max(-FLT_MAX);

    if ( g ) 
    {
      atLeastOnePlotter = kTRUE;
      g->ComputeDataRange(min,max);
      if ( min <= max ) 
      {
        dataMin = TMath::Min(min,dataMin);
        dataMax = TMath::Max(max,dataMax);
      }
    }

    AliDebug(1,Form("painter %s group %s min %e max %e dataMin,Max=%7.3f,%7.3f",
                    p->GetName(),
                    g ? g->Type() : "none",
                    min,max,
                    dataMin,dataMax));
  }

  if ( dataMin > dataMax && atLeastOnePlotter ) 
  {
    AliError(Form("data min %e > max %e : setting both to 0.0",
                    dataMin,dataMax));
    dataMin = dataMax = 0.0;
  }
  
  AliDebug(1,Form("Final dataMin,Max=%7.3f,%7.3f",dataMin,dataMax));
  
  SetDataRange(dataMin,dataMax);
}

//_____________________________________________________________________________
void 
AliMUONPainterMatrix::Connect(const char* sourceMethod, const char* destClassName, 
                              void* destObject, const char* destMethod)
{
  /// Connect our painters
  
  for ( Int_t i = 0; i < Size(); ++i )
  {
    Painter(i)->Connect(sourceMethod,destClassName,destObject,destMethod);
  }
}

//_____________________________________________________________________________
TCanvas*
AliMUONPainterMatrix::CreateCanvas(Int_t x, Int_t y, Int_t w, Int_t h)
{
  /// Generate a canvas to show the painter matrix.
  ///
  /// Layout is the following :
  ///
  /// ----------------------------------------------------
  /// |    title describing what is plotted              |
  /// ----------------------------------------------------
  /// |                                        |         |
  /// |                                        |         |
  /// |                                        |         |
  /// |                                        |         |
  /// |                                        |         |
  /// |             painter themselves         | color   |
  /// |                                        | range   |
  /// |                                        |         |
  /// |                                        |         |
  /// ----------------------------------------------------
  ///
  
  Int_t mw = ( w <= 0 ? TMath::Nint(gClient->GetDisplayWidth()*0.9) : w );
  Int_t mh = ( h <= 0 ? TMath::Nint(gClient->GetDisplayHeight()*0.9) : h );
  
  TString name(Name());
  
  TCanvas* d = new TCanvas(name.Data(),name.Data(),x,y,mw,mh);

  TVirtualPad* pTitle = new TPad(Form("%s-title",name.Data()),Form("%s-title",name.Data()),0,0.9,1.0,0.99);
  
  pTitle->Draw();
  
  pTitle->cd();
  
  TPaveLabel* text = new TPaveLabel(0,0,1,1,"");
  text->SetFillStyle(0);
  text->SetFillColor(0);
  text->SetTextColor(4);
  text->SetBorderSize(0);
  
  text->SetLabel(name.Data());
  
  text->Draw();
  
  d->cd();
  
  TVirtualPad* pMatrix = new TPad(Form("%s-matrix",name.Data()),Form("%s-matrix",name.Data()),0,0,0.9,0.89);
  
  pMatrix->Draw();
  pMatrix->cd();
  
  Draw();
  
  d->cd();
  
  TVirtualPad* pColor = new TPad(Form("%s-color",name.Data()),Form("%s-color",name.Data()),0.91,0.01,0.99,0.89);
    
  pColor->Range(0,0,1,1);

  pColor->Draw();
  
  pColor->cd();
  
  Int_t ndivisions(20);
  
  Double_t rangeXmin(0.1);
  Double_t rangeXmax(0.9);
  
  Double_t ymin, ymax;
  
  GetDataRange(ymin,ymax);
    
  Double_t min(0.0);
  Double_t max(1.0);
  
  Double_t step = (max-min)/ndivisions;

  Double_t hsize = 1.0/(ndivisions+2);

  Double_t ypos = 1.0;
  
  for ( Int_t i = -1; i < ndivisions+1; ++i ) 
  {
    Double_t value = max - (min + step*i);
    
    Int_t color = AliMUONPainterHelper::Instance()->ColorFromValue(value,min,max);
    
    Bool_t limit(kFALSE);
    
    TString label;
    TString sign;
    
    Double_t yvalue(0.0);
    
    if ( i == -1 )
    {
      yvalue = ymax;
      limit = kTRUE;
      sign = ">";
    }
    else if ( i == ndivisions )
    {
      yvalue = ymin;
      limit = kTRUE;
      sign = "<=";
    }
    
    if (limit)
    {
      if ( TMath::Abs(yvalue) < 1E5 ) 
      {
        label = Form("%s %7.2f",sign.Data(),yvalue);    
      }
      else
      {
        label = Form("%s %e",sign.Data(),yvalue);
      }
    }

    TPaveLabel* box = new TPaveLabel(rangeXmin,TMath::Max(0.001,ypos-hsize),rangeXmax,ypos,label.Data(),"");    
    
    ypos -= hsize;
    
    box->SetFillColor(color);
    box->SetTextColor( i == -1 ? 0 : 1 );
    box->SetBorderSize(1);
    box->SetLineColor(1);
    box->Draw();
  }  
  
  d->SetEditable(kFALSE);
  
  return d;
}

//_____________________________________________________________________________
void
AliMUONPainterMatrix::GetDataRange(Double_t& dataMin, Double_t& dataMax) const
{
  /// Get the data range spanned by the painters in this matrix
  
  dataMin=FLT_MAX;
  dataMax=-FLT_MAX;
  
  for ( Int_t i = 0; i < Size(); ++i ) 
  {
    AliMUONVPainter* p = Painter(i);
    if ( p )
    {
      AliMUONPainterGroup* g = p->PlotterGroup();
      if ( g ) 
      {
        dataMin = TMath::Min(dataMin,g->DataMin());
        dataMax = TMath::Max(dataMax,g->DataMax());
      }
    }
  }
}

//_____________________________________________________________________________
void 
AliMUONPainterMatrix::GetTypes(TObjArray& types) const
{
  /// Get the types of the painters in this matrix
  
  types.SetOwner(kTRUE);
  types.Clear();
  
  for ( Int_t i = 0; i < Size(); ++i ) 
  {
    AliMUONVPainter* p = Painter(i);
    TObjArray ptypes;
    p->GetTypes(ptypes);
    TIter next(&ptypes);
    TObject* o;
    while ( ( o = next() ) )
    {
      if ( ! types.FindObject(o) )
      {
        types.AddLast(o->Clone());
      }
    }
  }  
}


//_____________________________________________________________________________
void
AliMUONPainterMatrix::Draw(Option_t*)
{
  /// Append our painters to the current pad

  if (!gPad) 
  {
    gROOT->MakeDefCanvas();
  }
  
  TVirtualPad* pad = gPad;

  gPad->Divide(Nx(),Ny());
  
  for ( Int_t i = 0; i < Size(); ++i ) 
  {
    AliMUONVPainter* painter = Painter(i);
    pad->cd(i+1);
    painter->Draw("R");
  }  
  
  AppendPad("");
}

//_____________________________________________________________________________
AliMUONVPainter* 
AliMUONPainterMatrix::Painter(Int_t index) const
{
  /// Get a given painter
  
  if ( index <= fPainters->GetLast() ) 
  {
    return static_cast<AliMUONVPainter*>(fPainters->At(index));
  }
  return 0x0;
}

//_____________________________________________________________________________
AliMUONVTrackerData* 
AliMUONPainterMatrix::Data() const
{
  /// Return our data
  AliMUONPainterGroup* group = Painter(0)->PlotterGroup();
  return ( group ? group->Data() : 0x0 );
}

//_____________________________________________________________________________
TString 
AliMUONPainterMatrix::DataPattern() const
{
  /// Return our data pattern
  AliMUONPainterGroup* group = Painter(0)->PlotterGroup();
  return ( group ? group->Type() : "" );
}

//_____________________________________________________________________________
Int_t 
AliMUONPainterMatrix::DataIndex() const
{
  /// Return our data index
  AliMUONPainterGroup* group = Painter(0)->PlotterGroup();
  return ( group ? group->DataIndex() : -1 );
}

//_____________________________________________________________________________
void
AliMUONPainterMatrix::SetData(const char* pattern, AliMUONVTrackerData* d,
                              Int_t indexInData)
{
  /// Set the data to be plotted
  
  for ( Int_t i = 0; i < Size(); ++i )
  {
    AliMUONVPainter* painter = Painter(i);
    painter->SetData(pattern,d,indexInData);
  }
  
  if ( d ) 
  {
    fWhatname = Form("%s-%s",d->GetName(),d->DimensionName(indexInData).Data());
  }
  else
  {
    fWhatname = "";
  }
}

//_____________________________________________________________________________
void
AliMUONPainterMatrix::SetDataRange(Double_t dataMin, Double_t dataMax)
{
  /// Set the data range
  
  for ( Int_t i = 0; i < Size(); ++i ) 
  {
    AliMUONVPainter* p = Painter(i);
    AliMUONPainterGroup* g = p->PlotterGroup();
    if ( g ) 
    {
      g->SetDataRange(dataMin,dataMax);
    }
  }       
}

//_____________________________________________________________________________
Int_t 
AliMUONPainterMatrix::Size() const
{
  /// Return the number of painters we actually handle
  return fPainters->GetLast()+1;
}

//_____________________________________________________________________________
void
AliMUONPainterMatrix::Print(Option_t*) const
{
  /// Printout
  cout << "Whatname=" << fWhatname.Data() << "Basename=" << fBasename.Data() 
  << " Nx=" << fNx << " Ny=" << fNy << " Att=" << fAttributes.GetName() << endl;
}

//_____________________________________________________________________________
//void 
//AliMUONPainterMatrix::ChangeAttributes(const AliMUONAttPainter& attributes)
//{
//  /// Change painters' attributes
//  
//  AliWarning("Implement me !");
//  
//  //  for ( Int_t i = 0; i < Size(); ++i ) 
//  //  {
//  //    Painter(i)->SetAttributes(attributes);
//  //  }
//}

//_____________________________________________________________________________
AliMUONPainterMatrix*
AliMUONPainterMatrix::Clone(const AliMUONAttPainter& attributes) const
{
  /// Clone with given attributes
  
  AliMUONPainterMatrix* clone = new AliMUONPainterMatrix(Basename(),Nx(),Ny());

  for ( Int_t i = 0; i < Size(); ++i ) 
  {
    AliMUONVPainter* oldPainter = Painter(i);
    
    AliMUONVPainter* newPainter(0x0);
    
    newPainter = AliMUONVPainter::CreatePainter(oldPainter->ClassName(),
                                                attributes,
                                                oldPainter->ID0(),
                                                oldPainter->ID1());
    
    if (newPainter)
    {
      newPainter->UpdateGroupsFrom(*(oldPainter->Master()));
      clone->Adopt(newPainter);
    }
    else
    {
      AliError(Form("Failed to create painter of class %s ID0 %d ID1 %d",
                    oldPainter->ClassName(),
                    oldPainter->ID0(),
                    oldPainter->ID1()));
    }
  }
  
  return clone;
}

//_____________________________________________________________________________
void
AliMUONPainterMatrix::SetOutlined(const char* pattern, Bool_t value)
{
  /// Calls SetOutlined for all our painters

  for ( Int_t i = 0; i < Size(); ++i ) 
  {
    Painter(i)->SetOutlined(pattern,value);
  }
}

//_____________________________________________________________________________
void
AliMUONPainterMatrix::SetResponder(const char* pattern)
{
  /// Calls SetResponder for all our painters
  for ( Int_t i = 0; i < Size(); ++i ) 
  {
    Painter(i)->SetResponder(pattern);
  }
}

//_____________________________________________________________________________
AliMUONAttPainter
AliMUONPainterMatrix::Validate(const AliMUONAttPainter& att) const
{
  /// Normalize attributes

  AliMUONAttPainter a;
  
  for ( Int_t i = 0; i < Size() && a.IsValid(); ++i ) 
  {
    a = Painter(i)->Validate(att);
  }
  return a;
}
 AliMUONPainterMatrix.cxx:1
 AliMUONPainterMatrix.cxx:2
 AliMUONPainterMatrix.cxx:3
 AliMUONPainterMatrix.cxx:4
 AliMUONPainterMatrix.cxx:5
 AliMUONPainterMatrix.cxx:6
 AliMUONPainterMatrix.cxx:7
 AliMUONPainterMatrix.cxx:8
 AliMUONPainterMatrix.cxx:9
 AliMUONPainterMatrix.cxx:10
 AliMUONPainterMatrix.cxx:11
 AliMUONPainterMatrix.cxx:12
 AliMUONPainterMatrix.cxx:13
 AliMUONPainterMatrix.cxx:14
 AliMUONPainterMatrix.cxx:15
 AliMUONPainterMatrix.cxx:16
 AliMUONPainterMatrix.cxx:17
 AliMUONPainterMatrix.cxx:18
 AliMUONPainterMatrix.cxx:19
 AliMUONPainterMatrix.cxx:20
 AliMUONPainterMatrix.cxx:21
 AliMUONPainterMatrix.cxx:22
 AliMUONPainterMatrix.cxx:23
 AliMUONPainterMatrix.cxx:24
 AliMUONPainterMatrix.cxx:25
 AliMUONPainterMatrix.cxx:26
 AliMUONPainterMatrix.cxx:27
 AliMUONPainterMatrix.cxx:28
 AliMUONPainterMatrix.cxx:29
 AliMUONPainterMatrix.cxx:30
 AliMUONPainterMatrix.cxx:31
 AliMUONPainterMatrix.cxx:32
 AliMUONPainterMatrix.cxx:33
 AliMUONPainterMatrix.cxx:34
 AliMUONPainterMatrix.cxx:35
 AliMUONPainterMatrix.cxx:36
 AliMUONPainterMatrix.cxx:37
 AliMUONPainterMatrix.cxx:38
 AliMUONPainterMatrix.cxx:39
 AliMUONPainterMatrix.cxx:40
 AliMUONPainterMatrix.cxx:41
 AliMUONPainterMatrix.cxx:42
 AliMUONPainterMatrix.cxx:43
 AliMUONPainterMatrix.cxx:44
 AliMUONPainterMatrix.cxx:45
 AliMUONPainterMatrix.cxx:46
 AliMUONPainterMatrix.cxx:47
 AliMUONPainterMatrix.cxx:48
 AliMUONPainterMatrix.cxx:49
 AliMUONPainterMatrix.cxx:50
 AliMUONPainterMatrix.cxx:51
 AliMUONPainterMatrix.cxx:52
 AliMUONPainterMatrix.cxx:53
 AliMUONPainterMatrix.cxx:54
 AliMUONPainterMatrix.cxx:55
 AliMUONPainterMatrix.cxx:56
 AliMUONPainterMatrix.cxx:57
 AliMUONPainterMatrix.cxx:58
 AliMUONPainterMatrix.cxx:59
 AliMUONPainterMatrix.cxx:60
 AliMUONPainterMatrix.cxx:61
 AliMUONPainterMatrix.cxx:62
 AliMUONPainterMatrix.cxx:63
 AliMUONPainterMatrix.cxx:64
 AliMUONPainterMatrix.cxx:65
 AliMUONPainterMatrix.cxx:66
 AliMUONPainterMatrix.cxx:67
 AliMUONPainterMatrix.cxx:68
 AliMUONPainterMatrix.cxx:69
 AliMUONPainterMatrix.cxx:70
 AliMUONPainterMatrix.cxx:71
 AliMUONPainterMatrix.cxx:72
 AliMUONPainterMatrix.cxx:73
 AliMUONPainterMatrix.cxx:74
 AliMUONPainterMatrix.cxx:75
 AliMUONPainterMatrix.cxx:76
 AliMUONPainterMatrix.cxx:77
 AliMUONPainterMatrix.cxx:78
 AliMUONPainterMatrix.cxx:79
 AliMUONPainterMatrix.cxx:80
 AliMUONPainterMatrix.cxx:81
 AliMUONPainterMatrix.cxx:82
 AliMUONPainterMatrix.cxx:83
 AliMUONPainterMatrix.cxx:84
 AliMUONPainterMatrix.cxx:85
 AliMUONPainterMatrix.cxx:86
 AliMUONPainterMatrix.cxx:87
 AliMUONPainterMatrix.cxx:88
 AliMUONPainterMatrix.cxx:89
 AliMUONPainterMatrix.cxx:90
 AliMUONPainterMatrix.cxx:91
 AliMUONPainterMatrix.cxx:92
 AliMUONPainterMatrix.cxx:93
 AliMUONPainterMatrix.cxx:94
 AliMUONPainterMatrix.cxx:95
 AliMUONPainterMatrix.cxx:96
 AliMUONPainterMatrix.cxx:97
 AliMUONPainterMatrix.cxx:98
 AliMUONPainterMatrix.cxx:99
 AliMUONPainterMatrix.cxx:100
 AliMUONPainterMatrix.cxx:101
 AliMUONPainterMatrix.cxx:102
 AliMUONPainterMatrix.cxx:103
 AliMUONPainterMatrix.cxx:104
 AliMUONPainterMatrix.cxx:105
 AliMUONPainterMatrix.cxx:106
 AliMUONPainterMatrix.cxx:107
 AliMUONPainterMatrix.cxx:108
 AliMUONPainterMatrix.cxx:109
 AliMUONPainterMatrix.cxx:110
 AliMUONPainterMatrix.cxx:111
 AliMUONPainterMatrix.cxx:112
 AliMUONPainterMatrix.cxx:113
 AliMUONPainterMatrix.cxx:114
 AliMUONPainterMatrix.cxx:115
 AliMUONPainterMatrix.cxx:116
 AliMUONPainterMatrix.cxx:117
 AliMUONPainterMatrix.cxx:118
 AliMUONPainterMatrix.cxx:119
 AliMUONPainterMatrix.cxx:120
 AliMUONPainterMatrix.cxx:121
 AliMUONPainterMatrix.cxx:122
 AliMUONPainterMatrix.cxx:123
 AliMUONPainterMatrix.cxx:124
 AliMUONPainterMatrix.cxx:125
 AliMUONPainterMatrix.cxx:126
 AliMUONPainterMatrix.cxx:127
 AliMUONPainterMatrix.cxx:128
 AliMUONPainterMatrix.cxx:129
 AliMUONPainterMatrix.cxx:130
 AliMUONPainterMatrix.cxx:131
 AliMUONPainterMatrix.cxx:132
 AliMUONPainterMatrix.cxx:133
 AliMUONPainterMatrix.cxx:134
 AliMUONPainterMatrix.cxx:135
 AliMUONPainterMatrix.cxx:136
 AliMUONPainterMatrix.cxx:137
 AliMUONPainterMatrix.cxx:138
 AliMUONPainterMatrix.cxx:139
 AliMUONPainterMatrix.cxx:140
 AliMUONPainterMatrix.cxx:141
 AliMUONPainterMatrix.cxx:142
 AliMUONPainterMatrix.cxx:143
 AliMUONPainterMatrix.cxx:144
 AliMUONPainterMatrix.cxx:145
 AliMUONPainterMatrix.cxx:146
 AliMUONPainterMatrix.cxx:147
 AliMUONPainterMatrix.cxx:148
 AliMUONPainterMatrix.cxx:149
 AliMUONPainterMatrix.cxx:150
 AliMUONPainterMatrix.cxx:151
 AliMUONPainterMatrix.cxx:152
 AliMUONPainterMatrix.cxx:153
 AliMUONPainterMatrix.cxx:154
 AliMUONPainterMatrix.cxx:155
 AliMUONPainterMatrix.cxx:156
 AliMUONPainterMatrix.cxx:157
 AliMUONPainterMatrix.cxx:158
 AliMUONPainterMatrix.cxx:159
 AliMUONPainterMatrix.cxx:160
 AliMUONPainterMatrix.cxx:161
 AliMUONPainterMatrix.cxx:162
 AliMUONPainterMatrix.cxx:163
 AliMUONPainterMatrix.cxx:164
 AliMUONPainterMatrix.cxx:165
 AliMUONPainterMatrix.cxx:166
 AliMUONPainterMatrix.cxx:167
 AliMUONPainterMatrix.cxx:168
 AliMUONPainterMatrix.cxx:169
 AliMUONPainterMatrix.cxx:170
 AliMUONPainterMatrix.cxx:171
 AliMUONPainterMatrix.cxx:172
 AliMUONPainterMatrix.cxx:173
 AliMUONPainterMatrix.cxx:174
 AliMUONPainterMatrix.cxx:175
 AliMUONPainterMatrix.cxx:176
 AliMUONPainterMatrix.cxx:177
 AliMUONPainterMatrix.cxx:178
 AliMUONPainterMatrix.cxx:179
 AliMUONPainterMatrix.cxx:180
 AliMUONPainterMatrix.cxx:181
 AliMUONPainterMatrix.cxx:182
 AliMUONPainterMatrix.cxx:183
 AliMUONPainterMatrix.cxx:184
 AliMUONPainterMatrix.cxx:185
 AliMUONPainterMatrix.cxx:186
 AliMUONPainterMatrix.cxx:187
 AliMUONPainterMatrix.cxx:188
 AliMUONPainterMatrix.cxx:189
 AliMUONPainterMatrix.cxx:190
 AliMUONPainterMatrix.cxx:191
 AliMUONPainterMatrix.cxx:192
 AliMUONPainterMatrix.cxx:193
 AliMUONPainterMatrix.cxx:194
 AliMUONPainterMatrix.cxx:195
 AliMUONPainterMatrix.cxx:196
 AliMUONPainterMatrix.cxx:197
 AliMUONPainterMatrix.cxx:198
 AliMUONPainterMatrix.cxx:199
 AliMUONPainterMatrix.cxx:200
 AliMUONPainterMatrix.cxx:201
 AliMUONPainterMatrix.cxx:202
 AliMUONPainterMatrix.cxx:203
 AliMUONPainterMatrix.cxx:204
 AliMUONPainterMatrix.cxx:205
 AliMUONPainterMatrix.cxx:206
 AliMUONPainterMatrix.cxx:207
 AliMUONPainterMatrix.cxx:208
 AliMUONPainterMatrix.cxx:209
 AliMUONPainterMatrix.cxx:210
 AliMUONPainterMatrix.cxx:211
 AliMUONPainterMatrix.cxx:212
 AliMUONPainterMatrix.cxx:213
 AliMUONPainterMatrix.cxx:214
 AliMUONPainterMatrix.cxx:215
 AliMUONPainterMatrix.cxx:216
 AliMUONPainterMatrix.cxx:217
 AliMUONPainterMatrix.cxx:218
 AliMUONPainterMatrix.cxx:219
 AliMUONPainterMatrix.cxx:220
 AliMUONPainterMatrix.cxx:221
 AliMUONPainterMatrix.cxx:222
 AliMUONPainterMatrix.cxx:223
 AliMUONPainterMatrix.cxx:224
 AliMUONPainterMatrix.cxx:225
 AliMUONPainterMatrix.cxx:226
 AliMUONPainterMatrix.cxx:227
 AliMUONPainterMatrix.cxx:228
 AliMUONPainterMatrix.cxx:229
 AliMUONPainterMatrix.cxx:230
 AliMUONPainterMatrix.cxx:231
 AliMUONPainterMatrix.cxx:232
 AliMUONPainterMatrix.cxx:233
 AliMUONPainterMatrix.cxx:234
 AliMUONPainterMatrix.cxx:235
 AliMUONPainterMatrix.cxx:236
 AliMUONPainterMatrix.cxx:237
 AliMUONPainterMatrix.cxx:238
 AliMUONPainterMatrix.cxx:239
 AliMUONPainterMatrix.cxx:240
 AliMUONPainterMatrix.cxx:241
 AliMUONPainterMatrix.cxx:242
 AliMUONPainterMatrix.cxx:243
 AliMUONPainterMatrix.cxx:244
 AliMUONPainterMatrix.cxx:245
 AliMUONPainterMatrix.cxx:246
 AliMUONPainterMatrix.cxx:247
 AliMUONPainterMatrix.cxx:248
 AliMUONPainterMatrix.cxx:249
 AliMUONPainterMatrix.cxx:250
 AliMUONPainterMatrix.cxx:251
 AliMUONPainterMatrix.cxx:252
 AliMUONPainterMatrix.cxx:253
 AliMUONPainterMatrix.cxx:254
 AliMUONPainterMatrix.cxx:255
 AliMUONPainterMatrix.cxx:256
 AliMUONPainterMatrix.cxx:257
 AliMUONPainterMatrix.cxx:258
 AliMUONPainterMatrix.cxx:259
 AliMUONPainterMatrix.cxx:260
 AliMUONPainterMatrix.cxx:261
 AliMUONPainterMatrix.cxx:262
 AliMUONPainterMatrix.cxx:263
 AliMUONPainterMatrix.cxx:264
 AliMUONPainterMatrix.cxx:265
 AliMUONPainterMatrix.cxx:266
 AliMUONPainterMatrix.cxx:267
 AliMUONPainterMatrix.cxx:268
 AliMUONPainterMatrix.cxx:269
 AliMUONPainterMatrix.cxx:270
 AliMUONPainterMatrix.cxx:271
 AliMUONPainterMatrix.cxx:272
 AliMUONPainterMatrix.cxx:273
 AliMUONPainterMatrix.cxx:274
 AliMUONPainterMatrix.cxx:275
 AliMUONPainterMatrix.cxx:276
 AliMUONPainterMatrix.cxx:277
 AliMUONPainterMatrix.cxx:278
 AliMUONPainterMatrix.cxx:279
 AliMUONPainterMatrix.cxx:280
 AliMUONPainterMatrix.cxx:281
 AliMUONPainterMatrix.cxx:282
 AliMUONPainterMatrix.cxx:283
 AliMUONPainterMatrix.cxx:284
 AliMUONPainterMatrix.cxx:285
 AliMUONPainterMatrix.cxx:286
 AliMUONPainterMatrix.cxx:287
 AliMUONPainterMatrix.cxx:288
 AliMUONPainterMatrix.cxx:289
 AliMUONPainterMatrix.cxx:290
 AliMUONPainterMatrix.cxx:291
 AliMUONPainterMatrix.cxx:292
 AliMUONPainterMatrix.cxx:293
 AliMUONPainterMatrix.cxx:294
 AliMUONPainterMatrix.cxx:295
 AliMUONPainterMatrix.cxx:296
 AliMUONPainterMatrix.cxx:297
 AliMUONPainterMatrix.cxx:298
 AliMUONPainterMatrix.cxx:299
 AliMUONPainterMatrix.cxx:300
 AliMUONPainterMatrix.cxx:301
 AliMUONPainterMatrix.cxx:302
 AliMUONPainterMatrix.cxx:303
 AliMUONPainterMatrix.cxx:304
 AliMUONPainterMatrix.cxx:305
 AliMUONPainterMatrix.cxx:306
 AliMUONPainterMatrix.cxx:307
 AliMUONPainterMatrix.cxx:308
 AliMUONPainterMatrix.cxx:309
 AliMUONPainterMatrix.cxx:310
 AliMUONPainterMatrix.cxx:311
 AliMUONPainterMatrix.cxx:312
 AliMUONPainterMatrix.cxx:313
 AliMUONPainterMatrix.cxx:314
 AliMUONPainterMatrix.cxx:315
 AliMUONPainterMatrix.cxx:316
 AliMUONPainterMatrix.cxx:317
 AliMUONPainterMatrix.cxx:318
 AliMUONPainterMatrix.cxx:319
 AliMUONPainterMatrix.cxx:320
 AliMUONPainterMatrix.cxx:321
 AliMUONPainterMatrix.cxx:322
 AliMUONPainterMatrix.cxx:323
 AliMUONPainterMatrix.cxx:324
 AliMUONPainterMatrix.cxx:325
 AliMUONPainterMatrix.cxx:326
 AliMUONPainterMatrix.cxx:327
 AliMUONPainterMatrix.cxx:328
 AliMUONPainterMatrix.cxx:329
 AliMUONPainterMatrix.cxx:330
 AliMUONPainterMatrix.cxx:331
 AliMUONPainterMatrix.cxx:332
 AliMUONPainterMatrix.cxx:333
 AliMUONPainterMatrix.cxx:334
 AliMUONPainterMatrix.cxx:335
 AliMUONPainterMatrix.cxx:336
 AliMUONPainterMatrix.cxx:337
 AliMUONPainterMatrix.cxx:338
 AliMUONPainterMatrix.cxx:339
 AliMUONPainterMatrix.cxx:340
 AliMUONPainterMatrix.cxx:341
 AliMUONPainterMatrix.cxx:342
 AliMUONPainterMatrix.cxx:343
 AliMUONPainterMatrix.cxx:344
 AliMUONPainterMatrix.cxx:345
 AliMUONPainterMatrix.cxx:346
 AliMUONPainterMatrix.cxx:347
 AliMUONPainterMatrix.cxx:348
 AliMUONPainterMatrix.cxx:349
 AliMUONPainterMatrix.cxx:350
 AliMUONPainterMatrix.cxx:351
 AliMUONPainterMatrix.cxx:352
 AliMUONPainterMatrix.cxx:353
 AliMUONPainterMatrix.cxx:354
 AliMUONPainterMatrix.cxx:355
 AliMUONPainterMatrix.cxx:356
 AliMUONPainterMatrix.cxx:357
 AliMUONPainterMatrix.cxx:358
 AliMUONPainterMatrix.cxx:359
 AliMUONPainterMatrix.cxx:360
 AliMUONPainterMatrix.cxx:361
 AliMUONPainterMatrix.cxx:362
 AliMUONPainterMatrix.cxx:363
 AliMUONPainterMatrix.cxx:364
 AliMUONPainterMatrix.cxx:365
 AliMUONPainterMatrix.cxx:366
 AliMUONPainterMatrix.cxx:367
 AliMUONPainterMatrix.cxx:368
 AliMUONPainterMatrix.cxx:369
 AliMUONPainterMatrix.cxx:370
 AliMUONPainterMatrix.cxx:371
 AliMUONPainterMatrix.cxx:372
 AliMUONPainterMatrix.cxx:373
 AliMUONPainterMatrix.cxx:374
 AliMUONPainterMatrix.cxx:375
 AliMUONPainterMatrix.cxx:376
 AliMUONPainterMatrix.cxx:377
 AliMUONPainterMatrix.cxx:378
 AliMUONPainterMatrix.cxx:379
 AliMUONPainterMatrix.cxx:380
 AliMUONPainterMatrix.cxx:381
 AliMUONPainterMatrix.cxx:382
 AliMUONPainterMatrix.cxx:383
 AliMUONPainterMatrix.cxx:384
 AliMUONPainterMatrix.cxx:385
 AliMUONPainterMatrix.cxx:386
 AliMUONPainterMatrix.cxx:387
 AliMUONPainterMatrix.cxx:388
 AliMUONPainterMatrix.cxx:389
 AliMUONPainterMatrix.cxx:390
 AliMUONPainterMatrix.cxx:391
 AliMUONPainterMatrix.cxx:392
 AliMUONPainterMatrix.cxx:393
 AliMUONPainterMatrix.cxx:394
 AliMUONPainterMatrix.cxx:395
 AliMUONPainterMatrix.cxx:396
 AliMUONPainterMatrix.cxx:397
 AliMUONPainterMatrix.cxx:398
 AliMUONPainterMatrix.cxx:399
 AliMUONPainterMatrix.cxx:400
 AliMUONPainterMatrix.cxx:401
 AliMUONPainterMatrix.cxx:402
 AliMUONPainterMatrix.cxx:403
 AliMUONPainterMatrix.cxx:404
 AliMUONPainterMatrix.cxx:405
 AliMUONPainterMatrix.cxx:406
 AliMUONPainterMatrix.cxx:407
 AliMUONPainterMatrix.cxx:408
 AliMUONPainterMatrix.cxx:409
 AliMUONPainterMatrix.cxx:410
 AliMUONPainterMatrix.cxx:411
 AliMUONPainterMatrix.cxx:412
 AliMUONPainterMatrix.cxx:413
 AliMUONPainterMatrix.cxx:414
 AliMUONPainterMatrix.cxx:415
 AliMUONPainterMatrix.cxx:416
 AliMUONPainterMatrix.cxx:417
 AliMUONPainterMatrix.cxx:418
 AliMUONPainterMatrix.cxx:419
 AliMUONPainterMatrix.cxx:420
 AliMUONPainterMatrix.cxx:421
 AliMUONPainterMatrix.cxx:422
 AliMUONPainterMatrix.cxx:423
 AliMUONPainterMatrix.cxx:424
 AliMUONPainterMatrix.cxx:425
 AliMUONPainterMatrix.cxx:426
 AliMUONPainterMatrix.cxx:427
 AliMUONPainterMatrix.cxx:428
 AliMUONPainterMatrix.cxx:429
 AliMUONPainterMatrix.cxx:430
 AliMUONPainterMatrix.cxx:431
 AliMUONPainterMatrix.cxx:432
 AliMUONPainterMatrix.cxx:433
 AliMUONPainterMatrix.cxx:434
 AliMUONPainterMatrix.cxx:435
 AliMUONPainterMatrix.cxx:436
 AliMUONPainterMatrix.cxx:437
 AliMUONPainterMatrix.cxx:438
 AliMUONPainterMatrix.cxx:439
 AliMUONPainterMatrix.cxx:440
 AliMUONPainterMatrix.cxx:441
 AliMUONPainterMatrix.cxx:442
 AliMUONPainterMatrix.cxx:443
 AliMUONPainterMatrix.cxx:444
 AliMUONPainterMatrix.cxx:445
 AliMUONPainterMatrix.cxx:446
 AliMUONPainterMatrix.cxx:447
 AliMUONPainterMatrix.cxx:448
 AliMUONPainterMatrix.cxx:449
 AliMUONPainterMatrix.cxx:450
 AliMUONPainterMatrix.cxx:451
 AliMUONPainterMatrix.cxx:452
 AliMUONPainterMatrix.cxx:453
 AliMUONPainterMatrix.cxx:454
 AliMUONPainterMatrix.cxx:455
 AliMUONPainterMatrix.cxx:456
 AliMUONPainterMatrix.cxx:457
 AliMUONPainterMatrix.cxx:458
 AliMUONPainterMatrix.cxx:459
 AliMUONPainterMatrix.cxx:460
 AliMUONPainterMatrix.cxx:461
 AliMUONPainterMatrix.cxx:462
 AliMUONPainterMatrix.cxx:463
 AliMUONPainterMatrix.cxx:464
 AliMUONPainterMatrix.cxx:465
 AliMUONPainterMatrix.cxx:466
 AliMUONPainterMatrix.cxx:467
 AliMUONPainterMatrix.cxx:468
 AliMUONPainterMatrix.cxx:469
 AliMUONPainterMatrix.cxx:470
 AliMUONPainterMatrix.cxx:471
 AliMUONPainterMatrix.cxx:472
 AliMUONPainterMatrix.cxx:473
 AliMUONPainterMatrix.cxx:474
 AliMUONPainterMatrix.cxx:475
 AliMUONPainterMatrix.cxx:476
 AliMUONPainterMatrix.cxx:477
 AliMUONPainterMatrix.cxx:478
 AliMUONPainterMatrix.cxx:479
 AliMUONPainterMatrix.cxx:480
 AliMUONPainterMatrix.cxx:481
 AliMUONPainterMatrix.cxx:482
 AliMUONPainterMatrix.cxx:483
 AliMUONPainterMatrix.cxx:484
 AliMUONPainterMatrix.cxx:485
 AliMUONPainterMatrix.cxx:486
 AliMUONPainterMatrix.cxx:487
 AliMUONPainterMatrix.cxx:488
 AliMUONPainterMatrix.cxx:489
 AliMUONPainterMatrix.cxx:490
 AliMUONPainterMatrix.cxx:491
 AliMUONPainterMatrix.cxx:492
 AliMUONPainterMatrix.cxx:493
 AliMUONPainterMatrix.cxx:494
 AliMUONPainterMatrix.cxx:495
 AliMUONPainterMatrix.cxx:496
 AliMUONPainterMatrix.cxx:497
 AliMUONPainterMatrix.cxx:498
 AliMUONPainterMatrix.cxx:499
 AliMUONPainterMatrix.cxx:500
 AliMUONPainterMatrix.cxx:501
 AliMUONPainterMatrix.cxx:502
 AliMUONPainterMatrix.cxx:503
 AliMUONPainterMatrix.cxx:504
 AliMUONPainterMatrix.cxx:505
 AliMUONPainterMatrix.cxx:506
 AliMUONPainterMatrix.cxx:507
 AliMUONPainterMatrix.cxx:508
 AliMUONPainterMatrix.cxx:509
 AliMUONPainterMatrix.cxx:510
 AliMUONPainterMatrix.cxx:511
 AliMUONPainterMatrix.cxx:512
 AliMUONPainterMatrix.cxx:513
 AliMUONPainterMatrix.cxx:514
 AliMUONPainterMatrix.cxx:515
 AliMUONPainterMatrix.cxx:516
 AliMUONPainterMatrix.cxx:517
 AliMUONPainterMatrix.cxx:518
 AliMUONPainterMatrix.cxx:519
 AliMUONPainterMatrix.cxx:520
 AliMUONPainterMatrix.cxx:521
 AliMUONPainterMatrix.cxx:522
 AliMUONPainterMatrix.cxx:523
 AliMUONPainterMatrix.cxx:524
 AliMUONPainterMatrix.cxx:525
 AliMUONPainterMatrix.cxx:526
 AliMUONPainterMatrix.cxx:527
 AliMUONPainterMatrix.cxx:528
 AliMUONPainterMatrix.cxx:529
 AliMUONPainterMatrix.cxx:530
 AliMUONPainterMatrix.cxx:531
 AliMUONPainterMatrix.cxx:532
 AliMUONPainterMatrix.cxx:533
 AliMUONPainterMatrix.cxx:534
 AliMUONPainterMatrix.cxx:535
 AliMUONPainterMatrix.cxx:536
 AliMUONPainterMatrix.cxx:537
 AliMUONPainterMatrix.cxx:538
 AliMUONPainterMatrix.cxx:539
 AliMUONPainterMatrix.cxx:540
 AliMUONPainterMatrix.cxx:541
 AliMUONPainterMatrix.cxx:542
 AliMUONPainterMatrix.cxx:543
 AliMUONPainterMatrix.cxx:544
 AliMUONPainterMatrix.cxx:545
 AliMUONPainterMatrix.cxx:546
 AliMUONPainterMatrix.cxx:547
 AliMUONPainterMatrix.cxx:548
 AliMUONPainterMatrix.cxx:549
 AliMUONPainterMatrix.cxx:550
 AliMUONPainterMatrix.cxx:551
 AliMUONPainterMatrix.cxx:552
 AliMUONPainterMatrix.cxx:553
 AliMUONPainterMatrix.cxx:554
 AliMUONPainterMatrix.cxx:555
 AliMUONPainterMatrix.cxx:556
 AliMUONPainterMatrix.cxx:557
 AliMUONPainterMatrix.cxx:558
 AliMUONPainterMatrix.cxx:559
 AliMUONPainterMatrix.cxx:560
 AliMUONPainterMatrix.cxx:561
 AliMUONPainterMatrix.cxx:562
 AliMUONPainterMatrix.cxx:563
 AliMUONPainterMatrix.cxx:564
 AliMUONPainterMatrix.cxx:565
 AliMUONPainterMatrix.cxx:566
 AliMUONPainterMatrix.cxx:567
 AliMUONPainterMatrix.cxx:568
 AliMUONPainterMatrix.cxx:569
 AliMUONPainterMatrix.cxx:570
 AliMUONPainterMatrix.cxx:571
 AliMUONPainterMatrix.cxx:572
 AliMUONPainterMatrix.cxx:573
 AliMUONPainterMatrix.cxx:574
 AliMUONPainterMatrix.cxx:575
 AliMUONPainterMatrix.cxx:576
 AliMUONPainterMatrix.cxx:577
 AliMUONPainterMatrix.cxx:578
 AliMUONPainterMatrix.cxx:579
 AliMUONPainterMatrix.cxx:580
 AliMUONPainterMatrix.cxx:581
 AliMUONPainterMatrix.cxx:582
 AliMUONPainterMatrix.cxx:583
 AliMUONPainterMatrix.cxx:584
 AliMUONPainterMatrix.cxx:585
 AliMUONPainterMatrix.cxx:586
 AliMUONPainterMatrix.cxx:587
 AliMUONPainterMatrix.cxx:588
 AliMUONPainterMatrix.cxx:589
 AliMUONPainterMatrix.cxx:590
 AliMUONPainterMatrix.cxx:591
 AliMUONPainterMatrix.cxx:592
 AliMUONPainterMatrix.cxx:593
 AliMUONPainterMatrix.cxx:594
 AliMUONPainterMatrix.cxx:595
 AliMUONPainterMatrix.cxx:596
 AliMUONPainterMatrix.cxx:597
 AliMUONPainterMatrix.cxx:598
 AliMUONPainterMatrix.cxx:599
 AliMUONPainterMatrix.cxx:600
 AliMUONPainterMatrix.cxx:601
 AliMUONPainterMatrix.cxx:602
 AliMUONPainterMatrix.cxx:603
 AliMUONPainterMatrix.cxx:604
 AliMUONPainterMatrix.cxx:605
 AliMUONPainterMatrix.cxx:606
 AliMUONPainterMatrix.cxx:607
 AliMUONPainterMatrix.cxx:608
 AliMUONPainterMatrix.cxx:609
 AliMUONPainterMatrix.cxx:610
 AliMUONPainterMatrix.cxx:611