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

#include "AliLog.h"
#include "AliMUON2DMap.h"
#include "AliMUONCalibParamND.h"
#include "AliMUONContour.h"
#include "AliMUONContourPainter.h"
#include "AliMUONObjectPair.h"
#include "AliMUONPainterGroup.h"
#include "AliMUONPainterHelper.h"
#include "AliMUONPainterDataRegistry.h"
#include "AliMUONTrackerDataHistogrammer.h"
#include "AliMUONVTrackerData.h"
#include "AliMpManuUID.h"
#include <Riostream.h>
#include <TCanvas.h>
#include <TClass.h>
#include <TClassMenuItem.h>
#include <TH1.h>
#include <TList.h>
#include <TMap.h>
#include <TMath.h>
#include <TMethodCall.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TROOT.h>
#include <TVirtualPad.h>
#include <cassert>
#include <float.h>

/// \class AliMUONVPainter
///
/// Base class for a graphical object representing some part of the
/// MUON tracking system.
/// 
/// A painter is a graphical representation of some part (e.g. detection element,
/// full chamber, one manu, etc...) of the MUON tracking system.
///
/// A painter is a double fold hierarchical structure. 
///
/// First, a painter is part of a tree (mother->childrens), that describe
/// the natural organization of the spectrometer. For instance, a chamber
/// painter has children that are the detection element, the detection elements
/// themselves contain manus, which in turn contain channels.
///
/// Second, a painter contains a number of "painter groups" (see AliMUONPainterGroup). 
/// A group gather all the painters of the same type, 
/// where the type is a string identifying which part of system we're dealing
/// with (chamber, DE, manu, etc...)
///
/// The groups are there to ease the manipulation of similar painters, e.g. if
/// we want to hide all detection elements, we hide the "detection element group"
/// Some special groups are the responder and the plotter groups. The responder
/// group is the group which is currently responding to mouse events. 
/// The plotter group is the group which is supposed to represent some data.
/// 
/// There are two ways to represent the painter on screen. In any case, we can
/// outline the painter (i.e. draw its borders) (see AliMUONVPainter::PaintOutline).
/// In the cases where the painter is attached to some data source (i.e. it is
/// used to represent some data about its type, e.g. the mean charge on some manu),
/// we can draw the full area of the contour, using some color (see
/// AliMUONVPainter::PaintArea).
///
/// Note that you can outline several types of painters (aka groups) at the same
/// time, but you cannot plot several groups at the same time.
///
/// Painters are TQObject so they can emit signals.
///
/// Currently emitted signal are : 
///
/// void Clicked(AliMUONVPainter* painter, Double_t*);
/// DoubleClicked(AliMUONVPainter* painter, Double_t*);
///
/// to know which and where a painter was (double-) clicked.
///
/// \author Laurent Aphecetche, Subatech

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

//_____________________________________________________________________________
AliMUONVPainter::AliMUONVPainter(TRootIOCtor*) : TObject(), 
TQObject(),
fHistogram(0x0),
fPainterGroups(0x0),
fResponderGroup(0x0),
fName(""),
fPathName(""),
fType(""),
fMother(0x0),
fGroup(0x0),
fContour(0x0),
fChildren(0x0),
fPlotterGroup(0x0),
fBorderFactor(1.1),
fPad(0x0),
fAttributes(),
fLineColor(1),
fLineWidth(1),
fIsValid(kTRUE)
{
  /// streamer ctor
  SetID(-1,-1);
}

//_____________________________________________________________________________
AliMUONVPainter::AliMUONVPainter(const char* type)
: TObject(), 
  TQObject(),
  fHistogram(0x0),
  fPainterGroups(0x0),
  fResponderGroup(0x0),
  fName(""),
  fPathName(""),
  fType(type),
  fMother(0x0),
  fGroup(0x0),
  fContour(0x0),
  fChildren(0x0),
  fPlotterGroup(0x0),
  fBorderFactor(1.1),
  fPad(0x0),
  fAttributes(),
  fLineColor(1),
  fLineWidth(1),
  fIsValid(kTRUE)
{
    /// ctor
    SetID(-1,-1);
}

//_____________________________________________________________________________
AliMUONVPainter::AliMUONVPainter(const AliMUONVPainter& rhs)
: TObject(rhs),
TQObject(),
fHistogram(0x0),
fPainterGroups(0x0),
fResponderGroup(0x0),
fName(""),
fPathName(""),
fType(""),
fMother(0x0),
fGroup(0x0),
fContour(0x0),
fChildren(0x0),
fPlotterGroup(0x0),
fBorderFactor(1.0),
fPad(0x0),
fAttributes(),
fLineColor(-1),
fLineWidth(-1),
fIsValid(kTRUE)
{
  /// copy ctor
  rhs.Copy(*this);
}

//_____________________________________________________________________________
AliMUONVPainter& 
AliMUONVPainter::operator=(const AliMUONVPainter& rhs)
{
  /// assignment operator
  if ( this != &rhs ) 
  {
    rhs.Copy(*this);
  }
  return *this;
}

//_____________________________________________________________________________
AliMUONVPainter::~AliMUONVPainter()
{
  /// dtor
  delete fChildren;
  delete fHistogram;
}

