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

#include "AliMUONChamberPainter.h"
#include "AliMUONPainterGroup.h"
#include "AliMUONPainterMatrix.h"
#include "AliMUONPainterMatrixFrame.h"
#include "AliMUONPainterInterfaceHelper.h"
#include "AliMUONPainterRegistry.h"
#include "AliMUONAttPainterSelectorFrame.h"
#include "AliMUONVPainter.h"
#include "AliCodeTimer.h"
#include "AliLog.h"
#include <Riostream.h>
#include <TApplication.h>
#include <TCanvas.h>
#include <TEnv.h>
#include <TGComboBox.h>
#include <TGFileDialog.h>
#include <TGLabel.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TGButtonGroup.h>
#include <TGMsgBox.h>
#include <TSystem.h>

/// \class AliMUONPainterMasterFrame
///
/// Main window of the 2D display
///
/// \author Laurent Aphecetche, Subatech

///\cond CLASSIMP
ClassImp(AliMUONPainterMasterFrame)
///\endcond

const Int_t AliMUONPainterMasterFrame::fgkBorderSize = 10;

//_____________________________________________________________________________
AliMUONPainterMasterFrame::AliMUONPainterMasterFrame(const TGWindow* p, 
                                                     UInt_t w, UInt_t h, AliMUONPainterMatrix* matrix)
: TGCompositeFrame(p,w,h,kVerticalFrame),
fNavigationFrame(0x0),
fPainterMatrixFrame(0x0),
fBackButton(0x0),
fForwardButton(0x0),
fGroupTitle(0x0),
fPrintMeButton(0x0),
fPrintAsButton(0x0),
fNavigation(),
fCurrentNavigationPosition(-1),
fAttPainterSelectorFrame(0x0)
{  
  /// ctor
    
  UInt_t wi = w - fgkBorderSize*2;
  UInt_t hi = h - fgkBorderSize*3;
  
  fNavigationFrame = new TGHorizontalFrame(this,wi);
  
  AddFrame(fNavigationFrame,new TGLayoutHints(kLHintsExpandX|kLHintsTop,
                                              fgkBorderSize,fgkBorderSize,
                                              fgkBorderSize,fgkBorderSize));
  
  fBackButton = new TGPictureButton(fNavigationFrame,
                                    gClient->GetPicture("tb_back.xpm"));
  
  fForwardButton = new TGPictureButton(fNavigationFrame,
                                       gClient->GetPicture("tb_forw.xpm"));    

  fPrintMeButton = new TGTextButton(fNavigationFrame,"Print");
  fPrintAsButton = new TGTextButton(fNavigationFrame,"Print As...");

  fAttPainterSelectorFrame = new AliMUONAttPainterSelectorFrame(fNavigationFrame,w/2,20);
  
  fGroupTitle = new TGLabel(fNavigationFrame,"");
  
  fNavigationFrame->AddFrame(fBackButton,new TGLayoutHints(kLHintsCenterY));
  fNavigationFrame->AddFrame(fForwardButton,new TGLayoutHints(kLHintsCenterY));
  
  fNavigationFrame->AddFrame(fAttPainterSelectorFrame,new TGLayoutHints(kLHintsCenterY,10));

  fNavigationFrame->AddFrame(fPrintMeButton,new TGLayoutHints(kLHintsCenterY,10));
  fNavigationFrame->AddFrame(fPrintAsButton,new TGLayoutHints(kLHintsCenterY,10));

  fAttPainterSelectorFrame->Connect("Clicked(AliMUONAttPainter*)",
                                    "AliMUONPainterMasterFrame",
                                    this,
                                    "AttributesChanged(AliMUONAttPainter*)");
  
  fNavigationFrame->AddFrame(fGroupTitle,new TGLayoutHints(kLHintsExpandX|kLHintsCenterX|kLHintsCenterY,10));
  
  fForwardButton->Connect("Clicked()","AliMUONPainterMasterFrame",
                          this,
                          "Forward()");

  fBackButton->Connect("Clicked()","AliMUONPainterMasterFrame",
                          this,
                          "Backward()");
    
  fPrintMeButton->Connect("Clicked()","AliMUONPainterMasterFrame",
                        this,
                        "PrintMe()");

  fPrintAsButton->Connect("Clicked()","AliMUONPainterMasterFrame",
                        this,
                        "PrintAs()");
  
  UInt_t w1 = wi;
  //  UInt_t h1 = hi - fNavigationFrame->GetHeight() - 3*fgkBorderSize;
  UInt_t h1 = hi - 7*12;
  
  MakeTopPainterMatrix(w1,h1,matrix);

  AddFrame(fPainterMatrixFrame,new TGLayoutHints(kLHintsExpandX,
                                                fgkBorderSize,fgkBorderSize,
                                                0,fgkBorderSize));
  
  AliMUONPainterInterfaceHelper::SetBackgroundColor("MasterFrame.Navigation",*fNavigationFrame);
  AliMUONPainterInterfaceHelper::SetBackgroundColor("MasterFrame.Main",*this);
  
  AliDebug(1,Form("fNavigation=%p",&fNavigation));
  
  AliMUONPainterRegistry::Instance()->Connect("PainterMatrixWantToShow(AliMUONPainterMatrix*)",
                                              "AliMUONPainterMasterFrame",
                                              this,
                                              "PainterMatrixWantToShow(AliMUONPainterMatrix*)");
  
  fPainterMatrixFrame->DataSourceWasChanged(matrix->DataPattern().Data(),matrix->Data(),matrix->DataIndex());
}