//_____________________________________________________________________________
AliMpArea
AliMUONVPainter::Area() const
{
  /// Return the area covered by this painter
  if ( fContour ) 
  {
    return fContour->Area();
  }
  else
  {
    AliWarning("Returning an invalid area, as contour is not defined");
    return AliMpArea();
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::Add(AliMUONVPainter* painter)
{
  /// Add a child painter
  if (!fChildren) fChildren = new TObjArray;
  assert(painter->Mother()==0x0);
  fChildren->Add(painter);
  painter->SetMother(this);
}

//_____________________________________________________________________________
TCollection*
AliMUONVPainter::Children() const
{
  /// Return the list of childrens
  return fChildren;
}

//_____________________________________________________________________________
void
AliMUONVPainter::Clicked(AliMUONVPainter* painter, Double_t* values)
{
  /// Let our mother emit the signal as clients are probably connected to
  /// our (grand)mother, not to us

  if ( Mother() ) 
  {
    Mother()->Clicked(painter,values);
  }
  else
  {
    Long_t param[] = { (Long_t)painter,(Long_t)values };
  
    Emit("Clicked(AliMUONVPainter*,Double_t*)",param);
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::ShiftClicked(AliMUONVPainter* painter, Double_t* values)
{
  /// Let our mother emit the signal as clients are probably connected to
  /// our (grand)mother, not to us
  
  if ( Mother() ) 
  {
    Mother()->ShiftClicked(painter,values);
  }
  else
  {
    Long_t param[] = { (Long_t)painter,(Long_t)values };
    
    Emit("ShiftClicked(AliMUONVPainter*,Double_t*)",param);
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::ComputeDataRange(const AliMUONVTrackerData&, Int_t,
                                  Double_t&, Double_t&) const
{
  /// Should compute the min and max of a given data source
  AliError("Not implemented. Please fixe me");
}

//_____________________________________________________________________________
TString
AliMUONVPainter::ContourName() const
{
  /// Default implementation of the contour name.
  
  TString name(PathName());

  name += "-";
  name += fAttributes.Name();
  
  return name;
}

//_____________________________________________________________________________
void
AliMUONVPainter::Copy(TObject& object) const
{
  /// Copy this to object.
  
  TObject::Copy(object);

  AliMUONVPainter& painter = static_cast<AliMUONVPainter&>(object);

  painter.fType = fType;
  painter.fName = fName;
  painter.fPathName = fPathName;
  
  painter.fMother = 0x0;
  painter.fContour = fContour;
  
  painter.fGroup = 0x0;
  painter.fResponderGroup = 0x0;
  painter.fPlotterGroup = 0x0;
  
  painter.fBorderFactor = fBorderFactor;

  painter.fAttributes = fAttributes;
  
  painter.fAttributes.SetCathodeAndPlaneDisabled(kFALSE);
  
  painter.fPad = fPad;
  
  painter.fLineColor = fLineColor;
  painter.fLineWidth = fLineWidth;
  
  painter.fIsValid = fIsValid;
  
  delete painter.fChildren;
  painter.fChildren = 0x0;
  
  painter.fID[0] = fID[0];
  painter.fID[1] = fID[1];
  
  delete painter.fHistogram;
  painter.fHistogram = 0x0;
  
  TIter next(fChildren);
  AliMUONVPainter* p;
  
  while ( ( p = static_cast<AliMUONVPainter*>(next()) ) )
  {
    painter.Add(static_cast<AliMUONVPainter*>(p->Clone()));
  }
    
  painter.UpdateGroupsFrom(*this);
  
  object.ResetBit(kCanDelete);
}

//_____________________________________________________________________________
AliMUONPainterGroup*
AliMUONVPainter::CreateGroup(const char* type, Int_t depth)
{
  /// Create a painter group at a given depth
  
  if (!fPainterGroups) fPainterGroups = new TMap;
  TObject* o = fPainterGroups->GetValue(type);
  if (o)
  {
    AliError(Form("Group %s is already there ! Check this",type));
    return 0x0;
  }
  AliMUONPainterGroup* group = new AliMUONPainterGroup(type,depth);
  fPainterGroups->Add(new TObjString(type),group);
  return group;
}

//_____________________________________________________________________________
void
AliMUONVPainter::CreateGroups()
{
  /// Groups our children into groups
  
  if ( Mother() ) 
  {
    AliFatal("Not supposed to create groups for a children");
  }
  
  TList list;
  FlatList(list);
  
  TIter next(&list);
  AliMUONVPainter* painter;
  
  while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
  {
    AliMUONPainterGroup* group = Group(painter->Type());
    if (!group) 
    {
      group = CreateGroup(painter->Type(),painter->Depth());
    }
    group->Add(painter);
  }
}

//_____________________________________________________________________________
AliMUONVPainter*
AliMUONVPainter::Detach() const
{
  /// Make this a new top painter (i.e. a master)
  
  AliDebug(1,Form("Detaching %s",GetName()));
           
  AliMUONVPainter* p = static_cast<AliMUONVPainter*>(Clone());
  
  AliMUONVPainter* master = Master();
  
  if ( master )
  {
    AliDebug(1,Form("UpdatingGroups of the detached painter %s from its master %s",
                    p->GetName(),master->GetName()));
    p->UpdateGroupsFrom(*master);
  }
  
  return p;
}

//_____________________________________________________________________________
Int_t
AliMUONVPainter::Depth() const
{
  /// Return our depth in the hierarchy
  
  if ( Mother() ) 
  {
    return Mother()->Depth() + 1;
  }
  else
  {
    return 0;
  }
}

//_____________________________________________________________________________
Int_t	
AliMUONVPainter::DistancetoPrimitive(Int_t px, Int_t py)
{
  /// See TObject::DistancetoPrimitive
  
  static const Int_t kBigValue = 999999;

  if (!gPad) return kBigValue;
  
  Double_t x,y;
  
  AliMUONVPainter* painter = GetPainter(px,py,x,y);
  
  x=y=0.0; // to avoid compiler warning
  
  if ( painter == this) return 0;
  
  return kBigValue;
}

//_____________________________________________________________________________
void
AliMUONVPainter::DoubleClicked(AliMUONVPainter*, Double_t*)
{
  /// Should emit the DoubleClicked signal (if I knew how to detect those events...)
  
  AliWarning("Please implement me !");

  //  if ( fMother )
//  {
//    // let our top mother emit the signal as clients are probably connected to
//    // our mother, not to us
//    Top()->DoubleClicked(painter,values);
//  }
//  else
//  {
//    Long_t param[] = { (Long_t)painter,(Long_t)values };
//    
//    Emit("DoubleClicked(AliMUONVPainter*,Double_t*)",param);
//  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::Draw(Option_t* opt)
{
  /// Append ourselves to the current pad
  
  if (!gPad) 
  {
    gROOT->MakeDefCanvas();
  }
  
  Bool_t kMustSetRange(kFALSE);
 
  TString sopt(opt);
  sopt.ToUpper();
 
  if (sopt.Contains("R") ) kMustSetRange=kTRUE;
  
  if (kMustSetRange)
  {
    Double_t x1,y1,x2,y2;
    GetBoundingBox(x1,y1,x2,y2);
    if ( gPad) gPad->Range(x1,y1,x2,y2);
  }
 
  if ( !fMother && !fPainterGroups ) 
  {
    CreateGroups();
  }
  
  TIter next(fChildren);
  AliMUONVPainter* painter;
  while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
  {
    painter->Draw();
  }  
  
  AppendPad(opt);
  
  fPad = gPad;
}

//_____________________________________________________________________________
void 
AliMUONVPainter::ExecuteEvent(Int_t event, Int_t px, Int_t py)
{
  /// Handle graphics events
  
  Double_t x,y;
    
  AliMUONVPainter* painter = GetPainter(px,py,x,y);

  if ( painter == this ) 
  {
    Double_t values[] = { x,y };
  
    switch (event)
    {
      case kButton2Up:
        ShiftClicked(this,values);
        break;
      case kButton1Up:
        Clicked(this,values);      
        break;
      case kButton1Double:
        //the following statement is required against other loop executions before returning (depending on the time between the clicks) 
        gPad->GetCanvas()->HandleInput((EEventType)-1,0,0); 
        DoubleClicked(this,values);
        break;
    }
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::FlatList(TList& list)
{
  /// Make a flat list of our children (and ourselves)
  
  TIter next(fChildren);
  AliMUONVPainter* painter;
  while ( ( painter = static_cast<AliMUONVPainter*>(next())))
  {
    painter->FlatList(list);
  }
  
  list.Add(this);
}

//_____________________________________________________________________________
void 
AliMUONVPainter::GetBoundingBox(Double_t& x1, Double_t& y1, 
                                Double_t& x2, Double_t& y2) const
{
  /// Get the bounding box = our area
  AliMpArea area(Area().GetPositionX(),
                 Area().GetPositionY(),
                 Area().GetDimensionX()*fBorderFactor,
                 Area().GetDimensionY()*fBorderFactor);

  x1 = area.LeftBorder();
  y1 = area.DownBorder();
  x2 = area.RightBorder();
  y2 = area.UpBorder();
}

//_____________________________________________________________________________
char*	
AliMUONVPainter::GetObjectInfo(Int_t, Int_t) const
{
  /// See TObject::GetObjectInfo
  return const_cast<char*>(GetName());
}

//_____________________________________________________________________________
AliMUONVPainter* 
AliMUONVPainter::GetPainter(Int_t px, Int_t py, Double_t& x, Double_t& y) const
{
  /// Get the responder painter at integer position (px,py), and get back its
  /// absolute position (x,y)
  
  PixelToPad(px,py,x,y);
  
  if ( !IsInside(x,y) ) return 0x0;
  
  if ( fGroup->IsResponder() ) return const_cast<AliMUONVPainter*>(this);
  
  if (fChildren)
  {
    TIter next(fChildren);
    AliMUONVPainter* painter;
    
    while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
    {
      AliMUONVPainter* p = painter->GetPainter(px,py,x,y);
      if (p) return p;
    }
  }  
  
  return 0x0;
}

//_____________________________________________________________________________
void
AliMUONVPainter::GetTypes(TObjArray& types) const
{
  /// Get the list of types (as a TObjArray of TObjString) 
  /// of our hierarchy, sorted alphabetically
  
  types.SetOwner(kTRUE);
  types.Clear();

  TObjArray tmp;
  tmp.SetOwner(kFALSE);
  
  TIter next(fPainterGroups);
  
  TObjString* str;
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    AliMUONPainterGroup* group = Group(str->String().Data());
    tmp.AddLast(group);
  }
  
  tmp.Sort();
  
  Int_t n = tmp.GetLast()+1;
  
  Int_t* index = new Int_t[n];
  
  Int_t* a = new Int_t[n];
  
  for ( Int_t i = 0; i < n; ++i )
  {
    AliMUONPainterGroup* group = static_cast<AliMUONPainterGroup*>(tmp.At(i));
    a[i] = group->Depth();
  }
  
  TMath::Sort(n,a,index,kFALSE);
  
  for ( Int_t i = 0; i < n; ++i ) 
  {
    AliMUONPainterGroup* group = static_cast<AliMUONPainterGroup*>(tmp.At(index[i]));
    types.AddLast(new TObjString(group->Type()));
  }
  
  delete[] index;
  delete[] a;
}

//_____________________________________________________________________________
AliMUONPainterGroup*
AliMUONVPainter::Group(const char* type) const
{
  /// Returns a group of a given type
  if (!fPainterGroups) return 0x0;
  return static_cast<AliMUONPainterGroup*>(fPainterGroups->GetValue(type));
}

//_____________________________________________________________________________
AliMUONPainterGroup*
AliMUONVPainter::Group(Int_t depth) const
{
  /// Returns a group of a given depth
  if (!fPainterGroups) return 0x0;
  TIter next(fPainterGroups);
  TObjString* groupName;
  while ( ( groupName = static_cast<TObjString*>(next()) ) )
  {
    AliMUONPainterGroup* group = static_cast<AliMUONPainterGroup*>
    (fPainterGroups->GetValue(groupName->String().Data()));
    if ( group->Depth() == depth ) 
    {
      return group;
    }
  }
  return 0x0;
}

//_____________________________________________________________________________
Bool_t 
AliMUONVPainter::IsInside(Double_t x, Double_t y) const
{
  /// Whether point (x,y) is inside our contour
  if (!fContour) return kFALSE;
  return fContour->IsInside(x,y);
}

//_____________________________________________________________________________
Bool_t 
AliMUONVPainter::IsResponder() const
{
  /// Whether we're responding to mouse events
  return MotherGroup()->IsResponder();
}

//_____________________________________________________________________________
AliMUONVPainter*
AliMUONVPainter::Master() const
{
  /// Return the top of the hierarchy
  
  /// if we get no mother, we are the master
  
  if ( Mother() == 0x0 ) return const_cast<AliMUONVPainter*>(this);
  
  AliMUONVPainter* p = Mother();
  
  while ( p->Mother() )
  {
    p = p->Mother();
  }
  
  return p;
}

//_____________________________________________________________________________
void
AliMUONVPainter::Paint(Option_t*)
{
  /// Paint ourselves of screen
  /// If we have some data (i.e. we're belonging to the plotter group)
  /// we use PaintArea.
  /// And if must be outlined, then we do that too.
  
  if ( !MotherGroup()->IsVisible() ) return;

  if ( MotherGroup()->IsPlotter() ) 
  {
    PaintArea(*(MotherGroup()->Data()),
              MotherGroup()->DataIndex(),
              MotherGroup()->DataMin(),
              MotherGroup()->DataMax());
  }
  
  if ( MotherGroup()->IsOutlined() )
  {
    PaintOutline();
  }
  
  if ( IsExcluded() )
  {
    AliMUONContourPainter::Paint(*fContour,1,1,2); // red fill with black thin outline
  }
}

//_____________________________________________________________________________
TString
AliMUONVPainter::Describe(const AliMUONVTrackerData&, Int_t, Double_t, Double_t)
{
  /// Default implementation (must be overriden)
  AliError(Form("%s : implement me",GetName()));
  return "";
}

//_____________________________________________________________________________
void
AliMUONVPainter::PaintArea(const AliMUONVTrackerData&, Int_t, Double_t, Double_t)
{
  /// Default implementation (must be overriden)
  AliError(Form("%s : implement me",GetName()));
  return;
}

//_____________________________________________________________________________
void
AliMUONVPainter::PaintOutline(Int_t color, Int_t width, Double_t /*x*/, Double_t /*y*/)
{
  /// Default implementation is simply a drawing of the contour lines,
  /// not using the optional (x,y)
  Int_t c = color >= 0 ? color : GetLineColor();
  Int_t w = width >= 0 ? width : GetLineWidth();
  
  AliMUONContourPainter::Paint(*fContour,c,w);
}

//_____________________________________________________________________________
void 
AliMUONVPainter::PixelToPad(Int_t px, Int_t py, Double_t& x, Double_t& y)
{
  /// convert (px,py) into pad position (x,y)
  
  x = gPad->PadtoX(gPad->AbsPixeltoX(px));
  y = gPad->PadtoY(gPad->AbsPixeltoY(py));
}

//_____________________________________________________________________________
void
AliMUONVPainter::Print(Option_t* opt) const
{
  /// Printout
  for ( Int_t i = 0; i < Depth()*4; ++i ) 
  {
    cout << " ";
  }
  
  if ( !IsValid() ) cout << "!!!INVALID!!!" << endl;
  
  cout << Form("%p Name %s Depth %d ContourName %s ID=(%d,%d)",
               this,GetName(),Depth(),ContourName().Data(),ID0(),ID1());
  
  if ( fResponderGroup )
  {
    cout << Form(" Responder group %p %s",fResponderGroup,fResponderGroup->Type());
  }
  if ( fPlotterGroup )
  {
    cout << Form(" Plotter group %p %s",fPlotterGroup,fPlotterGroup->Type());
  }
  if ( Mother() )
  {
    cout << Form(" Mother %p %s",Mother(),Mother()->GetName());
  }
  if ( MotherGroup() )
  {
    cout << Form(" Group %p %s ",MotherGroup(),MotherGroup()->Type());
  }
  
  if ( fChildren ) 
  {
    cout << Form(" %d children",fChildren->GetLast()+1);
  }
  
  cout << endl;
  
  TString sopt(opt);
  sopt.ToUpper();
  
  if ( fChildren && ( sopt == "FULL" || sopt == "CHILD" ) ) 
  {
    TIter next(fChildren);
    AliMUONVPainter* painter;
    while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
    {
      painter->Print(opt);
    }
  }
  
  if ( fPainterGroups && ( sopt == "FULL" || sopt == "GROUP" ) )
  {
    TIter next(fPainterGroups);
    TObjString* groupName;
    while ( ( groupName = static_cast<TObjString*>(next()) ) )
    {
      AliMUONPainterGroup* group = Group(groupName->String().Data());
      group->Print(opt);
    }
  }
}

//_____________________________________________________________________________
void 
AliMUONVPainter::SetAttributes(const AliMUONAttPainter& attributes)
{
  /// Set our attributes  
  fAttributes = attributes;
}

//_____________________________________________________________________________
void 
AliMUONVPainter::SetContour(AliMUONContour* contour)
{
  /// Set out contour
  if (!contour)
  {
    AliError(Form("Setting a null contour for painter %s : bad idea !",PathName().Data()));
  }
  fContour = contour;
}

//_____________________________________________________________________________
void
AliMUONVPainter::SetData(const char* pattern, AliMUONVTrackerData* data,
                         Int_t dataIndex)
{
  /// Tell all painters which type matches pattern that they should
  /// monitor a given data source
  
  if ( !fPainterGroups ) 
  {
    CreateGroups();
  }
  
  if ( data ) 
  {
    data->Connect("Destroyed()",ClassName(),this,Form("SetData(=\"%s\",0x0,-1)",pattern));
  }
  
  TIter next(fPainterGroups);
  TObjString* str;
  
  fPlotterGroup = 0x0;
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    AliMUONPainterGroup* group = static_cast<AliMUONPainterGroup*>(fPainterGroups->GetValue(str));
        
    if ( group->Matches(pattern) )
    {
      group->SetData(data,dataIndex);
      if ( data ) 
      {        
        fPlotterGroup = group;
      }
    }
    else
    {
      group->SetData(0x0,-1);
    }
  }
  
  // Update context menus
  TList list;
  FlatList(list);
  
  TIter pnext(&list);
  AliMUONVPainter* p;
  
  AliMUONPainterGroup* group = Master()->PlotterGroup();
  
  while ( ( p = static_cast<AliMUONVPainter*>(pnext()) ) )
  {
    TList* l = p->IsA()->GetMenuList();
  
    l->Delete();
  
    TClassMenuItem* n(0x0);
    
    l->Add(new TClassMenuItem(TClassMenuItem::kPopupUserFunction,p->IsA(),
                              "Include","Include",p,"",-1,kTRUE));
    l->Add(new TClassMenuItem(TClassMenuItem::kPopupUserFunction,p->IsA(),
                              "Exclude","Exclude",p,"",-1,kTRUE));    
    
    if ( group )  
    {
      if ( data && data->IsHistogrammed(0) ) 
      {
        // Add histo drawing to the popup menu
        TString name("Draw histogram of ");
        
        name += data->ExternalDimensionName(0);
        
        n = new TClassMenuItem(TClassMenuItem::kPopupUserFunction,p->IsA(),
                               name.Data(),"DrawHistogram0",p,"",-1,kTRUE);
        l->Add(n);
        
        name += " clone";
        
        n = new TClassMenuItem(TClassMenuItem::kPopupUserFunction,p->IsA(),
                               name.Data(),"DrawHistogramClone0",p,"",-1,kTRUE);
        l->Add(n);
      }
      
      Int_t nd = data->IsSingleEvent() ? data->ExternalDimension() : data->ExternalDimension()*2;
      
      for ( Int_t i = 0; i < nd; ++i ) 
      {
        n = new TClassMenuItem(TClassMenuItem::kPopupUserFunction,p->IsA(),
                               Form("Draw %s clone",data->DimensionName(i).Data()),
                               Form("DrawInternalHistogramClone%d",i),p,"",-1,kTRUE);
        l->Add(n);
      } 
    }
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::DrawInternalHistogram(Int_t dim) const
{
  /// Draw histogram (and delete the previous one)
  
  delete fHistogram;
  fHistogram = 0x0;
  
  DrawInternalHistogramClone(dim);
}

//_____________________________________________________________________________
void
AliMUONVPainter::DrawInternalHistogramClone(Int_t dim) const
{
  /// Draw histogram 
  
  fHistogram = AliMUONTrackerDataHistogrammer::CreateHisto(*this,-1,dim);
  
  if (fHistogram) 
  {
    new TCanvas();
    fHistogram->Draw();
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::DrawHistogram(Double_t* values) const
{
  /// Draw histogram (and delete the previous one)

  delete fHistogram;
  fHistogram = 0x0;
  
  DrawHistogramClone(values);
}

//_____________________________________________________________________________
void
AliMUONVPainter::DrawHistogramClone(Double_t*) const
{
  /// Draw histogram 
  
  fHistogram = AliMUONTrackerDataHistogrammer::CreateHisto(*this,0,-1);
  
  if (fHistogram) 
  {
    new TCanvas();
    fHistogram->Draw();
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::FillManuList(TObjArray& manuList) const
{
  /// Append to manulist
  /// This is the default implementation, which just calls the FillManuList
  /// of all our children.
  /// Some derived class might need to override this in order to exclude
  /// some children from the fill.
  
  TIter next(Children());
  
  AliMUONVPainter* p;
  
  while ( ( p = static_cast<AliMUONVPainter*>(next()) ) )
  {
    p->FillManuList(manuList);
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::SetLine(Int_t depth, Int_t lineColor, Int_t lineWidth)
{
  /// Set the line attributes of painters at a given depth
  AliMUONPainterGroup* group = Group(depth);
  if ( group )
  {
    group->SetLine(lineColor,lineWidth);
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::SetMother(AliMUONVPainter* painter)
{
  /// Set our mother
  fMother = painter;
}

//_____________________________________________________________________________
void
AliMUONVPainter::SetOutlined(const char* pattern, Bool_t flag)
{
  /// Decide whether or not painters which type matches pattern 
  /// should be outlined
  
  AliDebug(1,Form("pattern=%s flag=%d",pattern,flag));
  
  if (!fPainterGroups)
  {
    CreateGroups();
  }
  
  TIter next(fPainterGroups);
  TObjString* str;
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    AliMUONPainterGroup* group = static_cast<AliMUONPainterGroup*>(fPainterGroups->GetValue(str));
    if ( group->Matches(pattern) )
    {
      group->SetOutlined(flag);
    }
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::SetResponder(const char* pattern)
{
  /// Set the painters matching pattern to be the responder
  
  AliDebug(1,Form("pattern=%s",pattern));
  
  if (!fPainterGroups)
  {
    CreateGroups();
  }
  
  TIter next(fPainterGroups);
  TObjString* str;
  
  fResponderGroup = 0x0;
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    AliMUONPainterGroup* group = static_cast<AliMUONPainterGroup*>(fPainterGroups->GetValue(str));
    if ( group->Matches(pattern) )
    {
      AliDebug(1,Form("group %s is matching pattern %s : setting to responder",
                      group->Type(),pattern));
      group->SetResponder(kTRUE);
      fResponderGroup = group;
    }
    else
    {
      group->SetResponder(kFALSE);
    }
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::SetResponder(Int_t depth)
{
  /// Select as responder the *first* group that has a given depth
  
  AliDebug(1,Form("depth=%d",depth));
  
  if (!fPainterGroups)
  {
    CreateGroups();
  }
  
  TIter next(fPainterGroups);
  TObjString* str;
  
  fResponderGroup = 0x0;
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    AliMUONPainterGroup* group = static_cast<AliMUONPainterGroup*>(fPainterGroups->GetValue(str));
    if ( group->Depth() == depth ) 
    {
      AliDebug(1,Form("group %s has correct depth = %d, using as responder",
                      group->Type(),depth));
      group->SetResponder(kTRUE);
      fResponderGroup = group;
      break;
    }
    else
    {
      group->SetResponder(kFALSE);
    }
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::SetVisible(const char* pattern, Bool_t flag)
{
  /// Decide whether the painters matching pattern should be visible or not
  AliDebug(1,Form("pattern=%s flag=%d",pattern,flag));
  
  if (!fPainterGroups)
  {
    CreateGroups();
  }
  
  TIter next(fPainterGroups);
  TObjString* str;
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    AliMUONPainterGroup* group = static_cast<AliMUONPainterGroup*>(fPainterGroups->GetValue(str));
    if ( group->Matches(pattern) )
    {
      group->SetVisible(flag);
    }
  }
}

//_____________________________________________________________________________
void
AliMUONVPainter::UpdateGroupsFrom(const AliMUONVPainter& painter)
{
  /// (re)Create groups
  delete fPainterGroups;
  fPainterGroups = 0x0;
  
  CreateGroups();
  
  // and copy the status of responder, plotter and visible
  if ( painter.ResponderGroup() ) 
  {
    SetResponder(painter.ResponderGroup()->Type());
  }
  
  if ( painter.PlotterGroup() ) 
  {
    SetData(painter.PlotterGroup()->Type(),
            painter.PlotterGroup()->Data(),
            painter.PlotterGroup()->DataIndex());
    PlotterGroup()->SetDataRange(painter.PlotterGroup()->DataMin(),
                                 painter.PlotterGroup()->DataMax());
  }
  
  TObjArray types;
  painter.GetTypes(types);
  TIter next(&types);
  TObjString* groupName;
  
  while ( ( groupName = static_cast<TObjString*>(next()) ) )
  {
    AliMUONPainterGroup* group = painter.Group(groupName->String().Data());      
    if ( group->IsVisible() ) 
    {
      SetVisible(group->Type(),kTRUE);
    }
    else
    {
      SetVisible(group->Type(),kFALSE);
    }

    if ( group->IsOutlined() ) 
    {
      SetOutlined(group->Type(),kTRUE);
    }
    else
    {
      SetOutlined(group->Type(),kFALSE);
    }
    
    SetLine(group->Depth(),group->GetLineColor(),group->GetLineWidth());
  }
  
}

//_____________________________________________________________________________
void
AliMUONVPainter::Include()
{
  /// Include this painter
  AliInfo(GetName());
  
  /// Update the global interactive read out configuration  
  WriteIROC(1);
}

//_____________________________________________________________________________
void
AliMUONVPainter::GetIROCManuList(TObjArray& manuList)
{
  /// Get the list of manus spanned by this painter AND by its dual

  FillManuList(manuList);
  
  // get our dual
  AliMUONAttPainter att(Attributes());
  
  att.Invert();
  
  att.SetCathodeAndPlaneDisabled(kTRUE);
  
  AliMUONVPainter* p = AliMUONVPainter::CreatePainter(ClassName(),att,ID0(),ID1());
  
  if (p)
  {
    p->FillManuList(manuList);
  }
  
  delete p;
}

//_____________________________________________________________________________
void
AliMUONVPainter::WriteIROC(Double_t value)
{
  /// Update the interactive readout configuration
  
  TObjArray manuList;
  GetIROCManuList(manuList);
  
  AliMpManuUID* muid;
  TIter nextm(&manuList);
  AliMUON2DMap store(true);
  
  while ((muid=static_cast<AliMpManuUID*>(nextm())))
  {
    AliMUONVCalibParam* param = new AliMUONCalibParamND(1,64,
                                                        muid->DetElemId(),
                                                        muid->ManuId(),value);
    store.Add(param);
  }
  
  InteractiveReadOutConfig()->Replace(store);
}

//_____________________________________________________________________________
void
AliMUONVPainter::Exclude()
{
  /// Exclude this painter
  AliInfo(GetName());
  
  /// Update the global interactive read out configuration
  WriteIROC(0.0);
}

//_____________________________________________________________________________
AliMUONVTrackerData*
AliMUONVPainter::InteractiveReadOutConfig() const
{
  /// get the interactive readout config object
  return AliMUONPainterDataRegistry::Instance()->InteractiveReadOutConfig();
}

//_____________________________________________________________________________
AliMUONVPainter* 
AliMUONVPainter::CreatePainter(const char* className, 
                               const AliMUONAttPainter& att, 
                               Int_t id1, Int_t id2)
{
  /// Create a painter (factory method)
  
  TClass* c = TClass::GetClass(className);
  
  if (!c)
  {
    AliErrorClass(Form("Cannot get class %s",className));
    return 0x0;
  }
  
  Int_t n(0);
  
  TMethodCall call;
  
  call.InitWithPrototype(c,className,"AliMUONAttPainter&,Int_t");
  
  if (call.IsValid()) n = 1;
  else
  {
    call.InitWithPrototype(c,className,"AliMUONAttPainter&,Int_t,Int_t");
    
    if ( call.IsValid() ) n = 2;
  }
  
  Long_t returnLong(0x0);
  
  if ( n ==1 ) 
  {
    Long_t params[] = { (Long_t)(&att), (Long_t)(id1) };
    call.SetParamPtrs((void*)(params));
    call.Execute((void*)(0x0),returnLong);
  }
  else if ( n == 2 ) 
  {
    Long_t params[] = { (Long_t)(&att), (Long_t)(id1), (Long_t)(id2) };
    call.SetParamPtrs((void*)(params));
    call.Execute((void*)(0x0),returnLong);
  }
  
  if (!returnLong)
  {
    AliErrorClass(Form("Cannot create a painter of class %s",className));
  }
  
  AliMUONVPainter* rv = reinterpret_cast<AliMUONVPainter*> (returnLong);
  
  if (!rv->IsValid()) 
  {
    AliErrorClass(Form("Painter of class %s is not valid",className));
    delete rv;
    rv = 0x0;
  }
  return rv;
}

//_____________________________________________________________________________
void
AliMUONVPainter::PaintArea(Int_t fillColor)
{
  /// Draw a filled area
  AliMUONContourPainter::Paint(*(Contour()),-1,-1,fillColor);
}
 AliMUONVPainter.cxx:1
 AliMUONVPainter.cxx:2
 AliMUONVPainter.cxx:3
 AliMUONVPainter.cxx:4
 AliMUONVPainter.cxx:5
 AliMUONVPainter.cxx:6
 AliMUONVPainter.cxx:7
 AliMUONVPainter.cxx:8
 AliMUONVPainter.cxx:9
 AliMUONVPainter.cxx:10
 AliMUONVPainter.cxx:11
 AliMUONVPainter.cxx:12
 AliMUONVPainter.cxx:13
 AliMUONVPainter.cxx:14
 AliMUONVPainter.cxx:15
 AliMUONVPainter.cxx:16
 AliMUONVPainter.cxx:17
 AliMUONVPainter.cxx:18
 AliMUONVPainter.cxx:19
 AliMUONVPainter.cxx:20
 AliMUONVPainter.cxx:21
 AliMUONVPainter.cxx:22
 AliMUONVPainter.cxx:23
 AliMUONVPainter.cxx:24
 AliMUONVPainter.cxx:25
 AliMUONVPainter.cxx:26
 AliMUONVPainter.cxx:27
 AliMUONVPainter.cxx:28
 AliMUONVPainter.cxx:29
 AliMUONVPainter.cxx:30
 AliMUONVPainter.cxx:31
 AliMUONVPainter.cxx:32
 AliMUONVPainter.cxx:33
 AliMUONVPainter.cxx:34
 AliMUONVPainter.cxx:35
 AliMUONVPainter.cxx:36
 AliMUONVPainter.cxx:37
 AliMUONVPainter.cxx:38
 AliMUONVPainter.cxx:39
 AliMUONVPainter.cxx:40
 AliMUONVPainter.cxx:41
 AliMUONVPainter.cxx:42
 AliMUONVPainter.cxx:43
 AliMUONVPainter.cxx:44
 AliMUONVPainter.cxx:45
 AliMUONVPainter.cxx:46
 AliMUONVPainter.cxx:47
 AliMUONVPainter.cxx:48
 AliMUONVPainter.cxx:49
 AliMUONVPainter.cxx:50
 AliMUONVPainter.cxx:51
 AliMUONVPainter.cxx:52
 AliMUONVPainter.cxx:53
 AliMUONVPainter.cxx:54
 AliMUONVPainter.cxx:55
 AliMUONVPainter.cxx:56
 AliMUONVPainter.cxx:57
 AliMUONVPainter.cxx:58
 AliMUONVPainter.cxx:59
 AliMUONVPainter.cxx:60
 AliMUONVPainter.cxx:61
 AliMUONVPainter.cxx:62
 AliMUONVPainter.cxx:63
 AliMUONVPainter.cxx:64
 AliMUONVPainter.cxx:65
 AliMUONVPainter.cxx:66
 AliMUONVPainter.cxx:67
 AliMUONVPainter.cxx:68
 AliMUONVPainter.cxx:69
 AliMUONVPainter.cxx:70
 AliMUONVPainter.cxx:71
 AliMUONVPainter.cxx:72
 AliMUONVPainter.cxx:73
 AliMUONVPainter.cxx:74
 AliMUONVPainter.cxx:75
 AliMUONVPainter.cxx:76
 AliMUONVPainter.cxx:77
 AliMUONVPainter.cxx:78
 AliMUONVPainter.cxx:79
 AliMUONVPainter.cxx:80
 AliMUONVPainter.cxx:81
 AliMUONVPainter.cxx:82
 AliMUONVPainter.cxx:83
 AliMUONVPainter.cxx:84
 AliMUONVPainter.cxx:85
 AliMUONVPainter.cxx:86
 AliMUONVPainter.cxx:87
 AliMUONVPainter.cxx:88
 AliMUONVPainter.cxx:89
 AliMUONVPainter.cxx:90
 AliMUONVPainter.cxx:91
 AliMUONVPainter.cxx:92
 AliMUONVPainter.cxx:93
 AliMUONVPainter.cxx:94
 AliMUONVPainter.cxx:95
 AliMUONVPainter.cxx:96
 AliMUONVPainter.cxx:97
 AliMUONVPainter.cxx:98
 AliMUONVPainter.cxx:99
 AliMUONVPainter.cxx:100
 AliMUONVPainter.cxx:101
 AliMUONVPainter.cxx:102
 AliMUONVPainter.cxx:103
 AliMUONVPainter.cxx:104
 AliMUONVPainter.cxx:105
 AliMUONVPainter.cxx:106
 AliMUONVPainter.cxx:107
 AliMUONVPainter.cxx:108
 AliMUONVPainter.cxx:109
 AliMUONVPainter.cxx:110
 AliMUONVPainter.cxx:111
 AliMUONVPainter.cxx:112
 AliMUONVPainter.cxx:113
 AliMUONVPainter.cxx:114
 AliMUONVPainter.cxx:115
 AliMUONVPainter.cxx:116
 AliMUONVPainter.cxx:117
 AliMUONVPainter.cxx:118
 AliMUONVPainter.cxx:119
 AliMUONVPainter.cxx:120
 AliMUONVPainter.cxx:121
 AliMUONVPainter.cxx:122
 AliMUONVPainter.cxx:123
 AliMUONVPainter.cxx:124
 AliMUONVPainter.cxx:125
 AliMUONVPainter.cxx:126
 AliMUONVPainter.cxx:127
 AliMUONVPainter.cxx:128
 AliMUONVPainter.cxx:129
 AliMUONVPainter.cxx:130
 AliMUONVPainter.cxx:131
 AliMUONVPainter.cxx:132
 AliMUONVPainter.cxx:133
 AliMUONVPainter.cxx:134
 AliMUONVPainter.cxx:135
 AliMUONVPainter.cxx:136
 AliMUONVPainter.cxx:137
 AliMUONVPainter.cxx:138
 AliMUONVPainter.cxx:139
 AliMUONVPainter.cxx:140
 AliMUONVPainter.cxx:141
 AliMUONVPainter.cxx:142
 AliMUONVPainter.cxx:143
 AliMUONVPainter.cxx:144
 AliMUONVPainter.cxx:145
 AliMUONVPainter.cxx:146
 AliMUONVPainter.cxx:147
 AliMUONVPainter.cxx:148
 AliMUONVPainter.cxx:149
 AliMUONVPainter.cxx:150
 AliMUONVPainter.cxx:151
 AliMUONVPainter.cxx:152
 AliMUONVPainter.cxx:153
 AliMUONVPainter.cxx:154
 AliMUONVPainter.cxx:155
 AliMUONVPainter.cxx:156
 AliMUONVPainter.cxx:157
 AliMUONVPainter.cxx:158
 AliMUONVPainter.cxx:159
 AliMUONVPainter.cxx:160
 AliMUONVPainter.cxx:161
 AliMUONVPainter.cxx:162
 AliMUONVPainter.cxx:163
 AliMUONVPainter.cxx:164
 AliMUONVPainter.cxx:165
 AliMUONVPainter.cxx:166
 AliMUONVPainter.cxx:167
 AliMUONVPainter.cxx:168
 AliMUONVPainter.cxx:169
 AliMUONVPainter.cxx:170
 AliMUONVPainter.cxx:171
 AliMUONVPainter.cxx:172
 AliMUONVPainter.cxx:173
 AliMUONVPainter.cxx:174
 AliMUONVPainter.cxx:175
 AliMUONVPainter.cxx:176
 AliMUONVPainter.cxx:177
 AliMUONVPainter.cxx:178
 AliMUONVPainter.cxx:179
 AliMUONVPainter.cxx:180
 AliMUONVPainter.cxx:181
 AliMUONVPainter.cxx:182
 AliMUONVPainter.cxx:183
 AliMUONVPainter.cxx:184
 AliMUONVPainter.cxx:185
 AliMUONVPainter.cxx:186
 AliMUONVPainter.cxx:187
 AliMUONVPainter.cxx:188
 AliMUONVPainter.cxx:189
 AliMUONVPainter.cxx:190
 AliMUONVPainter.cxx:191
 AliMUONVPainter.cxx:192
 AliMUONVPainter.cxx:193
 AliMUONVPainter.cxx:194
 AliMUONVPainter.cxx:195
 AliMUONVPainter.cxx:196
 AliMUONVPainter.cxx:197
 AliMUONVPainter.cxx:198
 AliMUONVPainter.cxx:199
 AliMUONVPainter.cxx:200
 AliMUONVPainter.cxx:201
 AliMUONVPainter.cxx:202
 AliMUONVPainter.cxx:203
 AliMUONVPainter.cxx:204
 AliMUONVPainter.cxx:205
 AliMUONVPainter.cxx:206
 AliMUONVPainter.cxx:207
 AliMUONVPainter.cxx:208
 AliMUONVPainter.cxx:209
 AliMUONVPainter.cxx:210
 AliMUONVPainter.cxx:211
 AliMUONVPainter.cxx:212
 AliMUONVPainter.cxx:213
 AliMUONVPainter.cxx:214
 AliMUONVPainter.cxx:215
 AliMUONVPainter.cxx:216
 AliMUONVPainter.cxx:217
 AliMUONVPainter.cxx:218
 AliMUONVPainter.cxx:219
 AliMUONVPainter.cxx:220
 AliMUONVPainter.cxx:221
 AliMUONVPainter.cxx:222
 AliMUONVPainter.cxx:223
 AliMUONVPainter.cxx:224
 AliMUONVPainter.cxx:225
 AliMUONVPainter.cxx:226
 AliMUONVPainter.cxx:227
 AliMUONVPainter.cxx:228
 AliMUONVPainter.cxx:229
 AliMUONVPainter.cxx:230
 AliMUONVPainter.cxx:231
 AliMUONVPainter.cxx:232
 AliMUONVPainter.cxx:233
 AliMUONVPainter.cxx:234
 AliMUONVPainter.cxx:235
 AliMUONVPainter.cxx:236
 AliMUONVPainter.cxx:237
 AliMUONVPainter.cxx:238
 AliMUONVPainter.cxx:239
 AliMUONVPainter.cxx:240
 AliMUONVPainter.cxx:241
 AliMUONVPainter.cxx:242
 AliMUONVPainter.cxx:243
 AliMUONVPainter.cxx:244
 AliMUONVPainter.cxx:245
 AliMUONVPainter.cxx:246
 AliMUONVPainter.cxx:247
 AliMUONVPainter.cxx:248
 AliMUONVPainter.cxx:249
 AliMUONVPainter.cxx:250
 AliMUONVPainter.cxx:251
 AliMUONVPainter.cxx:252
 AliMUONVPainter.cxx:253
 AliMUONVPainter.cxx:254
 AliMUONVPainter.cxx:255
 AliMUONVPainter.cxx:256
 AliMUONVPainter.cxx:257
 AliMUONVPainter.cxx:258
 AliMUONVPainter.cxx:259
 AliMUONVPainter.cxx:260
 AliMUONVPainter.cxx:261
 AliMUONVPainter.cxx:262
 AliMUONVPainter.cxx:263
 AliMUONVPainter.cxx:264
 AliMUONVPainter.cxx:265
 AliMUONVPainter.cxx:266
 AliMUONVPainter.cxx:267
 AliMUONVPainter.cxx:268
 AliMUONVPainter.cxx:269
 AliMUONVPainter.cxx:270
 AliMUONVPainter.cxx:271
 AliMUONVPainter.cxx:272
 AliMUONVPainter.cxx:273
 AliMUONVPainter.cxx:274
 AliMUONVPainter.cxx:275
 AliMUONVPainter.cxx:276
 AliMUONVPainter.cxx:277
 AliMUONVPainter.cxx:278
 AliMUONVPainter.cxx:279
 AliMUONVPainter.cxx:280
 AliMUONVPainter.cxx:281
 AliMUONVPainter.cxx:282
 AliMUONVPainter.cxx:283
 AliMUONVPainter.cxx:284
 AliMUONVPainter.cxx:285
 AliMUONVPainter.cxx:286
 AliMUONVPainter.cxx:287
 AliMUONVPainter.cxx:288
 AliMUONVPainter.cxx:289
 AliMUONVPainter.cxx:290
 AliMUONVPainter.cxx:291
 AliMUONVPainter.cxx:292
 AliMUONVPainter.cxx:293
 AliMUONVPainter.cxx:294
 AliMUONVPainter.cxx:295
 AliMUONVPainter.cxx:296
 AliMUONVPainter.cxx:297
 AliMUONVPainter.cxx:298
 AliMUONVPainter.cxx:299
 AliMUONVPainter.cxx:300
 AliMUONVPainter.cxx:301
 AliMUONVPainter.cxx:302
 AliMUONVPainter.cxx:303
 AliMUONVPainter.cxx:304
 AliMUONVPainter.cxx:305
 AliMUONVPainter.cxx:306
 AliMUONVPainter.cxx:307
 AliMUONVPainter.cxx:308
 AliMUONVPainter.cxx:309
 AliMUONVPainter.cxx:310
 AliMUONVPainter.cxx:311
 AliMUONVPainter.cxx:312
 AliMUONVPainter.cxx:313
 AliMUONVPainter.cxx:314
 AliMUONVPainter.cxx:315
 AliMUONVPainter.cxx:316
 AliMUONVPainter.cxx:317
 AliMUONVPainter.cxx:318
 AliMUONVPainter.cxx:319
 AliMUONVPainter.cxx:320
 AliMUONVPainter.cxx:321
 AliMUONVPainter.cxx:322
 AliMUONVPainter.cxx:323
 AliMUONVPainter.cxx:324
 AliMUONVPainter.cxx:325
 AliMUONVPainter.cxx:326
 AliMUONVPainter.cxx:327
 AliMUONVPainter.cxx:328
 AliMUONVPainter.cxx:329
 AliMUONVPainter.cxx:330
 AliMUONVPainter.cxx:331
 AliMUONVPainter.cxx:332
 AliMUONVPainter.cxx:333
 AliMUONVPainter.cxx:334
 AliMUONVPainter.cxx:335
 AliMUONVPainter.cxx:336
 AliMUONVPainter.cxx:337
 AliMUONVPainter.cxx:338
 AliMUONVPainter.cxx:339
 AliMUONVPainter.cxx:340
 AliMUONVPainter.cxx:341
 AliMUONVPainter.cxx:342
 AliMUONVPainter.cxx:343
 AliMUONVPainter.cxx:344
 AliMUONVPainter.cxx:345
 AliMUONVPainter.cxx:346
 AliMUONVPainter.cxx:347
 AliMUONVPainter.cxx:348
 AliMUONVPainter.cxx:349
 AliMUONVPainter.cxx:350
 AliMUONVPainter.cxx:351
 AliMUONVPainter.cxx:352
 AliMUONVPainter.cxx:353
 AliMUONVPainter.cxx:354
 AliMUONVPainter.cxx:355
 AliMUONVPainter.cxx:356
 AliMUONVPainter.cxx:357
 AliMUONVPainter.cxx:358
 AliMUONVPainter.cxx:359
 AliMUONVPainter.cxx:360
 AliMUONVPainter.cxx:361
 AliMUONVPainter.cxx:362
 AliMUONVPainter.cxx:363
 AliMUONVPainter.cxx:364
 AliMUONVPainter.cxx:365
 AliMUONVPainter.cxx:366
 AliMUONVPainter.cxx:367
 AliMUONVPainter.cxx:368
 AliMUONVPainter.cxx:369
 AliMUONVPainter.cxx:370
 AliMUONVPainter.cxx:371
 AliMUONVPainter.cxx:372
 AliMUONVPainter.cxx:373
 AliMUONVPainter.cxx:374
 AliMUONVPainter.cxx:375
 AliMUONVPainter.cxx:376
 AliMUONVPainter.cxx:377
 AliMUONVPainter.cxx:378
 AliMUONVPainter.cxx:379
 AliMUONVPainter.cxx:380
 AliMUONVPainter.cxx:381
 AliMUONVPainter.cxx:382
 AliMUONVPainter.cxx:383
 AliMUONVPainter.cxx:384
 AliMUONVPainter.cxx:385
 AliMUONVPainter.cxx:386
 AliMUONVPainter.cxx:387
 AliMUONVPainter.cxx:388
 AliMUONVPainter.cxx:389
 AliMUONVPainter.cxx:390
 AliMUONVPainter.cxx:391
 AliMUONVPainter.cxx:392
 AliMUONVPainter.cxx:393
 AliMUONVPainter.cxx:394
 AliMUONVPainter.cxx:395
 AliMUONVPainter.cxx:396
 AliMUONVPainter.cxx:397
 AliMUONVPainter.cxx:398
 AliMUONVPainter.cxx:399
 AliMUONVPainter.cxx:400
 AliMUONVPainter.cxx:401
 AliMUONVPainter.cxx:402
 AliMUONVPainter.cxx:403
 AliMUONVPainter.cxx:404
 AliMUONVPainter.cxx:405
 AliMUONVPainter.cxx:406
 AliMUONVPainter.cxx:407
 AliMUONVPainter.cxx:408
 AliMUONVPainter.cxx:409
 AliMUONVPainter.cxx:410
 AliMUONVPainter.cxx:411
 AliMUONVPainter.cxx:412
 AliMUONVPainter.cxx:413
 AliMUONVPainter.cxx:414
 AliMUONVPainter.cxx:415
 AliMUONVPainter.cxx:416
 AliMUONVPainter.cxx:417
 AliMUONVPainter.cxx:418
 AliMUONVPainter.cxx:419
 AliMUONVPainter.cxx:420
 AliMUONVPainter.cxx:421
 AliMUONVPainter.cxx:422
 AliMUONVPainter.cxx:423
 AliMUONVPainter.cxx:424
 AliMUONVPainter.cxx:425
 AliMUONVPainter.cxx:426
 AliMUONVPainter.cxx:427
 AliMUONVPainter.cxx:428
 AliMUONVPainter.cxx:429
 AliMUONVPainter.cxx:430
 AliMUONVPainter.cxx:431
 AliMUONVPainter.cxx:432
 AliMUONVPainter.cxx:433
 AliMUONVPainter.cxx:434
 AliMUONVPainter.cxx:435
 AliMUONVPainter.cxx:436
 AliMUONVPainter.cxx:437
 AliMUONVPainter.cxx:438
 AliMUONVPainter.cxx:439
 AliMUONVPainter.cxx:440
 AliMUONVPainter.cxx:441
 AliMUONVPainter.cxx:442
 AliMUONVPainter.cxx:443
 AliMUONVPainter.cxx:444
 AliMUONVPainter.cxx:445
 AliMUONVPainter.cxx:446
 AliMUONVPainter.cxx:447
 AliMUONVPainter.cxx:448
 AliMUONVPainter.cxx:449
 AliMUONVPainter.cxx:450
 AliMUONVPainter.cxx:451
 AliMUONVPainter.cxx:452
 AliMUONVPainter.cxx:453
 AliMUONVPainter.cxx:454
 AliMUONVPainter.cxx:455
 AliMUONVPainter.cxx:456
 AliMUONVPainter.cxx:457
 AliMUONVPainter.cxx:458
 AliMUONVPainter.cxx:459
 AliMUONVPainter.cxx:460
 AliMUONVPainter.cxx:461
 AliMUONVPainter.cxx:462
 AliMUONVPainter.cxx:463
 AliMUONVPainter.cxx:464
 AliMUONVPainter.cxx:465
 AliMUONVPainter.cxx:466
 AliMUONVPainter.cxx:467
 AliMUONVPainter.cxx:468
 AliMUONVPainter.cxx:469
 AliMUONVPainter.cxx:470
 AliMUONVPainter.cxx:471
 AliMUONVPainter.cxx:472
 AliMUONVPainter.cxx:473
 AliMUONVPainter.cxx:474
 AliMUONVPainter.cxx:475
 AliMUONVPainter.cxx:476
 AliMUONVPainter.cxx:477
 AliMUONVPainter.cxx:478
 AliMUONVPainter.cxx:479
 AliMUONVPainter.cxx:480
 AliMUONVPainter.cxx:481
 AliMUONVPainter.cxx:482
 AliMUONVPainter.cxx:483
 AliMUONVPainter.cxx:484
 AliMUONVPainter.cxx:485
 AliMUONVPainter.cxx:486
 AliMUONVPainter.cxx:487
 AliMUONVPainter.cxx:488
 AliMUONVPainter.cxx:489
 AliMUONVPainter.cxx:490
 AliMUONVPainter.cxx:491
 AliMUONVPainter.cxx:492
 AliMUONVPainter.cxx:493
 AliMUONVPainter.cxx:494
 AliMUONVPainter.cxx:495
 AliMUONVPainter.cxx:496
 AliMUONVPainter.cxx:497
 AliMUONVPainter.cxx:498
 AliMUONVPainter.cxx:499
 AliMUONVPainter.cxx:500
 AliMUONVPainter.cxx:501
 AliMUONVPainter.cxx:502
 AliMUONVPainter.cxx:503
 AliMUONVPainter.cxx:504
 AliMUONVPainter.cxx:505
 AliMUONVPainter.cxx:506
 AliMUONVPainter.cxx:507
 AliMUONVPainter.cxx:508
 AliMUONVPainter.cxx:509
 AliMUONVPainter.cxx:510
 AliMUONVPainter.cxx:511
 AliMUONVPainter.cxx:512
 AliMUONVPainter.cxx:513
 AliMUONVPainter.cxx:514
 AliMUONVPainter.cxx:515
 AliMUONVPainter.cxx:516
 AliMUONVPainter.cxx:517
 AliMUONVPainter.cxx:518
 AliMUONVPainter.cxx:519
 AliMUONVPainter.cxx:520
 AliMUONVPainter.cxx:521
 AliMUONVPainter.cxx:522
 AliMUONVPainter.cxx:523
 AliMUONVPainter.cxx:524
 AliMUONVPainter.cxx:525
 AliMUONVPainter.cxx:526
 AliMUONVPainter.cxx:527
 AliMUONVPainter.cxx:528
 AliMUONVPainter.cxx:529
 AliMUONVPainter.cxx:530
 AliMUONVPainter.cxx:531
 AliMUONVPainter.cxx:532
 AliMUONVPainter.cxx:533
 AliMUONVPainter.cxx:534
 AliMUONVPainter.cxx:535
 AliMUONVPainter.cxx:536
 AliMUONVPainter.cxx:537
 AliMUONVPainter.cxx:538
 AliMUONVPainter.cxx:539
 AliMUONVPainter.cxx:540
 AliMUONVPainter.cxx:541
 AliMUONVPainter.cxx:542
 AliMUONVPainter.cxx:543
 AliMUONVPainter.cxx:544
 AliMUONVPainter.cxx:545
 AliMUONVPainter.cxx:546
 AliMUONVPainter.cxx:547
 AliMUONVPainter.cxx:548
 AliMUONVPainter.cxx:549
 AliMUONVPainter.cxx:550
 AliMUONVPainter.cxx:551
 AliMUONVPainter.cxx:552
 AliMUONVPainter.cxx:553
 AliMUONVPainter.cxx:554
 AliMUONVPainter.cxx:555
 AliMUONVPainter.cxx:556
 AliMUONVPainter.cxx:557
 AliMUONVPainter.cxx:558
 AliMUONVPainter.cxx:559
 AliMUONVPainter.cxx:560
 AliMUONVPainter.cxx:561
 AliMUONVPainter.cxx:562
 AliMUONVPainter.cxx:563
 AliMUONVPainter.cxx:564
 AliMUONVPainter.cxx:565
 AliMUONVPainter.cxx:566
 AliMUONVPainter.cxx:567
 AliMUONVPainter.cxx:568
 AliMUONVPainter.cxx:569
 AliMUONVPainter.cxx:570
 AliMUONVPainter.cxx:571
 AliMUONVPainter.cxx:572
 AliMUONVPainter.cxx:573
 AliMUONVPainter.cxx:574
 AliMUONVPainter.cxx:575
 AliMUONVPainter.cxx:576
 AliMUONVPainter.cxx:577
 AliMUONVPainter.cxx:578
 AliMUONVPainter.cxx:579
 AliMUONVPainter.cxx:580
 AliMUONVPainter.cxx:581
 AliMUONVPainter.cxx:582
 AliMUONVPainter.cxx:583
 AliMUONVPainter.cxx:584
 AliMUONVPainter.cxx:585
 AliMUONVPainter.cxx:586
 AliMUONVPainter.cxx:587
 AliMUONVPainter.cxx:588
 AliMUONVPainter.cxx:589
 AliMUONVPainter.cxx:590
 AliMUONVPainter.cxx:591
 AliMUONVPainter.cxx:592
 AliMUONVPainter.cxx:593
 AliMUONVPainter.cxx:594
 AliMUONVPainter.cxx:595
 AliMUONVPainter.cxx:596
 AliMUONVPainter.cxx:597
 AliMUONVPainter.cxx:598
 AliMUONVPainter.cxx:599
 AliMUONVPainter.cxx:600
 AliMUONVPainter.cxx:601
 AliMUONVPainter.cxx:602
 AliMUONVPainter.cxx:603
 AliMUONVPainter.cxx:604
 AliMUONVPainter.cxx:605
 AliMUONVPainter.cxx:606
 AliMUONVPainter.cxx:607
 AliMUONVPainter.cxx:608
 AliMUONVPainter.cxx:609
 AliMUONVPainter.cxx:610
 AliMUONVPainter.cxx:611
 AliMUONVPainter.cxx:612
 AliMUONVPainter.cxx:613
 AliMUONVPainter.cxx:614
 AliMUONVPainter.cxx:615
 AliMUONVPainter.cxx:616
 AliMUONVPainter.cxx:617
 AliMUONVPainter.cxx:618
 AliMUONVPainter.cxx:619
 AliMUONVPainter.cxx:620
 AliMUONVPainter.cxx:621
 AliMUONVPainter.cxx:622
 AliMUONVPainter.cxx:623
 AliMUONVPainter.cxx:624
 AliMUONVPainter.cxx:625
 AliMUONVPainter.cxx:626
 AliMUONVPainter.cxx:627
 AliMUONVPainter.cxx:628
 AliMUONVPainter.cxx:629
 AliMUONVPainter.cxx:630
 AliMUONVPainter.cxx:631
 AliMUONVPainter.cxx:632
 AliMUONVPainter.cxx:633
 AliMUONVPainter.cxx:634
 AliMUONVPainter.cxx:635
 AliMUONVPainter.cxx:636
 AliMUONVPainter.cxx:637
 AliMUONVPainter.cxx:638
 AliMUONVPainter.cxx:639
 AliMUONVPainter.cxx:640
 AliMUONVPainter.cxx:641
 AliMUONVPainter.cxx:642
 AliMUONVPainter.cxx:643
 AliMUONVPainter.cxx:644
 AliMUONVPainter.cxx:645
 AliMUONVPainter.cxx:646
 AliMUONVPainter.cxx:647
 AliMUONVPainter.cxx:648
 AliMUONVPainter.cxx:649
 AliMUONVPainter.cxx:650
 AliMUONVPainter.cxx:651
 AliMUONVPainter.cxx:652
 AliMUONVPainter.cxx:653
 AliMUONVPainter.cxx:654
 AliMUONVPainter.cxx:655
 AliMUONVPainter.cxx:656
 AliMUONVPainter.cxx:657
 AliMUONVPainter.cxx:658
 AliMUONVPainter.cxx:659
 AliMUONVPainter.cxx:660
 AliMUONVPainter.cxx:661
 AliMUONVPainter.cxx:662
 AliMUONVPainter.cxx:663
 AliMUONVPainter.cxx:664
 AliMUONVPainter.cxx:665
 AliMUONVPainter.cxx:666
 AliMUONVPainter.cxx:667
 AliMUONVPainter.cxx:668
 AliMUONVPainter.cxx:669
 AliMUONVPainter.cxx:670
 AliMUONVPainter.cxx:671
 AliMUONVPainter.cxx:672
 AliMUONVPainter.cxx:673
 AliMUONVPainter.cxx:674
 AliMUONVPainter.cxx:675
 AliMUONVPainter.cxx:676
 AliMUONVPainter.cxx:677
 AliMUONVPainter.cxx:678
 AliMUONVPainter.cxx:679
 AliMUONVPainter.cxx:680
 AliMUONVPainter.cxx:681
 AliMUONVPainter.cxx:682
 AliMUONVPainter.cxx:683
 AliMUONVPainter.cxx:684
 AliMUONVPainter.cxx:685
 AliMUONVPainter.cxx:686
 AliMUONVPainter.cxx:687
 AliMUONVPainter.cxx:688
 AliMUONVPainter.cxx:689
 AliMUONVPainter.cxx:690
 AliMUONVPainter.cxx:691
 AliMUONVPainter.cxx:692
 AliMUONVPainter.cxx:693
 AliMUONVPainter.cxx:694
 AliMUONVPainter.cxx:695
 AliMUONVPainter.cxx:696
 AliMUONVPainter.cxx:697
 AliMUONVPainter.cxx:698
 AliMUONVPainter.cxx:699
 AliMUONVPainter.cxx:700
 AliMUONVPainter.cxx:701
 AliMUONVPainter.cxx:702
 AliMUONVPainter.cxx:703
 AliMUONVPainter.cxx:704
 AliMUONVPainter.cxx:705
 AliMUONVPainter.cxx:706
 AliMUONVPainter.cxx:707
 AliMUONVPainter.cxx:708
 AliMUONVPainter.cxx:709
 AliMUONVPainter.cxx:710
 AliMUONVPainter.cxx:711
 AliMUONVPainter.cxx:712
 AliMUONVPainter.cxx:713
 AliMUONVPainter.cxx:714
 AliMUONVPainter.cxx:715
 AliMUONVPainter.cxx:716
 AliMUONVPainter.cxx:717
 AliMUONVPainter.cxx:718
 AliMUONVPainter.cxx:719
 AliMUONVPainter.cxx:720
 AliMUONVPainter.cxx:721
 AliMUONVPainter.cxx:722
 AliMUONVPainter.cxx:723
 AliMUONVPainter.cxx:724
 AliMUONVPainter.cxx:725
 AliMUONVPainter.cxx:726
 AliMUONVPainter.cxx:727
 AliMUONVPainter.cxx:728
 AliMUONVPainter.cxx:729
 AliMUONVPainter.cxx:730
 AliMUONVPainter.cxx:731
 AliMUONVPainter.cxx:732
 AliMUONVPainter.cxx:733
 AliMUONVPainter.cxx:734
 AliMUONVPainter.cxx:735
 AliMUONVPainter.cxx:736
 AliMUONVPainter.cxx:737
 AliMUONVPainter.cxx:738
 AliMUONVPainter.cxx:739
 AliMUONVPainter.cxx:740
 AliMUONVPainter.cxx:741
 AliMUONVPainter.cxx:742
 AliMUONVPainter.cxx:743
 AliMUONVPainter.cxx:744
 AliMUONVPainter.cxx:745
 AliMUONVPainter.cxx:746
 AliMUONVPainter.cxx:747
 AliMUONVPainter.cxx:748
 AliMUONVPainter.cxx:749
 AliMUONVPainter.cxx:750
 AliMUONVPainter.cxx:751
 AliMUONVPainter.cxx:752
 AliMUONVPainter.cxx:753
 AliMUONVPainter.cxx:754
 AliMUONVPainter.cxx:755
 AliMUONVPainter.cxx:756
 AliMUONVPainter.cxx:757
 AliMUONVPainter.cxx:758
 AliMUONVPainter.cxx:759
 AliMUONVPainter.cxx:760
 AliMUONVPainter.cxx:761
 AliMUONVPainter.cxx:762
 AliMUONVPainter.cxx:763
 AliMUONVPainter.cxx:764
 AliMUONVPainter.cxx:765
 AliMUONVPainter.cxx:766
 AliMUONVPainter.cxx:767
 AliMUONVPainter.cxx:768
 AliMUONVPainter.cxx:769
 AliMUONVPainter.cxx:770
 AliMUONVPainter.cxx:771
 AliMUONVPainter.cxx:772
 AliMUONVPainter.cxx:773
 AliMUONVPainter.cxx:774
 AliMUONVPainter.cxx:775
 AliMUONVPainter.cxx:776
 AliMUONVPainter.cxx:777
 AliMUONVPainter.cxx:778
 AliMUONVPainter.cxx:779
 AliMUONVPainter.cxx:780
 AliMUONVPainter.cxx:781
 AliMUONVPainter.cxx:782
 AliMUONVPainter.cxx:783
 AliMUONVPainter.cxx:784
 AliMUONVPainter.cxx:785
 AliMUONVPainter.cxx:786
 AliMUONVPainter.cxx:787
 AliMUONVPainter.cxx:788
 AliMUONVPainter.cxx:789
 AliMUONVPainter.cxx:790
 AliMUONVPainter.cxx:791
 AliMUONVPainter.cxx:792
 AliMUONVPainter.cxx:793
 AliMUONVPainter.cxx:794
 AliMUONVPainter.cxx:795
 AliMUONVPainter.cxx:796
 AliMUONVPainter.cxx:797
 AliMUONVPainter.cxx:798
 AliMUONVPainter.cxx:799
 AliMUONVPainter.cxx:800
 AliMUONVPainter.cxx:801
 AliMUONVPainter.cxx:802
 AliMUONVPainter.cxx:803
 AliMUONVPainter.cxx:804
 AliMUONVPainter.cxx:805
 AliMUONVPainter.cxx:806
 AliMUONVPainter.cxx:807
 AliMUONVPainter.cxx:808
 AliMUONVPainter.cxx:809
 AliMUONVPainter.cxx:810
 AliMUONVPainter.cxx:811
 AliMUONVPainter.cxx:812
 AliMUONVPainter.cxx:813
 AliMUONVPainter.cxx:814
 AliMUONVPainter.cxx:815
 AliMUONVPainter.cxx:816
 AliMUONVPainter.cxx:817
 AliMUONVPainter.cxx:818
 AliMUONVPainter.cxx:819
 AliMUONVPainter.cxx:820
 AliMUONVPainter.cxx:821
 AliMUONVPainter.cxx:822
 AliMUONVPainter.cxx:823
 AliMUONVPainter.cxx:824
 AliMUONVPainter.cxx:825
 AliMUONVPainter.cxx:826
 AliMUONVPainter.cxx:827
 AliMUONVPainter.cxx:828
 AliMUONVPainter.cxx:829
 AliMUONVPainter.cxx:830
 AliMUONVPainter.cxx:831
 AliMUONVPainter.cxx:832
 AliMUONVPainter.cxx:833
 AliMUONVPainter.cxx:834
 AliMUONVPainter.cxx:835
 AliMUONVPainter.cxx:836
 AliMUONVPainter.cxx:837
 AliMUONVPainter.cxx:838
 AliMUONVPainter.cxx:839
 AliMUONVPainter.cxx:840
 AliMUONVPainter.cxx:841
 AliMUONVPainter.cxx:842
 AliMUONVPainter.cxx:843
 AliMUONVPainter.cxx:844
 AliMUONVPainter.cxx:845
 AliMUONVPainter.cxx:846
 AliMUONVPainter.cxx:847
 AliMUONVPainter.cxx:848
 AliMUONVPainter.cxx:849
 AliMUONVPainter.cxx:850
 AliMUONVPainter.cxx:851
 AliMUONVPainter.cxx:852
 AliMUONVPainter.cxx:853
 AliMUONVPainter.cxx:854
 AliMUONVPainter.cxx:855
 AliMUONVPainter.cxx:856
 AliMUONVPainter.cxx:857
 AliMUONVPainter.cxx:858
 AliMUONVPainter.cxx:859
 AliMUONVPainter.cxx:860
 AliMUONVPainter.cxx:861
 AliMUONVPainter.cxx:862
 AliMUONVPainter.cxx:863
 AliMUONVPainter.cxx:864
 AliMUONVPainter.cxx:865
 AliMUONVPainter.cxx:866
 AliMUONVPainter.cxx:867
 AliMUONVPainter.cxx:868
 AliMUONVPainter.cxx:869
 AliMUONVPainter.cxx:870
 AliMUONVPainter.cxx:871
 AliMUONVPainter.cxx:872
 AliMUONVPainter.cxx:873
 AliMUONVPainter.cxx:874
 AliMUONVPainter.cxx:875
 AliMUONVPainter.cxx:876
 AliMUONVPainter.cxx:877
 AliMUONVPainter.cxx:878
 AliMUONVPainter.cxx:879
 AliMUONVPainter.cxx:880
 AliMUONVPainter.cxx:881
 AliMUONVPainter.cxx:882
 AliMUONVPainter.cxx:883
 AliMUONVPainter.cxx:884
 AliMUONVPainter.cxx:885
 AliMUONVPainter.cxx:886
 AliMUONVPainter.cxx:887
 AliMUONVPainter.cxx:888
 AliMUONVPainter.cxx:889
 AliMUONVPainter.cxx:890
 AliMUONVPainter.cxx:891
 AliMUONVPainter.cxx:892
 AliMUONVPainter.cxx:893
 AliMUONVPainter.cxx:894
 AliMUONVPainter.cxx:895
 AliMUONVPainter.cxx:896
 AliMUONVPainter.cxx:897
 AliMUONVPainter.cxx:898
 AliMUONVPainter.cxx:899
 AliMUONVPainter.cxx:900
 AliMUONVPainter.cxx:901
 AliMUONVPainter.cxx:902
 AliMUONVPainter.cxx:903
 AliMUONVPainter.cxx:904
 AliMUONVPainter.cxx:905
 AliMUONVPainter.cxx:906
 AliMUONVPainter.cxx:907
 AliMUONVPainter.cxx:908
 AliMUONVPainter.cxx:909
 AliMUONVPainter.cxx:910
 AliMUONVPainter.cxx:911
 AliMUONVPainter.cxx:912
 AliMUONVPainter.cxx:913
 AliMUONVPainter.cxx:914
 AliMUONVPainter.cxx:915
 AliMUONVPainter.cxx:916
 AliMUONVPainter.cxx:917
 AliMUONVPainter.cxx:918
 AliMUONVPainter.cxx:919
 AliMUONVPainter.cxx:920
 AliMUONVPainter.cxx:921
 AliMUONVPainter.cxx:922
 AliMUONVPainter.cxx:923
 AliMUONVPainter.cxx:924
 AliMUONVPainter.cxx:925
 AliMUONVPainter.cxx:926
 AliMUONVPainter.cxx:927
 AliMUONVPainter.cxx:928
 AliMUONVPainter.cxx:929
 AliMUONVPainter.cxx:930
 AliMUONVPainter.cxx:931
 AliMUONVPainter.cxx:932
 AliMUONVPainter.cxx:933
 AliMUONVPainter.cxx:934
 AliMUONVPainter.cxx:935
 AliMUONVPainter.cxx:936
 AliMUONVPainter.cxx:937
 AliMUONVPainter.cxx:938
 AliMUONVPainter.cxx:939
 AliMUONVPainter.cxx:940
 AliMUONVPainter.cxx:941
 AliMUONVPainter.cxx:942
 AliMUONVPainter.cxx:943
 AliMUONVPainter.cxx:944
 AliMUONVPainter.cxx:945
 AliMUONVPainter.cxx:946
 AliMUONVPainter.cxx:947
 AliMUONVPainter.cxx:948
 AliMUONVPainter.cxx:949
 AliMUONVPainter.cxx:950
 AliMUONVPainter.cxx:951
 AliMUONVPainter.cxx:952
 AliMUONVPainter.cxx:953
 AliMUONVPainter.cxx:954
 AliMUONVPainter.cxx:955
 AliMUONVPainter.cxx:956
 AliMUONVPainter.cxx:957
 AliMUONVPainter.cxx:958
 AliMUONVPainter.cxx:959
 AliMUONVPainter.cxx:960
 AliMUONVPainter.cxx:961
 AliMUONVPainter.cxx:962
 AliMUONVPainter.cxx:963
 AliMUONVPainter.cxx:964
 AliMUONVPainter.cxx:965
 AliMUONVPainter.cxx:966
 AliMUONVPainter.cxx:967
 AliMUONVPainter.cxx:968
 AliMUONVPainter.cxx:969
 AliMUONVPainter.cxx:970
 AliMUONVPainter.cxx:971
 AliMUONVPainter.cxx:972
 AliMUONVPainter.cxx:973
 AliMUONVPainter.cxx:974
 AliMUONVPainter.cxx:975
 AliMUONVPainter.cxx:976
 AliMUONVPainter.cxx:977
 AliMUONVPainter.cxx:978
 AliMUONVPainter.cxx:979
 AliMUONVPainter.cxx:980
 AliMUONVPainter.cxx:981
 AliMUONVPainter.cxx:982
 AliMUONVPainter.cxx:983
 AliMUONVPainter.cxx:984
 AliMUONVPainter.cxx:985
 AliMUONVPainter.cxx:986
 AliMUONVPainter.cxx:987
 AliMUONVPainter.cxx:988
 AliMUONVPainter.cxx:989
 AliMUONVPainter.cxx:990
 AliMUONVPainter.cxx:991
 AliMUONVPainter.cxx:992
 AliMUONVPainter.cxx:993
 AliMUONVPainter.cxx:994
 AliMUONVPainter.cxx:995
 AliMUONVPainter.cxx:996
 AliMUONVPainter.cxx:997
 AliMUONVPainter.cxx:998
 AliMUONVPainter.cxx:999
 AliMUONVPainter.cxx:1000
 AliMUONVPainter.cxx:1001
 AliMUONVPainter.cxx:1002
 AliMUONVPainter.cxx:1003
 AliMUONVPainter.cxx:1004
 AliMUONVPainter.cxx:1005
 AliMUONVPainter.cxx:1006
 AliMUONVPainter.cxx:1007
 AliMUONVPainter.cxx:1008
 AliMUONVPainter.cxx:1009
 AliMUONVPainter.cxx:1010
 AliMUONVPainter.cxx:1011
 AliMUONVPainter.cxx:1012
 AliMUONVPainter.cxx:1013
 AliMUONVPainter.cxx:1014
 AliMUONVPainter.cxx:1015
 AliMUONVPainter.cxx:1016
 AliMUONVPainter.cxx:1017
 AliMUONVPainter.cxx:1018
 AliMUONVPainter.cxx:1019
 AliMUONVPainter.cxx:1020
 AliMUONVPainter.cxx:1021
 AliMUONVPainter.cxx:1022
 AliMUONVPainter.cxx:1023
 AliMUONVPainter.cxx:1024
 AliMUONVPainter.cxx:1025
 AliMUONVPainter.cxx:1026
 AliMUONVPainter.cxx:1027
 AliMUONVPainter.cxx:1028
 AliMUONVPainter.cxx:1029
 AliMUONVPainter.cxx:1030
 AliMUONVPainter.cxx:1031
 AliMUONVPainter.cxx:1032
 AliMUONVPainter.cxx:1033
 AliMUONVPainter.cxx:1034
 AliMUONVPainter.cxx:1035
 AliMUONVPainter.cxx:1036
 AliMUONVPainter.cxx:1037
 AliMUONVPainter.cxx:1038
 AliMUONVPainter.cxx:1039
 AliMUONVPainter.cxx:1040
 AliMUONVPainter.cxx:1041
 AliMUONVPainter.cxx:1042
 AliMUONVPainter.cxx:1043
 AliMUONVPainter.cxx:1044
 AliMUONVPainter.cxx:1045
 AliMUONVPainter.cxx:1046
 AliMUONVPainter.cxx:1047
 AliMUONVPainter.cxx:1048
 AliMUONVPainter.cxx:1049
 AliMUONVPainter.cxx:1050
 AliMUONVPainter.cxx:1051
 AliMUONVPainter.cxx:1052
 AliMUONVPainter.cxx:1053
 AliMUONVPainter.cxx:1054
 AliMUONVPainter.cxx:1055
 AliMUONVPainter.cxx:1056
 AliMUONVPainter.cxx:1057
 AliMUONVPainter.cxx:1058
 AliMUONVPainter.cxx:1059
 AliMUONVPainter.cxx:1060
 AliMUONVPainter.cxx:1061
 AliMUONVPainter.cxx:1062
 AliMUONVPainter.cxx:1063
 AliMUONVPainter.cxx:1064
 AliMUONVPainter.cxx:1065
 AliMUONVPainter.cxx:1066
 AliMUONVPainter.cxx:1067
 AliMUONVPainter.cxx:1068
 AliMUONVPainter.cxx:1069
 AliMUONVPainter.cxx:1070
 AliMUONVPainter.cxx:1071
 AliMUONVPainter.cxx:1072
 AliMUONVPainter.cxx:1073
 AliMUONVPainter.cxx:1074
 AliMUONVPainter.cxx:1075
 AliMUONVPainter.cxx:1076
 AliMUONVPainter.cxx:1077
 AliMUONVPainter.cxx:1078
 AliMUONVPainter.cxx:1079
 AliMUONVPainter.cxx:1080
 AliMUONVPainter.cxx:1081
 AliMUONVPainter.cxx:1082
 AliMUONVPainter.cxx:1083
 AliMUONVPainter.cxx:1084
 AliMUONVPainter.cxx:1085
 AliMUONVPainter.cxx:1086
 AliMUONVPainter.cxx:1087
 AliMUONVPainter.cxx:1088
 AliMUONVPainter.cxx:1089
 AliMUONVPainter.cxx:1090
 AliMUONVPainter.cxx:1091
 AliMUONVPainter.cxx:1092
 AliMUONVPainter.cxx:1093
 AliMUONVPainter.cxx:1094
 AliMUONVPainter.cxx:1095
 AliMUONVPainter.cxx:1096
 AliMUONVPainter.cxx:1097
 AliMUONVPainter.cxx:1098
 AliMUONVPainter.cxx:1099
 AliMUONVPainter.cxx:1100
 AliMUONVPainter.cxx:1101
 AliMUONVPainter.cxx:1102
 AliMUONVPainter.cxx:1103
 AliMUONVPainter.cxx:1104
 AliMUONVPainter.cxx:1105
 AliMUONVPainter.cxx:1106
 AliMUONVPainter.cxx:1107
 AliMUONVPainter.cxx:1108
 AliMUONVPainter.cxx:1109
 AliMUONVPainter.cxx:1110
 AliMUONVPainter.cxx:1111
 AliMUONVPainter.cxx:1112
 AliMUONVPainter.cxx:1113
 AliMUONVPainter.cxx:1114
 AliMUONVPainter.cxx:1115
 AliMUONVPainter.cxx:1116
 AliMUONVPainter.cxx:1117
 AliMUONVPainter.cxx:1118
 AliMUONVPainter.cxx:1119
 AliMUONVPainter.cxx:1120
 AliMUONVPainter.cxx:1121
 AliMUONVPainter.cxx:1122
 AliMUONVPainter.cxx:1123
 AliMUONVPainter.cxx:1124
 AliMUONVPainter.cxx:1125
 AliMUONVPainter.cxx:1126
 AliMUONVPainter.cxx:1127
 AliMUONVPainter.cxx:1128
 AliMUONVPainter.cxx:1129
 AliMUONVPainter.cxx:1130
 AliMUONVPainter.cxx:1131
 AliMUONVPainter.cxx:1132
 AliMUONVPainter.cxx:1133
 AliMUONVPainter.cxx:1134
 AliMUONVPainter.cxx:1135
 AliMUONVPainter.cxx:1136
 AliMUONVPainter.cxx:1137
 AliMUONVPainter.cxx:1138
 AliMUONVPainter.cxx:1139
 AliMUONVPainter.cxx:1140
 AliMUONVPainter.cxx:1141
 AliMUONVPainter.cxx:1142
 AliMUONVPainter.cxx:1143
 AliMUONVPainter.cxx:1144
 AliMUONVPainter.cxx:1145
 AliMUONVPainter.cxx:1146
 AliMUONVPainter.cxx:1147
 AliMUONVPainter.cxx:1148
 AliMUONVPainter.cxx:1149
 AliMUONVPainter.cxx:1150
 AliMUONVPainter.cxx:1151
 AliMUONVPainter.cxx:1152
 AliMUONVPainter.cxx:1153
 AliMUONVPainter.cxx:1154
 AliMUONVPainter.cxx:1155
 AliMUONVPainter.cxx:1156
 AliMUONVPainter.cxx:1157
 AliMUONVPainter.cxx:1158
 AliMUONVPainter.cxx:1159
 AliMUONVPainter.cxx:1160
 AliMUONVPainter.cxx:1161
 AliMUONVPainter.cxx:1162
 AliMUONVPainter.cxx:1163
 AliMUONVPainter.cxx:1164
 AliMUONVPainter.cxx:1165
 AliMUONVPainter.cxx:1166
 AliMUONVPainter.cxx:1167
 AliMUONVPainter.cxx:1168
 AliMUONVPainter.cxx:1169
 AliMUONVPainter.cxx:1170
 AliMUONVPainter.cxx:1171
 AliMUONVPainter.cxx:1172
 AliMUONVPainter.cxx:1173
 AliMUONVPainter.cxx:1174
 AliMUONVPainter.cxx:1175
 AliMUONVPainter.cxx:1176
 AliMUONVPainter.cxx:1177
 AliMUONVPainter.cxx:1178
 AliMUONVPainter.cxx:1179
 AliMUONVPainter.cxx:1180
 AliMUONVPainter.cxx:1181
 AliMUONVPainter.cxx:1182
 AliMUONVPainter.cxx:1183
 AliMUONVPainter.cxx:1184
 AliMUONVPainter.cxx:1185
 AliMUONVPainter.cxx:1186
 AliMUONVPainter.cxx:1187
 AliMUONVPainter.cxx:1188
 AliMUONVPainter.cxx:1189
 AliMUONVPainter.cxx:1190
 AliMUONVPainter.cxx:1191
 AliMUONVPainter.cxx:1192
 AliMUONVPainter.cxx:1193
 AliMUONVPainter.cxx:1194
 AliMUONVPainter.cxx:1195
 AliMUONVPainter.cxx:1196
 AliMUONVPainter.cxx:1197
 AliMUONVPainter.cxx:1198
 AliMUONVPainter.cxx:1199
 AliMUONVPainter.cxx:1200
 AliMUONVPainter.cxx:1201
 AliMUONVPainter.cxx:1202
 AliMUONVPainter.cxx:1203
 AliMUONVPainter.cxx:1204
 AliMUONVPainter.cxx:1205
 AliMUONVPainter.cxx:1206
 AliMUONVPainter.cxx:1207
 AliMUONVPainter.cxx:1208
 AliMUONVPainter.cxx:1209
 AliMUONVPainter.cxx:1210
 AliMUONVPainter.cxx:1211
 AliMUONVPainter.cxx:1212
 AliMUONVPainter.cxx:1213
 AliMUONVPainter.cxx:1214
 AliMUONVPainter.cxx:1215
 AliMUONVPainter.cxx:1216
 AliMUONVPainter.cxx:1217
 AliMUONVPainter.cxx:1218
 AliMUONVPainter.cxx:1219
 AliMUONVPainter.cxx:1220
 AliMUONVPainter.cxx:1221
 AliMUONVPainter.cxx:1222
 AliMUONVPainter.cxx:1223
 AliMUONVPainter.cxx:1224
 AliMUONVPainter.cxx:1225
 AliMUONVPainter.cxx:1226
 AliMUONVPainter.cxx:1227
 AliMUONVPainter.cxx:1228
 AliMUONVPainter.cxx:1229
 AliMUONVPainter.cxx:1230
 AliMUONVPainter.cxx:1231
 AliMUONVPainter.cxx:1232
 AliMUONVPainter.cxx:1233
 AliMUONVPainter.cxx:1234
 AliMUONVPainter.cxx:1235
 AliMUONVPainter.cxx:1236
 AliMUONVPainter.cxx:1237
 AliMUONVPainter.cxx:1238
 AliMUONVPainter.cxx:1239
 AliMUONVPainter.cxx:1240
 AliMUONVPainter.cxx:1241
 AliMUONVPainter.cxx:1242
 AliMUONVPainter.cxx:1243
 AliMUONVPainter.cxx:1244
 AliMUONVPainter.cxx:1245
 AliMUONVPainter.cxx:1246
 AliMUONVPainter.cxx:1247
 AliMUONVPainter.cxx:1248
 AliMUONVPainter.cxx:1249
 AliMUONVPainter.cxx:1250
 AliMUONVPainter.cxx:1251
 AliMUONVPainter.cxx:1252
 AliMUONVPainter.cxx:1253
 AliMUONVPainter.cxx:1254
 AliMUONVPainter.cxx:1255
 AliMUONVPainter.cxx:1256
 AliMUONVPainter.cxx:1257
 AliMUONVPainter.cxx:1258
 AliMUONVPainter.cxx:1259
 AliMUONVPainter.cxx:1260
 AliMUONVPainter.cxx:1261
 AliMUONVPainter.cxx:1262
 AliMUONVPainter.cxx:1263
 AliMUONVPainter.cxx:1264
 AliMUONVPainter.cxx:1265
 AliMUONVPainter.cxx:1266
 AliMUONVPainter.cxx:1267
 AliMUONVPainter.cxx:1268
 AliMUONVPainter.cxx:1269
 AliMUONVPainter.cxx:1270
 AliMUONVPainter.cxx:1271
 AliMUONVPainter.cxx:1272
 AliMUONVPainter.cxx:1273
 AliMUONVPainter.cxx:1274
 AliMUONVPainter.cxx:1275
 AliMUONVPainter.cxx:1276
 AliMUONVPainter.cxx:1277
 AliMUONVPainter.cxx:1278
 AliMUONVPainter.cxx:1279
 AliMUONVPainter.cxx:1280
 AliMUONVPainter.cxx:1281
 AliMUONVPainter.cxx:1282
 AliMUONVPainter.cxx:1283
 AliMUONVPainter.cxx:1284
 AliMUONVPainter.cxx:1285
 AliMUONVPainter.cxx:1286
 AliMUONVPainter.cxx:1287
 AliMUONVPainter.cxx:1288
 AliMUONVPainter.cxx:1289
 AliMUONVPainter.cxx:1290
 AliMUONVPainter.cxx:1291
 AliMUONVPainter.cxx:1292
 AliMUONVPainter.cxx:1293
 AliMUONVPainter.cxx:1294
 AliMUONVPainter.cxx:1295
 AliMUONVPainter.cxx:1296
 AliMUONVPainter.cxx:1297
 AliMUONVPainter.cxx:1298
 AliMUONVPainter.cxx:1299
 AliMUONVPainter.cxx:1300
 AliMUONVPainter.cxx:1301
 AliMUONVPainter.cxx:1302
 AliMUONVPainter.cxx:1303
 AliMUONVPainter.cxx:1304
 AliMUONVPainter.cxx:1305
 AliMUONVPainter.cxx:1306
 AliMUONVPainter.cxx:1307
 AliMUONVPainter.cxx:1308
 AliMUONVPainter.cxx:1309
 AliMUONVPainter.cxx:1310
 AliMUONVPainter.cxx:1311
 AliMUONVPainter.cxx:1312
 AliMUONVPainter.cxx:1313
 AliMUONVPainter.cxx:1314
 AliMUONVPainter.cxx:1315
 AliMUONVPainter.cxx:1316
 AliMUONVPainter.cxx:1317
 AliMUONVPainter.cxx:1318
 AliMUONVPainter.cxx:1319
 AliMUONVPainter.cxx:1320
 AliMUONVPainter.cxx:1321
 AliMUONVPainter.cxx:1322
 AliMUONVPainter.cxx:1323
 AliMUONVPainter.cxx:1324
 AliMUONVPainter.cxx:1325
 AliMUONVPainter.cxx:1326
 AliMUONVPainter.cxx:1327
 AliMUONVPainter.cxx:1328
 AliMUONVPainter.cxx:1329
 AliMUONVPainter.cxx:1330
 AliMUONVPainter.cxx:1331
 AliMUONVPainter.cxx:1332
 AliMUONVPainter.cxx:1333
 AliMUONVPainter.cxx:1334
 AliMUONVPainter.cxx:1335
 AliMUONVPainter.cxx:1336
 AliMUONVPainter.cxx:1337
 AliMUONVPainter.cxx:1338
 AliMUONVPainter.cxx:1339
 AliMUONVPainter.cxx:1340
 AliMUONVPainter.cxx:1341
 AliMUONVPainter.cxx:1342
 AliMUONVPainter.cxx:1343
 AliMUONVPainter.cxx:1344
 AliMUONVPainter.cxx:1345
 AliMUONVPainter.cxx:1346
 AliMUONVPainter.cxx:1347
 AliMUONVPainter.cxx:1348
 AliMUONVPainter.cxx:1349
 AliMUONVPainter.cxx:1350
 AliMUONVPainter.cxx:1351
 AliMUONVPainter.cxx:1352
 AliMUONVPainter.cxx:1353
 AliMUONVPainter.cxx:1354
 AliMUONVPainter.cxx:1355
 AliMUONVPainter.cxx:1356
 AliMUONVPainter.cxx:1357
 AliMUONVPainter.cxx:1358
 AliMUONVPainter.cxx:1359
 AliMUONVPainter.cxx:1360
 AliMUONVPainter.cxx:1361
 AliMUONVPainter.cxx:1362
 AliMUONVPainter.cxx:1363
 AliMUONVPainter.cxx:1364
 AliMUONVPainter.cxx:1365
 AliMUONVPainter.cxx:1366
 AliMUONVPainter.cxx:1367
 AliMUONVPainter.cxx:1368
 AliMUONVPainter.cxx:1369
 AliMUONVPainter.cxx:1370
 AliMUONVPainter.cxx:1371
 AliMUONVPainter.cxx:1372
 AliMUONVPainter.cxx:1373
 AliMUONVPainter.cxx:1374
 AliMUONVPainter.cxx:1375
 AliMUONVPainter.cxx:1376
 AliMUONVPainter.cxx:1377
 AliMUONVPainter.cxx:1378
 AliMUONVPainter.cxx:1379
 AliMUONVPainter.cxx:1380
 AliMUONVPainter.cxx:1381
 AliMUONVPainter.cxx:1382
 AliMUONVPainter.cxx:1383
 AliMUONVPainter.cxx:1384
 AliMUONVPainter.cxx:1385
 AliMUONVPainter.cxx:1386
 AliMUONVPainter.cxx:1387
 AliMUONVPainter.cxx:1388
 AliMUONVPainter.cxx:1389
 AliMUONVPainter.cxx:1390
 AliMUONVPainter.cxx:1391
 AliMUONVPainter.cxx:1392
 AliMUONVPainter.cxx:1393
 AliMUONVPainter.cxx:1394
 AliMUONVPainter.cxx:1395
 AliMUONVPainter.cxx:1396
 AliMUONVPainter.cxx:1397
 AliMUONVPainter.cxx:1398
 AliMUONVPainter.cxx:1399
 AliMUONVPainter.cxx:1400
 AliMUONVPainter.cxx:1401
 AliMUONVPainter.cxx:1402