//_____________________________________________________________________________
AliMUONPainterMasterFrame::~AliMUONPainterMasterFrame()
{
  /// dtor
  Cleanup();
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::AddPainterMatrix(AliMUONPainterMatrix* painterMatrix)
{
  /// array is adopted (by the registry)

  AliDebug(1,Form("matrix=%p %s",painterMatrix,painterMatrix->GetName()));
  
  Int_t i = AliMUONPainterRegistry::Instance()->Register(painterMatrix);

  SetNavigation(i);
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::PainterMatrixWantToShow(AliMUONPainterMatrix* group)
{
  /// FIXME: should check whether we are the active window before
  /// responding to this message ?

  AliDebug(1,Form("group=%p %s",group,group->GetName()));
  
  Int_t i = AliMUONPainterRegistry::Instance()->FindIndexOf(group);

  Int_t alreadyThere(-1);
  
  for ( Int_t j = 0; j < fNavigation.GetSize(); ++j )
  {
    if ( fNavigation[j] == i ) alreadyThere = j;
  }
  
  if (alreadyThere<0) 
  {
    SetNavigation(i);
  }
  else
  {
    fCurrentNavigationPosition = alreadyThere;
  }
  
  ShowPainterMatrix(group);  
}
     
//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::PrintAs() const
{
  /// Handle the PrintAs button
  
  TGFileInfo fileInfo;
  
  new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
                   kFDSave,&fileInfo);
  
  if ( fileInfo.fFilename ) 
  {
    SaveAs(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)),"RECREATE");
  }
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::PrintMe() const
{
  /// Handle the PrintMe button
  
  SaveAs(gSystem->ExpandPathName(Form("%s.png",fPainterMatrixFrame->Matrix()->GetName())),"RECREATE");
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::SetNavigation(Int_t i)
{
  /// Change navigation position
  
  ++fCurrentNavigationPosition;
  fNavigation.Set(fCurrentNavigationPosition+1);
  fNavigation[fCurrentNavigationPosition] = i;
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::ShowPainterMatrix(AliMUONPainterMatrix* painterMatrix)
{
  /// Change the painter matrix we show
  
  fPainterMatrixFrame->Use(painterMatrix);
  
  painterMatrix->Connect("Clicked(AliMUONVPainter*,Double_t*)",
                         "AliMUONPainterMasterFrame",this,
                         "Clicked(AliMUONVPainter*,Double_t*)");

  painterMatrix->Connect("ShiftClicked(AliMUONVPainter*,Double_t*)",
                         "AliMUONPainterMasterFrame",this,
                         "ShiftClicked(AliMUONVPainter*,Double_t*)");
  
  fPainterMatrixFrame->Connect("TitleHasChanged(const char*)",
                              "AliMUONPainterMasterFrame",this,
                              "ChangeTitle(const char*)");
  UpdateNavigation();
  
  UpdateAttributes(*(fPainterMatrixFrame->Matrix()));
  
  AliMUONPainterRegistry::Instance()->AddToHistory(painterMatrix);
  
  Layout();
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::ChangeTitle(const char* newTitle)
{
  /// Change the top title
  
  fGroupTitle->SetText(newTitle);
  fGroupTitle->Resize();
  Layout();
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::Backward()
{
  /// Move back one step in the history
  --fCurrentNavigationPosition;
  
  AliMUONPainterMatrix* group = 
    AliMUONPainterRegistry::Instance()->PainterMatrix(fNavigation[fCurrentNavigationPosition]);
  
  ShowPainterMatrix(group);
  
  UpdateNavigation();
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::Forward()
{
  /// Move forward one step in history
  
  ++fCurrentNavigationPosition;
  
  AliMUONPainterMatrix* group = 
    AliMUONPainterRegistry::Instance()->PainterMatrix(fNavigation[fCurrentNavigationPosition]);
  
  ShowPainterMatrix(group);
  
  UpdateNavigation();
}

//_____________________________________________________________________________
void 
AliMUONPainterMasterFrame::Clicked(AliMUONVPainter* painter, Double_t* values)
{
  /// A given painter was (singly) clicked

  if ( painter->CanBeDetached() )
  {
    fPainterMatrixFrame->MouseLeave(painter);
  
    AliMUONPainterMatrix* matrix = new AliMUONPainterMatrix(painter->Name().Data());

    AliMUONVPainter* p = painter->Detach();

    p->SetResponder(1);

    matrix->Adopt(p);
  
    AddPainterMatrix(matrix);
    ShowPainterMatrix(matrix);
  }
  else
  {
    painter->DrawHistogram(values);
  }
}

//_____________________________________________________________________________
void 
AliMUONPainterMasterFrame::ShiftClicked(AliMUONVPainter* painter, Double_t*)
{
  /// A given painter was shift-clicked
  
  if ( !painter->CanBeDetached() ) return;
  
  AliMUONPainterMatrix* currentMatrix = fPainterMatrixFrame->Matrix();
  
  AliMUONAttPainter a = painter->Attributes();
  
  TString basename(Form("%s-DUAL",painter->GetName()));
  
  TString newName = AliMUONPainterMatrix::NameIt(currentMatrix->Whatname(),basename.Data(),a);
  
  AliMUONPainterMatrix* matrix = AliMUONPainterRegistry::Instance()->PainterMatrix(newName.Data());
  
  if (!matrix)
  {
    // No. So we must make a new matrix painter from the existing one,
    // and add to this new matrix the painters of the other one, but
    // using the new attributes...
    
    // create "opposite" attributes
    AliMUONAttPainter a1(a);
    AliMUONAttPainter a2(a);
  
    a2.Invert();
    
    a1.SetCathodeAndPlaneDisabled(kTRUE);
    a2.SetCathodeAndPlaneDisabled(kTRUE);
    
    AliMUONVPainter* p1 = AliMUONVPainter::CreatePainter(painter->ClassName(),
                                                         a1,
                                                         painter->ID0(),
                                                         painter->ID1());
    
    AliMUONVPainter* p2 = AliMUONVPainter::CreatePainter(painter->ClassName(),
                                                         a2,
                                                         painter->ID0(),
                                                         painter->ID1());
    
    if (!p1 || !p2)
    {
      Int_t ret;
      new TGMsgBox(gClient->GetRoot(), this,
                   "Invalid combination", "Cannot create 2 views from this painter",
                   kMBIconExclamation, kMBOk, &ret);
      PainterMatrixWantToShow(currentMatrix);
      delete p1;
      delete p2;
      return;
    }
    
    p1->UpdateGroupsFrom(*(painter->Master()));
    p2->UpdateGroupsFrom(*(painter->Master()));
    
    p1->SetResponder(1);
    p2->SetResponder(1);
    
    Int_t nx(2);
    Int_t ny(1);
    
    AliMpArea area(painter->Area());
    
    if ( area.GetDimensionX() > 1.2*area.GetDimensionY() ) 
    {
      nx = 1;
      ny = 2;
    }
    
    matrix = new AliMUONPainterMatrix(basename.Data(),nx,ny);
    
    matrix->Adopt(p1);
    matrix->Adopt(p2);
    
    AddPainterMatrix(matrix);
  }
  
  matrix->SetData(currentMatrix->DataPattern(),
                  currentMatrix->Data(),
                  currentMatrix->DataIndex());
  
  fPainterMatrixFrame->MouseLeave(painter);
  
  PainterMatrixWantToShow(matrix);
}

//_____________________________________________________________________________
void 
AliMUONPainterMasterFrame::SaveAs(const char* filename, Option_t* option) const
{
  /// Save painter matrix (in the sense of "print") in filename
  fPainterMatrixFrame->SaveAs(filename,option);
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::Update()
{
  /// Update ourselves
  
  fPainterMatrixFrame->Update();
  fPainterMatrixFrame->UpdateInterface(kFALSE);
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::UpdateAttributes(const AliMUONPainterMatrix& painterMatrix)
{
  /// Update the view buttons from the matrix we actually plot
  
  fAttPainterSelectorFrame->Update(painterMatrix.Attributes());
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::MakeTopPainterMatrix(UInt_t w, UInt_t h, AliMUONPainterMatrix* matrix)
{
  /// Create the first painter matrix that appears when we are create
  /// FIXME: how to make this more flexible ?
  
  fPainterMatrixFrame = new AliMUONPainterMatrixFrame(this,w,h);

  if (matrix)
  {
    PainterMatrixWantToShow(matrix);
  }
  else
  {
    AliError("Cannot work without a painterMatrix");
  }
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::UpdateNavigation()
{
  /// Update navigation frame

  fBackButton->SetEnabled(kTRUE);
  fForwardButton->SetEnabled(kTRUE);

  if ( fCurrentNavigationPosition == 0 ) 
  {
    fBackButton->SetEnabled(kFALSE);
  }
  if ( fCurrentNavigationPosition == fNavigation.GetSize()-1 ) 
  {
    fForwardButton->SetEnabled(kFALSE);
  }
}

//_____________________________________________________________________________
void
AliMUONPainterMasterFrame::AttributesChanged(const AliMUONAttPainter* newValues)
{
  /// Attributes changed (e.g. from cath0 to cath1 or bending to nonbending, etc...)
  
  AliMUONPainterMatrix* currentMatrix = fPainterMatrixFrame->Matrix();
  
  AliMUONAttPainter a = currentMatrix->Validate(*newValues);
  
  if (!a.IsValid())
  {
    Int_t ret;
    new TGMsgBox(gClient->GetRoot(), this,
                 "Invalid combination", "Change of attributes not possible for this object",
                 kMBIconExclamation, kMBOk, &ret);
    PainterMatrixWantToShow(currentMatrix);
    return;
  }
  
  // First check if we already have this matrix available
  
  TString newName = AliMUONPainterMatrix::NameIt(currentMatrix->Whatname(),currentMatrix->Basename(),a);
  
  AliMUONPainterMatrix* matrix = AliMUONPainterRegistry::Instance()->PainterMatrix(newName.Data());

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